[libvirt] [PATCH 3/4] util: consolidate QEMU and LXC block io related duplicate code

2019-10-29 Thread Mao Zhongyi
Both qemu and lxc drivers have some duplicate code when
dealing with cgroups, such as virLXCCgroupSetupBlkioTune()
and qemuSetupBlkioCgroup(), duplicate code over 80, so
consolidate the same chunk into a separate routine.

Signed-off-by: Mao Zhongyi 
Signed-off-by: Zhang Shengju 
---
 src/libvirt_private.syms |  1 +
 src/lxc/lxc_cgroup.c | 56 +---
 src/qemu/qemu_cgroup.c   | 47 +--
 src/util/vircgroup.c | 61 
 src/util/vircgroup.h |  3 ++
 5 files changed, 67 insertions(+), 101 deletions(-)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 94509d6f43..3df2af55bd 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1685,6 +1685,7 @@ virCgroupSetMemoryHardLimit;
 virCgroupSetMemorySoftLimit;
 virCgroupSetMemSwapHardLimit;
 virCgroupSetOwner;
+virCgroupSetupBlkio;
 virCgroupSupportsCpuBW;
 virCgroupTerminateMachine;
 
diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c
index 0a019dc813..fdf8df79aa 100644
--- a/src/lxc/lxc_cgroup.c
+++ b/src/lxc/lxc_cgroup.c
@@ -102,60 +102,6 @@ static int virLXCCgroupSetupCpusetTune(virDomainDefPtr def,
 }
 
 
