From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494351688966941.7934661026214; Tue, 9 May 2017 10:41:28 -0700 (PDT) Received: from localhost ([::1]:38653 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d898Z-0001YJ-9u for importer@patchew.org; Tue, 09 May 2017 13:41:27 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44962) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d893m-0005Dj-4k for qemu-devel@nongnu.org; Tue, 09 May 2017 13:36:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d893l-0003PF-3h for qemu-devel@nongnu.org; Tue, 09 May 2017 13:36:30 -0400 Received: from mx1.redhat.com ([209.132.183.28]:37376) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d893k-0003P5-Ri for qemu-devel@nongnu.org; Tue, 09 May 2017 13:36:29 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C6E56C059756 for ; Tue, 9 May 2017 17:36:27 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id 61079176AB; Tue, 9 May 2017 17:36:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com C6E56C059756 Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com C6E56C059756 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:43 +0300 Message-Id: <20170509173559.31598-2-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Tue, 09 May 2017 17:36:27 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 01/17] qdev: remove PropertyInfo.qtype field X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Remove dependency on qapi qtype, replace a field by a few helper functions to determine the default value type (introduced in commit 4f2d3d7). Signed-off-by: Marc-Andr=C3=A9 Lureau --- include/hw/qdev-core.h | 1 - include/hw/qdev-properties.h | 5 ----- hw/core/qdev.c | 32 ++++++++++++++++++++++++++------ 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h index 4bf86b0ad8..0f21a500cd 100644 --- a/include/hw/qdev-core.h +++ b/include/hw/qdev-core.h @@ -225,7 +225,6 @@ struct Property { PropertyInfo *info; ptrdiff_t offset; uint8_t bitnr; - QType qtype; int64_t defval; int arrayoffset; PropertyInfo *arrayinfo; diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h index 1d69fa7a8f..16d5d0629b 100644 --- a/include/hw/qdev-properties.h +++ b/include/hw/qdev-properties.h @@ -42,7 +42,6 @@ extern PropertyInfo qdev_prop_arraylen; .info =3D &(_prop), \ .offset =3D offsetof(_state, _field) \ + type_check(_type,typeof_field(_state, _field)), \ - .qtype =3D QTYPE_QINT, \ .defval =3D (_type)_defval, \ } #define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval) { \ @@ -51,7 +50,6 @@ extern PropertyInfo qdev_prop_arraylen; .bitnr =3D (_bit), \ .offset =3D offsetof(_state, _field) \ + type_check(uint32_t,typeof_field(_state, _field)), \ - .qtype =3D QTYPE_QBOOL, \ .defval =3D (bool)_defval, \ } #define DEFINE_PROP_BIT64(_name, _state, _field, _bit, _defval) { \ @@ -60,7 +58,6 @@ extern PropertyInfo qdev_prop_arraylen; .bitnr =3D (_bit), \ .offset =3D offsetof(_state, _field) \ + type_check(uint64_t, typeof_field(_state, _field)), \ - .qtype =3D QTYPE_QBOOL, \ .defval =3D (bool)_defval, \ } =20 @@ -69,7 +66,6 @@ extern PropertyInfo qdev_prop_arraylen; .info =3D &(qdev_prop_bool), \ .offset =3D offsetof(_state, _field) \ + type_check(bool, typeof_field(_state, _field)), \ - .qtype =3D QTYPE_QBOOL, \ .defval =3D (bool)_defval, \ } =20 @@ -105,7 +101,6 @@ extern PropertyInfo qdev_prop_arraylen; .info =3D &(qdev_prop_arraylen), \ .offset =3D offsetof(_state, _field) \ + type_check(uint32_t, typeof_field(_state, _field)), \ - .qtype =3D QTYPE_QINT, \ .arrayinfo =3D &(_arrayprop), \ .arrayfieldsize =3D sizeof(_arraytype), \ .arrayoffset =3D offsetof(_state, _arrayfield), \ diff --git a/hw/core/qdev.c b/hw/core/qdev.c index 02b632f6b3..83b0297755 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -755,6 +755,30 @@ static void qdev_property_add_legacy(DeviceState *dev,= Property *prop, g_free(name); } =20 +static bool prop_info_is_bool(const PropertyInfo *info) +{ + return info =3D=3D &qdev_prop_bit + || info =3D=3D &qdev_prop_bit64 + || info =3D=3D &qdev_prop_bool; +} + +static bool prop_info_is_int(const PropertyInfo *info) +{ + return info =3D=3D &qdev_prop_uint8 + || info =3D=3D &qdev_prop_uint16 + || info =3D=3D &qdev_prop_uint32 + || info =3D=3D &qdev_prop_int32 + || info =3D=3D &qdev_prop_uint64 + || info =3D=3D &qdev_prop_size + || info =3D=3D &qdev_prop_pci_devfn + || info =3D=3D &qdev_prop_on_off_auto + || info =3D=3D &qdev_prop_losttickpolicy + || info =3D=3D &qdev_prop_blockdev_on_error + || info =3D=3D &qdev_prop_bios_chs_trans + || info =3D=3D &qdev_prop_blocksize + || info =3D=3D &qdev_prop_arraylen; +} + /** * qdev_property_add_static: * @dev: Device to add the property to. @@ -794,16 +818,12 @@ void qdev_property_add_static(DeviceState *dev, Prope= rty *prop, prop->info->description, &error_abort); =20 - if (prop->qtype =3D=3D QTYPE_NONE) { - return; - } - - if (prop->qtype =3D=3D QTYPE_QBOOL) { + if (prop_info_is_bool(prop->info)) { object_property_set_bool(obj, prop->defval, prop->name, &error_abo= rt); } else if (prop->info->enum_table) { object_property_set_str(obj, prop->info->enum_table[prop->defval], prop->name, &error_abort); - } else if (prop->qtype =3D=3D QTYPE_QINT) { + } else if (prop_info_is_int(prop->info)) { object_property_set_int(obj, prop->defval, prop->name, &error_abor= t); } } --=20 2.13.0.rc1.16.gd80b50c3f From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494351527927463.71581230834056; Tue, 9 May 2017 10:38:47 -0700 (PDT) Received: from localhost ([::1]:38636 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d895y-0007H7-Id for importer@patchew.org; Tue, 09 May 2017 13:38:46 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45094) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d8942-0005Sw-0I for qemu-devel@nongnu.org; Tue, 09 May 2017 13:36:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d8941-0003TD-Ah for qemu-devel@nongnu.org; Tue, 09 May 2017 13:36:46 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42558) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d8941-0003St-4m for qemu-devel@nongnu.org; Tue, 09 May 2017 13:36:45 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 25B3AC04B302 for ; Tue, 9 May 2017 17:36:42 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1B30517D1B; Tue, 9 May 2017 17:36:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 25B3AC04B302 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 25B3AC04B302 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:44 +0300 Message-Id: <20170509173559.31598-3-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 09 May 2017 17:36:44 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 02/17] object: fix potential leak in getters X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" If the property is not of the requested type, the getters will leak a QObject. Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Eric Blake --- qom/object.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/qom/object.c b/qom/object.c index eb4bc924ff..c7b8079df6 100644 --- a/qom/object.c +++ b/qom/object.c @@ -1122,7 +1122,7 @@ char *object_property_get_str(Object *obj, const char= *name, retval =3D g_strdup(qstring_get_str(qstring)); } =20 - QDECREF(qstring); + qobject_decref(ret); return retval; } =20 @@ -1183,7 +1183,7 @@ bool object_property_get_bool(Object *obj, const char= *name, retval =3D qbool_get_bool(qbool); } =20 - QDECREF(qbool); + qobject_decref(ret); return retval; } =20 @@ -1214,7 +1214,7 @@ int64_t object_property_get_int(Object *obj, const ch= ar *name, retval =3D qint_get_int(qint); } =20 - QDECREF(qint); + qobject_decref(ret); return retval; } =20 --=20 2.13.0.rc1.16.gd80b50c3f From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494351520690588.4658153337281; Tue, 9 May 2017 10:38:40 -0700 (PDT) Received: from localhost ([::1]:38635 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d895r-000786-AI for importer@patchew.org; Tue, 09 May 2017 13:38:39 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45147) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d894F-0005de-Aa for qemu-devel@nongnu.org; Tue, 09 May 2017 13:37:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d894C-0003Vf-8Y for qemu-devel@nongnu.org; Tue, 09 May 2017 13:36:59 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53010) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d894B-0003VQ-Vt for qemu-devel@nongnu.org; Tue, 09 May 2017 13:36:56 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E81B16540A for ; Tue, 9 May 2017 17:36:54 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id A5E2017D22; Tue, 9 May 2017 17:36:50 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com E81B16540A Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com E81B16540A From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:45 +0300 Message-Id: <20170509173559.31598-4-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 09 May 2017 17:36:55 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 03/17] tests: remove alt num-int cases X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" There are no real users of this case, and it's going to be invalid after merging of QFloat and QInt use the same QNum type in the following patch. Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Eric Blake --- tests/test-keyval.c | 3 --- tests/test-qobject-input-visitor.c | 26 -------------------------- tests/qapi-schema/qapi-schema-test.json | 2 -- tests/qapi-schema/qapi-schema-test.out | 8 -------- 4 files changed, 39 deletions(-) diff --git a/tests/test-keyval.c b/tests/test-keyval.c index c556b1b117..df0ff831b5 100644 --- a/tests/test-keyval.c +++ b/tests/test-keyval.c @@ -615,7 +615,6 @@ static void test_keyval_visit_alternate(void) Visitor *v; QDict *qdict; AltNumStr *ans; - AltNumInt *ani; =20 /* * Can't do scalar alternate variants other than string. You get @@ -629,8 +628,6 @@ static void test_keyval_visit_alternate(void) g_assert_cmpint(ans->type, =3D=3D, QTYPE_QSTRING); g_assert_cmpstr(ans->u.s, =3D=3D, "1"); qapi_free_AltNumStr(ans); - visit_type_AltNumInt(v, "a", &ani, &err); - error_free_or_abort(&err); visit_end_struct(v, NULL); visit_free(v); } diff --git a/tests/test-qobject-input-visitor.c b/tests/test-qobject-input-= visitor.c index f965743b6e..a30e2d5e95 100644 --- a/tests/test-qobject-input-visitor.c +++ b/tests/test-qobject-input-visitor.c @@ -586,8 +586,6 @@ static void test_visitor_in_alternate_number(TestInputV= isitorData *data, AltStrNum *asn; AltNumStr *ans; AltStrInt *asi; - AltIntNum *ain; - AltNumInt *ani; =20 /* Parsing an int */ =20 @@ -614,18 +612,6 @@ static void test_visitor_in_alternate_number(TestInput= VisitorData *data, g_assert_cmpint(asi->u.i, =3D=3D, 42); qapi_free_AltStrInt(asi); =20 - v =3D visitor_input_test_init(data, "42"); - visit_type_AltIntNum(v, NULL, &ain, &error_abort); - g_assert_cmpint(ain->type, =3D=3D, QTYPE_QINT); - g_assert_cmpint(ain->u.i, =3D=3D, 42); - qapi_free_AltIntNum(ain); - - v =3D visitor_input_test_init(data, "42"); - visit_type_AltNumInt(v, NULL, &ani, &error_abort); - g_assert_cmpint(ani->type, =3D=3D, QTYPE_QINT); - g_assert_cmpint(ani->u.i, =3D=3D, 42); - qapi_free_AltNumInt(ani); - /* Parsing a double */ =20 v =3D visitor_input_test_init(data, "42.5"); @@ -649,18 +635,6 @@ static void test_visitor_in_alternate_number(TestInput= VisitorData *data, visit_type_AltStrInt(v, NULL, &asi, &err); error_free_or_abort(&err); qapi_free_AltStrInt(asi); - - v =3D visitor_input_test_init(data, "42.5"); - visit_type_AltIntNum(v, NULL, &ain, &error_abort); - g_assert_cmpint(ain->type, =3D=3D, QTYPE_QFLOAT); - g_assert_cmpfloat(ain->u.n, =3D=3D, 42.5); - qapi_free_AltIntNum(ain); - - v =3D visitor_input_test_init(data, "42.5"); - visit_type_AltNumInt(v, NULL, &ani, &error_abort); - g_assert_cmpint(ani->type, =3D=3D, QTYPE_QFLOAT); - g_assert_cmpfloat(ani->u.n, =3D=3D, 42.5); - qapi_free_AltNumInt(ani); } =20 static void test_native_list_integer_helper(TestInputVisitorData *data, diff --git a/tests/qapi-schema/qapi-schema-test.json b/tests/qapi-schema/qa= pi-schema-test.json index 842ea3c5e3..9ad09e3758 100644 --- a/tests/qapi-schema/qapi-schema-test.json +++ b/tests/qapi-schema/qapi-schema-test.json @@ -103,8 +103,6 @@ { 'alternate': 'AltStrNum', 'data': { 's': 'str', 'n': 'number' } } { 'alternate': 'AltNumStr', 'data': { 'n': 'number', 's': 'str' } } { 'alternate': 'AltStrInt', 'data': { 's': 'str', 'i': 'int' } } -{ 'alternate': 'AltIntNum', 'data': { 'i': 'int', 'n': 'number' } } -{ 'alternate': 'AltNumInt', 'data': { 'n': 'number', 'i': 'int' } } =20 # for testing native lists { 'union': 'UserDefNativeListUnion', diff --git a/tests/qapi-schema/qapi-schema-test.out b/tests/qapi-schema/qap= i-schema-test.out index 9d99c4eebb..5c6655a5c3 100644 --- a/tests/qapi-schema/qapi-schema-test.out +++ b/tests/qapi-schema/qapi-schema-test.out @@ -1,11 +1,3 @@ -alternate AltIntNum - tag type - case i: int - case n: number -alternate AltNumInt - tag type - case n: number - case i: int alternate AltNumStr tag type case n: number --=20 2.13.0.rc1.16.gd80b50c3f From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494351679692317.7233106216664; Tue, 9 May 2017 10:41:19 -0700 (PDT) Received: from localhost ([::1]:38652 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d898O-0001MN-Lh for importer@patchew.org; Tue, 09 May 2017 13:41:16 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45364) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d894z-0006Rt-1r for qemu-devel@nongnu.org; Tue, 09 May 2017 13:37:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d894r-0003nv-6u for qemu-devel@nongnu.org; Tue, 09 May 2017 13:37:45 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42154) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d894q-0003mO-Lj for qemu-devel@nongnu.org; Tue, 09 May 2017 13:37:37 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9A673804E2 for ; Tue, 9 May 2017 17:37:35 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id B18588AC36; Tue, 9 May 2017 17:37:01 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 9A673804E2 Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 9A673804E2 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:46 +0300 Message-Id: <20170509173559.31598-5-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 09 May 2017 17:37:35 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 04/17] qapi: merge QInt and QFloat in QNum X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" We would like to use a same QObject type to represent numbers, whether they are int, uint, or floats. getters will allow some compatibility between the various types if the number fits other representations Signed-off-by: Marc-Andr=C3=A9 Lureau --- scripts/qapi.py | 30 +++---- scripts/qapi-visit.py | 2 +- include/qapi/qmp/qdict.h | 3 +- include/qapi/qmp/qfloat.h | 29 ------- include/qapi/qmp/qint.h | 28 ------- include/qapi/qmp/qlist.h | 2 +- include/qapi/qmp/qnum.h | 43 ++++++++++ include/qapi/qmp/types.h | 3 +- include/qapi/qobject-input-visitor.h | 2 +- include/qapi/qobject-output-visitor.h | 8 +- block/blkdebug.c | 1 - block/nbd.c | 1 - block/nfs.c | 1 - block/qapi.c | 13 ++- block/quorum.c | 1 - block/sheepdog.c | 1 - block/ssh.c | 1 - block/vvfat.c | 1 - blockdev.c | 5 +- hw/acpi/pcihp.c | 1 - hw/i386/acpi-build.c | 15 ++-- hw/usb/xen-usb.c | 1 - monitor.c | 2 +- qapi/qobject-input-visitor.c | 36 +++----- qapi/qobject-output-visitor.c | 6 +- qga/commands.c | 2 +- qga/main.c | 1 - qobject/json-parser.c | 18 ++-- qobject/qdict.c | 38 ++++----- qobject/qfloat.c | 62 -------------- qobject/qint.c | 61 -------------- qobject/qjson.c | 37 +-------- qobject/qnum.c | 138 +++++++++++++++++++++++++++= ++++ qobject/qobject.c | 3 +- qom/object.c | 21 +++-- target/i386/cpu.c | 6 +- tests/check-qdict.c | 23 +++--- tests/check-qfloat.c | 53 ------------ tests/check-qint.c | 87 ------------------- tests/check-qjson.c | 84 +++++++++---------- tests/check-qlist.c | 15 ++-- tests/check-qnum.c | 131 +++++++++++++++++++++++++++= ++ tests/test-keyval.c | 1 - tests/test-qmp-commands.c | 6 +- tests/test-qmp-event.c | 7 +- tests/test-qobject-input-visitor.c | 30 +++---- tests/test-qobject-output-visitor.c | 56 ++++++------- tests/test-x86-cpuid-compat.c | 13 ++- ui/spice-core.c | 1 - ui/vnc-enc-tight.c | 1 - util/qemu-option.c | 20 ++--- MAINTAINERS | 3 +- qobject/Makefile.objs | 2 +- scripts/coccinelle/qobject.cocci | 4 +- tests/.gitignore | 3 +- tests/Makefile.include | 13 ++- tests/qapi-schema/comments.out | 2 +- tests/qapi-schema/doc-good.out | 2 +- tests/qapi-schema/empty.out | 2 +- tests/qapi-schema/event-case.out | 2 +- tests/qapi-schema/ident-with-escape.out | 2 +- tests/qapi-schema/include-relpath.out | 2 +- tests/qapi-schema/include-repetition.out | 2 +- tests/qapi-schema/include-simple.out | 2 +- tests/qapi-schema/indented-expr.out | 2 +- tests/qapi-schema/qapi-schema-test.out | 2 +- 66 files changed, 557 insertions(+), 639 deletions(-) delete mode 100644 include/qapi/qmp/qfloat.h delete mode 100644 include/qapi/qmp/qint.h create mode 100644 include/qapi/qmp/qnum.h delete mode 100644 qobject/qfloat.c delete mode 100644 qobject/qint.c create mode 100644 qobject/qnum.c delete mode 100644 tests/check-qfloat.c delete mode 100644 tests/check-qint.c create mode 100644 tests/check-qnum.c diff --git a/scripts/qapi.py b/scripts/qapi.py index 6c4d554165..01fd0027a5 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -21,18 +21,18 @@ from ordereddict import OrderedDict =20 builtin_types =3D { 'str': 'QTYPE_QSTRING', - 'int': 'QTYPE_QINT', - 'number': 'QTYPE_QFLOAT', + 'int': 'QTYPE_QNUM', + 'number': 'QTYPE_QNUM', 'bool': 'QTYPE_QBOOL', - 'int8': 'QTYPE_QINT', - 'int16': 'QTYPE_QINT', - 'int32': 'QTYPE_QINT', - 'int64': 'QTYPE_QINT', - 'uint8': 'QTYPE_QINT', - 'uint16': 'QTYPE_QINT', - 'uint32': 'QTYPE_QINT', - 'uint64': 'QTYPE_QINT', - 'size': 'QTYPE_QINT', + 'int8': 'QTYPE_QNUM', + 'int16': 'QTYPE_QNUM', + 'int32': 'QTYPE_QNUM', + 'int64': 'QTYPE_QNUM', + 'uint8': 'QTYPE_QNUM', + 'uint16': 'QTYPE_QNUM', + 'uint32': 'QTYPE_QNUM', + 'uint64': 'QTYPE_QNUM', + 'size': 'QTYPE_QNUM', 'any': None, # any QType possible, actually 'QType': 'QTYPE_QSTRING', } @@ -1044,8 +1044,8 @@ class QAPISchemaType(QAPISchemaEntity): def alternate_qtype(self): json2qtype =3D { 'string': 'QTYPE_QSTRING', - 'number': 'QTYPE_QFLOAT', - 'int': 'QTYPE_QINT', + 'number': 'QTYPE_QNUM', + 'int': 'QTYPE_QNUM', 'boolean': 'QTYPE_QBOOL', 'object': 'QTYPE_QDICT' } @@ -1507,9 +1507,9 @@ class QAPISchema(object): self.the_empty_object_type =3D QAPISchemaObjectType( 'q_empty', None, None, None, [], None) self._def_entity(self.the_empty_object_type) - qtype_values =3D self._make_enum_members(['none', 'qnull', 'qint', + qtype_values =3D self._make_enum_members(['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist= ', - 'qfloat', 'qbool']) + 'qbool']) self._def_entity(QAPISchemaEnumType('QType', None, None, qtype_values, 'QTYPE')) =20 diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py index 5737aefa05..cc447ecacc 100644 --- a/scripts/qapi-visit.py +++ b/scripts/qapi-visit.py @@ -164,7 +164,7 @@ def gen_visit_alternate(name, variants): promote_int =3D 'true' ret =3D '' for var in variants.variants: - if var.type.alternate_qtype() =3D=3D 'QTYPE_QINT': + if var.type.alternate_qtype() =3D=3D 'QTYPE_QNUM': promote_int =3D 'false' =20 ret +=3D mcgen(''' diff --git a/include/qapi/qmp/qdict.h b/include/qapi/qmp/qdict.h index 188440a6a8..363e431106 100644 --- a/include/qapi/qmp/qdict.h +++ b/include/qapi/qmp/qdict.h @@ -15,6 +15,7 @@ =20 #include "qapi/qmp/qobject.h" #include "qapi/qmp/qlist.h" +#include "qapi/qmp/qnum.h" #include "qemu/queue.h" =20 #define QDICT_BUCKET_MAX 512 @@ -54,7 +55,7 @@ void qdict_destroy_obj(QObject *obj); =20 /* Helpers for int, bool, and string */ #define qdict_put_int(qdict, key, value) \ - qdict_put(qdict, key, qint_from_int(value)) + qdict_put(qdict, key, qnum_from_int(value)) #define qdict_put_bool(qdict, key, value) \ qdict_put(qdict, key, qbool_from_bool(value)) #define qdict_put_str(qdict, key, value) \ diff --git a/include/qapi/qmp/qfloat.h b/include/qapi/qmp/qfloat.h deleted file mode 100644 index b5d15836b5..0000000000 --- a/include/qapi/qmp/qfloat.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * QFloat Module - * - * Copyright IBM, Corp. 2009 - * - * Authors: - * Anthony Liguori - * - * This work is licensed under the terms of the GNU LGPL, version 2.1 or l= ater. - * See the COPYING.LIB file in the top-level directory. - * - */ - -#ifndef QFLOAT_H -#define QFLOAT_H - -#include "qapi/qmp/qobject.h" - -typedef struct QFloat { - QObject base; - double value; -} QFloat; - -QFloat *qfloat_from_double(double value); -double qfloat_get_double(const QFloat *qi); -QFloat *qobject_to_qfloat(const QObject *obj); -void qfloat_destroy_obj(QObject *obj); - -#endif /* QFLOAT_H */ diff --git a/include/qapi/qmp/qint.h b/include/qapi/qmp/qint.h deleted file mode 100644 index 3aaff768dd..0000000000 --- a/include/qapi/qmp/qint.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * QInt Module - * - * Copyright (C) 2009 Red Hat Inc. - * - * Authors: - * Luiz Capitulino - * - * This work is licensed under the terms of the GNU LGPL, version 2.1 or l= ater. - * See the COPYING.LIB file in the top-level directory. - */ - -#ifndef QINT_H -#define QINT_H - -#include "qapi/qmp/qobject.h" - -typedef struct QInt { - QObject base; - int64_t value; -} QInt; - -QInt *qint_from_int(int64_t value); -int64_t qint_get_int(const QInt *qi); -QInt *qobject_to_qint(const QObject *obj); -void qint_destroy_obj(QObject *obj); - -#endif /* QINT_H */ diff --git a/include/qapi/qmp/qlist.h b/include/qapi/qmp/qlist.h index 5dc4ed9616..2f2c199632 100644 --- a/include/qapi/qmp/qlist.h +++ b/include/qapi/qmp/qlist.h @@ -31,7 +31,7 @@ typedef struct QList { =20 /* Helpers for int, bool, and string */ #define qlist_append_int(qlist, value) \ - qlist_append(qlist, qint_from_int(value)) + qlist_append(qlist, qnum_from_int(value)) #define qlist_append_bool(qlist, value) \ qlist_append(qlist, qbool_from_bool(value)) #define qlist_append_str(qlist, value) \ diff --git a/include/qapi/qmp/qnum.h b/include/qapi/qmp/qnum.h new file mode 100644 index 0000000000..0e51427821 --- /dev/null +++ b/include/qapi/qmp/qnum.h @@ -0,0 +1,43 @@ +/* + * QNum Module + * + * Copyright (C) 2009 Red Hat Inc. + * + * Authors: + * Luiz Capitulino + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or l= ater. + * See the COPYING.LIB file in the top-level directory. + */ + +#ifndef QNUM_H +#define QNUM_H + +#include "qapi/qmp/qobject.h" + +typedef enum { + QNUM_I64, + QNUM_DOUBLE +} QNumType; + +typedef struct QNum { + QObject base; + QNumType type; + union { + int64_t i64; + double dbl; + } u; +} QNum; + +QNum *qnum_from_int(int64_t value); +QNum *qnum_from_double(double value); + +int64_t qnum_get_int(const QNum *qi, Error **errp); +double qnum_get_double(QNum *qn); + +char *qnum_to_string(QNum *qn); + +QNum *qobject_to_qnum(const QObject *obj); +void qnum_destroy_obj(QObject *obj); + +#endif /* QNUM_H */ diff --git a/include/qapi/qmp/types.h b/include/qapi/qmp/types.h index 27cfbd84e5..a4bc662bfb 100644 --- a/include/qapi/qmp/types.h +++ b/include/qapi/qmp/types.h @@ -14,8 +14,7 @@ #define QAPI_QMP_TYPES_H =20 #include "qapi/qmp/qobject.h" -#include "qapi/qmp/qint.h" -#include "qapi/qmp/qfloat.h" +#include "qapi/qmp/qnum.h" #include "qapi/qmp/qbool.h" #include "qapi/qmp/qstring.h" #include "qapi/qmp/qdict.h" diff --git a/include/qapi/qobject-input-visitor.h b/include/qapi/qobject-in= put-visitor.h index b399285c43..5a6fe83f8f 100644 --- a/include/qapi/qobject-input-visitor.h +++ b/include/qapi/qobject-input-visitor.h @@ -30,7 +30,7 @@ typedef struct QObjectInputVisitor QObjectInputVisitor; * visit_type_FOO() creates an instance of QAPI type FOO. The visited * QObject must match FOO. QDict matches struct/union types, QList * matches list types, QString matches type 'str' and enumeration - * types, QInt matches integer types, QFloat matches type 'number', + * types, QNum matches integer and float types, * QBool matches type 'bool'. Type 'any' is matched by QObject. A * QAPI alternate type is matched when one of its member types is. * diff --git a/include/qapi/qobject-output-visitor.h b/include/qapi/qobject-o= utput-visitor.h index 9b990c318e..e5a3490812 100644 --- a/include/qapi/qobject-output-visitor.h +++ b/include/qapi/qobject-output-visitor.h @@ -28,10 +28,10 @@ typedef struct QObjectOutputVisitor QObjectOutputVisito= r; * * visit_type_FOO() creates a QObject for QAPI type FOO. It creates a * QDict for struct/union types, a QList for list types, QString for - * type 'str' and enumeration types, QInt for integer types, QFloat - * for type 'number', QBool for type 'bool'. For type 'any', it - * increments the QObject's reference count. For QAPI alternate - * types, it creates the QObject for the member that is in use. + * type 'str' and enumeration types, QNum for integer and float + * types, QBool for type 'bool'. For type 'any', it increments the + * QObject's reference count. For QAPI alternate types, it creates + * the QObject for the member that is in use. * * visit_start_struct() ... visit_end_struct() visits a QAPI * struct/union and creates a QDict. Visits in between visit the diff --git a/block/blkdebug.c b/block/blkdebug.c index 3c088934db..b3032c3ad7 100644 --- a/block/blkdebug.c +++ b/block/blkdebug.c @@ -30,7 +30,6 @@ #include "qemu/module.h" #include "qapi/qmp/qbool.h" #include "qapi/qmp/qdict.h" -#include "qapi/qmp/qint.h" #include "qapi/qmp/qstring.h" #include "sysemu/qtest.h" =20 diff --git a/block/nbd.c b/block/nbd.c index 975faab2c5..e946ea944d 100644 --- a/block/nbd.c +++ b/block/nbd.c @@ -37,7 +37,6 @@ #include "qapi/qobject-output-visitor.h" #include "qapi/qmp/qdict.h" #include "qapi/qmp/qjson.h" -#include "qapi/qmp/qint.h" #include "qapi/qmp/qstring.h" #include "qemu/cutils.h" =20 diff --git a/block/nfs.c b/block/nfs.c index 848b2c0bb0..decefd15f1 100644 --- a/block/nfs.c +++ b/block/nfs.c @@ -36,7 +36,6 @@ #include "qemu/cutils.h" #include "sysemu/sysemu.h" #include "qapi/qmp/qdict.h" -#include "qapi/qmp/qint.h" #include "qapi/qmp/qstring.h" #include "qapi-visit.h" #include "qapi/qobject-input-visitor.h" diff --git a/block/qapi.c b/block/qapi.c index a40922ea26..2050df29e4 100644 --- a/block/qapi.c +++ b/block/qapi.c @@ -595,9 +595,11 @@ static void dump_qobject(fprintf_function func_fprintf= , void *f, int comp_indent, QObject *obj) { switch (qobject_type(obj)) { - case QTYPE_QINT: { - QInt *value =3D qobject_to_qint(obj); - func_fprintf(f, "%" PRId64, qint_get_int(value)); + case QTYPE_QNUM: { + QNum *value =3D qobject_to_qnum(obj); + char *tmp =3D qnum_to_string(value); + func_fprintf(f, "%s", tmp); + g_free(tmp); break; } case QTYPE_QSTRING: { @@ -615,11 +617,6 @@ static void dump_qobject(fprintf_function func_fprintf= , void *f, dump_qlist(func_fprintf, f, comp_indent, value); break; } - case QTYPE_QFLOAT: { - QFloat *value =3D qobject_to_qfloat(obj); - func_fprintf(f, "%g", qfloat_get_double(value)); - break; - } case QTYPE_QBOOL: { QBool *value =3D qobject_to_qbool(obj); func_fprintf(f, "%s", qbool_get_bool(value) ? "true" : "false"= ); diff --git a/block/quorum.c b/block/quorum.c index 1b2a8c3937..55ba916655 100644 --- a/block/quorum.c +++ b/block/quorum.c @@ -19,7 +19,6 @@ #include "qapi/qmp/qbool.h" #include "qapi/qmp/qdict.h" #include "qapi/qmp/qerror.h" -#include "qapi/qmp/qint.h" #include "qapi/qmp/qjson.h" #include "qapi/qmp/qlist.h" #include "qapi/qmp/qstring.h" diff --git a/block/sheepdog.c b/block/sheepdog.c index a18315a1ca..dea9000bdd 100644 --- a/block/sheepdog.c +++ b/block/sheepdog.c @@ -16,7 +16,6 @@ #include "qapi-visit.h" #include "qapi/error.h" #include "qapi/qmp/qdict.h" -#include "qapi/qmp/qint.h" #include "qapi/qobject-input-visitor.h" #include "qemu/uri.h" #include "qemu/error-report.h" diff --git a/block/ssh.c b/block/ssh.c index 11203fc5a2..bac3453c3e 100644 --- a/block/ssh.c +++ b/block/ssh.c @@ -34,7 +34,6 @@ #include "qemu/sockets.h" #include "qemu/uri.h" #include "qapi-visit.h" -#include "qapi/qmp/qint.h" #include "qapi/qmp/qstring.h" #include "qapi/qobject-input-visitor.h" #include "qapi/qobject-output-visitor.h" diff --git a/block/vvfat.c b/block/vvfat.c index 9c82371360..6089bba774 100644 --- a/block/vvfat.c +++ b/block/vvfat.c @@ -29,7 +29,6 @@ #include "qemu/module.h" #include "qemu/bswap.h" #include "migration/migration.h" -#include "qapi/qmp/qint.h" #include "qapi/qmp/qbool.h" #include "qapi/qmp/qstring.h" #include "qemu/cutils.h" diff --git a/blockdev.c b/blockdev.c index 0b38c3df71..ed9b839dd2 100644 --- a/blockdev.c +++ b/blockdev.c @@ -334,8 +334,9 @@ static bool parse_stats_intervals(BlockAcctStats *stats= , QList *intervals, break; } =20 - case QTYPE_QINT: { - int64_t length =3D qint_get_int(qobject_to_qint(entry->value)); + case QTYPE_QNUM: { + int64_t length =3D qnum_get_int(qobject_to_qnum(entry->value), + &error_abort); if (length > 0 && length <=3D UINT_MAX) { block_acct_add_interval(stats, (unsigned) length); } else { diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c index 2b0f3e1bfb..3a531a4416 100644 --- a/hw/acpi/pcihp.c +++ b/hw/acpi/pcihp.c @@ -37,7 +37,6 @@ #include "hw/pci/pci_bus.h" #include "qapi/error.h" #include "qom/qom-qobject.h" -#include "qapi/qmp/qint.h" =20 //#define DEBUG =20 diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 2073108577..ec3ae7fa85 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -57,7 +57,6 @@ =20 #include "hw/acpi/aml-build.h" =20 -#include "qapi/qmp/qint.h" #include "qom/qom-qobject.h" #include "hw/i386/amd_iommu.h" #include "hw/i386/intel_iommu.h" @@ -150,21 +149,21 @@ static void acpi_get_pm_info(AcpiPmInfo *pm) /* Fill in optional s3/s4 related properties */ o =3D object_property_get_qobject(obj, ACPI_PM_PROP_S3_DISABLED, NULL); if (o) { - pm->s3_disabled =3D qint_get_int(qobject_to_qint(o)); + pm->s3_disabled =3D qnum_get_int(qobject_to_qnum(o), &error_abort); } else { pm->s3_disabled =3D false; } qobject_decref(o); o =3D object_property_get_qobject(obj, ACPI_PM_PROP_S4_DISABLED, NULL); if (o) { - pm->s4_disabled =3D qint_get_int(qobject_to_qint(o)); + pm->s4_disabled =3D qnum_get_int(qobject_to_qnum(o), &error_abort); } else { pm->s4_disabled =3D false; } qobject_decref(o); o =3D object_property_get_qobject(obj, ACPI_PM_PROP_S4_VAL, NULL); if (o) { - pm->s4_val =3D qint_get_int(qobject_to_qint(o)); + pm->s4_val =3D qnum_get_int(qobject_to_qnum(o), &error_abort); } else { pm->s4_val =3D false; } @@ -500,7 +499,7 @@ static void build_append_pci_bus_devices(Aml *parent_sc= ope, PCIBus *bus, =20 bsel =3D object_property_get_qobject(OBJECT(bus), ACPI_PCIHP_PROP_BSEL= , NULL); if (bsel) { - int64_t bsel_val =3D qint_get_int(qobject_to_qint(bsel)); + int64_t bsel_val =3D qnum_get_int(qobject_to_qnum(bsel), &error_ab= ort); =20 aml_append(parent_scope, aml_name_decl("BSEL", aml_int(bsel_val))); notify_method =3D aml_method("DVNT", 2, AML_NOTSERIALIZED); @@ -610,7 +609,7 @@ static void build_append_pci_bus_devices(Aml *parent_sc= ope, PCIBus *bus, =20 /* If bus supports hotplug select it and notify about local events */ if (bsel) { - int64_t bsel_val =3D qint_get_int(qobject_to_qint(bsel)); + int64_t bsel_val =3D qnum_get_int(qobject_to_qnum(bsel), &error_ab= ort); aml_append(method, aml_store(aml_int(bsel_val), aml_name("BNUM"))); aml_append(method, aml_call2("DVNT", aml_name("PCIU"), aml_int(1) /* Device Check= */) @@ -2586,12 +2585,12 @@ static bool acpi_get_mcfg(AcpiMcfgInfo *mcfg) if (!o) { return false; } - mcfg->mcfg_base =3D qint_get_int(qobject_to_qint(o)); + mcfg->mcfg_base =3D qnum_get_int(qobject_to_qnum(o), &error_abort); qobject_decref(o); =20 o =3D object_property_get_qobject(pci_host, PCIE_HOST_MCFG_SIZE, NULL); assert(o); - mcfg->mcfg_size =3D qint_get_int(qobject_to_qint(o)); + mcfg->mcfg_size =3D qnum_get_int(qobject_to_qnum(o), &error_abort); qobject_decref(o); return true; } diff --git a/hw/usb/xen-usb.c b/hw/usb/xen-usb.c index fe62183fe3..584a6f2442 100644 --- a/hw/usb/xen-usb.c +++ b/hw/usb/xen-usb.c @@ -30,7 +30,6 @@ #include "hw/xen/xen_backend.h" #include "monitor/qdev.h" #include "qapi/qmp/qbool.h" -#include "qapi/qmp/qint.h" #include "qapi/qmp/qstring.h" =20 #include "hw/xen/io/ring.h" diff --git a/monitor.c b/monitor.c index 078cba5c86..7a640f0f65 100644 --- a/monitor.c +++ b/monitor.c @@ -2972,7 +2972,7 @@ static QDict *monitor_parse_arguments(Monitor *mon, monitor_printf(mon, "Unknown unit suffix\n"); goto fail; } - qdict_put(qdict, key, qfloat_from_double(val)); + qdict_put(qdict, key, qnum_from_double(val)); } break; case 'b': diff --git a/qapi/qobject-input-visitor.c b/qapi/qobject-input-visitor.c index d0f0002317..78425a4369 100644 --- a/qapi/qobject-input-visitor.c +++ b/qapi/qobject-input-visitor.c @@ -377,9 +377,6 @@ static void qobject_input_start_alternate(Visitor *v, c= onst char *name, } *obj =3D g_malloc0(size); (*obj)->type =3D qobject_type(qobj); - if (promote_int && (*obj)->type =3D=3D QTYPE_QINT) { - (*obj)->type =3D QTYPE_QFLOAT; - } } =20 static void qobject_input_type_int64(Visitor *v, const char *name, int64_t= *obj, @@ -387,19 +384,19 @@ static void qobject_input_type_int64(Visitor *v, cons= t char *name, int64_t *obj, { QObjectInputVisitor *qiv =3D to_qiv(v); QObject *qobj =3D qobject_input_get_object(qiv, name, true, errp); - QInt *qint; + QNum *qnum; =20 if (!qobj) { return; } - qint =3D qobject_to_qint(qobj); - if (!qint) { + qnum =3D qobject_to_qnum(qobj); + if (!qnum) { error_setg(errp, QERR_INVALID_PARAMETER_TYPE, full_name(qiv, name), "integer"); return; } =20 - *obj =3D qint_get_int(qint); + *obj =3D qnum_get_int(qnum, errp); } =20 =20 @@ -423,22 +420,22 @@ static void qobject_input_type_int64_keyval(Visitor *= v, const char *name, static void qobject_input_type_uint64(Visitor *v, const char *name, uint64_t *obj, Error **errp) { - /* FIXME: qobject_to_qint mishandles values over INT64_MAX */ + /* FIXME: qobject_to_qnum mishandles values over INT64_MAX */ QObjectInputVisitor *qiv =3D to_qiv(v); QObject *qobj =3D qobject_input_get_object(qiv, name, true, errp); - QInt *qint; + QNum *qnum; =20 if (!qobj) { return; } - qint =3D qobject_to_qint(qobj); - if (!qint) { + qnum =3D qobject_to_qnum(qobj); + if (!qnum) { error_setg(errp, QERR_INVALID_PARAMETER_TYPE, full_name(qiv, name), "integer"); return; } =20 - *obj =3D qint_get_int(qint); + *obj =3D qnum_get_int(qnum, errp); } =20 static void qobject_input_type_uint64_keyval(Visitor *v, const char *name, @@ -533,21 +530,14 @@ static void qobject_input_type_number(Visitor *v, con= st char *name, double *obj, { QObjectInputVisitor *qiv =3D to_qiv(v); QObject *qobj =3D qobject_input_get_object(qiv, name, true, errp); - QInt *qint; - QFloat *qfloat; + QNum *qnum; =20 if (!qobj) { return; } - qint =3D qobject_to_qint(qobj); - if (qint) { - *obj =3D qint_get_int(qobject_to_qint(qobj)); - return; - } - - qfloat =3D qobject_to_qfloat(qobj); - if (qfloat) { - *obj =3D qfloat_get_double(qobject_to_qfloat(qobj)); + qnum =3D qobject_to_qnum(qobj); + if (qnum) { + *obj =3D qnum_get_double(qnum); return; } =20 diff --git a/qapi/qobject-output-visitor.c b/qapi/qobject-output-visitor.c index 871127079d..2ca5093b22 100644 --- a/qapi/qobject-output-visitor.c +++ b/qapi/qobject-output-visitor.c @@ -144,7 +144,7 @@ static void qobject_output_type_int64(Visitor *v, const= char *name, int64_t *obj, Error **errp) { QObjectOutputVisitor *qov =3D to_qov(v); - qobject_output_add(qov, name, qint_from_int(*obj)); + qobject_output_add(qov, name, qnum_from_int(*obj)); } =20 static void qobject_output_type_uint64(Visitor *v, const char *name, @@ -152,7 +152,7 @@ static void qobject_output_type_uint64(Visitor *v, cons= t char *name, { /* FIXME values larger than INT64_MAX become negative */ QObjectOutputVisitor *qov =3D to_qov(v); - qobject_output_add(qov, name, qint_from_int(*obj)); + qobject_output_add(qov, name, qnum_from_int(*obj)); } =20 static void qobject_output_type_bool(Visitor *v, const char *name, bool *o= bj, @@ -177,7 +177,7 @@ static void qobject_output_type_number(Visitor *v, cons= t char *name, double *obj, Error **errp) { QObjectOutputVisitor *qov =3D to_qov(v); - qobject_output_add(qov, name, qfloat_from_double(*obj)); + qobject_output_add(qov, name, qnum_from_double(*obj)); } =20 static void qobject_output_type_any(Visitor *v, const char *name, diff --git a/qga/commands.c b/qga/commands.c index 3333ed50b2..ff89e805cf 100644 --- a/qga/commands.c +++ b/qga/commands.c @@ -485,7 +485,7 @@ int ga_parse_whence(GuestFileWhence *whence, Error **er= rp) { /* Exploit the fact that we picked values to match QGA_SEEK_*. */ if (whence->type =3D=3D QTYPE_QSTRING) { - whence->type =3D QTYPE_QINT; + whence->type =3D QTYPE_QNUM; whence->u.value =3D whence->u.name; } switch (whence->u.value) { diff --git a/qga/main.c b/qga/main.c index cc58d2b53d..405c1290f8 100644 --- a/qga/main.c +++ b/qga/main.c @@ -19,7 +19,6 @@ #endif #include "qapi/qmp/json-streamer.h" #include "qapi/qmp/json-parser.h" -#include "qapi/qmp/qint.h" #include "qapi/qmp/qjson.h" #include "qga/guest-agent-core.h" #include "qemu/module.h" diff --git a/qobject/json-parser.c b/qobject/json-parser.c index c18e48ab94..f431854ba1 100644 --- a/qobject/json-parser.c +++ b/qobject/json-parser.c @@ -466,16 +466,16 @@ static QObject *parse_escape(JSONParserContext *ctxt,= va_list *ap) } else if (!strcmp(token->str, "%i")) { return QOBJECT(qbool_from_bool(va_arg(*ap, int))); } else if (!strcmp(token->str, "%d")) { - return QOBJECT(qint_from_int(va_arg(*ap, int))); + return QOBJECT(qnum_from_int(va_arg(*ap, int))); } else if (!strcmp(token->str, "%ld")) { - return QOBJECT(qint_from_int(va_arg(*ap, long))); + return QOBJECT(qnum_from_int(va_arg(*ap, long))); } else if (!strcmp(token->str, "%lld") || !strcmp(token->str, "%I64d")) { - return QOBJECT(qint_from_int(va_arg(*ap, long long))); + return QOBJECT(qnum_from_int(va_arg(*ap, long long))); } else if (!strcmp(token->str, "%s")) { return QOBJECT(qstring_from_str(va_arg(*ap, const char *))); } else if (!strcmp(token->str, "%f")) { - return QOBJECT(qfloat_from_double(va_arg(*ap, double))); + return QOBJECT(qnum_from_double(va_arg(*ap, double))); } return NULL; } @@ -494,12 +494,12 @@ static QObject *parse_literal(JSONParserContext *ctxt) /* A possibility exists that this is a whole-valued float where the * fractional part was left out due to being 0 (.0). It's not a big * deal to treat these as ints in the parser, so long as users of = the - * resulting QObject know to expect a QInt in place of a QFloat in + * resulting QObject know to expect a QNum in place of a QNum in * cases like these. * * However, in some cases these values will overflow/underflow a - * QInt/int64 container, thus we should assume these are to be han= dled - * as QFloats/doubles rather than silently changing their values. + * QNum/int64 container, thus we should assume these are to be han= dled + * as QNums/doubles rather than silently changing their values. * * strtoll() indicates these instances by setting errno to ERANGE */ @@ -508,7 +508,7 @@ static QObject *parse_literal(JSONParserContext *ctxt) errno =3D 0; /* strtoll doesn't set errno on success */ value =3D strtoll(token->str, NULL, 10); if (errno !=3D ERANGE) { - return QOBJECT(qint_from_int(value)); + return QOBJECT(qnum_from_int(value)); } /* fall through to JSON_FLOAT */ } @@ -516,7 +516,7 @@ static QObject *parse_literal(JSONParserContext *ctxt) /* FIXME dependent on locale; a pervasive issue in QEMU */ /* FIXME our lexer matches RFC 7159 in forbidding Inf or NaN, * but those might be useful extensions beyond JSON */ - return QOBJECT(qfloat_from_double(strtod(token->str, NULL))); + return QOBJECT(qnum_from_double(strtod(token->str, NULL))); default: abort(); } diff --git a/qobject/qdict.c b/qobject/qdict.c index 88e2ecd658..ad5bab9572 100644 --- a/qobject/qdict.c +++ b/qobject/qdict.c @@ -11,8 +11,7 @@ */ =20 #include "qemu/osdep.h" -#include "qapi/qmp/qint.h" -#include "qapi/qmp/qfloat.h" +#include "qapi/qmp/qnum.h" #include "qapi/qmp/qdict.h" #include "qapi/qmp/qbool.h" #include "qapi/qmp/qstring.h" @@ -180,37 +179,26 @@ size_t qdict_size(const QDict *qdict) /** * qdict_get_double(): Get an number mapped by 'key' * - * This function assumes that 'key' exists and it stores a - * QFloat or QInt object. + * This function assumes that 'key' exists and it stores a QNum. * * Return number mapped by 'key'. */ double qdict_get_double(const QDict *qdict, const char *key) { - QObject *obj =3D qdict_get(qdict, key); - - assert(obj); - switch (qobject_type(obj)) { - case QTYPE_QFLOAT: - return qfloat_get_double(qobject_to_qfloat(obj)); - case QTYPE_QINT: - return qint_get_int(qobject_to_qint(obj)); - default: - abort(); - } + return qnum_get_double(qobject_to_qnum(qdict_get(qdict, key))); } =20 /** * qdict_get_int(): Get an integer mapped by 'key' * * This function assumes that 'key' exists and it stores a - * QInt object. + * QNum representable as int. * * Return integer mapped by 'key'. */ int64_t qdict_get_int(const QDict *qdict, const char *key) { - return qint_get_int(qobject_to_qint(qdict_get(qdict, key))); + return qnum_get_int(qobject_to_qnum(qdict_get(qdict, key)), &error_abo= rt); } =20 /** @@ -260,15 +248,25 @@ const char *qdict_get_str(const QDict *qdict, const c= har *key) * qdict_get_try_int(): Try to get integer mapped by 'key' * * Return integer mapped by 'key', if it is not present in - * the dictionary or if the stored object is not of QInt type + * the dictionary or if the stored object is not of QNum type * 'def_value' will be returned. */ int64_t qdict_get_try_int(const QDict *qdict, const char *key, int64_t def_value) { - QInt *qint =3D qobject_to_qint(qdict_get(qdict, key)); + Error *err =3D NULL; + QNum *qnum =3D qobject_to_qnum(qdict_get(qdict, key)); + int64_t val =3D def_value; + + if (qnum) { + val =3D qnum_get_int(qnum, &err); + } + if (err) { + error_free(err); + val =3D def_value; + } =20 - return qint ? qint_get_int(qint) : def_value; + return val; } =20 /** diff --git a/qobject/qfloat.c b/qobject/qfloat.c deleted file mode 100644 index d5da847701..0000000000 --- a/qobject/qfloat.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * QFloat Module - * - * Copyright IBM, Corp. 2009 - * - * Authors: - * Anthony Liguori - * - * This work is licensed under the terms of the GNU LGPL, version 2.1 or l= ater. - * See the COPYING.LIB file in the top-level directory. - * - */ - -#include "qemu/osdep.h" -#include "qapi/qmp/qfloat.h" -#include "qapi/qmp/qobject.h" -#include "qemu-common.h" - -/** - * qfloat_from_int(): Create a new QFloat from a float - * - * Return strong reference. - */ -QFloat *qfloat_from_double(double value) -{ - QFloat *qf; - - qf =3D g_malloc(sizeof(*qf)); - qobject_init(QOBJECT(qf), QTYPE_QFLOAT); - qf->value =3D value; - - return qf; -} - -/** - * qfloat_get_double(): Get the stored float - */ -double qfloat_get_double(const QFloat *qf) -{ - return qf->value; -} - -/** - * qobject_to_qfloat(): Convert a QObject into a QFloat - */ -QFloat *qobject_to_qfloat(const QObject *obj) -{ - if (!obj || qobject_type(obj) !=3D QTYPE_QFLOAT) { - return NULL; - } - return container_of(obj, QFloat, base); -} - -/** - * qfloat_destroy_obj(): Free all memory allocated by a - * QFloat object - */ -void qfloat_destroy_obj(QObject *obj) -{ - assert(obj !=3D NULL); - g_free(qobject_to_qfloat(obj)); -} diff --git a/qobject/qint.c b/qobject/qint.c deleted file mode 100644 index d7d1b3021f..0000000000 --- a/qobject/qint.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * QInt Module - * - * Copyright (C) 2009 Red Hat Inc. - * - * Authors: - * Luiz Capitulino - * - * This work is licensed under the terms of the GNU LGPL, version 2.1 or l= ater. - * See the COPYING.LIB file in the top-level directory. - */ - -#include "qemu/osdep.h" -#include "qapi/qmp/qint.h" -#include "qapi/qmp/qobject.h" -#include "qemu-common.h" - -/** - * qint_from_int(): Create a new QInt from an int64_t - * - * Return strong reference. - */ -QInt *qint_from_int(int64_t value) -{ - QInt *qi; - - qi =3D g_malloc(sizeof(*qi)); - qobject_init(QOBJECT(qi), QTYPE_QINT); - qi->value =3D value; - - return qi; -} - -/** - * qint_get_int(): Get the stored integer - */ -int64_t qint_get_int(const QInt *qi) -{ - return qi->value; -} - -/** - * qobject_to_qint(): Convert a QObject into a QInt - */ -QInt *qobject_to_qint(const QObject *obj) -{ - if (!obj || qobject_type(obj) !=3D QTYPE_QINT) { - return NULL; - } - return container_of(obj, QInt, base); -} - -/** - * qint_destroy_obj(): Free all memory allocated by a - * QInt object - */ -void qint_destroy_obj(QObject *obj) -{ - assert(obj !=3D NULL); - g_free(qobject_to_qint(obj)); -} diff --git a/qobject/qjson.c b/qobject/qjson.c index b2f3bfec53..2e0930884e 100644 --- a/qobject/qjson.c +++ b/qobject/qjson.c @@ -132,12 +132,11 @@ static void to_json(const QObject *obj, QString *str,= int pretty, int indent) case QTYPE_QNULL: qstring_append(str, "null"); break; - case QTYPE_QINT: { - QInt *val =3D qobject_to_qint(obj); - char buffer[1024]; - - snprintf(buffer, sizeof(buffer), "%" PRId64, qint_get_int(val)); + case QTYPE_QNUM: { + QNum *val =3D qobject_to_qnum(obj); + char *buffer =3D qnum_to_string(val); qstring_append(str, buffer); + g_free(buffer); break; } case QTYPE_QSTRING: { @@ -234,34 +233,6 @@ static void to_json(const QObject *obj, QString *str, = int pretty, int indent) qstring_append(str, "]"); break; } - case QTYPE_QFLOAT: { - QFloat *val =3D qobject_to_qfloat(obj); - char buffer[1024]; - int len; - - /* FIXME: snprintf() is locale dependent; but JSON requires - * numbers to be formatted as if in the C locale. Dependence - * on C locale is a pervasive issue in QEMU. */ - /* FIXME: This risks printing Inf or NaN, which are not valid - * JSON values. */ - /* FIXME: the default precision of 6 for %f often causes - * rounding errors; we should be using DBL_DECIMAL_DIG (17), - * and only rounding to a shorter number if the result would - * still produce the same floating point value. */ - len =3D snprintf(buffer, sizeof(buffer), "%f", qfloat_get_double(v= al)); - while (len > 0 && buffer[len - 1] =3D=3D '0') { - len--; - } - - if (len && buffer[len - 1] =3D=3D '.') { - buffer[len - 1] =3D 0; - } else { - buffer[len] =3D 0; - } - - qstring_append(str, buffer); - break; - } case QTYPE_QBOOL: { QBool *val =3D qobject_to_qbool(obj); =20 diff --git a/qobject/qnum.c b/qobject/qnum.c new file mode 100644 index 0000000000..8e9dd38350 --- /dev/null +++ b/qobject/qnum.c @@ -0,0 +1,138 @@ +/* + * QNum Module + * + * Copyright (C) 2009 Red Hat Inc. + * + * Authors: + * Luiz Capitulino + * Marc-Andr=C3=A9 Lureau + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or l= ater. + * See the COPYING.LIB file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "qapi/qmp/qnum.h" +#include "qapi/qmp/qobject.h" +#include "qemu-common.h" + +/** + * qnum_from_int(): Create a new QNum from an int64_t + * + * Return strong reference. + */ +QNum *qnum_from_int(int64_t value) +{ + QNum *qn =3D g_new(QNum, 1); + + qobject_init(QOBJECT(qn), QTYPE_QNUM); + qn->type =3D QNUM_I64; + qn->u.i64 =3D value; + + return qn; +} + +/** + * qnum_from_double(): Create a new QNum from a double + * + * Return strong reference. + */ +QNum *qnum_from_double(double value) +{ + QNum *qn =3D g_new(QNum, 1); + + qobject_init(QOBJECT(qn), QTYPE_QNUM); + qn->type =3D QNUM_DOUBLE; + qn->u.dbl =3D value; + + return qn; +} + +/** + * qnum_get_int(): Get an integer representation of the number + */ +int64_t qnum_get_int(const QNum *qn, Error **errp) +{ + switch (qn->type) { + case QNUM_I64: + return qn->u.i64; + case QNUM_DOUBLE: + error_setg(errp, "The number is a float"); + return 0; + } + + g_assert_not_reached(); +} + +/** + * qnum_get_double(): Get a float representation of the number + */ +double qnum_get_double(QNum *qn) +{ + switch (qn->type) { + case QNUM_I64: + return qn->u.i64; + case QNUM_DOUBLE: + return qn->u.dbl; + } + + g_assert_not_reached(); +} + +char *qnum_to_string(QNum *qn) +{ + char *buffer; + int len; + + switch (qn->type) { + case QNUM_I64: + return g_strdup_printf("%" PRId64, qn->u.i64); + case QNUM_DOUBLE: + /* FIXME: snprintf() is locale dependent; but JSON requires + * numbers to be formatted as if in the C locale. Dependence + * on C locale is a pervasive issue in QEMU. */ + /* FIXME: This risks printing Inf or NaN, which are not valid + * JSON values. */ + /* FIXME: the default precision of 6 for %f often causes + * rounding errors; we should be using DBL_DECIMAL_DIG (17), + * and only rounding to a shorter number if the result would + * still produce the same floating point value. */ + buffer =3D g_strdup_printf("%f" , qn->u.dbl); + len =3D strlen(buffer); + while (len > 0 && buffer[len - 1] =3D=3D '0') { + len--; + } + + if (len && buffer[len - 1] =3D=3D '.') { + buffer[len - 1] =3D 0; + } else { + buffer[len] =3D 0; + } + + return buffer; + } + + g_assert_not_reached(); +} + +/** + * qobject_to_qnum(): Convert a QObject into a QNum + */ +QNum *qobject_to_qnum(const QObject *obj) +{ + if (!obj || qobject_type(obj) !=3D QTYPE_QNUM) { + return NULL; + } + return container_of(obj, QNum, base); +} + +/** + * qnum_destroy_obj(): Free all memory allocated by a + * QNum object + */ +void qnum_destroy_obj(QObject *obj) +{ + assert(obj !=3D NULL); + g_free(qobject_to_qnum(obj)); +} diff --git a/qobject/qobject.c b/qobject/qobject.c index fe4fa10989..b0cafb66f1 100644 --- a/qobject/qobject.c +++ b/qobject/qobject.c @@ -14,11 +14,10 @@ static void (*qdestroy[QTYPE__MAX])(QObject *) =3D { [QTYPE_NONE] =3D NULL, /* No such object exists */ [QTYPE_QNULL] =3D NULL, /* qnull_ is indestructible */ - [QTYPE_QINT] =3D qint_destroy_obj, + [QTYPE_QNUM] =3D qnum_destroy_obj, [QTYPE_QSTRING] =3D qstring_destroy_obj, [QTYPE_QDICT] =3D qdict_destroy_obj, [QTYPE_QLIST] =3D qlist_destroy_obj, - [QTYPE_QFLOAT] =3D qfloat_destroy_obj, [QTYPE_QBOOL] =3D qbool_destroy_obj, }; =20 diff --git a/qom/object.c b/qom/object.c index c7b8079df6..c1644dbcb7 100644 --- a/qom/object.c +++ b/qom/object.c @@ -27,7 +27,6 @@ #include "qom/qom-qobject.h" #include "qapi/qmp/qobject.h" #include "qapi/qmp/qbool.h" -#include "qapi/qmp/qint.h" #include "qapi/qmp/qstring.h" =20 #define MAX_INTERFACES 32 @@ -1190,28 +1189,32 @@ bool object_property_get_bool(Object *obj, const ch= ar *name, void object_property_set_int(Object *obj, int64_t value, const char *name, Error **errp) { - QInt *qint =3D qint_from_int(value); - object_property_set_qobject(obj, QOBJECT(qint), name, errp); + QNum *qnum =3D qnum_from_int(value); + object_property_set_qobject(obj, QOBJECT(qnum), name, errp); =20 - QDECREF(qint); + QDECREF(qnum); } =20 int64_t object_property_get_int(Object *obj, const char *name, Error **errp) { QObject *ret =3D object_property_get_qobject(obj, name, errp); - QInt *qint; + Error *err =3D NULL; + QNum *qnum; int64_t retval; =20 if (!ret) { return -1; } - qint =3D qobject_to_qint(ret); - if (!qint) { + qnum =3D qobject_to_qnum(ret); + if (qnum) { + retval =3D qnum_get_int(qnum, &err); + } + + if (!qnum || err) { error_setg(errp, QERR_INVALID_PARAMETER_TYPE, name, "int"); + error_free(err); retval =3D -1; - } else { - retval =3D qint_get_int(qint); } =20 qobject_decref(ret); diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 13c0985f11..1e8a5b55c0 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -29,11 +29,7 @@ #include "qemu/option.h" #include "qemu/config-file.h" #include "qapi/qmp/qerror.h" -#include "qapi/qmp/qstring.h" -#include "qapi/qmp/qdict.h" -#include "qapi/qmp/qbool.h" -#include "qapi/qmp/qint.h" -#include "qapi/qmp/qfloat.h" +#include "qapi/qmp/types.h" =20 #include "qapi-types.h" #include "qapi-visit.h" diff --git a/tests/check-qdict.c b/tests/check-qdict.c index be8d81f07b..bcd06a7d6b 100644 --- a/tests/check-qdict.c +++ b/tests/check-qdict.c @@ -11,7 +11,6 @@ */ #include "qemu/osdep.h" =20 -#include "qapi/qmp/qint.h" #include "qapi/qmp/qdict.h" #include "qapi/qmp/qstring.h" #include "qapi/error.h" @@ -39,7 +38,7 @@ static void qdict_new_test(void) =20 static void qdict_put_obj_test(void) { - QInt *qi; + QNum *qi; QDict *qdict; QDictEntry *ent; const int num =3D 42; @@ -51,8 +50,8 @@ static void qdict_put_obj_test(void) =20 g_assert(qdict_size(qdict) =3D=3D 1); ent =3D QLIST_FIRST(&qdict->table[12345 % QDICT_BUCKET_MAX]); - qi =3D qobject_to_qint(ent->value); - g_assert(qint_get_int(qi) =3D=3D num); + qi =3D qobject_to_qnum(ent->value); + g_assert(qnum_get_int(qi, &error_abort) =3D=3D num); =20 // destroy doesn't exit yet QDECREF(qi); @@ -74,7 +73,7 @@ static void qdict_destroy_simple_test(void) =20 static void qdict_get_test(void) { - QInt *qi; + QNum *qi; QObject *obj; const int value =3D -42; const char *key =3D "test"; @@ -85,8 +84,8 @@ static void qdict_get_test(void) obj =3D qdict_get(tests_dict, key); g_assert(obj !=3D NULL); =20 - qi =3D qobject_to_qint(obj); - g_assert(qint_get_int(qi) =3D=3D value); + qi =3D qobject_to_qnum(obj); + g_assert(qnum_get_int(qi, &error_abort) =3D=3D value); =20 QDECREF(tests_dict); } @@ -329,7 +328,7 @@ static void qdict_array_split_test(void) { QDict *test_dict =3D qdict_new(); QDict *dict1, *dict2; - QInt *int1; + QNum *int1; QList *test_list; =20 /* @@ -380,7 +379,7 @@ static void qdict_array_split_test(void) =20 dict1 =3D qobject_to_qdict(qlist_pop(test_list)); dict2 =3D qobject_to_qdict(qlist_pop(test_list)); - int1 =3D qobject_to_qint(qlist_pop(test_list)); + int1 =3D qobject_to_qnum(qlist_pop(test_list)); =20 g_assert(dict1); g_assert(dict2); @@ -402,7 +401,7 @@ static void qdict_array_split_test(void) =20 QDECREF(dict2); =20 - g_assert(qint_get_int(int1) =3D=3D 66); + g_assert(qnum_get_int(int1, &error_abort) =3D=3D 66); =20 QDECREF(int1); =20 @@ -447,14 +446,14 @@ static void qdict_array_split_test(void) =20 qdict_array_split(test_dict, &test_list); =20 - int1 =3D qobject_to_qint(qlist_pop(test_list)); + int1 =3D qobject_to_qnum(qlist_pop(test_list)); =20 g_assert(int1); g_assert(qlist_empty(test_list)); =20 QDECREF(test_list); =20 - g_assert(qint_get_int(int1) =3D=3D 42); + g_assert(qnum_get_int(int1, &error_abort) =3D=3D 42); =20 QDECREF(int1); =20 diff --git a/tests/check-qfloat.c b/tests/check-qfloat.c deleted file mode 100644 index 1da2cdae08..0000000000 --- a/tests/check-qfloat.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * QFloat unit-tests. - * - * Copyright IBM, Corp. 2009 - * - * Authors: - * Anthony Liguori - * - * This work is licensed under the terms of the GNU LGPL, version 2.1 or l= ater. - * See the COPYING.LIB file in the top-level directory. - * - */ -#include "qemu/osdep.h" - -#include "qapi/qmp/qfloat.h" -#include "qemu-common.h" - -/* - * Public Interface test-cases - * - * (with some violations to access 'private' data) - */ - -static void qfloat_from_double_test(void) -{ - QFloat *qf; - const double value =3D -42.23423; - - qf =3D qfloat_from_double(value); - g_assert(qf !=3D NULL); - g_assert(qf->value =3D=3D value); - g_assert(qf->base.refcnt =3D=3D 1); - g_assert(qobject_type(QOBJECT(qf)) =3D=3D QTYPE_QFLOAT); - - // destroy doesn't exit yet - g_free(qf); -} - -static void qfloat_destroy_test(void) -{ - QFloat *qf =3D qfloat_from_double(0.0); - QDECREF(qf); -} - -int main(int argc, char **argv) -{ - g_test_init(&argc, &argv, NULL); - - g_test_add_func("/public/from_double", qfloat_from_double_test); - g_test_add_func("/public/destroy", qfloat_destroy_test); - - return g_test_run(); -} diff --git a/tests/check-qint.c b/tests/check-qint.c deleted file mode 100644 index b6e4555115..0000000000 --- a/tests/check-qint.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * QInt unit-tests. - * - * Copyright (C) 2009 Red Hat Inc. - * - * Authors: - * Luiz Capitulino - * - * This work is licensed under the terms of the GNU LGPL, version 2.1 or l= ater. - * See the COPYING.LIB file in the top-level directory. - */ -#include "qemu/osdep.h" - -#include "qapi/qmp/qint.h" -#include "qemu-common.h" - -/* - * Public Interface test-cases - * - * (with some violations to access 'private' data) - */ - -static void qint_from_int_test(void) -{ - QInt *qi; - const int value =3D -42; - - qi =3D qint_from_int(value); - g_assert(qi !=3D NULL); - g_assert(qi->value =3D=3D value); - g_assert(qi->base.refcnt =3D=3D 1); - g_assert(qobject_type(QOBJECT(qi)) =3D=3D QTYPE_QINT); - - // destroy doesn't exit yet - g_free(qi); -} - -static void qint_destroy_test(void) -{ - QInt *qi =3D qint_from_int(0); - QDECREF(qi); -} - -static void qint_from_int64_test(void) -{ - QInt *qi; - const int64_t value =3D 0x1234567890abcdefLL; - - qi =3D qint_from_int(value); - g_assert((int64_t) qi->value =3D=3D value); - - QDECREF(qi); -} - -static void qint_get_int_test(void) -{ - QInt *qi; - const int value =3D 123456; - - qi =3D qint_from_int(value); - g_assert(qint_get_int(qi) =3D=3D value); - - QDECREF(qi); -} - -static void qobject_to_qint_test(void) -{ - QInt *qi; - - qi =3D qint_from_int(0); - g_assert(qobject_to_qint(QOBJECT(qi)) =3D=3D qi); - - QDECREF(qi); -} - -int main(int argc, char **argv) -{ - g_test_init(&argc, &argv, NULL); - - g_test_add_func("/public/from_int", qint_from_int_test); - g_test_add_func("/public/destroy", qint_destroy_test); - g_test_add_func("/public/from_int64", qint_from_int64_test); - g_test_add_func("/public/get_int", qint_get_int_test); - g_test_add_func("/public/to_qint", qobject_to_qint_test); - - return g_test_run(); -} diff --git a/tests/check-qjson.c b/tests/check-qjson.c index 963dd46f07..c432aebf13 100644 --- a/tests/check-qjson.c +++ b/tests/check-qjson.c @@ -886,21 +886,21 @@ static void simple_number(void) }; =20 for (i =3D 0; test_cases[i].encoded; i++) { - QInt *qint; + QNum *qnum; =20 - qint =3D qobject_to_qint(qobject_from_json(test_cases[i].encoded, + qnum =3D qobject_to_qnum(qobject_from_json(test_cases[i].encoded, &error_abort)); - g_assert(qint); - g_assert(qint_get_int(qint) =3D=3D test_cases[i].decoded); + g_assert(qnum); + g_assert(qnum_get_int(qnum, &error_abort) =3D=3D test_cases[i].dec= oded); if (test_cases[i].skip =3D=3D 0) { QString *str; =20 - str =3D qobject_to_json(QOBJECT(qint)); + str =3D qobject_to_json(QOBJECT(qnum)); g_assert(strcmp(qstring_get_str(str), test_cases[i].encoded) = =3D=3D 0); QDECREF(str); } =20 - QDECREF(qint); + QDECREF(qnum); } } =20 @@ -921,12 +921,12 @@ static void float_number(void) =20 for (i =3D 0; test_cases[i].encoded; i++) { QObject *obj; - QFloat *qfloat; + QNum *qnum; =20 obj =3D qobject_from_json(test_cases[i].encoded, &error_abort); - qfloat =3D qobject_to_qfloat(obj); - g_assert(qfloat); - g_assert(qfloat_get_double(qfloat) =3D=3D test_cases[i].decoded); + qnum =3D qobject_to_qnum(obj); + g_assert(qnum); + g_assert(qnum_get_double(qnum) =3D=3D test_cases[i].decoded); =20 if (test_cases[i].skip =3D=3D 0) { QString *str; @@ -936,29 +936,28 @@ static void float_number(void) QDECREF(str); } =20 - QDECREF(qfloat); + QDECREF(qnum); } } =20 static void vararg_number(void) { - QInt *qint; - QFloat *qfloat; + QNum *qnum; int value =3D 0x2342; long long value_ll =3D 0x2342342343LL; double valuef =3D 2.323423423; =20 - qint =3D qobject_to_qint(qobject_from_jsonf("%d", value)); - g_assert(qint_get_int(qint) =3D=3D value); - QDECREF(qint); + qnum =3D qobject_to_qnum(qobject_from_jsonf("%d", value)); + g_assert(qnum_get_int(qnum, &error_abort) =3D=3D value); + QDECREF(qnum); =20 - qint =3D qobject_to_qint(qobject_from_jsonf("%lld", value_ll)); - g_assert(qint_get_int(qint) =3D=3D value_ll); - QDECREF(qint); + qnum =3D qobject_to_qnum(qobject_from_jsonf("%lld", value_ll)); + g_assert(qnum_get_int(qnum, &error_abort) =3D=3D value_ll); + QDECREF(qnum); =20 - qfloat =3D qobject_to_qfloat(qobject_from_jsonf("%f", valuef)); - g_assert(qfloat_get_double(qfloat) =3D=3D valuef); - QDECREF(qfloat); + qnum =3D qobject_to_qnum(qobject_from_jsonf("%f", valuef)); + g_assert(qnum_get_double(qnum) =3D=3D valuef); + QDECREF(qnum); } =20 static void keyword_literal(void) @@ -1019,7 +1018,7 @@ struct LiteralQObject { int type; union { - int64_t qint; + int64_t qnum; const char *qstr; LiteralQDictEntry *qdict; LiteralQObject *qlist; @@ -1032,7 +1031,7 @@ struct LiteralQDictEntry LiteralQObject value; }; =20 -#define QLIT_QINT(val) (LiteralQObject){.type =3D QTYPE_QINT, .value.qint = =3D (val)} +#define QLIT_QNUM(val) (LiteralQObject){.type =3D QTYPE_QNUM, .value.qnum = =3D (val)} #define QLIT_QSTR(val) (LiteralQObject){.type =3D QTYPE_QSTRING, .value.qs= tr =3D (val)} #define QLIT_QDICT(val) (LiteralQObject){.type =3D QTYPE_QDICT, .value.qdi= ct =3D (val)} #define QLIT_QLIST(val) (LiteralQObject){.type =3D QTYPE_QLIST, .value.qli= st =3D (val)} @@ -1069,8 +1068,9 @@ static int compare_litqobj_to_qobj(LiteralQObject *lh= s, QObject *rhs) } =20 switch (lhs->type) { - case QTYPE_QINT: - return lhs->value.qint =3D=3D qint_get_int(qobject_to_qint(rhs)); + case QTYPE_QNUM: + return lhs->value.qnum =3D=3D qnum_get_int(qobject_to_qnum(rhs), + &error_abort); case QTYPE_QSTRING: return (strcmp(lhs->value.qstr, qstring_get_str(qobject_to_qstring= (rhs))) =3D=3D 0); case QTYPE_QDICT: { @@ -1114,7 +1114,7 @@ static void simple_dict(void) { .encoded =3D "{\"foo\": 42, \"bar\": \"hello world\"}", .decoded =3D QLIT_QDICT(((LiteralQDictEntry[]){ - { "foo", QLIT_QINT(42) }, + { "foo", QLIT_QNUM(42) }, { "bar", QLIT_QSTR("hello world") }, { } })), @@ -1126,7 +1126,7 @@ static void simple_dict(void) }, { .encoded =3D "{\"foo\": 43}", .decoded =3D QLIT_QDICT(((LiteralQDictEntry[]){ - { "foo", QLIT_QINT(43) }, + { "foo", QLIT_QNUM(43) }, { } })), }, @@ -1212,15 +1212,15 @@ static void simple_list(void) { .encoded =3D "[43,42]", .decoded =3D QLIT_QLIST(((LiteralQObject[]){ - QLIT_QINT(43), - QLIT_QINT(42), + QLIT_QNUM(43), + QLIT_QNUM(42), { } })), }, { .encoded =3D "[43]", .decoded =3D QLIT_QLIST(((LiteralQObject[]){ - QLIT_QINT(43), + QLIT_QNUM(43), { } })), }, @@ -1269,35 +1269,35 @@ static void simple_whitespace(void) { .encoded =3D " [ 43 , 42 ]", .decoded =3D QLIT_QLIST(((LiteralQObject[]){ - QLIT_QINT(43), - QLIT_QINT(42), + QLIT_QNUM(43), + QLIT_QNUM(42), { } })), }, { .encoded =3D " [ 43 , { 'h' : 'b' }, [ ], 42 ]", .decoded =3D QLIT_QLIST(((LiteralQObject[]){ - QLIT_QINT(43), + QLIT_QNUM(43), QLIT_QDICT(((LiteralQDictEntry[]){ { "h", QLIT_QSTR("b") }, { }})), QLIT_QLIST(((LiteralQObject[]){ { }})), - QLIT_QINT(42), + QLIT_QNUM(42), { } })), }, { .encoded =3D " [ 43 , { 'h' : 'b' , 'a' : 32 }, [ ], 42 ]", .decoded =3D QLIT_QLIST(((LiteralQObject[]){ - QLIT_QINT(43), + QLIT_QNUM(43), QLIT_QDICT(((LiteralQDictEntry[]){ { "h", QLIT_QSTR("b") }, - { "a", QLIT_QINT(32) }, + { "a", QLIT_QNUM(32) }, { }})), QLIT_QLIST(((LiteralQObject[]){ { }})), - QLIT_QINT(42), + QLIT_QNUM(42), { } })), }, @@ -1327,11 +1327,11 @@ static void simple_varargs(void) QObject *embedded_obj; QObject *obj; LiteralQObject decoded =3D QLIT_QLIST(((LiteralQObject[]){ - QLIT_QINT(1), - QLIT_QINT(2), + QLIT_QNUM(1), + QLIT_QNUM(2), QLIT_QLIST(((LiteralQObject[]){ - QLIT_QINT(32), - QLIT_QINT(42), + QLIT_QNUM(32), + QLIT_QNUM(42), {}})), {}})); =20 diff --git a/tests/check-qlist.c b/tests/check-qlist.c index 4983867c27..a2d1701003 100644 --- a/tests/check-qlist.c +++ b/tests/check-qlist.c @@ -11,8 +11,8 @@ */ #include "qemu/osdep.h" =20 -#include "qapi/qmp/qint.h" -#include "qapi/qmp/qlist.h" +#include "qapi/error.h" +#include "qapi/qmp/types.h" =20 /* * Public Interface test-cases @@ -35,11 +35,11 @@ static void qlist_new_test(void) =20 static void qlist_append_test(void) { - QInt *qi; + QNum *qi; QList *qlist; QListEntry *entry; =20 - qi =3D qint_from_int(42); + qi =3D qnum_from_int(42); =20 qlist =3D qlist_new(); qlist_append(qlist, qi); @@ -84,13 +84,14 @@ static const int iter_max =3D 42; =20 static void iter_func(QObject *obj, void *opaque) { - QInt *qi; + QNum *qi; =20 g_assert(opaque =3D=3D NULL); =20 - qi =3D qobject_to_qint(obj); + qi =3D qobject_to_qnum(obj); g_assert(qi !=3D NULL); - g_assert((qint_get_int(qi) >=3D 0) && (qint_get_int(qi) <=3D iter_max)= ); + g_assert((qnum_get_int(qi, &error_abort) >=3D 0) && + (qnum_get_int(qi, &error_abort) <=3D iter_max)); =20 iter_called++; } diff --git a/tests/check-qnum.c b/tests/check-qnum.c new file mode 100644 index 0000000000..d08d35e85a --- /dev/null +++ b/tests/check-qnum.c @@ -0,0 +1,131 @@ +/* + * QNum unit-tests. + * + * Copyright (C) 2009 Red Hat Inc. + * + * Authors: + * Luiz Capitulino + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or l= ater. + * See the COPYING.LIB file in the top-level directory. + */ +#include "qemu/osdep.h" + +#include "qapi/qmp/qnum.h" +#include "qapi/error.h" +#include "qemu-common.h" + +/* + * Public Interface test-cases + * + * (with some violations to access 'private' data) + */ + +static void qnum_from_int_test(void) +{ + QNum *qi; + const int value =3D -42; + + qi =3D qnum_from_int(value); + g_assert(qi !=3D NULL); + g_assert_cmpint(qi->u.i64, =3D=3D, value); + g_assert_cmpint(qi->base.refcnt, =3D=3D, 1); + g_assert_cmpint(qobject_type(QOBJECT(qi)), =3D=3D, QTYPE_QNUM); + + // destroy doesn't exit yet + g_free(qi); +} + +static void qnum_from_double_test(void) +{ + QNum *qf; + const double value =3D -42.23423; + + qf =3D qnum_from_double(value); + g_assert(qf !=3D NULL); + g_assert_cmpfloat(qf->u.dbl, =3D=3D, value); + g_assert_cmpint(qf->base.refcnt, =3D=3D, 1); + g_assert_cmpint(qobject_type(QOBJECT(qf)), =3D=3D, QTYPE_QNUM); + + // destroy doesn't exit yet + g_free(qf); +} + +static void qnum_from_int64_test(void) +{ + QNum *qi; + const int64_t value =3D 0x1234567890abcdefLL; + + qi =3D qnum_from_int(value); + g_assert_cmpint((int64_t) qi->u.i64, =3D=3D, value); + + QDECREF(qi); +} + +static void qnum_get_int_test(void) +{ + QNum *qi; + const int value =3D 123456; + + qi =3D qnum_from_int(value); + g_assert_cmpint(qnum_get_int(qi, &error_abort), =3D=3D, value); + + QDECREF(qi); +} + +static void qobject_to_qnum_test(void) +{ + QNum *qn; + + qn =3D qnum_from_int(0); + g_assert(qobject_to_qnum(QOBJECT(qn)) =3D=3D qn); + QDECREF(qn); + + qn =3D qnum_from_double(0); + g_assert(qobject_to_qnum(QOBJECT(qn)) =3D=3D qn); + QDECREF(qn); +} + +static void qnum_to_string_test(void) +{ + QNum *qn; + char *tmp; + + qn =3D qnum_from_int(123456); + tmp =3D qnum_to_string(qn); + g_assert_cmpstr(tmp, =3D=3D, "123456"); + g_free(tmp); + QDECREF(qn); + + qn =3D qnum_from_double(0.42); + tmp =3D qnum_to_string(qn); + g_assert_cmpstr(tmp, =3D=3D, "0.42"); + g_free(tmp); + QDECREF(qn); +} + +static void qnum_destroy_test(void) +{ + QNum *qn; + + qn =3D qnum_from_int(0); + QDECREF(qn); + + qn =3D qnum_from_double(0.42); + QDECREF(qn); +} + +int main(int argc, char **argv) +{ + g_test_init(&argc, &argv, NULL); + + g_test_add_func("/qnum/from_int", qnum_from_int_test); + g_test_add_func("/qnum/from_double", qnum_from_double_test); + g_test_add_func("/qnum/destroy", qnum_destroy_test); + g_test_add_func("/qnum/from_int64", qnum_from_int64_test); + g_test_add_func("/qnum/get_int", qnum_get_int_test); + g_test_add_func("/qnum/to_qnum", qobject_to_qnum_test); + g_test_add_func("/qnum/to_string", qnum_to_string_test); + + return g_test_run(); +} diff --git a/tests/test-keyval.c b/tests/test-keyval.c index df0ff831b5..bec574257e 100644 --- a/tests/test-keyval.c +++ b/tests/test-keyval.c @@ -611,7 +611,6 @@ static void test_keyval_visit_optional(void) =20 static void test_keyval_visit_alternate(void) { - Error *err =3D NULL; Visitor *v; QDict *qdict; AltNumStr *ans; diff --git a/tests/test-qmp-commands.c b/tests/test-qmp-commands.c index acdded4d67..96a52dbca8 100644 --- a/tests/test-qmp-commands.c +++ b/tests/test-qmp-commands.c @@ -162,7 +162,7 @@ static void test_dispatch_cmd_io(void) QDict *ud1b =3D qdict_new(); QDict *ret, *ret_dict, *ret_dict_dict, *ret_dict_dict_userdef; QDict *ret_dict_dict2, *ret_dict_dict2_userdef; - QInt *ret3; + QNum *ret3; =20 qdict_put_int(ud1a, "integer", 42); qdict_put_str(ud1a, "string", "hello"); @@ -194,8 +194,8 @@ static void test_dispatch_cmd_io(void) qdict_put(req, "arguments", args3); qdict_put_str(req, "execute", "guest-get-time"); =20 - ret3 =3D qobject_to_qint(test_qmp_dispatch(req)); - assert(qint_get_int(ret3) =3D=3D 66); + ret3 =3D qobject_to_qnum(test_qmp_dispatch(req)); + assert(qnum_get_int(ret3, &error_abort) =3D=3D 66); QDECREF(ret3); =20 QDECREF(req); diff --git a/tests/test-qmp-event.c b/tests/test-qmp-event.c index 4c0f09601d..e996bebc6e 100644 --- a/tests/test-qmp-event.c +++ b/tests/test-qmp-event.c @@ -18,7 +18,6 @@ #include "test-qapi-visit.h" #include "test-qapi-event.h" #include "qapi/qmp/types.h" -#include "qapi/qmp/qint.h" #include "qapi/qmp/qobject.h" #include "qapi/qmp-event.h" =20 @@ -62,9 +61,9 @@ void qdict_cmp_do_simple(const char *key, QObject *obj1, = void *opaque) d->result =3D (qbool_get_bool(qobject_to_qbool(obj1)) =3D=3D qbool_get_bool(qobject_to_qbool(obj2))); return; - case QTYPE_QINT: - d->result =3D (qint_get_int(qobject_to_qint(obj1)) =3D=3D - qint_get_int(qobject_to_qint(obj2))); + case QTYPE_QNUM: + d->result =3D (qnum_get_int(qobject_to_qnum(obj1), &error_abort) = =3D=3D + qnum_get_int(qobject_to_qnum(obj2), &error_abort)); return; case QTYPE_QSTRING: d->result =3D g_strcmp0(qstring_get_str(qobject_to_qstring(obj1)), diff --git a/tests/test-qobject-input-visitor.c b/tests/test-qobject-input-= visitor.c index a30e2d5e95..4484980969 100644 --- a/tests/test-qobject-input-visitor.c +++ b/tests/test-qobject-input-visitor.c @@ -152,7 +152,7 @@ static void test_visitor_in_int_overflow(TestInputVisit= orData *data, Visitor *v; =20 /* this will overflow a Qint/int64, so should be deserialized into - * a QFloat/double field instead, leading to an error if we pass it + * a QNum/double field instead, leading to an error if we pass it * to visit_type_int. confirm this. */ v =3D visitor_input_test_init(data, "%f", DBL_MAX); @@ -428,7 +428,7 @@ static void test_visitor_in_any(TestInputVisitorData *d= ata, { QObject *res =3D NULL; Visitor *v; - QInt *qint; + QNum *qnum; QBool *qbool; QString *qstring; QDict *qdict; @@ -436,9 +436,9 @@ static void test_visitor_in_any(TestInputVisitorData *d= ata, =20 v =3D visitor_input_test_init(data, "-42"); visit_type_any(v, NULL, &res, &error_abort); - qint =3D qobject_to_qint(res); - g_assert(qint); - g_assert_cmpint(qint_get_int(qint), =3D=3D, -42); + qnum =3D qobject_to_qnum(res); + g_assert(qnum); + g_assert_cmpint(qnum_get_int(qnum, &error_abort), =3D=3D, -42); qobject_decref(res); =20 v =3D visitor_input_test_init(data, "{ 'integer': -42, 'boolean': true= , 'string': 'foo' }"); @@ -447,9 +447,9 @@ static void test_visitor_in_any(TestInputVisitorData *d= ata, g_assert(qdict && qdict_size(qdict) =3D=3D 3); qobj =3D qdict_get(qdict, "integer"); g_assert(qobj); - qint =3D qobject_to_qint(qobj); - g_assert(qint); - g_assert_cmpint(qint_get_int(qint), =3D=3D, -42); + qnum =3D qobject_to_qnum(qobj); + g_assert(qnum); + g_assert_cmpint(qnum_get_int(qnum, &error_abort), =3D=3D, -42); qobj =3D qdict_get(qdict, "boolean"); g_assert(qobj); qbool =3D qobject_to_qbool(qobj); @@ -527,7 +527,7 @@ static void test_visitor_in_alternate(TestInputVisitorD= ata *data, =20 v =3D visitor_input_test_init(data, "42"); visit_type_UserDefAlternate(v, NULL, &tmp, &error_abort); - g_assert_cmpint(tmp->type, =3D=3D, QTYPE_QINT); + g_assert_cmpint(tmp->type, =3D=3D, QTYPE_QNUM); g_assert_cmpint(tmp->u.i, =3D=3D, 42); qapi_free_UserDefAlternate(tmp); =20 @@ -555,7 +555,7 @@ static void test_visitor_in_alternate(TestInputVisitorD= ata *data, =20 v =3D visitor_input_test_init(data, "{ 'alt': 42 }"); visit_type_WrapAlternate(v, NULL, &wrap, &error_abort); - g_assert_cmpint(wrap->alt->type, =3D=3D, QTYPE_QINT); + g_assert_cmpint(wrap->alt->type, =3D=3D, QTYPE_QNUM); g_assert_cmpint(wrap->alt->u.i, =3D=3D, 42); qapi_free_WrapAlternate(wrap); =20 @@ -596,19 +596,19 @@ static void test_visitor_in_alternate_number(TestInpu= tVisitorData *data, =20 v =3D visitor_input_test_init(data, "42"); visit_type_AltStrNum(v, NULL, &asn, &error_abort); - g_assert_cmpint(asn->type, =3D=3D, QTYPE_QFLOAT); + g_assert_cmpint(asn->type, =3D=3D, QTYPE_QNUM); g_assert_cmpfloat(asn->u.n, =3D=3D, 42); qapi_free_AltStrNum(asn); =20 v =3D visitor_input_test_init(data, "42"); visit_type_AltNumStr(v, NULL, &ans, &error_abort); - g_assert_cmpint(ans->type, =3D=3D, QTYPE_QFLOAT); + g_assert_cmpint(ans->type, =3D=3D, QTYPE_QNUM); g_assert_cmpfloat(ans->u.n, =3D=3D, 42); qapi_free_AltNumStr(ans); =20 v =3D visitor_input_test_init(data, "42"); visit_type_AltStrInt(v, NULL, &asi, &error_abort); - g_assert_cmpint(asi->type, =3D=3D, QTYPE_QINT); + g_assert_cmpint(asi->type, =3D=3D, QTYPE_QNUM); g_assert_cmpint(asi->u.i, =3D=3D, 42); qapi_free_AltStrInt(asi); =20 @@ -621,13 +621,13 @@ static void test_visitor_in_alternate_number(TestInpu= tVisitorData *data, =20 v =3D visitor_input_test_init(data, "42.5"); visit_type_AltStrNum(v, NULL, &asn, &error_abort); - g_assert_cmpint(asn->type, =3D=3D, QTYPE_QFLOAT); + g_assert_cmpint(asn->type, =3D=3D, QTYPE_QNUM); g_assert_cmpfloat(asn->u.n, =3D=3D, 42.5); qapi_free_AltStrNum(asn); =20 v =3D visitor_input_test_init(data, "42.5"); visit_type_AltNumStr(v, NULL, &ans, &error_abort); - g_assert_cmpint(ans->type, =3D=3D, QTYPE_QFLOAT); + g_assert_cmpint(ans->type, =3D=3D, QTYPE_QNUM); g_assert_cmpfloat(ans->u.n, =3D=3D, 42.5); qapi_free_AltNumStr(ans); =20 diff --git a/tests/test-qobject-output-visitor.c b/tests/test-qobject-outpu= t-visitor.c index 94b9518e40..66a682d5a8 100644 --- a/tests/test-qobject-output-visitor.c +++ b/tests/test-qobject-output-visitor.c @@ -58,13 +58,13 @@ static void test_visitor_out_int(TestOutputVisitorData = *data, const void *unused) { int64_t value =3D -42; - QInt *qint; + QNum *qnum; =20 visit_type_int(data->ov, NULL, &value, &error_abort); =20 - qint =3D qobject_to_qint(visitor_get(data)); - g_assert(qint); - g_assert_cmpint(qint_get_int(qint), =3D=3D, value); + qnum =3D qobject_to_qnum(visitor_get(data)); + g_assert(qnum); + g_assert_cmpint(qnum_get_int(qnum, &error_abort), =3D=3D, value); } =20 static void test_visitor_out_bool(TestOutputVisitorData *data, @@ -84,13 +84,13 @@ static void test_visitor_out_number(TestOutputVisitorDa= ta *data, const void *unused) { double value =3D 3.14; - QFloat *qfloat; + QNum *qnum; =20 visit_type_number(data->ov, NULL, &value, &error_abort); =20 - qfloat =3D qobject_to_qfloat(visitor_get(data)); - g_assert(qfloat); - g_assert(qfloat_get_double(qfloat) =3D=3D value); + qnum =3D qobject_to_qnum(visitor_get(data)); + g_assert(qnum); + g_assert(qnum_get_double(qnum) =3D=3D value); } =20 static void test_visitor_out_string(TestOutputVisitorData *data, @@ -329,16 +329,16 @@ static void test_visitor_out_any(TestOutputVisitorDat= a *data, const void *unused) { QObject *qobj; - QInt *qint; + QNum *qnum; QBool *qbool; QString *qstring; QDict *qdict; =20 - qobj =3D QOBJECT(qint_from_int(-42)); + qobj =3D QOBJECT(qnum_from_int(-42)); visit_type_any(data->ov, NULL, &qobj, &error_abort); - qint =3D qobject_to_qint(visitor_get(data)); - g_assert(qint); - g_assert_cmpint(qint_get_int(qint), =3D=3D, -42); + qnum =3D qobject_to_qnum(visitor_get(data)); + g_assert(qnum); + g_assert_cmpint(qnum_get_int(qnum, &error_abort), =3D=3D, -42); qobject_decref(qobj); =20 visitor_reset(data); @@ -351,9 +351,9 @@ static void test_visitor_out_any(TestOutputVisitorData = *data, qobject_decref(qobj); qdict =3D qobject_to_qdict(visitor_get(data)); g_assert(qdict); - qint =3D qobject_to_qint(qdict_get(qdict, "integer")); - g_assert(qint); - g_assert_cmpint(qint_get_int(qint), =3D=3D, -42); + qnum =3D qobject_to_qnum(qdict_get(qdict, "integer")); + g_assert(qnum); + g_assert_cmpint(qnum_get_int(qnum, &error_abort), =3D=3D, -42); qbool =3D qobject_to_qbool(qdict_get(qdict, "boolean")); g_assert(qbool); g_assert(qbool_get_bool(qbool) =3D=3D true); @@ -388,18 +388,18 @@ static void test_visitor_out_alternate(TestOutputVisi= torData *data, const void *unused) { UserDefAlternate *tmp; - QInt *qint; + QNum *qnum; QString *qstr; QDict *qdict; =20 tmp =3D g_new0(UserDefAlternate, 1); - tmp->type =3D QTYPE_QINT; + tmp->type =3D QTYPE_QNUM; tmp->u.i =3D 42; =20 visit_type_UserDefAlternate(data->ov, NULL, &tmp, &error_abort); - qint =3D qobject_to_qint(visitor_get(data)); - g_assert(qint); - g_assert_cmpint(qint_get_int(qint), =3D=3D, 42); + qnum =3D qobject_to_qnum(visitor_get(data)); + g_assert(qnum); + g_assert_cmpint(qnum_get_int(qnum, &error_abort), =3D=3D, 42); =20 qapi_free_UserDefAlternate(tmp); =20 @@ -603,18 +603,18 @@ static void check_native_list(QObject *qobj, case USER_DEF_NATIVE_LIST_UNION_KIND_U16: case USER_DEF_NATIVE_LIST_UNION_KIND_U32: case USER_DEF_NATIVE_LIST_UNION_KIND_U64: - /* all integer elements in JSON arrays get stored into QInts when + /* all integer elements in JSON arrays get stored into QNums when * we convert to QObjects, so we can check them all in the same * fashion, so simply fall through here */ case USER_DEF_NATIVE_LIST_UNION_KIND_INTEGER: for (i =3D 0; i < 32; i++) { QObject *tmp; - QInt *qvalue; + QNum *qvalue; tmp =3D qlist_peek(qlist); g_assert(tmp); - qvalue =3D qobject_to_qint(tmp); - g_assert_cmpint(qint_get_int(qvalue), =3D=3D, i); + qvalue =3D qobject_to_qnum(tmp); + g_assert_cmpint(qnum_get_int(qvalue, &error_abort), =3D=3D, i); qobject_decref(qlist_pop(qlist)); } break; @@ -645,15 +645,15 @@ static void check_native_list(QObject *qobj, case USER_DEF_NATIVE_LIST_UNION_KIND_NUMBER: for (i =3D 0; i < 32; i++) { QObject *tmp; - QFloat *qvalue; + QNum *qvalue; GString *double_expected =3D g_string_new(""); GString *double_actual =3D g_string_new(""); =20 tmp =3D qlist_peek(qlist); g_assert(tmp); - qvalue =3D qobject_to_qfloat(tmp); + qvalue =3D qobject_to_qnum(tmp); g_string_printf(double_expected, "%.6f", (double)i / 3); - g_string_printf(double_actual, "%.6f", qfloat_get_double(qvalu= e)); + g_string_printf(double_actual, "%.6f", qnum_get_double(qvalue)= ); g_assert_cmpstr(double_actual->str, =3D=3D, double_expected->s= tr); =20 qobject_decref(qlist_pop(qlist)); diff --git a/tests/test-x86-cpuid-compat.c b/tests/test-x86-cpuid-compat.c index 79a2e69a28..60d168fda8 100644 --- a/tests/test-x86-cpuid-compat.c +++ b/tests/test-x86-cpuid-compat.c @@ -1,9 +1,7 @@ #include "qemu/osdep.h" #include "qemu-common.h" -#include "qapi/qmp/qlist.h" -#include "qapi/qmp/qdict.h" -#include "qapi/qmp/qint.h" -#include "qapi/qmp/qbool.h" +#include "qapi/error.h" +#include "qapi/qmp/types.h" #include "libqtest.h" =20 static char *get_cpu0_qom_path(void) @@ -56,12 +54,13 @@ static void test_cpuid_prop(const void *data) { const CpuidTestArgs *args =3D data; char *path; - QInt *value; + QNum *value; =20 qtest_start(args->cmdline); path =3D get_cpu0_qom_path(); - value =3D qobject_to_qint(qom_get(path, args->property)); - g_assert_cmpint(qint_get_int(value), =3D=3D, args->expected_value); + value =3D qobject_to_qnum(qom_get(path, args->property)); + g_assert_cmpint(qnum_get_int(value, &error_abort), =3D=3D, + args->expected_value); qtest_end(); =20 QDECREF(value); diff --git a/ui/spice-core.c b/ui/spice-core.c index 804abc5c0f..561d0649cf 100644 --- a/ui/spice-core.c +++ b/ui/spice-core.c @@ -30,7 +30,6 @@ #include "qemu-x509.h" #include "qemu/sockets.h" #include "qmp-commands.h" -#include "qapi/qmp/qint.h" #include "qapi/qmp/qbool.h" #include "qapi/qmp/qstring.h" #include "qapi/qmp/qjson.h" diff --git a/ui/vnc-enc-tight.c b/ui/vnc-enc-tight.c index 1e53b1cf84..89ab12c0d8 100644 --- a/ui/vnc-enc-tight.c +++ b/ui/vnc-enc-tight.c @@ -44,7 +44,6 @@ #endif =20 #include "qemu/bswap.h" -#include "qapi/qmp/qint.h" #include "vnc.h" #include "vnc-enc-tight.h" #include "vnc-palette.h" diff --git a/util/qemu-option.c b/util/qemu-option.c index 5977bfc3e9..39b1e06225 100644 --- a/util/qemu-option.c +++ b/util/qemu-option.c @@ -941,9 +941,8 @@ typedef struct OptsFromQDictState { static void qemu_opts_from_qdict_1(const char *key, QObject *obj, void *op= aque) { OptsFromQDictState *state =3D opaque; - char buf[32]; + char buf[32], *tmp =3D NULL; const char *value; - int n; =20 if (!strcmp(key, "id") || *state->errp) { return; @@ -953,17 +952,9 @@ static void qemu_opts_from_qdict_1(const char *key, QO= bject *obj, void *opaque) case QTYPE_QSTRING: value =3D qstring_get_str(qobject_to_qstring(obj)); break; - case QTYPE_QINT: - n =3D snprintf(buf, sizeof(buf), "%" PRId64, - qint_get_int(qobject_to_qint(obj))); - assert(n < sizeof(buf)); - value =3D buf; - break; - case QTYPE_QFLOAT: - n =3D snprintf(buf, sizeof(buf), "%.17g", - qfloat_get_double(qobject_to_qfloat(obj))); - assert(n < sizeof(buf)); - value =3D buf; + case QTYPE_QNUM: + tmp =3D qnum_to_string(qobject_to_qnum(obj)); + value =3D tmp; break; case QTYPE_QBOOL: pstrcpy(buf, sizeof(buf), @@ -975,12 +966,13 @@ static void qemu_opts_from_qdict_1(const char *key, Q= Object *obj, void *opaque) } =20 qemu_opt_set(state->opts, key, value, state->errp); + g_free(tmp); } =20 /* * Create QemuOpts from a QDict. * Use value of key "id" as ID if it exists and is a QString. - * Only QStrings, QInts, QFloats and QBools are copied. Entries with + * Only QStrings, QNums and QBools are copied. Entries with * other types are silently ignored. */ QemuOpts *qemu_opts_from_qdict(QemuOptsList *list, const QDict *qdict, diff --git a/MAINTAINERS b/MAINTAINERS index 66c9734311..421fb585ae 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1395,8 +1395,7 @@ F: include/qapi/qmp/ X: include/qapi/qmp/dispatch.h F: scripts/coccinelle/qobject.cocci F: tests/check-qdict.c -F: tests/check-qfloat.c -F: tests/check-qint.c +F: tests/check-qnum.c F: tests/check-qjson.c F: tests/check-qlist.c F: tests/check-qstring.c diff --git a/qobject/Makefile.objs b/qobject/Makefile.objs index bed55084bb..fc8885c9a4 100644 --- a/qobject/Makefile.objs +++ b/qobject/Makefile.objs @@ -1,2 +1,2 @@ -util-obj-y =3D qnull.o qint.o qstring.o qdict.o qlist.o qfloat.o qbool.o +util-obj-y =3D qnull.o qnum.o qstring.o qdict.o qlist.o qbool.o util-obj-y +=3D qjson.o qobject.o json-lexer.o json-streamer.o json-parser= .o diff --git a/scripts/coccinelle/qobject.cocci b/scripts/coccinelle/qobject.= cocci index 97703a438b..c3253deb1b 100644 --- a/scripts/coccinelle/qobject.cocci +++ b/scripts/coccinelle/qobject.cocci @@ -6,7 +6,7 @@ expression Obj, Key, E; - qdict_put_obj(Obj, Key, QOBJECT(E)); + qdict_put(Obj, Key, E); | -- qdict_put(Obj, Key, qint_from_int(E)); +- qdict_put(Obj, Key, qnum_from_int(E)); + qdict_put_int(Obj, Key, E); | - qdict_put(Obj, Key, qbool_from_bool(E)); @@ -24,7 +24,7 @@ expression Obj, E; - qlist_append_obj(Obj, QOBJECT(E)); + qlist_append(Obj, E); | -- qlist_append(Obj, qint_from_int(E)); +- qlist_append(Obj, qnum_from_int(E)); + qlist_append_int(Obj, E); | - qlist_append(Obj, qbool_from_bool(E)); diff --git a/tests/.gitignore b/tests/.gitignore index a966740c2c..847f4f1474 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1,7 +1,6 @@ atomic_add-bench check-qdict -check-qfloat -check-qint +check-qnum check-qjson check-qlist check-qnull diff --git a/tests/Makefile.include b/tests/Makefile.include index 31931c0d77..ac0387d88a 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -10,10 +10,8 @@ check-unit-y =3D tests/check-qdict$(EXESUF) gcov-files-check-qdict-y =3D qobject/qdict.c check-unit-y +=3D tests/test-char$(EXESUF) gcov-files-check-qdict-y =3D chardev/char.c -check-unit-y +=3D tests/check-qfloat$(EXESUF) -gcov-files-check-qfloat-y =3D qobject/qfloat.c -check-unit-y +=3D tests/check-qint$(EXESUF) -gcov-files-check-qint-y =3D qobject/qint.c +check-unit-y +=3D tests/check-qnum$(EXESUF) +gcov-files-check-qnum-y =3D qobject/qnum.c check-unit-y +=3D tests/check-qstring$(EXESUF) gcov-files-check-qstring-y =3D qobject/qstring.c check-unit-y +=3D tests/check-qlist$(EXESUF) @@ -500,8 +498,8 @@ GENERATED_FILES +=3D tests/test-qapi-types.h tests/test= -qapi-visit.h \ tests/test-qmp-commands.h tests/test-qapi-event.h \ tests/test-qmp-introspect.h =20 -test-obj-y =3D tests/check-qint.o tests/check-qstring.o tests/check-qdict.= o \ - tests/check-qlist.o tests/check-qfloat.o tests/check-qnull.o \ +test-obj-y =3D tests/check-qnum.o tests/check-qstring.o tests/check-qdict.= o \ + tests/check-qlist.o tests/check-qnull.o \ tests/check-qjson.o \ tests/test-coroutine.o tests/test-string-output-visitor.o \ tests/test-string-input-visitor.o tests/test-qobject-output-visitor.o \ @@ -529,11 +527,10 @@ test-crypto-obj-y =3D $(crypto-obj-y) $(test-qom-obj-= y) test-io-obj-y =3D $(io-obj-y) $(test-crypto-obj-y) test-block-obj-y =3D $(block-obj-y) $(test-io-obj-y) tests/iothread.o =20 -tests/check-qint$(EXESUF): tests/check-qint.o $(test-util-obj-y) +tests/check-qnum$(EXESUF): tests/check-qnum.o $(test-util-obj-y) tests/check-qstring$(EXESUF): tests/check-qstring.o $(test-util-obj-y) tests/check-qdict$(EXESUF): tests/check-qdict.o $(test-util-obj-y) tests/check-qlist$(EXESUF): tests/check-qlist.o $(test-util-obj-y) -tests/check-qfloat$(EXESUF): tests/check-qfloat.o $(test-util-obj-y) tests/check-qnull$(EXESUF): tests/check-qnull.o $(test-util-obj-y) tests/check-qjson$(EXESUF): tests/check-qjson.o $(test-util-obj-y) tests/check-qom-interface$(EXESUF): tests/check-qom-interface.o $(test-qom= -obj-y) diff --git a/tests/qapi-schema/comments.out b/tests/qapi-schema/comments.out index 5d7c13cad1..17e652535c 100644 --- a/tests/qapi-schema/comments.out +++ b/tests/qapi-schema/comments.out @@ -1,4 +1,4 @@ -enum QType ['none', 'qnull', 'qint', 'qstring', 'qdict', 'qlist', 'qfloat'= , 'qbool'] +enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] prefix QTYPE enum Status ['good', 'bad', 'ugly'] object q_empty diff --git a/tests/qapi-schema/doc-good.out b/tests/qapi-schema/doc-good.out index 70c1252408..63ca25a8b9 100644 --- a/tests/qapi-schema/doc-good.out +++ b/tests/qapi-schema/doc-good.out @@ -6,7 +6,7 @@ object Object tag base1 case one: Variant1 case two: Variant2 -enum QType ['none', 'qnull', 'qint', 'qstring', 'qdict', 'qlist', 'qfloat'= , 'qbool'] +enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] prefix QTYPE object SugaredUnion member type: SugaredUnionKind optional=3DFalse diff --git a/tests/qapi-schema/empty.out b/tests/qapi-schema/empty.out index 8a5b034424..40b886ddae 100644 --- a/tests/qapi-schema/empty.out +++ b/tests/qapi-schema/empty.out @@ -1,3 +1,3 @@ -enum QType ['none', 'qnull', 'qint', 'qstring', 'qdict', 'qlist', 'qfloat'= , 'qbool'] +enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] prefix QTYPE object q_empty diff --git a/tests/qapi-schema/event-case.out b/tests/qapi-schema/event-cas= e.out index 5a0f2bf805..313c0fe7be 100644 --- a/tests/qapi-schema/event-case.out +++ b/tests/qapi-schema/event-case.out @@ -1,4 +1,4 @@ -enum QType ['none', 'qnull', 'qint', 'qstring', 'qdict', 'qlist', 'qfloat'= , 'qbool'] +enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] prefix QTYPE event oops None boxed=3DFalse diff --git a/tests/qapi-schema/ident-with-escape.out b/tests/qapi-schema/id= ent-with-escape.out index 1d2722c02e..b5637cb2e0 100644 --- a/tests/qapi-schema/ident-with-escape.out +++ b/tests/qapi-schema/ident-with-escape.out @@ -1,4 +1,4 @@ -enum QType ['none', 'qnull', 'qint', 'qstring', 'qdict', 'qlist', 'qfloat'= , 'qbool'] +enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] prefix QTYPE command fooA q_obj_fooA-arg -> None gen=3DTrue success_response=3DTrue boxed=3DFalse diff --git a/tests/qapi-schema/include-relpath.out b/tests/qapi-schema/incl= ude-relpath.out index 5d7c13cad1..17e652535c 100644 --- a/tests/qapi-schema/include-relpath.out +++ b/tests/qapi-schema/include-relpath.out @@ -1,4 +1,4 @@ -enum QType ['none', 'qnull', 'qint', 'qstring', 'qdict', 'qlist', 'qfloat'= , 'qbool'] +enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] prefix QTYPE enum Status ['good', 'bad', 'ugly'] object q_empty diff --git a/tests/qapi-schema/include-repetition.out b/tests/qapi-schema/i= nclude-repetition.out index 5d7c13cad1..17e652535c 100644 --- a/tests/qapi-schema/include-repetition.out +++ b/tests/qapi-schema/include-repetition.out @@ -1,4 +1,4 @@ -enum QType ['none', 'qnull', 'qint', 'qstring', 'qdict', 'qlist', 'qfloat'= , 'qbool'] +enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] prefix QTYPE enum Status ['good', 'bad', 'ugly'] object q_empty diff --git a/tests/qapi-schema/include-simple.out b/tests/qapi-schema/inclu= de-simple.out index 5d7c13cad1..17e652535c 100644 --- a/tests/qapi-schema/include-simple.out +++ b/tests/qapi-schema/include-simple.out @@ -1,4 +1,4 @@ -enum QType ['none', 'qnull', 'qint', 'qstring', 'qdict', 'qlist', 'qfloat'= , 'qbool'] +enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] prefix QTYPE enum Status ['good', 'bad', 'ugly'] object q_empty diff --git a/tests/qapi-schema/indented-expr.out b/tests/qapi-schema/indent= ed-expr.out index e8171c935f..586795f44d 100644 --- a/tests/qapi-schema/indented-expr.out +++ b/tests/qapi-schema/indented-expr.out @@ -1,4 +1,4 @@ -enum QType ['none', 'qnull', 'qint', 'qstring', 'qdict', 'qlist', 'qfloat'= , 'qbool'] +enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] prefix QTYPE command eins None -> None gen=3DTrue success_response=3DTrue boxed=3DFalse diff --git a/tests/qapi-schema/qapi-schema-test.out b/tests/qapi-schema/qap= i-schema-test.out index 5c6655a5c3..7812a6c69b 100644 --- a/tests/qapi-schema/qapi-schema-test.out +++ b/tests/qapi-schema/qapi-schema-test.out @@ -46,7 +46,7 @@ object NestedEnumsOne member enum4: EnumOne optional=3DTrue enum QEnumTwo ['value1', 'value2'] prefix QENUM_TWO -enum QType ['none', 'qnull', 'qint', 'qstring', 'qdict', 'qlist', 'qfloat'= , 'qbool'] +enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool'] prefix QTYPE object TestStruct member integer: int optional=3DFalse --=20 2.13.0.rc1.16.gd80b50c3f From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494351661744488.9916184807055; Tue, 9 May 2017 10:41:01 -0700 (PDT) Received: from localhost ([::1]:38651 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d8987-00018P-1G for importer@patchew.org; Tue, 09 May 2017 13:40:59 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45442) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d895A-0006fb-Sq for qemu-devel@nongnu.org; Tue, 09 May 2017 13:38:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d8955-00048g-FH for qemu-devel@nongnu.org; Tue, 09 May 2017 13:37:56 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51562) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d8955-00047N-65 for qemu-devel@nongnu.org; Tue, 09 May 2017 13:37:51 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2C13861BA5 for ; Tue, 9 May 2017 17:37:50 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id B0C8E60BEB; Tue, 9 May 2017 17:37:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 2C13861BA5 Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 2C13861BA5 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:47 +0300 Message-Id: <20170509173559.31598-6-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 09 May 2017 17:37:50 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 05/17] qapi: remove promote_int X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" qnum_to_double() implicity promotes int now. Signed-off-by: Marc-Andr=C3=A9 Lureau --- include/qapi/visitor.h | 4 +--- include/qapi/visitor-impl.h | 2 +- scripts/qapi-visit.py | 12 +++--------- qapi/qapi-visit-core.c | 6 +++--- qapi/qapi-clone-visitor.c | 2 +- qapi/qapi-dealloc-visitor.c | 2 +- qapi/qobject-input-visitor.c | 2 +- tests/test-qobject-input-visitor.c | 2 +- qapi/trace-events | 2 +- 9 files changed, 13 insertions(+), 21 deletions(-) diff --git a/include/qapi/visitor.h b/include/qapi/visitor.h index b0e233df76..0caed24942 100644 --- a/include/qapi/visitor.h +++ b/include/qapi/visitor.h @@ -410,15 +410,13 @@ void visit_end_list(Visitor *v, void **list); * the qtype of the next thing to be visited, stored in (*@obj)->type. * Other visitors will leave @obj unchanged. * - * If @promote_int, treat integers as QTYPE_FLOAT. - * * If successful, this must be paired with visit_end_alternate() with * the same @obj to clean up, even if visiting the contents of the * alternate fails. */ void visit_start_alternate(Visitor *v, const char *name, GenericAlternate **obj, size_t size, - bool promote_int, Error **errp); + Error **errp); =20 /* * Finish visiting an alternate type. diff --git a/include/qapi/visitor-impl.h b/include/qapi/visitor-impl.h index e87709db5c..dcd656ab76 100644 --- a/include/qapi/visitor-impl.h +++ b/include/qapi/visitor-impl.h @@ -71,7 +71,7 @@ struct Visitor * optional for output visitors. */ void (*start_alternate)(Visitor *v, const char *name, GenericAlternate **obj, size_t size, - bool promote_int, Error **errp); + Error **errp); =20 /* Optional, needed for dealloc visitor */ void (*end_alternate)(Visitor *v, void **obj); diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py index cc447ecacc..bd0b742236 100644 --- a/scripts/qapi-visit.py +++ b/scripts/qapi-visit.py @@ -161,20 +161,14 @@ void visit_type_%(c_name)s(Visitor *v, const char *na= me, %(c_name)s *obj, Error =20 =20 def gen_visit_alternate(name, variants): - promote_int =3D 'true' - ret =3D '' - for var in variants.variants: - if var.type.alternate_qtype() =3D=3D 'QTYPE_QNUM': - promote_int =3D 'false' - - ret +=3D mcgen(''' + ret =3D mcgen(''' =20 void visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s **obj,= Error **errp) { Error *err =3D NULL; =20 visit_start_alternate(v, name, (GenericAlternate **)obj, sizeof(**obj), - %(promote_int)s, &err); + &err); if (err) { goto out; } @@ -183,7 +177,7 @@ void visit_type_%(c_name)s(Visitor *v, const char *name= , %(c_name)s **obj, Error } switch ((*obj)->type) { ''', - c_name=3Dc_name(name), promote_int=3Dpromote_int) + c_name=3Dc_name(name)) =20 for var in variants.variants: ret +=3D mcgen(''' diff --git a/qapi/qapi-visit-core.c b/qapi/qapi-visit-core.c index 43a09d147d..935a2c5bc9 100644 --- a/qapi/qapi-visit-core.c +++ b/qapi/qapi-visit-core.c @@ -106,15 +106,15 @@ void visit_end_list(Visitor *v, void **obj) =20 void visit_start_alternate(Visitor *v, const char *name, GenericAlternate **obj, size_t size, - bool promote_int, Error **errp) + Error **errp) { Error *err =3D NULL; =20 assert(obj && size >=3D sizeof(GenericAlternate)); assert(!(v->type & VISITOR_OUTPUT) || *obj); - trace_visit_start_alternate(v, name, obj, size, promote_int); + trace_visit_start_alternate(v, name, obj, size); if (v->start_alternate) { - v->start_alternate(v, name, obj, size, promote_int, &err); + v->start_alternate(v, name, obj, size, &err); } if (v->type & VISITOR_INPUT) { assert(v->start_alternate && !err !=3D !*obj); diff --git a/qapi/qapi-clone-visitor.c b/qapi/qapi-clone-visitor.c index de756bfb33..ed16d3a17f 100644 --- a/qapi/qapi-clone-visitor.c +++ b/qapi/qapi-clone-visitor.c @@ -70,7 +70,7 @@ static GenericList *qapi_clone_next_list(Visitor *v, Gene= ricList *tail, =20 static void qapi_clone_start_alternate(Visitor *v, const char *name, GenericAlternate **obj, size_t size, - bool promote_int, Error **errp) + Error **errp) { qapi_clone_start_struct(v, name, (void **)obj, size, errp); } diff --git a/qapi/qapi-dealloc-visitor.c b/qapi/qapi-dealloc-visitor.c index e39457bc79..fd6f9fb61c 100644 --- a/qapi/qapi-dealloc-visitor.c +++ b/qapi/qapi-dealloc-visitor.c @@ -38,7 +38,7 @@ static void qapi_dealloc_end_struct(Visitor *v, void **ob= j) =20 static void qapi_dealloc_start_alternate(Visitor *v, const char *name, GenericAlternate **obj, size_t si= ze, - bool promote_int, Error **errp) + Error **errp) { } =20 diff --git a/qapi/qobject-input-visitor.c b/qapi/qobject-input-visitor.c index 78425a4369..785949ebab 100644 --- a/qapi/qobject-input-visitor.c +++ b/qapi/qobject-input-visitor.c @@ -366,7 +366,7 @@ static void qobject_input_end_list(Visitor *v, void **o= bj) =20 static void qobject_input_start_alternate(Visitor *v, const char *name, GenericAlternate **obj, size_t s= ize, - bool promote_int, Error **errp) + Error **errp) { QObjectInputVisitor *qiv =3D to_qiv(v); QObject *qobj =3D qobject_input_get_object(qiv, name, false, errp); diff --git a/tests/test-qobject-input-visitor.c b/tests/test-qobject-input-= visitor.c index 4484980969..5df62c4f9e 100644 --- a/tests/test-qobject-input-visitor.c +++ b/tests/test-qobject-input-visitor.c @@ -1060,7 +1060,7 @@ static void test_visitor_in_fail_struct_missing(TestI= nputVisitorData *data, error_free_or_abort(&err); visit_start_list(v, "list", NULL, 0, &err); error_free_or_abort(&err); - visit_start_alternate(v, "alternate", &alt, sizeof(*alt), false, &err); + visit_start_alternate(v, "alternate", &alt, sizeof(*alt), &err); error_free_or_abort(&err); visit_optional(v, "optional", &present); g_assert(!present); diff --git a/qapi/trace-events b/qapi/trace-events index 339cacf0ad..3b57abaa37 100644 --- a/qapi/trace-events +++ b/qapi/trace-events @@ -11,7 +11,7 @@ visit_next_list(void *v, void *tail, size_t size) "v=3D%p= tail=3D%p size=3D%zu" visit_check_list(void *v) "v=3D%p" visit_end_list(void *v, void *obj) "v=3D%p obj=3D%p" =20 -visit_start_alternate(void *v, const char *name, void *obj, size_t size, b= ool promote_int) "v=3D%p name=3D%s obj=3D%p size=3D%zu promote_int=3D%d" +visit_start_alternate(void *v, const char *name, void *obj, size_t size) "= v=3D%p name=3D%s obj=3D%p size=3D%zu" visit_end_alternate(void *v, void *obj) "v=3D%p obj=3D%p" =20 visit_optional(void *v, const char *name, bool *present) "v=3D%p name=3D%s= present=3D%p" --=20 2.13.0.rc1.16.gd80b50c3f From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494351890410854.972768044379; Tue, 9 May 2017 10:44:50 -0700 (PDT) Received: from localhost ([::1]:38666 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d89Bn-0004jX-Cw for importer@patchew.org; Tue, 09 May 2017 13:44:47 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45490) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d895K-0006t9-0F for qemu-devel@nongnu.org; Tue, 09 May 2017 13:38:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d895I-0004I1-Tf for qemu-devel@nongnu.org; Tue, 09 May 2017 13:38:06 -0400 Received: from mx1.redhat.com ([209.132.183.28]:43816) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d895I-0004Hs-FA for qemu-devel@nongnu.org; Tue, 09 May 2017 13:38:04 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6E46EC04B94F for ; Tue, 9 May 2017 17:38:03 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0234D784D8; Tue, 9 May 2017 17:37:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 6E46EC04B94F Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 6E46EC04B94F From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:48 +0300 Message-Id: <20170509173559.31598-7-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 09 May 2017 17:38:03 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 06/17] qnum: add uint type X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" In order to store integer values superior to INT64_MAX, add a u64 internal representation. Signed-off-by: Marc-Andr=C3=A9 Lureau --- include/qapi/qmp/qnum.h | 4 ++++ qobject/qnum.c | 49 +++++++++++++++++++++++++++++++++++++++++++++= ++ tests/check-qnum.c | 51 +++++++++++++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 104 insertions(+) diff --git a/include/qapi/qmp/qnum.h b/include/qapi/qmp/qnum.h index 0e51427821..89c14e040f 100644 --- a/include/qapi/qmp/qnum.h +++ b/include/qapi/qmp/qnum.h @@ -17,6 +17,7 @@ =20 typedef enum { QNUM_I64, + QNUM_U64, QNUM_DOUBLE } QNumType; =20 @@ -25,14 +26,17 @@ typedef struct QNum { QNumType type; union { int64_t i64; + uint64_t u64; double dbl; } u; } QNum; =20 QNum *qnum_from_int(int64_t value); +QNum *qnum_from_uint(uint64_t value); QNum *qnum_from_double(double value); =20 int64_t qnum_get_int(const QNum *qi, Error **errp); +uint64_t qnum_get_uint(const QNum *qi, Error **errp); double qnum_get_double(QNum *qn); =20 char *qnum_to_string(QNum *qn); diff --git a/qobject/qnum.c b/qobject/qnum.c index 8e9dd38350..be6307accf 100644 --- a/qobject/qnum.c +++ b/qobject/qnum.c @@ -13,6 +13,7 @@ =20 #include "qemu/osdep.h" #include "qapi/error.h" +#include "qemu/error-report.h" #include "qapi/qmp/qnum.h" #include "qapi/qmp/qobject.h" #include "qemu-common.h" @@ -34,6 +35,22 @@ QNum *qnum_from_int(int64_t value) } =20 /** + * qnum_from_uint(): Create a new QNum from an uint64_t + * + * Return strong reference. + */ +QNum *qnum_from_uint(uint64_t value) +{ + QNum *qn =3D g_new(QNum, 1); + + qobject_init(QOBJECT(qn), QTYPE_QNUM); + qn->type =3D QNUM_U64; + qn->u.u64 =3D value; + + return qn; +} + +/** * qnum_from_double(): Create a new QNum from a double * * Return strong reference. @@ -57,6 +74,34 @@ int64_t qnum_get_int(const QNum *qn, Error **errp) switch (qn->type) { case QNUM_I64: return qn->u.i64; + case QNUM_U64: + if (qn->u.u64 > INT64_MAX) { + error_setg(errp, "The number is too large, use qnum_get_uint()= "); + return 0; + } + return qn->u.u64; + case QNUM_DOUBLE: + error_setg(errp, "The number is a float"); + return 0; + } + + g_assert_not_reached(); +} + +/** + * qnum_get_uint(): Get an unsigned integer from the number + */ +uint64_t qnum_get_uint(const QNum *qn, Error **errp) +{ + switch (qn->type) { + case QNUM_I64: + if (qn->u.i64 < 0) { + error_setg(errp, "The number is negative"); + return 0; + } + return qn->u.i64; + case QNUM_U64: + return qn->u.u64; case QNUM_DOUBLE: error_setg(errp, "The number is a float"); return 0; @@ -73,6 +118,8 @@ double qnum_get_double(QNum *qn) switch (qn->type) { case QNUM_I64: return qn->u.i64; + case QNUM_U64: + return qn->u.u64; case QNUM_DOUBLE: return qn->u.dbl; } @@ -88,6 +135,8 @@ char *qnum_to_string(QNum *qn) switch (qn->type) { case QNUM_I64: return g_strdup_printf("%" PRId64, qn->u.i64); + case QNUM_U64: + return g_strdup_printf("%" PRIu64, qn->u.u64); case QNUM_DOUBLE: /* FIXME: snprintf() is locale dependent; but JSON requires * numbers to be formatted as if in the C locale. Dependence diff --git a/tests/check-qnum.c b/tests/check-qnum.c index d08d35e85a..8199546f99 100644 --- a/tests/check-qnum.c +++ b/tests/check-qnum.c @@ -36,6 +36,21 @@ static void qnum_from_int_test(void) g_free(qi); } =20 +static void qnum_from_uint_test(void) +{ + QNum *qu; + const int value =3D UINT_MAX; + + qu =3D qnum_from_int(value); + g_assert(qu !=3D NULL); + g_assert(qu->u.u64 =3D=3D value); + g_assert(qu->base.refcnt =3D=3D 1); + g_assert(qobject_type(QOBJECT(qu)) =3D=3D QTYPE_QNUM); + + // destroy doesn't exit yet + g_free(qu); +} + static void qnum_from_double_test(void) { QNum *qf; @@ -73,6 +88,37 @@ static void qnum_get_int_test(void) QDECREF(qi); } =20 +static void qnum_get_uint_test(void) +{ + QNum *qn; + const int value =3D 123456; + Error *err =3D NULL; + + qn =3D qnum_from_uint(value); + g_assert(qnum_get_uint(qn, &error_abort) =3D=3D value); + QDECREF(qn); + + qn =3D qnum_from_int(value); + g_assert(qnum_get_uint(qn, &error_abort) =3D=3D value); + QDECREF(qn); + + qn =3D qnum_from_int(-1); + qnum_get_uint(qn, &err); + error_free_or_abort(&err); + QDECREF(qn); + + qn =3D qnum_from_uint(-1ULL); + qnum_get_int(qn, &err); + error_free_or_abort(&err); + QDECREF(qn); + + /* invalid case */ + qn =3D qnum_from_double(0.42); + qnum_get_uint(qn, &err); + error_free_or_abort(&err); + QDECREF(qn); +} + static void qobject_to_qnum_test(void) { QNum *qn; @@ -111,6 +157,9 @@ static void qnum_destroy_test(void) qn =3D qnum_from_int(0); QDECREF(qn); =20 + qn =3D qnum_from_uint(0); + QDECREF(qn); + qn =3D qnum_from_double(0.42); QDECREF(qn); } @@ -120,10 +169,12 @@ int main(int argc, char **argv) g_test_init(&argc, &argv, NULL); =20 g_test_add_func("/qnum/from_int", qnum_from_int_test); + g_test_add_func("/qnum/from_uint", qnum_from_uint_test); g_test_add_func("/qnum/from_double", qnum_from_double_test); g_test_add_func("/qnum/destroy", qnum_destroy_test); g_test_add_func("/qnum/from_int64", qnum_from_int64_test); g_test_add_func("/qnum/get_int", qnum_get_int_test); + g_test_add_func("/qnum/get_uint", qnum_get_uint_test); g_test_add_func("/qnum/to_qnum", qobject_to_qnum_test); g_test_add_func("/qnum/to_string", qnum_to_string_test); =20 --=20 2.13.0.rc1.16.gd80b50c3f From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494352044800955.9552940791533; Tue, 9 May 2017 10:47:24 -0700 (PDT) Received: from localhost ([::1]:38680 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d89EI-00076C-8K for importer@patchew.org; Tue, 09 May 2017 13:47:22 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45571) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d895e-0007Fg-26 for qemu-devel@nongnu.org; Tue, 09 May 2017 13:38:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d895Z-0004Jm-4C for qemu-devel@nongnu.org; Tue, 09 May 2017 13:38:26 -0400 Received: from mx1.redhat.com ([209.132.183.28]:52724) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d895Y-0004JR-SI for qemu-devel@nongnu.org; Tue, 09 May 2017 13:38:21 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B57E77F7DD for ; Tue, 9 May 2017 17:38:19 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7D8E9783D5; Tue, 9 May 2017 17:38:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com B57E77F7DD Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com B57E77F7DD From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:49 +0300 Message-Id: <20170509173559.31598-8-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Tue, 09 May 2017 17:38:19 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 07/17] json: learn to parse uint64 numbers X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Switch strtoll() usage to qemu_strtoi64() helper while at it. Replace temporarily the error in qnum_get_int() with values >INT64_MAX until the visitor is updated. Add a few tests for large numbers. Signed-off-by: Marc-Andr=C3=A9 Lureau --- qobject/json-lexer.c | 4 ++++ qobject/json-parser.c | 30 ++++++++++++++++++++++-------- qobject/qnum.c | 4 ++-- tests/check-qjson.c | 28 ++++++++++++++++++++++++++++ tests/check-qnum.c | 9 +++++---- tests/test-qobject-input-visitor.c | 7 ++----- 6 files changed, 63 insertions(+), 19 deletions(-) diff --git a/qobject/json-lexer.c b/qobject/json-lexer.c index af4a75e05b..a0beb0b106 100644 --- a/qobject/json-lexer.c +++ b/qobject/json-lexer.c @@ -227,15 +227,18 @@ static const uint8_t json_lexer[][256] =3D { /* escape */ [IN_ESCAPE_LL] =3D { ['d'] =3D JSON_ESCAPE, + ['u'] =3D JSON_ESCAPE, }, =20 [IN_ESCAPE_L] =3D { ['d'] =3D JSON_ESCAPE, + ['u'] =3D JSON_ESCAPE, ['l'] =3D IN_ESCAPE_LL, }, =20 [IN_ESCAPE_I64] =3D { ['d'] =3D JSON_ESCAPE, + ['u'] =3D JSON_ESCAPE, }, =20 [IN_ESCAPE_I6] =3D { @@ -247,6 +250,7 @@ static const uint8_t json_lexer[][256] =3D { }, =20 [IN_ESCAPE] =3D { + ['u'] =3D JSON_ESCAPE, ['d'] =3D JSON_ESCAPE, ['i'] =3D JSON_ESCAPE, ['p'] =3D JSON_ESCAPE, diff --git a/qobject/json-parser.c b/qobject/json-parser.c index f431854ba1..fa15c762d3 100644 --- a/qobject/json-parser.c +++ b/qobject/json-parser.c @@ -12,6 +12,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/cutils.h" #include "qapi/error.h" #include "qemu-common.h" #include "qapi/qmp/types.h" @@ -472,6 +473,13 @@ static QObject *parse_escape(JSONParserContext *ctxt, = va_list *ap) } else if (!strcmp(token->str, "%lld") || !strcmp(token->str, "%I64d")) { return QOBJECT(qnum_from_int(va_arg(*ap, long long))); + } else if (!strcmp(token->str, "%u")) { + return QOBJECT(qnum_from_uint(va_arg(*ap, unsigned int))); + } else if (!strcmp(token->str, "%lu")) { + return QOBJECT(qnum_from_uint(va_arg(*ap, unsigned long))); + } else if (!strcmp(token->str, "%llu") || + !strcmp(token->str, "%I64u")) { + return QOBJECT(qnum_from_uint(va_arg(*ap, unsigned long long))); } else if (!strcmp(token->str, "%s")) { return QOBJECT(qstring_from_str(va_arg(*ap, const char *))); } else if (!strcmp(token->str, "%f")) { @@ -494,22 +502,28 @@ static QObject *parse_literal(JSONParserContext *ctxt) /* A possibility exists that this is a whole-valued float where the * fractional part was left out due to being 0 (.0). It's not a big * deal to treat these as ints in the parser, so long as users of = the - * resulting QObject know to expect a QNum in place of a QNum in - * cases like these. + * resulting QObject know to expect a QNum that will handle + * implicit conversions to the expected type. * - * However, in some cases these values will overflow/underflow a - * QNum/int64 container, thus we should assume these are to be han= dled - * as QNums/doubles rather than silently changing their values. + * However, in some cases these values will overflow/underflow + * a QNum/int64 container, thus we should assume these are to + * be handled as QNum/uint64 or QNums/doubles rather than + * silently changing their values. * - * strtoll() indicates these instances by setting errno to ERANGE + * qemu_strto*() indicates these instances by setting errno to ERA= NGE */ int64_t value; + uint64_t uvalue; =20 - errno =3D 0; /* strtoll doesn't set errno on success */ - value =3D strtoll(token->str, NULL, 10); + qemu_strtoi64(token->str, NULL, 10, &value); if (errno !=3D ERANGE) { return QOBJECT(qnum_from_int(value)); } + + qemu_strtou64(token->str, NULL, 10, &uvalue); + if (errno !=3D ERANGE) { + return QOBJECT(qnum_from_uint(uvalue)); + } /* fall through to JSON_FLOAT */ } case JSON_FLOAT: diff --git a/qobject/qnum.c b/qobject/qnum.c index be6307accf..2f87952db8 100644 --- a/qobject/qnum.c +++ b/qobject/qnum.c @@ -76,8 +76,8 @@ int64_t qnum_get_int(const QNum *qn, Error **errp) return qn->u.i64; case QNUM_U64: if (qn->u.u64 > INT64_MAX) { - error_setg(errp, "The number is too large, use qnum_get_uint()= "); - return 0; + /* temporarily accepts to cast to i64 until visitor is switche= d */ + error_report("The number is too large, use qnum_get_uint()"); } return qn->u.u64; case QNUM_DOUBLE: diff --git a/tests/check-qjson.c b/tests/check-qjson.c index c432aebf13..57c2366dc3 100644 --- a/tests/check-qjson.c +++ b/tests/check-qjson.c @@ -904,6 +904,33 @@ static void simple_number(void) } } =20 +static void large_number(void) +{ + const char *maxu64 =3D "18446744073709551615"; /* 2^64-1 */ + const char *gtu64 =3D "18446744073709551616"; /* 2^64 */ + QNum *qnum; + QString *str; + + qnum =3D qobject_to_qnum(qobject_from_json(maxu64, &error_abort)); + g_assert(qnum); + g_assert_cmpuint(qnum_get_uint(qnum, &error_abort), + =3D=3D, 18446744073709551615U); + + str =3D qobject_to_json(QOBJECT(qnum)); + g_assert_cmpstr(qstring_get_str(str), =3D=3D, maxu64); + QDECREF(str); + QDECREF(qnum); + + qnum =3D qobject_to_qnum(qobject_from_json(gtu64, &error_abort)); + g_assert(qnum); + g_assert_cmpfloat(qnum_get_double(qnum), =3D=3D, 18446744073709551616.= 0); + + str =3D qobject_to_json(QOBJECT(qnum)); + g_assert_cmpstr(qstring_get_str(str), =3D=3D, gtu64); + QDECREF(str); + QDECREF(qnum); +} + static void float_number(void) { int i; @@ -1468,6 +1495,7 @@ int main(int argc, char **argv) g_test_add_func("/literals/string/vararg", vararg_string); =20 g_test_add_func("/literals/number/simple", simple_number); + g_test_add_func("/literals/number/large", large_number); g_test_add_func("/literals/number/float", float_number); g_test_add_func("/literals/number/vararg", vararg_number); =20 diff --git a/tests/check-qnum.c b/tests/check-qnum.c index 8199546f99..9a22af3d0e 100644 --- a/tests/check-qnum.c +++ b/tests/check-qnum.c @@ -107,10 +107,11 @@ static void qnum_get_uint_test(void) error_free_or_abort(&err); QDECREF(qn); =20 - qn =3D qnum_from_uint(-1ULL); - qnum_get_int(qn, &err); - error_free_or_abort(&err); - QDECREF(qn); + /* temporarily disabled until visitor is switched */ + /* qn =3D qnum_from_uint(-1ULL); */ + /* qnum_get_int(qn, &err); */ + /* error_free_or_abort(&err); */ + /* QDECREF(qn); */ =20 /* invalid case */ qn =3D qnum_from_double(0.42); diff --git a/tests/test-qobject-input-visitor.c b/tests/test-qobject-input-= visitor.c index 5df62c4f9e..276a6b4427 100644 --- a/tests/test-qobject-input-visitor.c +++ b/tests/test-qobject-input-visitor.c @@ -119,7 +119,6 @@ static void test_visitor_in_int(TestInputVisitorData *d= ata, static void test_visitor_in_uint(TestInputVisitorData *data, const void *unused) { - Error *err =3D NULL; uint64_t res =3D 0; int value =3D 42; Visitor *v; @@ -136,12 +135,10 @@ static void test_visitor_in_uint(TestInputVisitorData= *data, visit_type_uint64(v, NULL, &res, &error_abort); g_assert_cmpuint(res, =3D=3D, (uint64_t)-value); =20 - /* BUG: value between INT64_MAX+1 and UINT64_MAX rejected */ - v =3D visitor_input_test_init(data, "18446744073709551574"); =20 - visit_type_uint64(v, NULL, &res, &err); - error_free_or_abort(&err); + visit_type_uint64(v, NULL, &res, &error_abort); + g_assert_cmpuint(res, =3D=3D, 18446744073709551574U); } =20 static void test_visitor_in_int_overflow(TestInputVisitorData *data, --=20 2.13.0.rc1.16.gd80b50c3f From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494351830460712.8900859583658; Tue, 9 May 2017 10:43:50 -0700 (PDT) Received: from localhost ([::1]:38663 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d89Ar-0003kV-4w for importer@patchew.org; Tue, 09 May 2017 13:43:49 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45628) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d895s-0007eK-EP for qemu-devel@nongnu.org; Tue, 09 May 2017 13:38:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d895o-0004M8-N4 for qemu-devel@nongnu.org; Tue, 09 May 2017 13:38:40 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53162) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d895o-0004Lu-Dp for qemu-devel@nongnu.org; Tue, 09 May 2017 13:38:36 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 56DAE8047F for ; Tue, 9 May 2017 17:38:35 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4108E179E0; Tue, 9 May 2017 17:38:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 56DAE8047F Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 56DAE8047F From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:50 +0300 Message-Id: <20170509173559.31598-9-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Tue, 09 May 2017 17:38:35 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 08/17] qapi: update the qobject visitor to use QUInt X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Switch to use QNum/uint where appropriate to remove i64 limitation. The input visitor will cast i64 input to u64 for compatibility reasons (existing json QMP client already use negative i64 for large u64, and expect an implicit cast in qemu). Signed-off-by: Marc-Andr=C3=A9 Lureau --- qapi/qobject-input-visitor.c | 13 +++++++++++-- qapi/qobject-output-visitor.c | 3 +-- tests/test-qobject-output-visitor.c | 21 ++++++++++++++++----- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/qapi/qobject-input-visitor.c b/qapi/qobject-input-visitor.c index 785949ebab..72cefcf677 100644 --- a/qapi/qobject-input-visitor.c +++ b/qapi/qobject-input-visitor.c @@ -420,9 +420,9 @@ static void qobject_input_type_int64_keyval(Visitor *v,= const char *name, static void qobject_input_type_uint64(Visitor *v, const char *name, uint64_t *obj, Error **errp) { - /* FIXME: qobject_to_qnum mishandles values over INT64_MAX */ QObjectInputVisitor *qiv =3D to_qiv(v); QObject *qobj =3D qobject_input_get_object(qiv, name, true, errp); + Error *err =3D NULL; QNum *qnum; =20 if (!qobj) { @@ -435,7 +435,16 @@ static void qobject_input_type_uint64(Visitor *v, cons= t char *name, return; } =20 - *obj =3D qnum_get_int(qnum, errp); + /* XXX: compatibility case, accept negative values as u64 */ + *obj =3D qnum_get_int(qnum, &err); + + if (err) { + error_free(err); + err =3D NULL; + *obj =3D qnum_get_uint(qnum, &err); + } + + error_propagate(errp, err); } =20 static void qobject_input_type_uint64_keyval(Visitor *v, const char *name, diff --git a/qapi/qobject-output-visitor.c b/qapi/qobject-output-visitor.c index 2ca5093b22..70be84ccb5 100644 --- a/qapi/qobject-output-visitor.c +++ b/qapi/qobject-output-visitor.c @@ -150,9 +150,8 @@ static void qobject_output_type_int64(Visitor *v, const= char *name, static void qobject_output_type_uint64(Visitor *v, const char *name, uint64_t *obj, Error **errp) { - /* FIXME values larger than INT64_MAX become negative */ QObjectOutputVisitor *qov =3D to_qov(v); - qobject_output_add(qov, name, qnum_from_int(*obj)); + qobject_output_add(qov, name, qnum_from_uint(*obj)); } =20 static void qobject_output_type_bool(Visitor *v, const char *name, bool *o= bj, diff --git a/tests/test-qobject-output-visitor.c b/tests/test-qobject-outpu= t-visitor.c index 66a682d5a8..767818e393 100644 --- a/tests/test-qobject-output-visitor.c +++ b/tests/test-qobject-output-visitor.c @@ -595,15 +595,26 @@ static void check_native_list(QObject *qobj, qlist =3D qlist_copy(qobject_to_qlist(qdict_get(qdict, "data"))); =20 switch (kind) { - case USER_DEF_NATIVE_LIST_UNION_KIND_S8: - case USER_DEF_NATIVE_LIST_UNION_KIND_S16: - case USER_DEF_NATIVE_LIST_UNION_KIND_S32: - case USER_DEF_NATIVE_LIST_UNION_KIND_S64: case USER_DEF_NATIVE_LIST_UNION_KIND_U8: case USER_DEF_NATIVE_LIST_UNION_KIND_U16: case USER_DEF_NATIVE_LIST_UNION_KIND_U32: case USER_DEF_NATIVE_LIST_UNION_KIND_U64: - /* all integer elements in JSON arrays get stored into QNums when + for (i =3D 0; i < 32; i++) { + QObject *tmp; + QNum *qvalue; + tmp =3D qlist_peek(qlist); + g_assert(tmp); + qvalue =3D qobject_to_qnum(tmp); + g_assert_cmpuint(qnum_get_uint(qvalue, &error_abort), =3D=3D, = i); + qobject_decref(qlist_pop(qlist)); + } + break; + + case USER_DEF_NATIVE_LIST_UNION_KIND_S8: + case USER_DEF_NATIVE_LIST_UNION_KIND_S16: + case USER_DEF_NATIVE_LIST_UNION_KIND_S32: + case USER_DEF_NATIVE_LIST_UNION_KIND_S64: + /* all integer elements in JSON arrays get stored into QInts when * we convert to QObjects, so we can check them all in the same * fashion, so simply fall through here */ --=20 2.13.0.rc1.16.gd80b50c3f From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494351834276197.01479844545395; Tue, 9 May 2017 10:43:54 -0700 (PDT) Received: from localhost ([::1]:38664 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d89Av-0003pZ-2P for importer@patchew.org; Tue, 09 May 2017 13:43:53 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45705) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d8969-00083F-9U for qemu-devel@nongnu.org; Tue, 09 May 2017 13:38:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d8964-0004QQ-Ez for qemu-devel@nongnu.org; Tue, 09 May 2017 13:38:57 -0400 Received: from mx1.redhat.com ([209.132.183.28]:52586) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d8964-0004QL-8M for qemu-devel@nongnu.org; Tue, 09 May 2017 13:38:52 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E9725448D73 for ; Tue, 9 May 2017 17:38:50 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id EC76B94C79; Tue, 9 May 2017 17:38:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com E9725448D73 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com E9725448D73 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:51 +0300 Message-Id: <20170509173559.31598-10-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Tue, 09 May 2017 17:38:51 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 09/17] qnum: fix get_int() with values > INT64_MAX X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Now that the visitor has been switch to use qnum_uint, fix the bad get_int() to use get_uint() instead. Remove compatibility code. Signed-off-by: Marc-Andr=C3=A9 Lureau --- hw/i386/acpi-build.c | 2 +- qobject/qnum.c | 4 ++-- tests/check-qnum.c | 9 ++++----- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index ec3ae7fa85..767da5d78e 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -2585,7 +2585,7 @@ static bool acpi_get_mcfg(AcpiMcfgInfo *mcfg) if (!o) { return false; } - mcfg->mcfg_base =3D qnum_get_int(qobject_to_qnum(o), &error_abort); + mcfg->mcfg_base =3D qnum_get_uint(qobject_to_qnum(o), &error_abort); qobject_decref(o); =20 o =3D object_property_get_qobject(pci_host, PCIE_HOST_MCFG_SIZE, NULL); diff --git a/qobject/qnum.c b/qobject/qnum.c index 2f87952db8..be6307accf 100644 --- a/qobject/qnum.c +++ b/qobject/qnum.c @@ -76,8 +76,8 @@ int64_t qnum_get_int(const QNum *qn, Error **errp) return qn->u.i64; case QNUM_U64: if (qn->u.u64 > INT64_MAX) { - /* temporarily accepts to cast to i64 until visitor is switche= d */ - error_report("The number is too large, use qnum_get_uint()"); + error_setg(errp, "The number is too large, use qnum_get_uint()= "); + return 0; } return qn->u.u64; case QNUM_DOUBLE: diff --git a/tests/check-qnum.c b/tests/check-qnum.c index 9a22af3d0e..8199546f99 100644 --- a/tests/check-qnum.c +++ b/tests/check-qnum.c @@ -107,11 +107,10 @@ static void qnum_get_uint_test(void) error_free_or_abort(&err); QDECREF(qn); =20 - /* temporarily disabled until visitor is switched */ - /* qn =3D qnum_from_uint(-1ULL); */ - /* qnum_get_int(qn, &err); */ - /* error_free_or_abort(&err); */ - /* QDECREF(qn); */ + qn =3D qnum_from_uint(-1ULL); + qnum_get_int(qn, &err); + error_free_or_abort(&err); + QDECREF(qn); =20 /* invalid case */ qn =3D qnum_from_double(0.42); --=20 2.13.0.rc1.16.gd80b50c3f From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494352179337452.9093438232396; Tue, 9 May 2017 10:49:39 -0700 (PDT) Received: from localhost ([::1]:38691 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d89GU-0001L5-1Z for importer@patchew.org; Tue, 09 May 2017 13:49:38 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45748) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d896L-0008DN-13 for qemu-devel@nongnu.org; Tue, 09 May 2017 13:39:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d896G-0004S7-6v for qemu-devel@nongnu.org; Tue, 09 May 2017 13:39:09 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53952) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d896F-0004Ru-UV for qemu-devel@nongnu.org; Tue, 09 May 2017 13:39:04 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D7D7680472 for ; Tue, 9 May 2017 17:39:02 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8811E18231; Tue, 9 May 2017 17:38:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com D7D7680472 Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com D7D7680472 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:52 +0300 Message-Id: <20170509173559.31598-11-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Tue, 09 May 2017 17:39:03 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 10/17] object: add uint property setter/getter X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Marc-Andr=C3=A9 Lureau --- include/qom/object.h | 23 +++++++++++++++++++++++ qom/object.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/include/qom/object.h b/include/qom/object.h index cd0f412ce9..abaeb8cf4e 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -1094,6 +1094,29 @@ int64_t object_property_get_int(Object *obj, const c= har *name, Error **errp); =20 /** + * object_property_set_uint: + * @value: the value to be written to the property + * @name: the name of the property + * @errp: returns an error if this function fails + * + * Writes an unsigned integer value to a property. + */ +void object_property_set_uint(Object *obj, uint64_t value, + const char *name, Error **errp); + +/** + * object_property_get_uint: + * @obj: the object + * @name: the name of the property + * @errp: returns an error if this function fails + * + * Returns: the value of the property, converted to an unsigned integer, o= r 0 + * an error occurs (including when the property value is not an integer). + */ +uint64_t object_property_get_uint(Object *obj, const char *name, + Error **errp); + +/** * object_property_get_enum: * @obj: the object * @name: the name of the property diff --git a/qom/object.c b/qom/object.c index c1644dbcb7..a9259e330d 100644 --- a/qom/object.c +++ b/qom/object.c @@ -1221,6 +1221,39 @@ int64_t object_property_get_int(Object *obj, const c= har *name, return retval; } =20 +void object_property_set_uint(Object *obj, uint64_t value, + const char *name, Error **errp) +{ + QNum *qn =3D qnum_from_uint(value); + object_property_set_qobject(obj, QOBJECT(qn), name, errp); + QDECREF(qn); +} + +uint64_t object_property_get_uint(Object *obj, const char *name, + Error **errp) +{ + QObject *ret =3D object_property_get_qobject(obj, name, errp); + Error *err =3D NULL; + QNum *qnum; + uint64_t retval; + + if (!ret) { + return 0; + } + qnum =3D qobject_to_qnum(ret); + if (qnum) { + retval =3D qnum_get_uint(qnum, &err); + } + + if (!qnum || err) { + error_setg(errp, QERR_INVALID_PARAMETER_TYPE, name, "uint"); + retval =3D 0; + } + + qobject_decref(ret); + return retval; +} + typedef struct EnumProperty { const char * const *strings; int (*get)(Object *, Error **); --=20 2.13.0.rc1.16.gd80b50c3f From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494351975225860.9697270977945; Tue, 9 May 2017 10:46:15 -0700 (PDT) Received: from localhost ([::1]:38677 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d89DB-0006Ba-Of for importer@patchew.org; Tue, 09 May 2017 13:46:13 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45840) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d896Z-0008Po-PI for qemu-devel@nongnu.org; Tue, 09 May 2017 13:39:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d896U-0004Um-TR for qemu-devel@nongnu.org; Tue, 09 May 2017 13:39:23 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53192) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d896U-0004UV-KY for qemu-devel@nongnu.org; Tue, 09 May 2017 13:39:18 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 90C34461FE for ; Tue, 9 May 2017 17:39:17 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id B829696528; Tue, 9 May 2017 17:39:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 90C34461FE Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 90C34461FE From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:53 +0300 Message-Id: <20170509173559.31598-12-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Tue, 09 May 2017 17:39:17 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 11/17] object: use more specific property type names X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Use the actual unsigned integer type name (this should't break since property type aren't directly accessed from outside it seems). Signed-off-by: Marc-Andr=C3=A9 Lureau --- backends/cryptodev.c | 2 +- hw/pci-host/piix.c | 8 ++++---- hw/pci-host/q35.c | 10 +++++----- hw/ppc/pnv.c | 2 +- net/dump.c | 2 +- net/filter-buffer.c | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/backends/cryptodev.c b/backends/cryptodev.c index 832f056266..1764c179fe 100644 --- a/backends/cryptodev.c +++ b/backends/cryptodev.c @@ -222,7 +222,7 @@ cryptodev_backend_can_be_deleted(UserCreatable *uc, Err= or **errp) =20 static void cryptodev_backend_instance_init(Object *obj) { - object_property_add(obj, "queues", "int", + object_property_add(obj, "queues", "uint32", cryptodev_backend_get_queues, cryptodev_backend_set_queues, NULL, NULL, NULL); diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c index f9218aa952..9aed6225bf 100644 --- a/hw/pci-host/piix.c +++ b/hw/pci-host/piix.c @@ -279,19 +279,19 @@ static void i440fx_pcihost_initfn(Object *obj) memory_region_init_io(&s->data_mem, obj, &pci_host_data_le_ops, s, "pci-conf-data", 4); =20 - object_property_add(obj, PCI_HOST_PROP_PCI_HOLE_START, "int", + object_property_add(obj, PCI_HOST_PROP_PCI_HOLE_START, "uint32", i440fx_pcihost_get_pci_hole_start, NULL, NULL, NULL, NULL); =20 - object_property_add(obj, PCI_HOST_PROP_PCI_HOLE_END, "int", + object_property_add(obj, PCI_HOST_PROP_PCI_HOLE_END, "uint32", i440fx_pcihost_get_pci_hole_end, NULL, NULL, NULL, NULL); =20 - object_property_add(obj, PCI_HOST_PROP_PCI_HOLE64_START, "int", + object_property_add(obj, PCI_HOST_PROP_PCI_HOLE64_START, "uint64", i440fx_pcihost_get_pci_hole64_start, NULL, NULL, NULL, NULL); =20 - object_property_add(obj, PCI_HOST_PROP_PCI_HOLE64_END, "int", + object_property_add(obj, PCI_HOST_PROP_PCI_HOLE64_END, "uint64", i440fx_pcihost_get_pci_hole64_end, NULL, NULL, NULL, NULL); } diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c index 344f77b10c..5438be8253 100644 --- a/hw/pci-host/q35.c +++ b/hw/pci-host/q35.c @@ -176,23 +176,23 @@ static void q35_host_initfn(Object *obj) qdev_prop_set_uint32(DEVICE(&s->mch), "addr", PCI_DEVFN(0, 0)); qdev_prop_set_bit(DEVICE(&s->mch), "multifunction", false); =20 - object_property_add(obj, PCI_HOST_PROP_PCI_HOLE_START, "int", + object_property_add(obj, PCI_HOST_PROP_PCI_HOLE_START, "uint32", q35_host_get_pci_hole_start, NULL, NULL, NULL, NULL); =20 - object_property_add(obj, PCI_HOST_PROP_PCI_HOLE_END, "int", + object_property_add(obj, PCI_HOST_PROP_PCI_HOLE_END, "uint32", q35_host_get_pci_hole_end, NULL, NULL, NULL, NULL); =20 - object_property_add(obj, PCI_HOST_PROP_PCI_HOLE64_START, "int", + object_property_add(obj, PCI_HOST_PROP_PCI_HOLE64_START, "uint64", q35_host_get_pci_hole64_start, NULL, NULL, NULL, NULL); =20 - object_property_add(obj, PCI_HOST_PROP_PCI_HOLE64_END, "int", + object_property_add(obj, PCI_HOST_PROP_PCI_HOLE64_END, "uint64", q35_host_get_pci_hole64_end, NULL, NULL, NULL, NULL); =20 - object_property_add(obj, PCIE_HOST_MCFG_SIZE, "int", + object_property_add(obj, PCIE_HOST_MCFG_SIZE, "uint32", q35_host_get_mmcfg_size, NULL, NULL, NULL, NULL); =20 diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c index d4bcdb027f..a964354081 100644 --- a/hw/ppc/pnv.c +++ b/hw/ppc/pnv.c @@ -1110,7 +1110,7 @@ static void powernv_machine_initfn(Object *obj) =20 static void powernv_machine_class_props_init(ObjectClass *oc) { - object_class_property_add(oc, "num-chips", "uint32_t", + object_class_property_add(oc, "num-chips", "uint32", pnv_get_num_chips, pnv_set_num_chips, NULL, NULL, NULL); object_class_property_set_description(oc, "num-chips", diff --git a/net/dump.c b/net/dump.c index 89a149b5dd..7f4d3fda52 100644 --- a/net/dump.c +++ b/net/dump.c @@ -325,7 +325,7 @@ static void filter_dump_instance_init(Object *obj) =20 nfds->maxlen =3D 65536; =20 - object_property_add(obj, "maxlen", "int", filter_dump_get_maxlen, + object_property_add(obj, "maxlen", "uint32", filter_dump_get_maxlen, filter_dump_set_maxlen, NULL, NULL, NULL); object_property_add_str(obj, "file", file_dump_get_filename, file_dump_set_filename, NULL); diff --git a/net/filter-buffer.c b/net/filter-buffer.c index cc6bd94445..9ce96aaa35 100644 --- a/net/filter-buffer.c +++ b/net/filter-buffer.c @@ -191,7 +191,7 @@ out: =20 static void filter_buffer_init(Object *obj) { - object_property_add(obj, "interval", "int", + object_property_add(obj, "interval", "uint32", filter_buffer_get_interval, filter_buffer_set_interval, NULL, NULL, NULL); } --=20 2.13.0.rc1.16.gd80b50c3f From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494351981398488.755157623237; Tue, 9 May 2017 10:46:21 -0700 (PDT) Received: from localhost ([::1]:38678 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d89DH-0006GW-VI for importer@patchew.org; Tue, 09 May 2017 13:46:20 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45910) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d896n-0000Ck-QD for qemu-devel@nongnu.org; Tue, 09 May 2017 13:39:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d896i-0004jO-NE for qemu-devel@nongnu.org; Tue, 09 May 2017 13:39:37 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53550) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d896i-0004iD-DP for qemu-devel@nongnu.org; Tue, 09 May 2017 13:39:32 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 57200448D74 for ; Tue, 9 May 2017 17:39:31 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id D3CDF18239; Tue, 9 May 2017 17:39:24 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 57200448D74 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 57200448D74 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:54 +0300 Message-Id: <20170509173559.31598-13-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Tue, 09 May 2017 17:39:31 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 12/17] qdev: use int and uint properties as appropriate X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Use unsigned type for various properties. Signed-off-by: Marc-Andr=C3=A9 Lureau --- include/hw/qdev-core.h | 5 +++- include/hw/qdev-properties.h | 67 ++++++++++++++++++++++++++--------------= ---- hw/block/fdc.c | 54 +++++++++++++++++------------------ hw/core/qdev-properties.c | 8 +++--- hw/core/qdev.c | 24 ++++++++++------ hw/net/e1000e.c | 14 ++++----- 6 files changed, 96 insertions(+), 76 deletions(-) diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h index 0f21a500cd..ac10458650 100644 --- a/include/hw/qdev-core.h +++ b/include/hw/qdev-core.h @@ -225,7 +225,10 @@ struct Property { PropertyInfo *info; ptrdiff_t offset; uint8_t bitnr; - int64_t defval; + union { + int64_t i; + uint64_t u; + } defval; int arrayoffset; PropertyInfo *arrayinfo; int arrayfieldsize; diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h index 16d5d0629b..ca9c550fa3 100644 --- a/include/hw/qdev-properties.h +++ b/include/hw/qdev-properties.h @@ -37,36 +37,47 @@ extern PropertyInfo qdev_prop_arraylen; .offset =3D offsetof(_state, _field) \ + type_check(_type, typeof_field(_state, _field)), \ } -#define DEFINE_PROP_DEFAULT(_name, _state, _field, _defval, _prop, _type) = { \ + +#define DEFINE_PROP_INT(_name, _state, _field, _defval, _prop, _type) { \ .name =3D (_name), \ .info =3D &(_prop), \ .offset =3D offsetof(_state, _field) \ + type_check(_type,typeof_field(_state, _field)), \ - .defval =3D (_type)_defval, \ + .defval.i =3D (_type)_defval, \ } -#define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval) { \ - .name =3D (_name), \ - .info =3D &(qdev_prop_bit), \ - .bitnr =3D (_bit), \ - .offset =3D offsetof(_state, _field) \ - + type_check(uint32_t,typeof_field(_state, _field)), \ - .defval =3D (bool)_defval, \ + +#define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval) { \ + .name =3D (_name), \ + .info =3D &(qdev_prop_bit), \ + .bitnr =3D (_bit), \ + .offset =3D offsetof(_state, _field) \ + + type_check(uint32_t, typeof_field(_state, _field)), \ + .defval.u =3D (bool)_defval, \ } + +#define DEFINE_PROP_UINT(_name, _state, _field, _defval, _prop, _type) { \ + .name =3D (_name), \ + .info =3D &(_prop), \ + .offset =3D offsetof(_state, _field) \ + + type_check(_type, typeof_field(_state, _field)), \ + .defval.u =3D (_type)_defval, \ + } + #define DEFINE_PROP_BIT64(_name, _state, _field, _bit, _defval) { \ .name =3D (_name), \ .info =3D &(qdev_prop_bit64), \ .bitnr =3D (_bit), \ .offset =3D offsetof(_state, _field) \ + type_check(uint64_t, typeof_field(_state, _field)), \ - .defval =3D (bool)_defval, \ + .defval.u =3D (bool)_defval, \ } =20 -#define DEFINE_PROP_BOOL(_name, _state, _field, _defval) { \ - .name =3D (_name), \ - .info =3D &(qdev_prop_bool), \ - .offset =3D offsetof(_state, _field) \ - + type_check(bool, typeof_field(_state, _field)), \ - .defval =3D (bool)_defval, \ +#define DEFINE_PROP_BOOL(_name, _state, _field, _defval) { \ + .name =3D (_name), \ + .info =3D &(qdev_prop_bool), \ + .offset =3D offsetof(_state, _field) \ + + type_check(bool, typeof_field(_state, _field)), \ + .defval.u =3D (bool)_defval, \ } =20 #define PROP_ARRAY_LEN_PREFIX "len-" @@ -107,19 +118,19 @@ extern PropertyInfo qdev_prop_arraylen; } =20 #define DEFINE_PROP_UINT8(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint8, uint8_t) + DEFINE_PROP_UINT(_n, _s, _f, _d, qdev_prop_uint8, uint8_t) #define DEFINE_PROP_UINT16(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint16, uint16_t) + DEFINE_PROP_UINT(_n, _s, _f, _d, qdev_prop_uint16, uint16_t) #define DEFINE_PROP_UINT32(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint32, uint32_t) + DEFINE_PROP_UINT(_n, _s, _f, _d, qdev_prop_uint32, uint32_t) #define DEFINE_PROP_INT32(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_int32, int32_t) + DEFINE_PROP_INT(_n, _s, _f, _d, qdev_prop_int32, int32_t) #define DEFINE_PROP_UINT64(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint64, uint64_t) + DEFINE_PROP_UINT(_n, _s, _f, _d, qdev_prop_uint64, uint64_t) #define DEFINE_PROP_SIZE(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_size, uint64_t) + DEFINE_PROP_UINT(_n, _s, _f, _d, qdev_prop_size, uint64_t) #define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_pci_devfn, int32_t) + DEFINE_PROP_INT(_n, _s, _f, _d, qdev_prop_pci_devfn, int32_t) =20 /* * Please avoid pointer properties. If you must use them, you must @@ -153,17 +164,17 @@ extern PropertyInfo qdev_prop_arraylen; #define DEFINE_PROP_MACADDR(_n, _s, _f) \ DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr) #define DEFINE_PROP_ON_OFF_AUTO(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_on_off_auto, OnOffAuto) + DEFINE_PROP_INT(_n, _s, _f, _d, qdev_prop_on_off_auto, OnOffAuto) #define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_losttickpolicy, \ + DEFINE_PROP_INT(_n, _s, _f, _d, qdev_prop_losttickpolicy, \ LostTickPolicy) #define DEFINE_PROP_BLOCKDEV_ON_ERROR(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_blockdev_on_error, \ + DEFINE_PROP_INT(_n, _s, _f, _d, qdev_prop_blockdev_on_error, \ BlockdevOnError) #define DEFINE_PROP_BIOS_CHS_TRANS(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_bios_chs_trans, int) + DEFINE_PROP_INT(_n, _s, _f, _d, qdev_prop_bios_chs_trans, int) #define DEFINE_PROP_BLOCKSIZE(_n, _s, _f) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, 0, qdev_prop_blocksize, uint16_t) + DEFINE_PROP_UINT(_n, _s, _f, 0, qdev_prop_blocksize, uint16_t) #define DEFINE_PROP_PCI_HOST_DEVADDR(_n, _s, _f) \ DEFINE_PROP(_n, _s, _f, qdev_prop_pci_host_devaddr, PCIHostDeviceAddre= ss) =20 diff --git a/hw/block/fdc.c b/hw/block/fdc.c index 2e629b398b..07ce4a0d20 100644 --- a/hw/block/fdc.c +++ b/hw/block/fdc.c @@ -511,9 +511,9 @@ typedef struct FloppyDrive { static Property floppy_drive_properties[] =3D { DEFINE_PROP_UINT32("unit", FloppyDrive, unit, -1), DEFINE_BLOCK_PROPERTIES(FloppyDrive, conf), - DEFINE_PROP_DEFAULT("drive-type", FloppyDrive, type, - FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, - FloppyDriveType), + DEFINE_PROP_INT("drive-type", FloppyDrive, type, + FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, + FloppyDriveType), DEFINE_PROP_END_OF_LIST(), }; =20 @@ -2805,15 +2805,15 @@ static Property isa_fdc_properties[] =3D { DEFINE_PROP_DRIVE("driveB", FDCtrlISABus, state.qdev_for_drives[1].blk= ), DEFINE_PROP_BIT("check_media_rate", FDCtrlISABus, state.check_media_ra= te, 0, true), - DEFINE_PROP_DEFAULT("fdtypeA", FDCtrlISABus, state.qdev_for_drives[0].= type, - FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, - FloppyDriveType), - DEFINE_PROP_DEFAULT("fdtypeB", FDCtrlISABus, state.qdev_for_drives[1].= type, - FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, - FloppyDriveType), - DEFINE_PROP_DEFAULT("fallback", FDCtrlISABus, state.fallback, - FLOPPY_DRIVE_TYPE_288, qdev_prop_fdc_drive_type, - FloppyDriveType), + DEFINE_PROP_INT("fdtypeA", FDCtrlISABus, state.qdev_for_drives[0].type, + FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, + FloppyDriveType), + DEFINE_PROP_INT("fdtypeB", FDCtrlISABus, state.qdev_for_drives[1].type, + FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, + FloppyDriveType), + DEFINE_PROP_INT("fallback", FDCtrlISABus, state.fallback, + FLOPPY_DRIVE_TYPE_288, qdev_prop_fdc_drive_type, + FloppyDriveType), DEFINE_PROP_END_OF_LIST(), }; =20 @@ -2862,15 +2862,15 @@ static const VMStateDescription vmstate_sysbus_fdc = =3D{ static Property sysbus_fdc_properties[] =3D { DEFINE_PROP_DRIVE("driveA", FDCtrlSysBus, state.qdev_for_drives[0].blk= ), DEFINE_PROP_DRIVE("driveB", FDCtrlSysBus, state.qdev_for_drives[1].blk= ), - DEFINE_PROP_DEFAULT("fdtypeA", FDCtrlSysBus, state.qdev_for_drives[0].= type, - FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, - FloppyDriveType), - DEFINE_PROP_DEFAULT("fdtypeB", FDCtrlSysBus, state.qdev_for_drives[1].= type, - FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, - FloppyDriveType), - DEFINE_PROP_DEFAULT("fallback", FDCtrlISABus, state.fallback, - FLOPPY_DRIVE_TYPE_144, qdev_prop_fdc_drive_type, - FloppyDriveType), + DEFINE_PROP_INT("fdtypeA", FDCtrlSysBus, state.qdev_for_drives[0].type, + FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, + FloppyDriveType), + DEFINE_PROP_INT("fdtypeB", FDCtrlSysBus, state.qdev_for_drives[1].type, + FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, + FloppyDriveType), + DEFINE_PROP_INT("fallback", FDCtrlISABus, state.fallback, + FLOPPY_DRIVE_TYPE_144, qdev_prop_fdc_drive_type, + FloppyDriveType), DEFINE_PROP_END_OF_LIST(), }; =20 @@ -2891,12 +2891,12 @@ static const TypeInfo sysbus_fdc_info =3D { =20 static Property sun4m_fdc_properties[] =3D { DEFINE_PROP_DRIVE("drive", FDCtrlSysBus, state.qdev_for_drives[0].blk), - DEFINE_PROP_DEFAULT("fdtype", FDCtrlSysBus, state.qdev_for_drives[0].t= ype, - FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, - FloppyDriveType), - DEFINE_PROP_DEFAULT("fallback", FDCtrlISABus, state.fallback, - FLOPPY_DRIVE_TYPE_144, qdev_prop_fdc_drive_type, - FloppyDriveType), + DEFINE_PROP_INT("fdtype", FDCtrlSysBus, state.qdev_for_drives[0].type, + FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, + FloppyDriveType), + DEFINE_PROP_INT("fallback", FDCtrlISABus, state.fallback, + FLOPPY_DRIVE_TYPE_144, qdev_prop_fdc_drive_type, + FloppyDriveType), DEFINE_PROP_END_OF_LIST(), }; =20 diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index fa3617db2d..f87327b132 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -982,17 +982,17 @@ void qdev_prop_set_bit(DeviceState *dev, const char *= name, bool value) =20 void qdev_prop_set_uint8(DeviceState *dev, const char *name, uint8_t value) { - object_property_set_int(OBJECT(dev), value, name, &error_abort); + object_property_set_uint(OBJECT(dev), value, name, &error_abort); } =20 void qdev_prop_set_uint16(DeviceState *dev, const char *name, uint16_t val= ue) { - object_property_set_int(OBJECT(dev), value, name, &error_abort); + object_property_set_uint(OBJECT(dev), value, name, &error_abort); } =20 void qdev_prop_set_uint32(DeviceState *dev, const char *name, uint32_t val= ue) { - object_property_set_int(OBJECT(dev), value, name, &error_abort); + object_property_set_uint(OBJECT(dev), value, name, &error_abort); } =20 void qdev_prop_set_int32(DeviceState *dev, const char *name, int32_t value) @@ -1002,7 +1002,7 @@ void qdev_prop_set_int32(DeviceState *dev, const char= *name, int32_t value) =20 void qdev_prop_set_uint64(DeviceState *dev, const char *name, uint64_t val= ue) { - object_property_set_int(OBJECT(dev), value, name, &error_abort); + object_property_set_uint(OBJECT(dev), value, name, &error_abort); } =20 void qdev_prop_set_string(DeviceState *dev, const char *name, const char *= value) diff --git a/hw/core/qdev.c b/hw/core/qdev.c index 83b0297755..b9313546f7 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -764,17 +764,21 @@ static bool prop_info_is_bool(const PropertyInfo *inf= o) =20 static bool prop_info_is_int(const PropertyInfo *info) { + return info =3D=3D &qdev_prop_int32 + || info =3D=3D &qdev_prop_pci_devfn + || info =3D=3D &qdev_prop_on_off_auto + || info =3D=3D &qdev_prop_losttickpolicy + || info =3D=3D &qdev_prop_blockdev_on_error + || info =3D=3D &qdev_prop_bios_chs_trans; +} + +static bool prop_info_is_uint(const PropertyInfo *info) +{ return info =3D=3D &qdev_prop_uint8 || info =3D=3D &qdev_prop_uint16 || info =3D=3D &qdev_prop_uint32 - || info =3D=3D &qdev_prop_int32 || info =3D=3D &qdev_prop_uint64 || info =3D=3D &qdev_prop_size - || info =3D=3D &qdev_prop_pci_devfn - || info =3D=3D &qdev_prop_on_off_auto - || info =3D=3D &qdev_prop_losttickpolicy - || info =3D=3D &qdev_prop_blockdev_on_error - || info =3D=3D &qdev_prop_bios_chs_trans || info =3D=3D &qdev_prop_blocksize || info =3D=3D &qdev_prop_arraylen; } @@ -819,12 +823,14 @@ void qdev_property_add_static(DeviceState *dev, Prope= rty *prop, &error_abort); =20 if (prop_info_is_bool(prop->info)) { - object_property_set_bool(obj, prop->defval, prop->name, &error_abo= rt); + object_property_set_bool(obj, prop->defval.u, prop->name, &error_a= bort); } else if (prop->info->enum_table) { - object_property_set_str(obj, prop->info->enum_table[prop->defval], + object_property_set_str(obj, prop->info->enum_table[prop->defval.i= ], prop->name, &error_abort); } else if (prop_info_is_int(prop->info)) { - object_property_set_int(obj, prop->defval, prop->name, &error_abor= t); + object_property_set_int(obj, prop->defval.i, prop->name, &error_ab= ort); + } else if (prop_info_is_uint(prop->info)) { + object_property_set_uint(obj, prop->defval.u, prop->name, &error_a= bort); } } =20 diff --git a/hw/net/e1000e.c b/hw/net/e1000e.c index 6e234938db..4e4cc9b52f 100644 --- a/hw/net/e1000e.c +++ b/hw/net/e1000e.c @@ -645,13 +645,13 @@ static PropertyInfo e1000e_prop_disable_vnet, =20 static Property e1000e_properties[] =3D { DEFINE_NIC_PROPERTIES(E1000EState, conf), - DEFINE_PROP_DEFAULT("disable_vnet_hdr", E1000EState, disable_vnet, fal= se, - e1000e_prop_disable_vnet, bool), - DEFINE_PROP_DEFAULT("subsys_ven", E1000EState, subsys_ven, - PCI_VENDOR_ID_INTEL, - e1000e_prop_subsys_ven, uint16_t), - DEFINE_PROP_DEFAULT("subsys", E1000EState, subsys, 0, - e1000e_prop_subsys, uint16_t), + DEFINE_PROP_INT("disable_vnet_hdr", E1000EState, disable_vnet, false, + e1000e_prop_disable_vnet, bool), + DEFINE_PROP_INT("subsys_ven", E1000EState, subsys_ven, + PCI_VENDOR_ID_INTEL, + e1000e_prop_subsys_ven, uint16_t), + DEFINE_PROP_INT("subsys", E1000EState, subsys, 0, + e1000e_prop_subsys, uint16_t), DEFINE_PROP_END_OF_LIST(), }; =20 --=20 2.13.0.rc1.16.gd80b50c3f From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494351800249912.626481558844; Tue, 9 May 2017 10:43:20 -0700 (PDT) Received: from localhost ([::1]:38660 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d89AM-0003ET-PD for importer@patchew.org; Tue, 09 May 2017 13:43:18 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45999) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d896y-0000MA-Ku for qemu-devel@nongnu.org; Tue, 09 May 2017 13:39:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d896t-0004qw-Ow for qemu-devel@nongnu.org; Tue, 09 May 2017 13:39:48 -0400 Received: from mx1.redhat.com ([209.132.183.28]:36894) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d896t-0004pi-FU for qemu-devel@nongnu.org; Tue, 09 May 2017 13:39:43 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6D11881240 for ; Tue, 9 May 2017 17:39:42 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id ADFC65C892; Tue, 9 May 2017 17:39:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 6D11881240 Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 6D11881240 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:55 +0300 Message-Id: <20170509173559.31598-14-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 09 May 2017 17:39:42 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 13/17] qdev: use appropriate getter/setters type X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Based on underlying property type, use the appropriate getters/setters. Signed-off-by: Marc-Andr=C3=A9 Lureau --- hw/i386/acpi-build.c | 12 ++++++------ hw/pci-host/gpex.c | 2 +- hw/pci-host/q35.c | 2 +- hw/pci-host/xilinx-pcie.c | 2 +- target/i386/cpu.c | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 767da5d78e..1707fae9bf 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -149,21 +149,21 @@ static void acpi_get_pm_info(AcpiPmInfo *pm) /* Fill in optional s3/s4 related properties */ o =3D object_property_get_qobject(obj, ACPI_PM_PROP_S3_DISABLED, NULL); if (o) { - pm->s3_disabled =3D qnum_get_int(qobject_to_qnum(o), &error_abort); + pm->s3_disabled =3D qnum_get_uint(qobject_to_qnum(o), &error_abort= ); } else { pm->s3_disabled =3D false; } qobject_decref(o); o =3D object_property_get_qobject(obj, ACPI_PM_PROP_S4_DISABLED, NULL); if (o) { - pm->s4_disabled =3D qnum_get_int(qobject_to_qnum(o), &error_abort); + pm->s4_disabled =3D qnum_get_uint(qobject_to_qnum(o), &error_abort= ); } else { pm->s4_disabled =3D false; } qobject_decref(o); o =3D object_property_get_qobject(obj, ACPI_PM_PROP_S4_VAL, NULL); if (o) { - pm->s4_val =3D qnum_get_int(qobject_to_qnum(o), &error_abort); + pm->s4_val =3D qnum_get_uint(qobject_to_qnum(o), &error_abort); } else { pm->s4_val =3D false; } @@ -499,7 +499,7 @@ static void build_append_pci_bus_devices(Aml *parent_sc= ope, PCIBus *bus, =20 bsel =3D object_property_get_qobject(OBJECT(bus), ACPI_PCIHP_PROP_BSEL= , NULL); if (bsel) { - int64_t bsel_val =3D qnum_get_int(qobject_to_qnum(bsel), &error_ab= ort); + uint64_t bsel_val =3D qnum_get_uint(qobject_to_qnum(bsel), &error_= abort); =20 aml_append(parent_scope, aml_name_decl("BSEL", aml_int(bsel_val))); notify_method =3D aml_method("DVNT", 2, AML_NOTSERIALIZED); @@ -609,7 +609,7 @@ static void build_append_pci_bus_devices(Aml *parent_sc= ope, PCIBus *bus, =20 /* If bus supports hotplug select it and notify about local events */ if (bsel) { - int64_t bsel_val =3D qnum_get_int(qobject_to_qnum(bsel), &error_ab= ort); + uint64_t bsel_val =3D qnum_get_uint(qobject_to_qnum(bsel), &error_= abort); aml_append(method, aml_store(aml_int(bsel_val), aml_name("BNUM"))); aml_append(method, aml_call2("DVNT", aml_name("PCIU"), aml_int(1) /* Device Check= */) @@ -2590,7 +2590,7 @@ static bool acpi_get_mcfg(AcpiMcfgInfo *mcfg) =20 o =3D object_property_get_qobject(pci_host, PCIE_HOST_MCFG_SIZE, NULL); assert(o); - mcfg->mcfg_size =3D qnum_get_int(qobject_to_qnum(o), &error_abort); + mcfg->mcfg_size =3D qnum_get_uint(qobject_to_qnum(o), &error_abort); qobject_decref(o); return true; } diff --git a/hw/pci-host/gpex.c b/hw/pci-host/gpex.c index 66055ee5cc..8d3a64008c 100644 --- a/hw/pci-host/gpex.c +++ b/hw/pci-host/gpex.c @@ -94,7 +94,7 @@ static void gpex_host_initfn(Object *obj) =20 object_initialize(root, sizeof(*root), TYPE_GPEX_ROOT_DEVICE); object_property_add_child(obj, "gpex_root", OBJECT(root), NULL); - qdev_prop_set_uint32(DEVICE(root), "addr", PCI_DEVFN(0, 0)); + qdev_prop_set_int32(DEVICE(root), "addr", PCI_DEVFN(0, 0)); qdev_prop_set_bit(DEVICE(root), "multifunction", false); } =20 diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c index 5438be8253..3cbe8cfcea 100644 --- a/hw/pci-host/q35.c +++ b/hw/pci-host/q35.c @@ -173,7 +173,7 @@ static void q35_host_initfn(Object *obj) =20 object_initialize(&s->mch, sizeof(s->mch), TYPE_MCH_PCI_DEVICE); object_property_add_child(OBJECT(s), "mch", OBJECT(&s->mch), NULL); - qdev_prop_set_uint32(DEVICE(&s->mch), "addr", PCI_DEVFN(0, 0)); + qdev_prop_set_int32(DEVICE(&s->mch), "addr", PCI_DEVFN(0, 0)); qdev_prop_set_bit(DEVICE(&s->mch), "multifunction", false); =20 object_property_add(obj, PCI_HOST_PROP_PCI_HOLE_START, "uint32", diff --git a/hw/pci-host/xilinx-pcie.c b/hw/pci-host/xilinx-pcie.c index 8b71e2d950..461ed41151 100644 --- a/hw/pci-host/xilinx-pcie.c +++ b/hw/pci-host/xilinx-pcie.c @@ -150,7 +150,7 @@ static void xilinx_pcie_host_init(Object *obj) =20 object_initialize(root, sizeof(*root), TYPE_XILINX_PCIE_ROOT); object_property_add_child(obj, "root", OBJECT(root), NULL); - qdev_prop_set_uint32(DEVICE(root), "addr", PCI_DEVFN(0, 0)); + qdev_prop_set_int32(DEVICE(root), "addr", PCI_DEVFN(0, 0)); qdev_prop_set_bit(DEVICE(root), "multifunction", false); } =20 diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 1e8a5b55c0..5bb8131bb8 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -3191,7 +3191,7 @@ static void x86_cpu_apic_create(X86CPU *cpu, Error **= errp) OBJECT(cpu->apic_state), &error_abort); object_unref(OBJECT(cpu->apic_state)); =20 - qdev_prop_set_uint32(cpu->apic_state, "id", cpu->apic_id); + qdev_prop_set_int32(cpu->apic_state, "id", cpu->apic_id); /* TODO: convert to link<> */ apic =3D APIC_COMMON(cpu->apic_state); apic->cpu =3D cpu; --=20 2.13.0.rc1.16.gd80b50c3f From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494352302574596.4733578914614; Tue, 9 May 2017 10:51:42 -0700 (PDT) Received: from localhost ([::1]:38704 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d89IT-00030d-4s for importer@patchew.org; Tue, 09 May 2017 13:51:41 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46036) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d897E-0000ZD-1v for qemu-devel@nongnu.org; Tue, 09 May 2017 13:40:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d8979-0004xt-5c for qemu-devel@nongnu.org; Tue, 09 May 2017 13:40:04 -0400 Received: from mx1.redhat.com ([209.132.183.28]:34974) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d8978-0004xd-Sd for qemu-devel@nongnu.org; Tue, 09 May 2017 13:39:59 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AF6783F723 for ; Tue, 9 May 2017 17:39:57 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6F1968AC58; Tue, 9 May 2017 17:39:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com AF6783F723 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com AF6783F723 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:56 +0300 Message-Id: <20170509173559.31598-15-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Tue, 09 May 2017 17:39:57 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 14/17] acpi: fix s3/s4 disabled type X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Use a more specific bool type. Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/acpi/ich9.c | 24 ++++++++++++------------ hw/acpi/piix4.c | 8 ++++---- hw/i386/acpi-build.c | 5 +++-- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c index 5c279bbaca..3bd8c4bcf5 100644 --- a/hw/acpi/ich9.c +++ b/hw/acpi/ich9.c @@ -359,9 +359,9 @@ static void ich9_pm_get_disable_s3(Object *obj, Visitor= *v, const char *name, void *opaque, Error **errp) { ICH9LPCPMRegs *pm =3D opaque; - uint8_t value =3D pm->disable_s3; + bool value =3D pm->disable_s3; =20 - visit_type_uint8(v, name, &value, errp); + visit_type_bool(v, name, &value, errp); } =20 static void ich9_pm_set_disable_s3(Object *obj, Visitor *v, const char *na= me, @@ -369,9 +369,9 @@ static void ich9_pm_set_disable_s3(Object *obj, Visitor= *v, const char *name, { ICH9LPCPMRegs *pm =3D opaque; Error *local_err =3D NULL; - uint8_t value; + bool value; =20 - visit_type_uint8(v, name, &value, &local_err); + visit_type_bool(v, name, &value, &local_err); if (local_err) { goto out; } @@ -384,9 +384,9 @@ static void ich9_pm_get_disable_s4(Object *obj, Visitor= *v, const char *name, void *opaque, Error **errp) { ICH9LPCPMRegs *pm =3D opaque; - uint8_t value =3D pm->disable_s4; + bool value =3D pm->disable_s4; =20 - visit_type_uint8(v, name, &value, errp); + visit_type_bool(v, name, &value, errp); } =20 static void ich9_pm_set_disable_s4(Object *obj, Visitor *v, const char *na= me, @@ -394,9 +394,9 @@ static void ich9_pm_set_disable_s4(Object *obj, Visitor= *v, const char *name, { ICH9LPCPMRegs *pm =3D opaque; Error *local_err =3D NULL; - uint8_t value; + bool value; =20 - visit_type_uint8(v, name, &value, &local_err); + visit_type_bool(v, name, &value, &local_err); if (local_err) { goto out; } @@ -447,8 +447,8 @@ void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs = *pm, Error **errp) static const uint32_t gpe0_len =3D ICH9_PMIO_GPE0_LEN; pm->acpi_memory_hotplug.is_enabled =3D true; pm->cpu_hotplug_legacy =3D true; - pm->disable_s3 =3D 0; - pm->disable_s4 =3D 0; + pm->disable_s3 =3D false; + pm->disable_s4 =3D false; pm->s4_val =3D 2; =20 object_property_add_uint32_ptr(obj, ACPI_PM_PROP_PM_IO_BASE, @@ -466,11 +466,11 @@ void ich9_pm_add_properties(Object *obj, ICH9LPCPMReg= s *pm, Error **errp) ich9_pm_get_cpu_hotplug_legacy, ich9_pm_set_cpu_hotplug_legacy, NULL); - object_property_add(obj, ACPI_PM_PROP_S3_DISABLED, "uint8", + object_property_add(obj, ACPI_PM_PROP_S3_DISABLED, "bool", ich9_pm_get_disable_s3, ich9_pm_set_disable_s3, NULL, pm, NULL); - object_property_add(obj, ACPI_PM_PROP_S4_DISABLED, "uint8", + object_property_add(obj, ACPI_PM_PROP_S4_DISABLED, "bool", ich9_pm_get_disable_s4, ich9_pm_set_disable_s4, NULL, pm, NULL); diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c index a553a7e110..74692336b5 100644 --- a/hw/acpi/piix4.c +++ b/hw/acpi/piix4.c @@ -83,8 +83,8 @@ typedef struct PIIX4PMState { AcpiPciHpState acpi_pci_hotplug; bool use_acpi_pci_hotplug; =20 - uint8_t disable_s3; - uint8_t disable_s4; + bool disable_s3; + bool disable_s4; uint8_t s4_val; =20 bool cpu_hotplug_legacy; @@ -670,8 +670,8 @@ static void piix4_send_gpe(AcpiDeviceIf *adev, AcpiEven= tStatusBits ev) =20 static Property piix4_pm_properties[] =3D { DEFINE_PROP_UINT32("smb_io_base", PIIX4PMState, smb_io_base, 0), - DEFINE_PROP_UINT8(ACPI_PM_PROP_S3_DISABLED, PIIX4PMState, disable_s3, = 0), - DEFINE_PROP_UINT8(ACPI_PM_PROP_S4_DISABLED, PIIX4PMState, disable_s4, = 0), + DEFINE_PROP_BOOL(ACPI_PM_PROP_S3_DISABLED, PIIX4PMState, disable_s3, f= alse), + DEFINE_PROP_BOOL(ACPI_PM_PROP_S4_DISABLED, PIIX4PMState, disable_s4, f= alse), DEFINE_PROP_UINT8(ACPI_PM_PROP_S4_VAL, PIIX4PMState, s4_val, 2), DEFINE_PROP_BOOL("acpi-pci-hotplug-with-bridge-support", PIIX4PMState, use_acpi_pci_hotplug, true), diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 1707fae9bf..27ad420914 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -22,6 +22,7 @@ =20 #include "qemu/osdep.h" #include "qapi/error.h" +#include "qapi/qmp/types.h" #include "acpi-build.h" #include "qemu-common.h" #include "qemu/bitmap.h" @@ -149,14 +150,14 @@ static void acpi_get_pm_info(AcpiPmInfo *pm) /* Fill in optional s3/s4 related properties */ o =3D object_property_get_qobject(obj, ACPI_PM_PROP_S3_DISABLED, NULL); if (o) { - pm->s3_disabled =3D qnum_get_uint(qobject_to_qnum(o), &error_abort= ); + pm->s3_disabled =3D qbool_get_bool(qobject_to_qbool(o)); } else { pm->s3_disabled =3D false; } qobject_decref(o); o =3D object_property_get_qobject(obj, ACPI_PM_PROP_S4_DISABLED, NULL); if (o) { - pm->s4_disabled =3D qnum_get_uint(qobject_to_qnum(o), &error_abort= ); + pm->s4_disabled =3D qbool_get_bool(qobject_to_qbool(o)); } else { pm->s4_disabled =3D false; } --=20 2.13.0.rc1.16.gd80b50c3f From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494351946343104.62394548065106; Tue, 9 May 2017 10:45:46 -0700 (PDT) Received: from localhost ([::1]:38675 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d89Ci-0005gY-Tj for importer@patchew.org; Tue, 09 May 2017 13:45:44 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46078) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d897S-0000r9-OY for qemu-devel@nongnu.org; Tue, 09 May 2017 13:40:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d897L-00058L-TA for qemu-devel@nongnu.org; Tue, 09 May 2017 13:40:18 -0400 Received: from mx1.redhat.com ([209.132.183.28]:45954) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d897L-00057x-Jg for qemu-devel@nongnu.org; Tue, 09 May 2017 13:40:11 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7FD52804F1 for ; Tue, 9 May 2017 17:40:10 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id 788718AC51; Tue, 9 May 2017 17:40:03 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 7FD52804F1 Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 7FD52804F1 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:57 +0300 Message-Id: <20170509173559.31598-16-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 09 May 2017 17:40:10 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 15/17] Use uint property getter/setter where appropriate X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" All those property usages are associated with unsigned integers, so use appropriate getter/setter. Signed-off-by: Marc-Andr=C3=A9 Lureau --- include/hw/isa/isa.h | 2 +- hw/acpi/memory_hotplug.c | 10 ++++---- hw/acpi/nvdimm.c | 10 ++++---- hw/acpi/pcihp.c | 6 ++--- hw/arm/aspeed.c | 4 ++-- hw/arm/bcm2835_peripherals.c | 9 ++++---- hw/arm/raspi.c | 4 ++-- hw/core/platform-bus.c | 2 +- hw/i386/acpi-build.c | 55 ++++++++++++++++++++++------------------= ---- hw/i386/pc.c | 6 ++--- hw/i386/xen/xen-hvm.c | 6 ++--- hw/intc/arm_gicv3_common.c | 2 +- hw/mem/pc-dimm.c | 5 ++-- hw/misc/auxbus.c | 2 +- hw/misc/pvpanic.c | 2 +- hw/ppc/pnv_core.c | 2 +- hw/ppc/spapr.c | 8 ++++--- numa.c | 6 ++--- target/i386/cpu.c | 4 ++-- ui/console.c | 4 ++-- 20 files changed, 77 insertions(+), 72 deletions(-) diff --git a/include/hw/isa/isa.h b/include/hw/isa/isa.h index c2fdd70cdc..95593408ef 100644 --- a/include/hw/isa/isa.h +++ b/include/hw/isa/isa.h @@ -29,7 +29,7 @@ static inline uint16_t applesmc_port(void) Object *obj =3D object_resolve_path_type("", TYPE_APPLE_SMC, NULL); =20 if (obj) { - return object_property_get_int(obj, APPLESMC_PROP_IO_BASE, NULL); + return object_property_get_uint(obj, APPLESMC_PROP_IO_BASE, NULL); } return 0; } diff --git a/hw/acpi/memory_hotplug.c b/hw/acpi/memory_hotplug.c index 210073d283..db3c89ceab 100644 --- a/hw/acpi/memory_hotplug.c +++ b/hw/acpi/memory_hotplug.c @@ -83,11 +83,12 @@ static uint64_t acpi_memory_hotplug_read(void *opaque, = hwaddr addr, o =3D OBJECT(mdev->dimm); switch (addr) { case 0x0: /* Lo part of phys address where DIMM is mapped */ - val =3D o ? object_property_get_int(o, PC_DIMM_ADDR_PROP, NULL) : = 0; + val =3D o ? object_property_get_uint(o, PC_DIMM_ADDR_PROP, NULL) := 0; trace_mhp_acpi_read_addr_lo(mem_st->selector, val); break; case 0x4: /* Hi part of phys address where DIMM is mapped */ - val =3D o ? object_property_get_int(o, PC_DIMM_ADDR_PROP, NULL) >>= 32 : 0; + val =3D + o ? object_property_get_uint(o, PC_DIMM_ADDR_PROP, NULL) >> 32= : 0; trace_mhp_acpi_read_addr_hi(mem_st->selector, val); break; case 0x8: /* Lo part of DIMM size */ @@ -95,11 +96,12 @@ static uint64_t acpi_memory_hotplug_read(void *opaque, = hwaddr addr, trace_mhp_acpi_read_size_lo(mem_st->selector, val); break; case 0xc: /* Hi part of DIMM size */ - val =3D o ? object_property_get_int(o, PC_DIMM_SIZE_PROP, NULL) >>= 32 : 0; + val =3D + o ? object_property_get_int(o, PC_DIMM_SIZE_PROP, NULL) >> 32 = : 0; trace_mhp_acpi_read_size_hi(mem_st->selector, val); break; case 0x10: /* node proximity for _PXM method */ - val =3D o ? object_property_get_int(o, PC_DIMM_NODE_PROP, NULL) : = 0; + val =3D o ? object_property_get_uint(o, PC_DIMM_NODE_PROP, NULL) := 0; trace_mhp_acpi_read_pxm(mem_st->selector, val); break; case 0x14: /* pack and return is_* fields */ diff --git a/hw/acpi/nvdimm.c b/hw/acpi/nvdimm.c index 8e7d6ec034..e57027149d 100644 --- a/hw/acpi/nvdimm.c +++ b/hw/acpi/nvdimm.c @@ -236,14 +236,14 @@ static void nvdimm_build_structure_spa(GArray *structures, DeviceState *dev) { NvdimmNfitSpa *nfit_spa; - uint64_t addr =3D object_property_get_int(OBJECT(dev), PC_DIMM_ADDR_PR= OP, - NULL); + uint64_t addr =3D object_property_get_uint(OBJECT(dev), PC_DIMM_ADDR_P= ROP, + NULL); uint64_t size =3D object_property_get_int(OBJECT(dev), PC_DIMM_SIZE_PR= OP, NULL); - uint32_t node =3D object_property_get_int(OBJECT(dev), PC_DIMM_NODE_PR= OP, - NULL); + uint32_t node =3D object_property_get_uint(OBJECT(dev), PC_DIMM_NODE_P= ROP, + NULL); int slot =3D object_property_get_int(OBJECT(dev), PC_DIMM_SLOT_PROP, - NULL); + NULL); =20 nfit_spa =3D acpi_data_push(structures, sizeof(*nfit_spa)); =20 diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c index 3a531a4416..c420a388ea 100644 --- a/hw/acpi/pcihp.c +++ b/hw/acpi/pcihp.c @@ -62,10 +62,10 @@ typedef struct AcpiPciHpFind { static int acpi_pcihp_get_bsel(PCIBus *bus) { Error *local_err =3D NULL; - int64_t bsel =3D object_property_get_int(OBJECT(bus), ACPI_PCIHP_PROP_= BSEL, - &local_err); + uint64_t bsel =3D object_property_get_uint(OBJECT(bus), ACPI_PCIHP_PRO= P_BSEL, + &local_err); =20 - if (local_err || bsel < 0 || bsel >=3D ACPI_PCIHP_MAX_HOTPLUG_BUS) { + if (local_err || bsel >=3D ACPI_PCIHP_MAX_HOTPLUG_BUS) { if (local_err) { error_free(local_err); } diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c index 283c038814..4af422909f 100644 --- a/hw/arm/aspeed.c +++ b/hw/arm/aspeed.c @@ -187,8 +187,8 @@ static void aspeed_board_init(MachineState *machine, * Allocate RAM after the memory controller has checked the size * was valid. If not, a default value is used. */ - ram_size =3D object_property_get_int(OBJECT(&bmc->soc), "ram-size", - &error_abort); + ram_size =3D object_property_get_uint(OBJECT(&bmc->soc), "ram-size", + &error_abort); =20 memory_region_allocate_system_memory(&bmc->ram, NULL, "ram", ram_size); memory_region_add_subregion(get_system_memory(), sc->info->sdram_base, diff --git a/hw/arm/bcm2835_peripherals.c b/hw/arm/bcm2835_peripherals.c index 369ef1e3bd..b168c6f83e 100644 --- a/hw/arm/bcm2835_peripherals.c +++ b/hw/arm/bcm2835_peripherals.c @@ -126,7 +126,7 @@ static void bcm2835_peripherals_realize(DeviceState *de= v, Error **errp) Object *obj; MemoryRegion *ram; Error *err =3D NULL; - uint32_t ram_size, vcram_size; + uint64_t ram_size, vcram_size; int n; =20 obj =3D object_property_get_link(OBJECT(dev), "ram", &err); @@ -208,15 +208,14 @@ static void bcm2835_peripherals_realize(DeviceState *= dev, Error **errp) INTERRUPT_ARM_MAILBOX)); =20 /* Framebuffer */ - vcram_size =3D (uint32_t)object_property_get_int(OBJECT(s), "vcram-siz= e", - &err); + vcram_size =3D object_property_get_uint(OBJECT(s), "vcram-size", &err); if (err) { error_propagate(errp, err); return; } =20 - object_property_set_int(OBJECT(&s->fb), ram_size - vcram_size, - "vcram-base", &err); + object_property_set_uint(OBJECT(&s->fb), ram_size - vcram_size, + "vcram-base", &err); if (err) { error_propagate(errp, err); return; diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c index 2b295f14c4..32cdc98c6d 100644 --- a/hw/arm/raspi.c +++ b/hw/arm/raspi.c @@ -153,8 +153,8 @@ static void raspi2_init(MachineState *machine) qdev_prop_set_drive(carddev, "drive", blk, &error_fatal); object_property_set_bool(OBJECT(carddev), true, "realized", &error_fat= al); =20 - vcram_size =3D object_property_get_int(OBJECT(&s->soc), "vcram-size", - &error_abort); + vcram_size =3D object_property_get_uint(OBJECT(&s->soc), "vcram-size", + &error_abort); setup_boot(machine, 2, machine->ram_size - vcram_size); } =20 diff --git a/hw/core/platform-bus.c b/hw/core/platform-bus.c index 329ac670c0..33d32fbf22 100644 --- a/hw/core/platform-bus.c +++ b/hw/core/platform-bus.c @@ -71,7 +71,7 @@ hwaddr platform_bus_get_mmio_addr(PlatformBusDevice *pbus= , SysBusDevice *sbdev, return -1; } =20 - return object_property_get_int(OBJECT(sbdev_mr), "addr", NULL); + return object_property_get_uint(OBJECT(sbdev_mr), "addr", NULL); } =20 static void platform_bus_count_irqs(SysBusDevice *sbdev, void *opaque) diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 27ad420914..76d27ff024 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -137,9 +137,9 @@ static void acpi_get_pm_info(AcpiPmInfo *pm) obj =3D piix; pm->cpu_hp_io_base =3D PIIX4_CPU_HOTPLUG_IO_BASE; pm->pcihp_io_base =3D - object_property_get_int(obj, ACPI_PCIHP_IO_BASE_PROP, NULL); + object_property_get_uint(obj, ACPI_PCIHP_IO_BASE_PROP, NULL); pm->pcihp_io_len =3D - object_property_get_int(obj, ACPI_PCIHP_IO_LEN_PROP, NULL); + object_property_get_uint(obj, ACPI_PCIHP_IO_LEN_PROP, NULL); } if (lpc) { obj =3D lpc; @@ -171,20 +171,21 @@ static void acpi_get_pm_info(AcpiPmInfo *pm) qobject_decref(o); =20 /* Fill in mandatory properties */ - pm->sci_int =3D object_property_get_int(obj, ACPI_PM_PROP_SCI_INT, NUL= L); - - pm->acpi_enable_cmd =3D object_property_get_int(obj, - ACPI_PM_PROP_ACPI_ENABLE= _CMD, - NULL); - pm->acpi_disable_cmd =3D object_property_get_int(obj, - ACPI_PM_PROP_ACPI_DISABL= E_CMD, - NULL); - pm->io_base =3D object_property_get_int(obj, ACPI_PM_PROP_PM_IO_BASE, - NULL); - pm->gpe0_blk =3D object_property_get_int(obj, ACPI_PM_PROP_GPE0_BLK, + pm->sci_int =3D object_property_get_uint(obj, ACPI_PM_PROP_SCI_INT, NU= LL); + + pm->acpi_enable_cmd =3D object_property_get_uint(obj, + ACPI_PM_PROP_ACPI_ENABL= E_CMD, + NULL); + pm->acpi_disable_cmd =3D + object_property_get_uint(obj, + ACPI_PM_PROP_ACPI_DISABLE_CMD, + NULL); + pm->io_base =3D object_property_get_uint(obj, ACPI_PM_PROP_PM_IO_BASE, NULL); - pm->gpe0_blk_len =3D object_property_get_int(obj, ACPI_PM_PROP_GPE0_BL= K_LEN, - NULL); + pm->gpe0_blk =3D object_property_get_uint(obj, ACPI_PM_PROP_GPE0_BLK, + NULL); + pm->gpe0_blk_len =3D object_property_get_uint(obj, ACPI_PM_PROP_GPE0_B= LK_LEN, + NULL); pm->pcihp_bridge_en =3D object_property_get_bool(obj, "acpi-pci-hotplug-with-bridge-suppor= t", NULL); @@ -237,19 +238,19 @@ static void acpi_get_pci_holes(Range *hole, Range *ho= le64) g_assert(pci_host); =20 range_set_bounds1(hole, - object_property_get_int(pci_host, - PCI_HOST_PROP_PCI_HOLE_START, - NULL), - object_property_get_int(pci_host, - PCI_HOST_PROP_PCI_HOLE_END, - NULL)); + object_property_get_uint(pci_host, + PCI_HOST_PROP_PCI_HOLE_STAR= T, + NULL), + object_property_get_uint(pci_host, + PCI_HOST_PROP_PCI_HOLE_END, + NULL)); range_set_bounds1(hole64, - object_property_get_int(pci_host, - PCI_HOST_PROP_PCI_HOLE64_STA= RT, - NULL), - object_property_get_int(pci_host, - PCI_HOST_PROP_PCI_HOLE64_END, - NULL)); + object_property_get_uint(pci_host, + PCI_HOST_PROP_PCI_HOLE64_ST= ART, + NULL), + object_property_get_uint(pci_host, + PCI_HOST_PROP_PCI_HOLE64_EN= D, + NULL)); } =20 #define ACPI_PORT_SMI_CMD 0x00b2 /* TODO: this is APM_CNT_IOPORT= */ diff --git a/hw/i386/pc.c b/hw/i386/pc.c index f3b372a18f..8dc4507aa5 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -347,7 +347,7 @@ static int check_fdc(Object *obj, void *opaque) return 0; } =20 - iobase =3D object_property_get_int(obj, "iobase", &local_err); + iobase =3D object_property_get_uint(obj, "iobase", &local_err); if (local_err || iobase !=3D 0x3f0) { error_free(local_err); return 0; @@ -1100,7 +1100,7 @@ static void pc_new_cpu(const char *typename, int64_t = apic_id, Error **errp) =20 cpu =3D object_new(typename); =20 - object_property_set_int(cpu, apic_id, "apic-id", &local_err); + object_property_set_uint(cpu, apic_id, "apic-id", &local_err); object_property_set_bool(cpu, true, "realized", &local_err); =20 object_unref(cpu); @@ -1560,7 +1560,7 @@ void pc_basic_device_init(ISABus *isa_bus, qemu_irq *= gsi, * and earlier, use IRQ2 for compat. Otherwise, use IRQ16~23, * IRQ8 and IRQ2. */ - uint8_t compat =3D object_property_get_int(OBJECT(hpet), + uint8_t compat =3D object_property_get_uint(OBJECT(hpet), HPET_INTCAP, NULL); if (!compat) { qdev_prop_set_uint32(hpet, HPET_INTCAP, hpet_irqs); diff --git a/hw/i386/xen/xen-hvm.c b/hw/i386/xen/xen-hvm.c index b1c05ffb86..cec259f82d 100644 --- a/hw/i386/xen/xen-hvm.c +++ b/hw/i386/xen/xen-hvm.c @@ -183,9 +183,9 @@ static void xen_ram_init(PCMachineState *pcms, { MemoryRegion *sysmem =3D get_system_memory(); ram_addr_t block_len; - uint64_t user_lowmem =3D object_property_get_int(qdev_get_machine(), - PC_MACHINE_MAX_RAM_BELO= W_4G, - &error_abort); + uint64_t user_lowmem =3D object_property_get_uint(qdev_get_machine(), + PC_MACHINE_MAX_RAM_BEL= OW_4G, + &error_abort); =20 /* Handle the machine opt max-ram-below-4g. It is basically doing * min(xen limit, user limit). diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c index c6493d6c07..e2064cd8c5 100644 --- a/hw/intc/arm_gicv3_common.c +++ b/hw/intc/arm_gicv3_common.c @@ -267,7 +267,7 @@ static void arm_gicv3_common_realize(DeviceState *dev, = Error **errp) * VLPIS =3D=3D 0 (virtual LPIs not supported) * PLPIS =3D=3D 0 (physical LPIs not supported) */ - cpu_affid =3D object_property_get_int(OBJECT(cpu), "mp-affinity", = NULL); + cpu_affid =3D object_property_get_uint(OBJECT(cpu), "mp-affinity",= NULL); last =3D (i =3D=3D s->num_cpu - 1); =20 /* The CPU mp-affinity property is in MPIDR register format; squash diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c index 9e8dab0e89..f6def8c239 100644 --- a/hw/mem/pc-dimm.c +++ b/hw/mem/pc-dimm.c @@ -46,7 +46,8 @@ void pc_dimm_memory_plug(DeviceState *dev, MemoryHotplugS= tate *hpms, uint64_t existing_dimms_capacity =3D 0; uint64_t addr; =20 - addr =3D object_property_get_int(OBJECT(dimm), PC_DIMM_ADDR_PROP, &loc= al_err); + addr =3D object_property_get_uint(OBJECT(dimm), + PC_DIMM_ADDR_PROP, &local_err); if (local_err) { goto out; } @@ -73,7 +74,7 @@ void pc_dimm_memory_plug(DeviceState *dev, MemoryHotplugS= tate *hpms, goto out; } =20 - object_property_set_int(OBJECT(dev), addr, PC_DIMM_ADDR_PROP, &local_e= rr); + object_property_set_uint(OBJECT(dev), addr, PC_DIMM_ADDR_PROP, &local_= err); if (local_err) { goto out; } diff --git a/hw/misc/auxbus.c b/hw/misc/auxbus.c index e4a7ba41de..8a90ddda84 100644 --- a/hw/misc/auxbus.c +++ b/hw/misc/auxbus.c @@ -244,7 +244,7 @@ static void aux_slave_dev_print(Monitor *mon, DeviceSta= te *dev, int indent) =20 monitor_printf(mon, "%*smemory " TARGET_FMT_plx "/" TARGET_FMT_plx "\n= ", indent, "", - object_property_get_int(OBJECT(s->mmio), "addr", NULL), + object_property_get_uint(OBJECT(s->mmio), "addr", NULL), memory_region_size(s->mmio)); } =20 diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c index 57da7f2199..2b1e9a6450 100644 --- a/hw/misc/pvpanic.c +++ b/hw/misc/pvpanic.c @@ -111,7 +111,7 @@ uint16_t pvpanic_port(void) if (!o) { return 0; } - return object_property_get_int(o, PVPANIC_IOPORT_PROP, NULL); + return object_property_get_uint(o, PVPANIC_IOPORT_PROP, NULL); } =20 static Property pvpanic_isa_properties[] =3D { diff --git a/hw/ppc/pnv_core.c b/hw/ppc/pnv_core.c index 1b7ec70f03..142bad1e57 100644 --- a/hw/ppc/pnv_core.c +++ b/hw/ppc/pnv_core.c @@ -51,7 +51,7 @@ static void powernv_cpu_init(PowerPCCPU *cpu, Error **err= p) int thread_index =3D 0; /* TODO: TCG supports only one thread */ ppc_spr_t *pir =3D &env->spr_cb[SPR_PIR]; =20 - core_pir =3D object_property_get_int(OBJECT(cpu), "core-pir", &error_a= bort); + core_pir =3D object_property_get_uint(OBJECT(cpu), "core-pir", &error_= abort); =20 /* * The PIR of a thread is the core PIR + the thread index. We will diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 80d12d005c..9b9a4e8817 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -2582,7 +2582,8 @@ static void spapr_memory_plug(HotplugHandler *hotplug= _dev, DeviceState *dev, goto out; } =20 - addr =3D object_property_get_int(OBJECT(dimm), PC_DIMM_ADDR_PROP, &loc= al_err); + addr =3D object_property_get_uint(OBJECT(dimm), + PC_DIMM_ADDR_PROP, &local_err); if (local_err) { pc_dimm_memory_unplug(dev, &ms->hotplug_memory, mr); goto out; @@ -2670,7 +2671,8 @@ static void spapr_memory_unplug_request(HotplugHandle= r *hotplug_dev, uint64_t size =3D memory_region_size(mr); uint64_t addr; =20 - addr =3D object_property_get_int(OBJECT(dimm), PC_DIMM_ADDR_PROP, &loc= al_err); + addr =3D object_property_get_uint(OBJECT(dimm), + PC_DIMM_ADDR_PROP, &local_err); if (local_err) { goto out; } @@ -2878,7 +2880,7 @@ static void spapr_machine_device_plug(HotplugHandler = *hotplug_dev, error_setg(errp, "Memory hotplug not supported for this machin= e"); return; } - node =3D object_property_get_int(OBJECT(dev), PC_DIMM_NODE_PROP, e= rrp); + node =3D object_property_get_uint(OBJECT(dev), PC_DIMM_NODE_PROP, = errp); if (*errp) { return; } diff --git a/numa.c b/numa.c index 6fc2393ddd..e32259fedb 100644 --- a/numa.c +++ b/numa.c @@ -205,7 +205,7 @@ static void numa_node_parse(NumaNodeOptions *node, Qemu= Opts *opts, Error **errp) } =20 object_ref(o); - numa_info[nodenr].node_mem =3D object_property_get_int(o, "size", = NULL); + numa_info[nodenr].node_mem =3D object_property_get_uint(o, "size",= NULL); numa_info[nodenr].node_memdev =3D MEMORY_BACKEND(o); } numa_info[nodenr].present =3D true; @@ -527,8 +527,8 @@ static int query_memdev(Object *obj, void *opaque) m->value->id =3D object_property_get_str(obj, "id", NULL); m->value->has_id =3D !!m->value->id; =20 - m->value->size =3D object_property_get_int(obj, "size", - &error_abort); + m->value->size =3D object_property_get_uint(obj, "size", + &error_abort); m->value->merge =3D object_property_get_bool(obj, "merge", &error_abort); m->value->dump =3D object_property_get_bool(obj, "dump", diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 5bb8131bb8..eb200ef58b 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -2324,8 +2324,8 @@ static void x86_cpu_load_def(X86CPU *cpu, X86CPUDefin= ition *def, Error **errp) */ =20 /* CPU models only set _minimum_ values for level/xlevel: */ - object_property_set_int(OBJECT(cpu), def->level, "min-level", errp); - object_property_set_int(OBJECT(cpu), def->xlevel, "min-xlevel", errp); + object_property_set_uint(OBJECT(cpu), def->level, "min-level", errp); + object_property_set_uint(OBJECT(cpu), def->xlevel, "min-xlevel", errp); =20 object_property_set_int(OBJECT(cpu), def->family, "family", errp); object_property_set_int(OBJECT(cpu), def->model, "model", errp); diff --git a/ui/console.c b/ui/console.c index ac66b3c910..ad3f7c6a2c 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1872,8 +1872,8 @@ QemuConsole *qemu_console_lookup_by_device(DeviceStat= e *dev, uint32_t head) if (DEVICE(obj) !=3D dev) { continue; } - h =3D object_property_get_int(OBJECT(consoles[i]), - "head", &error_abort); + h =3D object_property_get_uint(OBJECT(consoles[i]), + "head", &error_abort); if (h !=3D head) { continue; } --=20 2.13.0.rc1.16.gd80b50c3f From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494352133398223.39715249230426; Tue, 9 May 2017 10:48:53 -0700 (PDT) Received: from localhost ([::1]:38689 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d89Fk-0000Ze-3I for importer@patchew.org; Tue, 09 May 2017 13:48:52 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46132) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d897d-00010x-GY for qemu-devel@nongnu.org; Tue, 09 May 2017 13:40:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d897Y-00059u-LA for qemu-devel@nongnu.org; Tue, 09 May 2017 13:40:29 -0400 Received: from mx1.redhat.com ([209.132.183.28]:46316) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d897Y-00059m-CQ for qemu-devel@nongnu.org; Tue, 09 May 2017 13:40:24 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 41CC583F3E for ; Tue, 9 May 2017 17:40:23 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id 16D8718231; Tue, 9 May 2017 17:40:16 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 41CC583F3E Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 41CC583F3E From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:58 +0300 Message-Id: <20170509173559.31598-17-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 09 May 2017 17:40:23 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 16/17] RFC: qdict: add uint X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Similar to int support, add uint support. Note this is RFC because this is currently unused in qemu, I haven't found a good user for it yet (kaslr qemu-ga code did use it though). Signed-off-by: Marc-Andr=C3=A9 Lureau --- include/qapi/qmp/qdict.h | 5 +++++ qobject/qdict.c | 38 ++++++++++++++++++++++++++++++++++++++ tests/check-qdict.c | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) diff --git a/include/qapi/qmp/qdict.h b/include/qapi/qmp/qdict.h index 363e431106..8c7c2b762b 100644 --- a/include/qapi/qmp/qdict.h +++ b/include/qapi/qmp/qdict.h @@ -56,6 +56,8 @@ void qdict_destroy_obj(QObject *obj); /* Helpers for int, bool, and string */ #define qdict_put_int(qdict, key, value) \ qdict_put(qdict, key, qnum_from_int(value)) +#define qdict_put_uint(qdict, key, value) \ + qdict_put(qdict, key, qnum_from_uint(value)) #define qdict_put_bool(qdict, key, value) \ qdict_put(qdict, key, qbool_from_bool(value)) #define qdict_put_str(qdict, key, value) \ @@ -64,12 +66,15 @@ void qdict_destroy_obj(QObject *obj); /* High level helpers */ double qdict_get_double(const QDict *qdict, const char *key); int64_t qdict_get_int(const QDict *qdict, const char *key); +uint64_t qdict_get_uint(const QDict *qdict, const char *key); bool qdict_get_bool(const QDict *qdict, const char *key); QList *qdict_get_qlist(const QDict *qdict, const char *key); QDict *qdict_get_qdict(const QDict *qdict, const char *key); const char *qdict_get_str(const QDict *qdict, const char *key); int64_t qdict_get_try_int(const QDict *qdict, const char *key, int64_t def_value); +uint64_t qdict_get_try_uint(const QDict *qdict, const char *key, + uint64_t def_value); bool qdict_get_try_bool(const QDict *qdict, const char *key, bool def_valu= e); const char *qdict_get_try_str(const QDict *qdict, const char *key); =20 diff --git a/qobject/qdict.c b/qobject/qdict.c index ad5bab9572..34478fbdd4 100644 --- a/qobject/qdict.c +++ b/qobject/qdict.c @@ -202,6 +202,19 @@ int64_t qdict_get_int(const QDict *qdict, const char *= key) } =20 /** + * qdict_get_uint(): Get an unsigned integer mapped by 'key' + * + * This function assumes that 'key' exists and it stores a + * QNum int object. + * + * Return unsigned integer mapped by 'key'. + */ +uint64_t qdict_get_uint(const QDict *qdict, const char *key) +{ + return qnum_get_uint(qobject_to_qnum(qdict_get(qdict, key)), &error_ab= ort); +} + +/** * qdict_get_bool(): Get a bool mapped by 'key' * * This function assumes that 'key' exists and it stores a @@ -270,6 +283,31 @@ int64_t qdict_get_try_int(const QDict *qdict, const ch= ar *key, } =20 /** + * qdict_get_try_uint(): Try to get usigned integer mapped by 'key' + * + * Return unsigned integer mapped by 'key', if it is not present in + * the dictionary or if the stored object is not of QNum type + * 'def_value' will be returned. + */ +uint64_t qdict_get_try_uint(const QDict *qdict, const char *key, + uint64_t def_value) +{ + Error *err =3D NULL; + QNum *qnum =3D qobject_to_qnum(qdict_get(qdict, key)); + uint64_t val =3D def_value; + + if (qnum) { + val =3D qnum_get_uint(qnum, &err); + } + if (err) { + error_free(err); + val =3D def_value; + } + + return val; +} + +/** * qdict_get_try_bool(): Try to get a bool mapped by 'key' * * Return bool mapped by 'key', if it is not present in the diff --git a/tests/check-qdict.c b/tests/check-qdict.c index bcd06a7d6b..7f9ea67862 100644 --- a/tests/check-qdict.c +++ b/tests/check-qdict.c @@ -105,6 +105,21 @@ static void qdict_get_int_test(void) QDECREF(tests_dict); } =20 +static void qdict_get_uint_test(void) +{ + uint64_t ret; + const uint64_t value =3D UINT64_MAX; + const char *key =3D "uint"; + QDict *tests_dict =3D qdict_new(); + + qdict_put_uint(tests_dict, key, value); + + ret =3D qdict_get_uint(tests_dict, key); + g_assert(ret =3D=3D value); + + QDECREF(tests_dict); +} + static void qdict_get_try_int_test(void) { int ret; @@ -120,6 +135,21 @@ static void qdict_get_try_int_test(void) QDECREF(tests_dict); } =20 +static void qdict_get_try_uint_test(void) +{ + uint64_t ret; + const uint64_t value =3D UINT64_MAX; + const char *key =3D "uint"; + QDict *tests_dict =3D qdict_new(); + + qdict_put_uint(tests_dict, key, value); + + ret =3D qdict_get_try_uint(tests_dict, key, 0); + g_assert(ret =3D=3D value); + + QDECREF(tests_dict); +} + static void qdict_get_str_test(void) { const char *p; @@ -852,7 +882,9 @@ int main(int argc, char **argv) /* Continue, but now with fixtures */ g_test_add_func("/public/get", qdict_get_test); g_test_add_func("/public/get_int", qdict_get_int_test); + g_test_add_func("/public/get_uint", qdict_get_uint_test); g_test_add_func("/public/get_try_int", qdict_get_try_int_test); + g_test_add_func("/public/get_try_uint", qdict_get_try_uint_test); g_test_add_func("/public/get_str", qdict_get_str_test); g_test_add_func("/public/get_try_str", qdict_get_try_str_test); g_test_add_func("/public/defaults", qdict_defaults_test); --=20 2.13.0.rc1.16.gd80b50c3f From nobody Mon Apr 29 01:20:48 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494352260034750.8013875269922; Tue, 9 May 2017 10:51:00 -0700 (PDT) Received: from localhost ([::1]:38701 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d89Hl-0002Rq-JU for importer@patchew.org; Tue, 09 May 2017 13:50:57 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46277) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d897q-0001Cy-1k for qemu-devel@nongnu.org; Tue, 09 May 2017 13:40:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d897l-0005Lw-4k for qemu-devel@nongnu.org; Tue, 09 May 2017 13:40:42 -0400 Received: from mx1.redhat.com ([209.132.183.28]:38382) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d897k-0005Ka-SP for qemu-devel@nongnu.org; Tue, 09 May 2017 13:40:37 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CED407F6A0 for ; Tue, 9 May 2017 17:40:35 +0000 (UTC) Received: from localhost (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0535E5C881; Tue, 9 May 2017 17:40:30 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com CED407F6A0 Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=marcandre.lureau@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com CED407F6A0 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Tue, 9 May 2017 20:35:59 +0300 Message-Id: <20170509173559.31598-18-marcandre.lureau@redhat.com> In-Reply-To: <20170509173559.31598-1-marcandre.lureau@redhat.com> References: <20170509173559.31598-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 09 May 2017 17:40:35 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 17/17] qobject: move dump_qobject() from block/ to qobject/ X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The dump functions could be generally useful for any qobject user or for debugging etc. Signed-off-by: Marc-Andr=C3=A9 Lureau --- include/qapi/qmp/qdict.h | 2 ++ include/qapi/qmp/qlist.h | 2 ++ include/qapi/qmp/qobject.h | 7 ++++ block/qapi.c | 90 +++---------------------------------------= ---- qobject/qdict.c | 30 ++++++++++++++++ qobject/qlist.c | 23 ++++++++++++ qobject/qobject.c | 19 ++++++++++ tests/check-qjson.c | 19 ++++++++++ 8 files changed, 106 insertions(+), 86 deletions(-) diff --git a/include/qapi/qmp/qdict.h b/include/qapi/qmp/qdict.h index 8c7c2b762b..1ef3bc8cda 100644 --- a/include/qapi/qmp/qdict.h +++ b/include/qapi/qmp/qdict.h @@ -91,4 +91,6 @@ QObject *qdict_crumple(const QDict *src, Error **errp); =20 void qdict_join(QDict *dest, QDict *src, bool overwrite); =20 +char *qdict_to_string(QDict *dict, int indent); + #endif /* QDICT_H */ diff --git a/include/qapi/qmp/qlist.h b/include/qapi/qmp/qlist.h index 2f2c199632..105b16f074 100644 --- a/include/qapi/qmp/qlist.h +++ b/include/qapi/qmp/qlist.h @@ -59,6 +59,8 @@ size_t qlist_size(const QList *qlist); QList *qobject_to_qlist(const QObject *obj); void qlist_destroy_obj(QObject *obj); =20 +char *qlist_to_string(QList *list, int indent); + static inline const QListEntry *qlist_first(const QList *qlist) { return QTAILQ_FIRST(&qlist->head); diff --git a/include/qapi/qmp/qobject.h b/include/qapi/qmp/qobject.h index b8ddbca405..0d6ae5048a 100644 --- a/include/qapi/qmp/qobject.h +++ b/include/qapi/qmp/qobject.h @@ -101,4 +101,11 @@ static inline QObject *qnull(void) return &qnull_; } =20 +char *qobject_to_string_indent(QObject *obj, int indent); + +static inline char *qobject_to_string(QObject *obj) +{ + return qobject_to_string_indent(obj, 0); +} + #endif /* QOBJECT_H */ diff --git a/block/qapi.c b/block/qapi.c index 2050df29e4..9b7d42e50a 100644 --- a/block/qapi.c +++ b/block/qapi.c @@ -586,101 +586,19 @@ void bdrv_snapshot_dump(fprintf_function func_fprint= f, void *f, } } =20 -static void dump_qdict(fprintf_function func_fprintf, void *f, int indenta= tion, - QDict *dict); -static void dump_qlist(fprintf_function func_fprintf, void *f, int indenta= tion, - QList *list); - -static void dump_qobject(fprintf_function func_fprintf, void *f, - int comp_indent, QObject *obj) -{ - switch (qobject_type(obj)) { - case QTYPE_QNUM: { - QNum *value =3D qobject_to_qnum(obj); - char *tmp =3D qnum_to_string(value); - func_fprintf(f, "%s", tmp); - g_free(tmp); - break; - } - case QTYPE_QSTRING: { - QString *value =3D qobject_to_qstring(obj); - func_fprintf(f, "%s", qstring_get_str(value)); - break; - } - case QTYPE_QDICT: { - QDict *value =3D qobject_to_qdict(obj); - dump_qdict(func_fprintf, f, comp_indent, value); - break; - } - case QTYPE_QLIST: { - QList *value =3D qobject_to_qlist(obj); - dump_qlist(func_fprintf, f, comp_indent, value); - break; - } - case QTYPE_QBOOL: { - QBool *value =3D qobject_to_qbool(obj); - func_fprintf(f, "%s", qbool_get_bool(value) ? "true" : "false"= ); - break; - } - default: - abort(); - } -} - -static void dump_qlist(fprintf_function func_fprintf, void *f, int indenta= tion, - QList *list) -{ - const QListEntry *entry; - int i =3D 0; - - for (entry =3D qlist_first(list); entry; entry =3D qlist_next(entry), = i++) { - QType type =3D qobject_type(entry->value); - bool composite =3D (type =3D=3D QTYPE_QDICT || type =3D=3D QTYPE_Q= LIST); - func_fprintf(f, "%*s[%i]:%c", indentation * 4, "", i, - composite ? '\n' : ' '); - dump_qobject(func_fprintf, f, indentation + 1, entry->value); - if (!composite) { - func_fprintf(f, "\n"); - } - } -} - -static void dump_qdict(fprintf_function func_fprintf, void *f, int indenta= tion, - QDict *dict) -{ - const QDictEntry *entry; - - for (entry =3D qdict_first(dict); entry; entry =3D qdict_next(dict, en= try)) { - QType type =3D qobject_type(entry->value); - bool composite =3D (type =3D=3D QTYPE_QDICT || type =3D=3D QTYPE_Q= LIST); - char *key =3D g_malloc(strlen(entry->key) + 1); - int i; - - /* replace dashes with spaces in key (variable) names */ - for (i =3D 0; entry->key[i]; i++) { - key[i] =3D entry->key[i] =3D=3D '-' ? ' ' : entry->key[i]; - } - key[i] =3D 0; - func_fprintf(f, "%*s%s:%c", indentation * 4, "", key, - composite ? '\n' : ' '); - dump_qobject(func_fprintf, f, indentation + 1, entry->value); - if (!composite) { - func_fprintf(f, "\n"); - } - g_free(key); - } -} - void bdrv_image_info_specific_dump(fprintf_function func_fprintf, void *f, ImageInfoSpecific *info_spec) { QObject *obj, *data; Visitor *v =3D qobject_output_visitor_new(&obj); + char *tmp; =20 visit_type_ImageInfoSpecific(v, NULL, &info_spec, &error_abort); visit_complete(v, &obj); data =3D qdict_get(qobject_to_qdict(obj), "data"); - dump_qobject(func_fprintf, f, 1, data); + tmp =3D qobject_to_string_indent(data, 1); + func_fprintf(f, "%s", tmp); + g_free(tmp); qobject_decref(obj); visit_free(v); } diff --git a/qobject/qdict.c b/qobject/qdict.c index 34478fbdd4..b325852351 100644 --- a/qobject/qdict.c +++ b/qobject/qdict.c @@ -1065,3 +1065,33 @@ void qdict_join(QDict *dest, QDict *src, bool overwr= ite) entry =3D next; } } + +char *qdict_to_string(QDict *dict, int indent) +{ + const QDictEntry *entry; + GString *str =3D g_string_new(NULL); + + for (entry =3D qdict_first(dict); entry; entry =3D qdict_next(dict, en= try)) { + QType type =3D qobject_type(entry->value); + bool composite =3D (type =3D=3D QTYPE_QDICT || type =3D=3D QTYPE_Q= LIST); + char *key =3D g_malloc(strlen(entry->key) + 1); + char *val =3D qobject_to_string_indent(entry->value, indent + 1); + int i; + + /* replace dashes with spaces in key (variable) names */ + for (i =3D 0; entry->key[i]; i++) { + key[i] =3D entry->key[i] =3D=3D '-' ? ' ' : entry->key[i]; + } + key[i] =3D 0; + g_string_append_printf(str, "%*s%s:", indent * 4, "", key); + g_string_append_c(str, composite ? '\n' : ' '); + g_string_append(str, val); + if (!composite) { + g_string_append_c(str, '\n'); + } + g_free(val); + g_free(key); + } + + return g_string_free(str, false); +} diff --git a/qobject/qlist.c b/qobject/qlist.c index 86b60cb88c..b769248290 100644 --- a/qobject/qlist.c +++ b/qobject/qlist.c @@ -158,3 +158,26 @@ void qlist_destroy_obj(QObject *obj) =20 g_free(qlist); } + +char *qlist_to_string(QList *list, int indent) +{ + GString *str =3D g_string_new(NULL); + const QListEntry *entry; + int i =3D 0; + + for (entry =3D qlist_first(list); entry; entry =3D qlist_next(entry), = i++) { + QType type =3D qobject_type(entry->value); + bool composite =3D (type =3D=3D QTYPE_QDICT || type =3D=3D QTYPE_Q= LIST); + char *val =3D qobject_to_string_indent(entry->value, indent + 1); + + g_string_append_printf(str, "%*s[%i]:", indent * 4, "", i); + g_string_append_c(str, composite ? '\n' : ' '); + g_string_append(str, val); + if (!composite) { + g_string_append_c(str, '\n'); + } + g_free(val); + } + + return g_string_free(str, false); +} diff --git a/qobject/qobject.c b/qobject/qobject.c index b0cafb66f1..64e959c54f 100644 --- a/qobject/qobject.c +++ b/qobject/qobject.c @@ -27,3 +27,22 @@ void qobject_destroy(QObject *obj) assert(QTYPE_QNULL < obj->type && obj->type < QTYPE__MAX); qdestroy[obj->type](obj); } + +char *qobject_to_string_indent(QObject *obj, int indent) +{ + switch (qobject_type(obj)) { + case QTYPE_QNUM: + return qnum_to_string(qobject_to_qnum(obj)); + case QTYPE_QSTRING: + return g_strdup(qstring_get_str(qobject_to_qstring(obj))); + case QTYPE_QDICT: + return qdict_to_string(qobject_to_qdict(obj), indent); + case QTYPE_QLIST: + return qlist_to_string(qobject_to_qlist(obj), indent); + case QTYPE_QBOOL: + return g_strdup(qbool_get_bool(qobject_to_qbool(obj)) ? + "true" : "false"); + default: + abort(); + } +} diff --git a/tests/check-qjson.c b/tests/check-qjson.c index 57c2366dc3..f97b177eb9 100644 --- a/tests/check-qjson.c +++ b/tests/check-qjson.c @@ -1349,6 +1349,23 @@ static void simple_whitespace(void) } } =20 +static void qobject_to_string_test(void) +{ + QObject *obj; + char *tmp; + + obj =3D qobject_from_json("[ 43, { 'c': { 'd' : 12 } }, [ 1, 2 ], 42 ]= ", + &error_abort); + tmp =3D qobject_to_string(obj); + g_assert_cmpstr(tmp, =3D=3D, + "[0]: 43\n" + "[1]:\n c:\n d: 12\n" + "[2]:\n [0]: 1\n [1]: 2\n" + "[3]: 42\n"); + g_free(tmp); + qobject_decref(obj); +} + static void simple_varargs(void) { QObject *embedded_obj; @@ -1522,5 +1539,7 @@ int main(int argc, char **argv) g_test_add_func("/errors/unterminated/literal", unterminated_literal); g_test_add_func("/errors/limits/nesting", limits_nesting); =20 + g_test_add_func("/qobject/to_string", qobject_to_string_test); + return g_test_run(); } --=20 2.13.0.rc1.16.gd80b50c3f