From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=41891 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P0bAu-0006VO-2U for qemu-devel@nongnu.org; Tue, 28 Sep 2010 10:28:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1P0bAq-0000Qn-QJ for qemu-devel@nongnu.org; Tue, 28 Sep 2010 10:28:54 -0400 Received: from mx1.redhat.com ([209.132.183.28]:27202) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1P0bAq-0000QU-KH for qemu-devel@nongnu.org; Tue, 28 Sep 2010 10:28:52 -0400 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o8SESoBT014905 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 28 Sep 2010 10:28:50 -0400 Date: Tue, 28 Sep 2010 11:28:45 -0300 From: Luiz Capitulino Subject: Re: [Qemu-devel] [PATCH 3/5] Add support for 'o' octet (bytes) format as monitor parameter. Message-ID: <20100928112845.507465ed@doriath> In-Reply-To: References: <1284648749-18479-1-git-send-email-Jes.Sorensen@redhat.com> <1284648749-18479-4-git-send-email-Jes.Sorensen@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Markus Armbruster Cc: Jes.Sorensen@redhat.com, qemu-devel@nongnu.org, pbonzini@redhat.com On Tue, 28 Sep 2010 12:06:01 +0200 Markus Armbruster wrote: > Jes.Sorensen@redhat.com writes: > > > From: Jes Sorensen > > > > Octet format relies on strtobytes which supports K/k, M/m, G/g, T/t > > suffixes and unit support for humans, like 1.3G > > > > Signed-off-by: Jes Sorensen > > --- > > monitor.c | 27 +++++++++++++++++++++++++++ > > 1 files changed, 27 insertions(+), 0 deletions(-) > > > > diff --git a/monitor.c b/monitor.c > > index e602480..3630061 100644 > > --- a/monitor.c > > +++ b/monitor.c > > @@ -78,6 +78,11 @@ > > * 'l' target long (32 or 64 bit) > > * 'M' just like 'l', except in user mode the value is > > * multiplied by 2^20 (think Mebibyte) > > + * 'o' octets (aka bytes) > > + * user mode accepts an optional T, t, G, g, M, m, K, k > > + * suffix, which multiplies the value by 2^40 for > > + * suffixes T and t, 2^30 for suffixes G and g, 2^20 for > > + * M and m, 2^10 for K and k > > * 'f' double > > * user mode accepts an optional G, g, M, m, K, k suffix, > > * which multiplies the value by 2^30 for suffixes G and > > @@ -3594,6 +3599,28 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon, > > qdict_put(qdict, key, qint_from_int(val)); > > } > > break; > > + case 'o': > > + { > > + int64_t val; > > + char *end; > > + > > + while (qemu_isspace(*p)) > > + p++; > > + if (*typestr == '?') { > > + typestr++; > > + if (*p == '\0') { > > + break; > > + } > > + } > > + val = strtobytes(p, &end); > > + if (!val) { > > + monitor_printf(mon, "invalid size\n"); > > + goto fail; > > + } > > + qdict_put(qdict, key, qint_from_int(val)); > > + p = end; > > + } > > + break; > > case 'f': > > case 'T': > > { > > This is incomplete, you need to update check_client_args_type() as > well. Testing with QMP should have made that obvious. Right and we have the same issue with 'f' as you pointed out. However, the real problem here is that I've duplicated this stuff in QMP. I see two solutions: 1. Move all this stuff to common code (say monitor_args.c). This is easy and quick 2. Move QMP away from args_type. This is probably the right thing to do, but then I'm afraid that we'll have two different kinds of 'argument specifiers' (ie. QMP's and HMP's)