-static int virLXCCgroupSetupBlkioTune(virDomainDefPtr def,
-  virCgroupPtr cgroup)
-{
-size_t i;
-
-if (def->blkio.weight &&
-virCgroupSetBlkioWeight(cgroup, def->blkio.weight) < 0)
-return -1;
-
-if (def->blkio.ndevices) {
-for (i = 0; i < def->blkio.ndevices; i++) {
-virBlkioDevicePtr dev = >blkio.devices[i];
-
-if (dev->weight &&
-(virCgroupSetBlkioDeviceWeight(cgroup, dev->path,
-   dev->weight) < 0 ||
- virCgroupGetBlkioDeviceWeight(cgroup, dev->path,
-   >weight) < 0))
-return -1;
-
-if (dev->riops &&
-(virCgroupSetBlkioDeviceReadIops(cgroup, dev->path,
- dev->riops) < 0 ||
- virCgroupGetBlkioDeviceReadIops(cgroup, dev->path,
- >riops) < 0))
-return -1;
-
-if (dev->wiops &&
-(virCgroupSetBlkioDeviceWriteIops(cgroup, dev->path,
-  dev->wiops) < 0 ||
- virCgroupGetBlkioDeviceWriteIops(cgroup, dev->path,
-  >wiops) < 0))
-return -1;
-
-if (dev->rbps &&
-(virCgroupSetBlkioDeviceReadBps(cgroup, dev->path,
-dev->rbps) < 0 ||
- virCgroupGetBlkioDeviceReadBps(cgroup, dev->path,
->rbps) < 0))
-return -1;
-
-if (dev->wbps &&
-(virCgroupSetBlkioDeviceWriteBps(cgroup, dev->path,
- dev->wbps) < 0 ||
- virCgroupGetBlkioDeviceWriteBps(cgroup, dev->path,
- >wbps) < 0))
-return -1;
-}
-}
-
-return 0;
-}
-
-
 static int virLXCCgroupSetupMemTune(virDomainDefPtr def,
 virCgroupPtr cgroup)
 {
@@ -489,7 +435,7 @@ int virLXCCgroupSetup(virDomainDefPtr def,
 if (virLXCCgroupSetupCpusetTune(def, cgroup, nodemask) < 0)
 goto cleanup;
 
-if (virLXCCgroupSetupBlkioTune(def, cgroup) < 0)
+if (virCgroupSetupBlkio(cgroup, def) < 0)
 goto cleanup;
 
 if (virLXCCgroupSetupMemTune(def, cgroup) < 0)
diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
index 131cdd1134..c9925ee5ca 100644
--- a/src/qemu/qemu_cgroup.c
+++ b/src/qemu/qemu_cgroup.c
@@ -521,7 +521,6 @@ static int
 qemuSetupBlkioCgroup(virDomainObjPtr vm)
 {
 qemuDomainObjPrivatePtr priv = vm->privateData;
-size_t i;
 
 if (!virCgroupHasController(priv->cgroup,
 VIR_CGROUP_CONTROLLER_BLKIO)) {
@@ -534,51 +533,7 @@ qemuSetupBlkioCgroup(virDomainObjPtr vm)
 }
 }
 
-if (vm->def->blkio.weight != 0 &&
-virCgroupSetBlkioWeight(priv->cgroup, vm->def->blkio.weight) < 0)
-return -1;
-
-if (vm->def->blkio.ndevices) {
-for (i = 0; i < vm->def->blkio.ndevices; i++) {
-virBlkioDevicePtr dev = >def->blkio.devices[i];
-if (dev->weight &&
-(virCgroupSetBlkioDeviceWeight(priv->cgroup, dev->path,
-   dev->weight) < 0 ||
-   

[libvirt] [PATCH 0/4] consolidate cgroup code that is duplicated between

2019-10-29 Thread Mao Zhongyi
Both QEMU and LXC drivers have some duplicate code when
dealing with cgroups, this serials mainly consolidate the
same chunk of src/qemu/qemu_cgroup.c and src/lxc/lxc_cgroup.c
into src/util/cgroup.c.

Mao Zhongyi (4):
  lxc: remove duplicate header files
  qemu: remove duplicate header files
  util: consolidate QEMU and LXC block io related duplicate code
  util: consolidate QEMU and LXC memory related duplicate code

 src/libvirt_private.syms |  2 +
 src/lxc/lxc_cgroup.c | 85 +
 src/qemu/qemu_cgroup.c   | 62 +--
 src/util/vircgroup.c | 91 
 src/util/vircgroup.h |  4 ++
 5 files changed, 101 insertions(+), 143 deletions(-)

-- 
2.17.1



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list



[libvirt] [PATCH 2/4] qemu: remove duplicate header files

2019-10-29 Thread Mao Zhongyi
"#include vircgroup.h" appears in both qemu_cgroup.h and
qemu_cgroup.c, and qemu_cgroup.c contains qemu_cgroup.h,
so remove the duplicate declarations.

Signed-off-by: Mao Zhongyi 
Signed-off-by: Zhang Shengju 
---
 src/qemu/qemu_cgroup.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
index f8bb270117..131cdd1134 100644
--- a/src/qemu/qemu_cgroup.c
+++ b/src/qemu/qemu_cgroup.c
@@ -25,7 +25,6 @@
 #include "qemu_domain.h"
 #include "qemu_process.h"
 #include "qemu_extdevice.h"
-#include "vircgroup.h"
 #include "virlog.h"
 #include "viralloc.h"
 #include "virerror.h"
-- 
2.17.1



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list



[libvirt] [PATCH 4/4] util: consolidate QEMU and LXC memory related duplicate code

2019-10-29 Thread Mao Zhongyi
Both qemu and lxc drivers have some duplicate code when
dealing with cgroups, such as virLXCCgroupSetupMemTune()
and qemuSetupMemoryCgroup(), duplicate code over 80, so
consolidate the same chunk into a separate routine.

Signed-off-by: Mao Zhongyi 
Signed-off-by: Zhang Shengju 
---
 src/libvirt_private.syms |  1 +
 src/lxc/lxc_cgroup.c | 28 +---
 src/qemu/qemu_cgroup.c   | 14 +-
 src/util/vircgroup.c | 30 ++
 src/util/vircgroup.h |  1 +
 5 files changed, 34 insertions(+), 40 deletions(-)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 3df2af55bd..ff002fc60b 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1686,6 +1686,7 @@ virCgroupSetMemorySoftLimit;
 virCgroupSetMemSwapHardLimit;
 virCgroupSetOwner;
 virCgroupSetupBlkio;
+virCgroupSetupMemory;
 virCgroupSupportsCpuBW;
 virCgroupTerminateMachine;
 
diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c
index fdf8df79aa..ea6c14dfef 100644
--- a/src/lxc/lxc_cgroup.c
+++ b/src/lxc/lxc_cgroup.c
@@ -102,32 +102,6 @@ static int virLXCCgroupSetupCpusetTune(virDomainDefPtr def,
 }
 
 
-static int virLXCCgroupSetupMemTune(virDomainDefPtr def,
-virCgroupPtr cgroup)
-{
-int ret = -1;
-
-if (virCgroupSetMemory(cgroup, virDomainDefGetMemoryInitial(def)) < 0)
-goto cleanup;
-
-if (virMemoryLimitIsSet(def->mem.hard_limit))
-if (virCgroupSetMemoryHardLimit(cgroup, def->mem.hard_limit) < 0)
-goto cleanup;
-
-if (virMemoryLimitIsSet(def->mem.soft_limit))
-if (virCgroupSetMemorySoftLimit(cgroup, def->mem.soft_limit) < 0)
-goto cleanup;
-
-if (virMemoryLimitIsSet(def->mem.swap_hard_limit))
-if (virCgroupSetMemSwapHardLimit(cgroup, def->mem.swap_hard_limit) < 0)
-goto cleanup;
-
-ret = 0;
- cleanup:
-return ret;
-}
-
-
 static int virLXCCgroupGetMemSwapUsage(virCgroupPtr cgroup,
virLXCMeminfoPtr meminfo)
 {
@@ -438,7 +412,7 @@ int virLXCCgroupSetup(virDomainDefPtr def,
 if (virCgroupSetupBlkio(cgroup, def) < 0)
 goto cleanup;
 
-if (virLXCCgroupSetupMemTune(def, cgroup) < 0)
+if (virCgroupSetupMemory(cgroup, def) < 0)
 goto cleanup;
 
 if (virLXCCgroupSetupDeviceACL(def, cgroup) < 0)
diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
index c9925ee5ca..22f77a03ad 100644
--- a/src/qemu/qemu_cgroup.c
+++ b/src/qemu/qemu_cgroup.c
@@ -554,19 +554,7 @@ qemuSetupMemoryCgroup(virDomainObjPtr vm)
 }
 }
 
-if (virMemoryLimitIsSet(vm->def->mem.hard_limit))
-if (virCgroupSetMemoryHardLimit(priv->cgroup, vm->def->mem.hard_limit) 
< 0)
-return -1;
-
-if (virMemoryLimitIsSet(vm->def->mem.soft_limit))
-if (virCgroupSetMemorySoftLimit(priv->cgroup, vm->def->mem.soft_limit) 
< 0)
-return -1;
-
-if (virMemoryLimitIsSet(vm->def->mem.swap_hard_limit))
-if (virCgroupSetMemSwapHardLimit(priv->cgroup, 
vm->def->mem.swap_hard_limit) < 0)
-return -1;
-
-return 0;
+return virCgroupSetupMemory(priv->cgroup, vm->def);
 }
 
 
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index 165e5f4854..12af8759f7 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -1670,6 +1670,36 @@ virCgroupSetMemory(virCgroupPtr group, unsigned long 
long kb)
 setMemory, -1, kb);
 }
 
+/**
+ * virCgroupSetupMemory
+ *
+ * @group: The cgroup to change memory for
+ * @def: pointer to domian def
+ *
+ * Returns: 0 on success, -1 on error.
+ */
+int
+virCgroupSetupMemory(virCgroupPtr group, virDomainDefPtr def)
+{
+int ret = -1;
+
+if (virMemoryLimitIsSet(def->mem.hard_limit))
+if (virCgroupSetMemoryHardLimit(group, def->mem.hard_limit) < 0)
+goto cleanup;
+
+if (virMemoryLimitIsSet(def->mem.soft_limit))
+if (virCgroupSetMemorySoftLimit(group, def->mem.soft_limit) < 0)
+goto cleanup;
+
+if (virMemoryLimitIsSet(def->mem.swap_hard_limit))
+if (virCgroupSetMemSwapHardLimit(group, def->mem.swap_hard_limit) < 0)
+goto cleanup;
+
+ret = 0;
+ cleanup:
+return ret;
+}
+
 
 /**
  * virCgroupGetMemoryStat:
diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h
index 9815c51fda..17f07ea53c 100644
--- a/src/util/vircgroup.h
+++ b/src/util/vircgroup.h
@@ -179,6 +179,7 @@ int virCgroupGetBlkioDeviceWriteBps(virCgroupPtr group,
 unsigned long long *wbps);
 
 int virCgroupSetMemory(virCgroupPtr group, unsigned long long kb);
+int virCgroupSetupMemory(virCgroupPtr group, virDomainDefPtr def);
 int virCgroupGetMemoryStat(virCgroupPtr group,
unsigned long long *cache,
unsigne

[libvirt] [PATCH 1/4] lxc: remove duplicate header files

2019-10-29 Thread Mao Zhongyi
"#include vircgroup.h" appears in both lxc_cgroup.h and
lxc_cgroup.c, and lxc_cgroup.c contains lxc_cgroup.h,
so remove the duplicate declarations.

Signed-off-by: Mao Zhongyi 
Signed-off-by: Zhang Shengju 
---
 src/lxc/lxc_cgroup.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c
index 5efb495b56..0a019dc813 100644
--- a/src/lxc/lxc_cgroup.c
+++ b/src/lxc/lxc_cgroup.c
@@ -27,7 +27,6 @@
 #include "virerror.h"
 #include "virlog.h"
 #include "viralloc.h"
-#include "vircgroup.h"
 #include "virstring.h"
 #include "virsystemd.h"
 
-- 
2.17.1



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list



[libvirt] [PATCH v2 2/3] conf/network_conf: use virStringParseYesNo helper

2019-10-16 Thread Mao Zhongyi
A function virStringParseYesNo was added to convert
string 'yes' to true and 'no' to false, so use this
helper to replace 'STREQ(.*, \"yes\")' and
'STREQ(.*, \"no\")' as it allows us to drop several
repetitive if-then-else string->bool conversion blocks.

Signed-off-by: Mao Zhongyi 
Signed-off-by: Zhang Shengju 
Acked-by: Michal Privoznik 
---
 src/conf/network_conf.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 75ec5ccc27..9954c3d25f 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -1682,9 +1682,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
  */
 ipv6nogwStr = virXPathString("string(./@ipv6)", ctxt);
 if (ipv6nogwStr) {
-if (STREQ(ipv6nogwStr, "yes")) {
-def->ipv6nogw = true;
-} else if (STRNEQ(ipv6nogwStr, "no")) {
+if (virStringParseYesNo(ipv6nogwStr, >ipv6nogw) < 0) {
 virReportError(VIR_ERR_XML_ERROR,
_("Invalid ipv6 setting '%s' in network '%s'"),
ipv6nogwStr, def->name);
-- 
2.17.1



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v2 1/3] conf/domain_conf: use virStringParseYesNo helper

2019-10-16 Thread Mao Zhongyi
This helper performs a conversion from a "yes|no" string
to a corresponding boolean, and several conversions were
already done, but there are still some omissions.

For most of the remaining usages in domain_conf.c only
"yes" is explicitly checked for. This means all other
values are implicitly handled as 'false'. In this case,
use virStringParseYesNo to handle the conversion and
reserve the original logic of not raise an error, so
ignore the return value of helper.

Signed-off-by: Mao Zhongyi 
Signed-off-by: Zhang Shengju 
---
 src/conf/domain_conf.c | 35 +--
 1 file changed, 13 insertions(+), 22 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 10d6bf0eea..370e2840eb 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -7600,10 +7600,8 @@ virDomainHostdevSubsysUSBDefParseXML(xmlNodePtr node,
 }
 }
 
-if ((autoAddress = virXMLPropString(node, "autoAddress"))) {
-if (STREQ(autoAddress, "yes"))
-usbsrc->autoAddress = true;
-}
+if ((autoAddress = virXMLPropString(node, "autoAddress")))
+ignore_value(virStringParseYesNo(autoAddress, >autoAddress));
 
 /* Product can validly be 0, so we need some extra help to determine
  * if it is uninitialized*/
@@ -8167,10 +8165,8 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
  * element that might be (pure hostdev, or higher level device
  * (e.g. ) with type='hostdev')
  */
-if ((managed = virXMLPropString(node, "managed")) != NULL) {
-if (STREQ(managed, "yes"))
-def->managed = true;
-}
+if ((managed = virXMLPropString(node, "managed")) != NULL)
+ignore_value(virStringParseYesNo(managed, >managed));
 
 sgio = virXMLPropString(node, "sgio");
 rawio = virXMLPropString(node, "rawio");
@@ -13807,9 +13803,7 @@ 
virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr def,
 
 if (autoGenerated &&
 flags & VIR_DOMAIN_DEF_PARSE_STATUS) {
-if (STREQ(autoGenerated, "yes")) {
-def->autoGenerated = true;
-} else if (STRNEQ(autoGenerated, "no")) {
+if (virStringParseYesNo(autoGenerated, >autoGenerated) < 0) {
 virReportError(VIR_ERR_XML_ERROR,
_("Invalid autoGenerated value: %s"),
autoGenerated);
@@ -13939,13 +13933,10 @@ 
virDomainGraphicsDefParseXMLVNC(virDomainGraphicsDefPtr def,
 }
 
 if (autoport) {
-if (STREQ(autoport, "yes")) {
-if (flags & VIR_DOMAIN_DEF_PARSE_INACTIVE)
-def->data.vnc.port = 0;
-def->data.vnc.autoport = true;
-} else {
-def->data.vnc.autoport = false;
-}
+ignore_value(virStringParseYesNo(autoport, >data.vnc.autoport));
+
+if (def->data.vnc.autoport && flags & VIR_DOMAIN_DEF_PARSE_INACTIVE)
+def->data.vnc.port = 0;
 }
 
 if (websocket) {
@@ -13958,8 +13949,9 @@ virDomainGraphicsDefParseXMLVNC(virDomainGraphicsDefPtr 
def,
 }
 }
 
-if (websocketGenerated && STREQ(websocketGenerated, "yes"))
-def->data.vnc.websocketGenerated = true;
+if (websocketGenerated)
+ignore_value(virStringParseYesNo(websocketGenerated,
+ >data.vnc.websocketGenerated));
 
 if (sharePolicy) {
 int policy =
@@ -15479,8 +15471,7 @@ virDomainVideoDefParseXML(virDomainXMLOptionPtr xmlopt,
 heads = virXMLPropString(cur, "heads");
 
 if ((primary = virXMLPropString(cur, "primary")) != NULL) {
-if (STREQ(primary, "yes"))
-def->primary = true;
+ignore_value(virStringParseYesNo(primary, >primary));
 VIR_FREE(primary);
 }
 
-- 
2.17.1



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v2 0/3] use virStringParseYesNo helper

2019-10-16 Thread Mao Zhongyi
A function virStringParseYesNo was added to convert
string 'yes' to true and 'no' to false, so use this
helper to replace 'STREQ(.*, \"yes\")' and
'STREQ(.*, \"no\")' as it allows us to drop several
repetitive if-then-else string->bool conversion blocks.

v2->v1

p1:
- ignore the return value of virStringParseYesNo.
- update the commit message.   [Michal Privoznik]

p2:
- add the Acked-by tag.

p3:
- pass return value of helper to rc directly.
      [Michal Privoznik]

Mao Zhongyi (3):
  conf/domain_conf: use virStringParseYesNo helper
  conf/network_conf: use virStringParseYesNo helper
  qemu/qemu_migration_params: use virStringParseYesNo helper

 src/conf/domain_conf.c   | 35 
 src/conf/network_conf.c  |  4 +---
 src/qemu/qemu_migration_params.c |  7 +--
 3 files changed, 15 insertions(+), 31 deletions(-)

-- 
2.17.1



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v2 3/3] qemu/qemu_migration_params: use virStringParseYesNo helper

2019-10-16 Thread Mao Zhongyi
A function virStringParseYesNo was added to convert
string 'yes' to true and 'no' to false, so use this
helper to replace 'STREQ(.*, \"yes\")' and
'STREQ(.*, \"no\")' as it allows us to drop several
repetitive if-then-else string->bool conversion blocks.

Signed-off-by: Mao Zhongyi 
Signed-off-by: Zhang Shengju 
---
 src/qemu/qemu_migration_params.c | 7 +--
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
index 85fa8f8de5..f5bc8596f4 100644
--- a/src/qemu/qemu_migration_params.c
+++ b/src/qemu/qemu_migration_params.c
@@ -1326,12 +1326,7 @@ qemuMigrationParamsParse(xmlXPathContextPtr ctxt,
 break;
 
 case QEMU_MIGRATION_PARAM_TYPE_BOOL:
-if (STREQ(value, "yes"))
-pv->value.b = true;
-else if (STREQ(value, "no"))
-pv->value.b = false;
-else
-rc = -1;
+rc = virStringParseYesNo(value, >value.b);
 break;
 
 case QEMU_MIGRATION_PARAM_TYPE_STRING:
-- 
2.17.1



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH 2/3] conf/network_conf: use virStringParseYesNo helper

2019-10-15 Thread Mao Zhongyi
A function virStringParseYesNo was added to convert
string 'yes' to true and 'no' to false, so use this
helper to replace 'STREQ(.*, \"yes\")' and
'STREQ(.*, \"no\")' as it allows us to drop several
repetitive if-then-else string->bool conversion blocks.

Cc: g...@czarc.net
Cc: crobi...@redhat.com
Cc: berra...@redhat.com
Cc: g.sho1...@gmail.com

Signed-off-by: Mao Zhongyi 
Signed-off-by: Zhang Shengju 
---
 src/conf/network_conf.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 75ec5ccc27..9954c3d25f 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -1682,9 +1682,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
  */
 ipv6nogwStr = virXPathString("string(./@ipv6)", ctxt);
 if (ipv6nogwStr) {
-if (STREQ(ipv6nogwStr, "yes")) {
-def->ipv6nogw = true;
-} else if (STRNEQ(ipv6nogwStr, "no")) {
+if (virStringParseYesNo(ipv6nogwStr, >ipv6nogw) < 0) {
 virReportError(VIR_ERR_XML_ERROR,
_("Invalid ipv6 setting '%s' in network '%s'"),
ipv6nogwStr, def->name);
-- 
2.17.1



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH 0/3] use virStringParseYesNo helper

2019-10-15 Thread Mao Zhongyi
A function virStringParseYesNo was added to convert
string 'yes' to true and 'no' to false, so use this
helper to replace 'STREQ(.*, \"yes\")' and
'STREQ(.*, \"no\")' as it allows us to drop several
repetitive if-then-else string->bool conversion blocks.

Cc: abolo...@redhat.com
Cc: berra...@redhat.com
Cc: crobi...@redhat.com
Cc: g...@czarc.net
Cc: g.sho1...@gmail.com
Cc: jdene...@redhat.com
Cc: la...@laine.org
Cc: mklet...@redhat.com
Cc: phrd...@redhat.com

Mao Zhongyi (3):
  conf/domain_conf: use virStringParseYesNo helper
  conf/network_conf: use virStringParseYesNo helper
  qemu/qemu_migration_params: use virStringParseYesNo helper

 src/conf/domain_conf.c   | 30 ++
 src/conf/network_conf.c  |  4 +---
 src/qemu/qemu_migration_params.c |  6 +-
 3 files changed, 16 insertions(+), 24 deletions(-)

-- 
2.17.1



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH 1/3] conf/domain_conf: use virStringParseYesNo helper

2019-10-15 Thread Mao Zhongyi
This helper performs a conversion from a "yes|no" string
to a corresponding boolean, and several conversions were
already done, but there are still some omissions.

For most of the remaining usages in domain_conf.c only
"yes" is explicitly checked for. This means all other
values are implicitly handled as 'false'. In this case,
use virStringParseYesNo, but if it returns -1, don't
raise an error but set the bool value to false.

Cc: crobi...@redhat.com
Cc: berra...@redhat.com
Cc: abolo...@redhat.com
Cc: la...@laine.org
Cc: phrd...@redhat.com
Cc: mklet...@redhat.com
Cc: g.sho1...@gmail.com

Signed-off-by: Mao Zhongyi 
Signed-off-by: Zhang Shengju 
---
 src/conf/domain_conf.c | 30 ++
 1 file changed, 14 insertions(+), 16 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 10d6bf0eea..7420658726 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -7601,8 +7601,8 @@ virDomainHostdevSubsysUSBDefParseXML(xmlNodePtr node,
 }
 
 if ((autoAddress = virXMLPropString(node, "autoAddress"))) {
-if (STREQ(autoAddress, "yes"))
-usbsrc->autoAddress = true;
+if (virStringParseYesNo(autoAddress, >autoAddress) < 0)
+usbsrc->autoAddress = false;
 }
 
 /* Product can validly be 0, so we need some extra help to determine
@@ -8168,8 +8168,8 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
  * (e.g. ) with type='hostdev')
  */
 if ((managed = virXMLPropString(node, "managed")) != NULL) {
-if (STREQ(managed, "yes"))
-def->managed = true;
+if (virStringParseYesNo(managed, >managed) < 0)
+def->managed = false;
 }
 
 sgio = virXMLPropString(node, "sgio");
@@ -13807,9 +13807,7 @@ 
virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr def,
 
 if (autoGenerated &&
 flags & VIR_DOMAIN_DEF_PARSE_STATUS) {
-if (STREQ(autoGenerated, "yes")) {
-def->autoGenerated = true;
-} else if (STRNEQ(autoGenerated, "no")) {
+if (virStringParseYesNo(autoGenerated, >autoGenerated) < 0) {
 virReportError(VIR_ERR_XML_ERROR,
_("Invalid autoGenerated value: %s"),
autoGenerated);
@@ -13939,12 +13937,11 @@ 
virDomainGraphicsDefParseXMLVNC(virDomainGraphicsDefPtr def,
 }
 
 if (autoport) {
-if (STREQ(autoport, "yes")) {
-if (flags & VIR_DOMAIN_DEF_PARSE_INACTIVE)
-def->data.vnc.port = 0;
-def->data.vnc.autoport = true;
-} else {
+if (virStringParseYesNo(autoport, >data.vnc.autoport) < 0) {
 def->data.vnc.autoport = false;
+} else {
+if (def->data.vnc.autoport && flags & 
VIR_DOMAIN_DEF_PARSE_INACTIVE)
+def->data.vnc.port = 0;
 }
 }
 
@@ -13958,8 +13955,9 @@ virDomainGraphicsDefParseXMLVNC(virDomainGraphicsDefPtr 
def,
 }
 }
 
-if (websocketGenerated && STREQ(websocketGenerated, "yes"))
-def->data.vnc.websocketGenerated = true;
+if (websocketGenerated &&
+virStringParseYesNo(websocketGenerated, 
>data.vnc.websocketGenerated))
+def->data.vnc.websocketGenerated = false;
 
 if (sharePolicy) {
 int policy =
@@ -15479,8 +15477,8 @@ virDomainVideoDefParseXML(virDomainXMLOptionPtr xmlopt,
 heads = virXMLPropString(cur, "heads");
 
 if ((primary = virXMLPropString(cur, "primary")) != NULL) {
-if (STREQ(primary, "yes"))
-def->primary = true;
+if (virStringParseYesNo(primary, >primary) < 0)
+def->primary = false;
 VIR_FREE(primary);
 }
 
-- 
2.17.1



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH 3/3] qemu/qemu_migration_params: use virStringParseYesNo helper

2019-10-15 Thread Mao Zhongyi
A function virStringParseYesNo was added to convert
string 'yes' to true and 'no' to false, so use this
helper to replace 'STREQ(.*, \"yes\")' and
'STREQ(.*, \"no\")' as it allows us to drop several
repetitive if-then-else string->bool conversion blocks.

Cc: jdene...@redhat.com
Cc: g.sho1...@gmail.com
Cc: crobi...@redhat.com

Signed-off-by: Mao Zhongyi 
Signed-off-by: Zhang Shengju 
---
 src/qemu/qemu_migration_params.c | 6 +-
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
index 85fa8f8de5..acd42042fe 100644
--- a/src/qemu/qemu_migration_params.c
+++ b/src/qemu/qemu_migration_params.c
@@ -1326,11 +1326,7 @@ qemuMigrationParamsParse(xmlXPathContextPtr ctxt,
 break;
 
 case QEMU_MIGRATION_PARAM_TYPE_BOOL:
-if (STREQ(value, "yes"))
-pv->value.b = true;
-else if (STREQ(value, "no"))
-pv->value.b = false;
-else
+if (virStringParseYesNo(value, >value.b) < 0)
 rc = -1;
 break;
 
-- 
2.17.1



--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list