From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54234) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XMxXR-0002RL-8w for qemu-devel@nongnu.org; Thu, 28 Aug 2014 07:06:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XMxXI-0003hq-Ap for qemu-devel@nongnu.org; Thu, 28 Aug 2014 07:06:45 -0400 Received: from mx1.redhat.com ([209.132.183.28]:2394) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XMxXI-0003hW-2q for qemu-devel@nongnu.org; Thu, 28 Aug 2014 07:06:36 -0400 Message-ID: <53FF0D14.4030405@redhat.com> Date: Thu, 28 Aug 2014 13:05:56 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <1409203145-5976-1-git-send-email-arei.gonglei@huawei.com> In-Reply-To: <1409203145-5976-1-git-send-email-arei.gonglei@huawei.com> Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] qmp: using genneric string paring function for 'qom-set' List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: arei.gonglei@huawei.com, qemu-devel@nongnu.org Cc: weidong.huang@huawei.com, lcapitulino@redhat.com Il 28/08/2014 07:19, arei.gonglei@huawei.com ha scritto: > From: Gonglei > > At present, 'qom-set' only can set string type property, > which will restrict this qmp command's function. > Using genneric string paring function can handle different > types, such as int/bool/string etc. Actually, that's not true. You can pass JSON integers or booleans to qom-set; they will work and, most important, will be type safe! It's a bug in qom-set that it doesn't let you pass integers or booleans. Perhaps qom-set could have a -j option where the value argument is not treated as a string, but rather as a JSON value? Or it could special case numbers and true/false itself? Paolo > Signed-off-by: Gonglei > --- > Example: > # ./scripts/qmp/qom-set nic1.realized false > Traceback (most recent call last): > File "./scripts/qmp/qom-set", line 64, in > print srv.command('qom-set', path=path, property=prop, value=sys.argv[2]) > File "/mnt/sdb/gonglei/qemu.git/qemu/scripts/qmp/qmp.py", line 136, in command > raise Exception(ret['error']['desc']) > Exception: Invalid parameter type for 'realized', expected: boolean > --- > qmp.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/qmp.c b/qmp.c > index c6767c4..0a67c01 100644 > --- a/qmp.c > +++ b/qmp.c > @@ -219,7 +219,7 @@ int qmp_qom_set(Monitor *mon, const QDict *qdict, QObject **ret) > { > const char *path = qdict_get_str(qdict, "path"); > const char *property = qdict_get_str(qdict, "property"); > - QObject *value = qdict_get(qdict, "value"); > + const char *value = qdict_get_str(qdict, "value"); > Error *local_err = NULL; > Object *obj; > > @@ -229,7 +229,7 @@ int qmp_qom_set(Monitor *mon, const QDict *qdict, QObject **ret) > goto out; > } > > - object_property_set_qobject(obj, value, property, &local_err); > + object_property_parse(obj, value, property, &local_err); > > out: > if (local_err) { >