qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Thiemo Seufer <ths@networkno.de>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] Add info commands for serial/parallel devices
Date: Tue, 20 Mar 2007 09:05:56 -0500	[thread overview]
Message-ID: <45FFEA44.7040703@codemonkey.ws> (raw)
In-Reply-To: <20070319161342.GC28895@networkno.de>

Thiemo Seufer wrote:
> Anthony Liguori wrote:
>   
>> Howdy,
>>
>> The following patch adds an info serial and an info parallel command.  
>> Besides providing useful information (especially for the serial port), 
>> it provides a method for management tools to connect to a running VM and 
>> what character devices the serial/parallel ports have been redirected to.
>>
>> The format of the info is similar to that of info block.
>>     
> [snip]
>   
>> diff -r 18e99d1e8814 vl.c
>> --- a/vl.c	Sat Mar 03 21:18:48 2007 -0600
>> +++ b/vl.c	Sat Mar 03 21:33:07 2007 -0600
>> @@ -2884,66 +2884,73 @@ CharDriverState *qemu_chr_open(const cha
>>  CharDriverState *qemu_chr_open(const char *filename)
>>  {
>>      const char *p;
>> +    CharDriverState *chr;
>>  
>>      if (!strcmp(filename, "vc")) {
>> -        return text_console_init(&display_state);
>> +        chr = text_console_init(&display_state);
>>      } else if (!strcmp(filename, "null")) {
>> -        return qemu_chr_open_null();
>> +        chr = qemu_chr_open_null();
>>      } else 
>>      if (strstart(filename, "tcp:", &p)) {
>> -        return qemu_chr_open_tcp(p, 0, 0);
>> +        chr = qemu_chr_open_tcp(p, 0, 0);
>>      } else
>>      if (strstart(filename, "telnet:", &p)) {
>> -        return qemu_chr_open_tcp(p, 1, 0);
>> +        chr = qemu_chr_open_tcp(p, 1, 0);
>>      } else
>>      if (strstart(filename, "udp:", &p)) {
>> -        return qemu_chr_open_udp(p);
>> +        chr = qemu_chr_open_udp(p);
>>      } else
>>      if (strstart(filename, "mon:", &p)) {
>>          CharDriverState *drv = qemu_chr_open(p);
>>          if (drv) {
>>              drv = qemu_chr_open_mux(drv);
>>              monitor_init(drv, !nographic);
>> -            return drv;
>> -        }
>> -        printf("Unable to open driver: %s\n", p);
>> -        return 0;
>> +            chr = drv;
>> +        } else {
>> +	    printf("Unable to open driver: %s\n", p);
>> +	    return 0;
>> +	}
>>      } else
>>  #ifndef _WIN32
>>      if (strstart(filename, "unix:", &p)) {
>> -	return qemu_chr_open_tcp(p, 0, 1);
>> +	chr = qemu_chr_open_tcp(p, 0, 1);
>>      } else if (strstart(filename, "file:", &p)) {
>> -        return qemu_chr_open_file_out(p);
>> +        chr = qemu_chr_open_file_out(p);
>>      } else if (strstart(filename, "pipe:", &p)) {
>> -        return qemu_chr_open_pipe(p);
>> +        chr = qemu_chr_open_pipe(p);
>>      } else if (!strcmp(filename, "pty")) {
>> -        return qemu_chr_open_pty();
>> +        chr = qemu_chr_open_pty();
>>      } else if (!strcmp(filename, "stdio")) {
>> -        return qemu_chr_open_stdio();
>> +        chr = qemu_chr_open_stdio();
>>      } else 
>>  #endif
>>  #if defined(__linux__)
>>      if (strstart(filename, "/dev/parport", NULL)) {
>> -        return qemu_chr_open_pp(filename);
>> +        chr = qemu_chr_open_pp(filename);
>>      } else 
>>      if (strstart(filename, "/dev/", NULL)) {
>> -        return qemu_chr_open_tty(filename);
>> +        chr = qemu_chr_open_tty(filename);
>>      } else 
>>  #endif
>>  #ifdef _WIN32
>>      if (strstart(filename, "COM", NULL)) {
>> -        return qemu_chr_open_win(filename);
>> +        chr = qemu_chr_open_win(filename);
>>      } else
>>      if (strstart(filename, "pipe:", &p)) {
>> -        return qemu_chr_open_win_pipe(p);
>> +        chr = qemu_chr_open_win_pipe(p);
>>      } else
>>      if (strstart(filename, "file:", &p)) {
>> -        return qemu_chr_open_win_file_out(p);
>> -    }
>> +        chr = qemu_chr_open_win_file_out(p);
>> +    } else
>>  #endif
>>      {
>>          return NULL;
>>      }
>> +
>> +    if (chr)
>> +	chr->filename = strdup(filename);
>> +
>> +    return chr;
>>     
>
> Why is this part needed?
>   

So that info seral|parallel can spit out the name used to create open 
the device.

It has to be strdup()'d b/c it's passed in as a const char.  There's no 
guarantee that memory will stay around.

>>  }
>>  
>>  void qemu_chr_close(CharDriverState *chr)
>> diff -r 18e99d1e8814 vl.h
>> --- a/vl.h	Sat Mar 03 21:18:48 2007 -0600
>> +++ b/vl.h	Sat Mar 03 21:33:07 2007 -0600
>> @@ -307,6 +307,7 @@ typedef struct CharDriverState {
>>      void *opaque;
>>      int focus;
>>      QEMUBH *bh;
>> +    char *filename;
>>  } CharDriverState;
>>     
>
> const char * ?
>   

To me, const char * always implies that you don't own the memory.  This 
is helped by the fact that free doesn't take a const void * and newer 
GCC's will complain if you free() a const char *.

Regards,

Anthony Liguori

> Thiemo
>
>   

  reply	other threads:[~2007-03-20 14:07 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-03-04  3:38 [Qemu-devel] [PATCH] Add info commands for serial/parallel devices Anthony Liguori
2007-03-19 16:13 ` Thiemo Seufer
2007-03-20 14:05   ` Anthony Liguori [this message]
2007-03-20 14:48     ` M. Warner Losh
2007-03-20 15:02       ` Andreas Schwab

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=45FFEA44.7040703@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=qemu-devel@nongnu.org \
    --cc=ths@networkno.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).