[Qemu-devel] Re: [PATCH 2/4] monitor: New argument type 'b'

2010-03-26 Thread Markus Armbruster
Luiz Capitulino lcapitul...@redhat.com writes:

  Ok, but strncmp() will return 0 if p - beg = 0, right? In this
 case the current implementation will put true on the dict for a line like:

 (qemu) set_link foo

  Which should return an error to the user then.

Brain fart.  I'll respin.  Thanks for catching this!




[Qemu-devel] Re: [PATCH 2/4] monitor: New argument type 'b'

2010-03-25 Thread Markus Armbruster
Luiz Capitulino lcapitul...@redhat.com writes:

 On Tue, 23 Mar 2010 11:27:56 +0100
 Markus Armbruster arm...@redhat.com wrote:

 This is a boolean value.  Human monitor accepts on or off.
 Consistent with option parsing (see parse_option_bool()).
 
 Signed-off-by: Markus Armbruster arm...@redhat.com
 ---
  monitor.c |   31 +++
  1 files changed, 31 insertions(+), 0 deletions(-)
 
 diff --git a/monitor.c b/monitor.c
 index 3ce9a4e..47b68a2 100644
 --- a/monitor.c
 +++ b/monitor.c
 @@ -85,6 +85,8 @@
   *
   * '?'  optional type (for all types, except '/')
   * '.'  other form of optional type (for 'i' and 'l')
 + * 'b'  boolean
 + *  user mode accepts on or off
   * '-'  optional parameter (eg. '-f')
   *
   */
 @@ -3841,6 +3843,29 @@ static const mon_cmd_t *monitor_parse_command(Monitor 
 *mon,
  qdict_put(qdict, key, qfloat_from_double(val));
  }
  break;
 +case 'b':
 +{
 +const char *beg;
 +int val;
 +
 +while (qemu_isspace(*p)) {
 +p++;
 +}
 +beg = p;
 +while (qemu_isgraph(*p)) {
 +p++;
 +}
 +if (!strncmp(beg, on, p - beg)) {
 +val = 1;
 +} else if (!strncmp(beg, off, p - beg)) {
 +val = 0;
 +} else {
 +monitor_printf(mon, Expected 'on' or 'off'\n);
 +goto fail;
 +}

  This will make 'on' be the default when no on/off is specified, is that
 your intention? I'm wondering if this can cause problems when you add
 optional support for it and mixes it with other arguments.

No.  Intended behavior: the argument must be either on or off.  With
on, (KEY, true) is put into the dictionary, for off it's (KEY,
false).

We get a third case for optional argument if we support that: KEY not in
dictionary.  The handler decides how to interpret that.

[...]




[Qemu-devel] Re: [PATCH 2/4] monitor: New argument type 'b'

2010-03-25 Thread Luiz Capitulino
On Thu, 25 Mar 2010 18:28:43 +0100
Markus Armbruster arm...@redhat.com wrote:

 Luiz Capitulino lcapitul...@redhat.com writes:
 
  On Tue, 23 Mar 2010 11:27:56 +0100
  Markus Armbruster arm...@redhat.com wrote:
 
  This is a boolean value.  Human monitor accepts on or off.
  Consistent with option parsing (see parse_option_bool()).
  
  Signed-off-by: Markus Armbruster arm...@redhat.com
  ---
   monitor.c |   31 +++
   1 files changed, 31 insertions(+), 0 deletions(-)
  
  diff --git a/monitor.c b/monitor.c
  index 3ce9a4e..47b68a2 100644
  --- a/monitor.c
  +++ b/monitor.c
  @@ -85,6 +85,8 @@
*
* '?'  optional type (for all types, except '/')
* '.'  other form of optional type (for 'i' and 'l')
  + * 'b'  boolean
  + *  user mode accepts on or off
* '-'  optional parameter (eg. '-f')
*
*/
  @@ -3841,6 +3843,29 @@ static const mon_cmd_t 
  *monitor_parse_command(Monitor *mon,
   qdict_put(qdict, key, qfloat_from_double(val));
   }
   break;
  +case 'b':
  +{
  +const char *beg;
  +int val;
  +
  +while (qemu_isspace(*p)) {
  +p++;
  +}
  +beg = p;
  +while (qemu_isgraph(*p)) {
  +p++;
  +}
  +if (!strncmp(beg, on, p - beg)) {
  +val = 1;
  +} else if (!strncmp(beg, off, p - beg)) {
  +val = 0;
  +} else {
  +monitor_printf(mon, Expected 'on' or 'off'\n);
  +goto fail;
  +}
 
   This will make 'on' be the default when no on/off is specified, is that
  your intention? I'm wondering if this can cause problems when you add
  optional support for it and mixes it with other arguments.
 
 No.  Intended behavior: the argument must be either on or off.  With
 on, (KEY, true) is put into the dictionary, for off it's (KEY,
 false).
 
 We get a third case for optional argument if we support that: KEY not in
 dictionary.  The handler decides how to interpret that.

 Ok, but strncmp() will return 0 if p - beg = 0, right? In this
case the current implementation will put true on the dict for a line like:

(qemu) set_link foo

 Which should return an error to the user then.




[Qemu-devel] Re: [PATCH 2/4] monitor: New argument type 'b'

2010-03-24 Thread Luiz Capitulino
On Tue, 23 Mar 2010 11:27:56 +0100
Markus Armbruster arm...@redhat.com wrote:

 This is a boolean value.  Human monitor accepts on or off.
 Consistent with option parsing (see parse_option_bool()).
 
 Signed-off-by: Markus Armbruster arm...@redhat.com
 ---
  monitor.c |   31 +++
  1 files changed, 31 insertions(+), 0 deletions(-)
 
 diff --git a/monitor.c b/monitor.c
 index 3ce9a4e..47b68a2 100644
 --- a/monitor.c
 +++ b/monitor.c
 @@ -85,6 +85,8 @@
   *
   * '?'  optional type (for all types, except '/')
   * '.'  other form of optional type (for 'i' and 'l')
 + * 'b'  boolean
 + *  user mode accepts on or off
   * '-'  optional parameter (eg. '-f')
   *
   */
 @@ -3841,6 +3843,29 @@ static const mon_cmd_t *monitor_parse_command(Monitor 
 *mon,
  qdict_put(qdict, key, qfloat_from_double(val));
  }
  break;
 +case 'b':
 +{
 +const char *beg;
 +int val;
 +
 +while (qemu_isspace(*p)) {
 +p++;
 +}
 +beg = p;
 +while (qemu_isgraph(*p)) {
 +p++;
 +}
 +if (!strncmp(beg, on, p - beg)) {
 +val = 1;
 +} else if (!strncmp(beg, off, p - beg)) {
 +val = 0;
 +} else {
 +monitor_printf(mon, Expected 'on' or 'off'\n);
 +goto fail;
 +}

 This will make 'on' be the default when no on/off is specified, is that
your intention? I'm wondering if this can cause problems when you add
optional support for it and mixes it with other arguments.

 +qdict_put(qdict, key, qbool_from_int(val));
 +}
 +break;
  case '-':
  {
  const char *tmp = p;
 @@ -4322,6 +4347,12 @@ static int check_arg(const CmdArgs *cmd_args, QDict 
 *args)
  return -1;
  }
  break;
 +case 'b':
 +if (qobject_type(value) != QTYPE_QBOOL) {
 +qerror_report(QERR_INVALID_PARAMETER_TYPE, name, bool);
 +return -1;
 +}
 +break;
  case '-':
  if (qobject_type(value) != QTYPE_QINT 
  qobject_type(value) != QTYPE_QBOOL) {