The helper makes sure that strings passed to APIs are non-NULL and non-empty. This allows to drop some inlined checks where it does not make sense. --- src/internal.h | 11 +++++++++++ src/libvirt-domain.c | 4 ++-- src/qemu/qemu_driver.c | 11 ----------- src/util/virerror.h | 11 +++++++++++ 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/internal.h b/src/internal.h index 7c042e0..db26fb0 100644 --- a/src/internal.h +++ b/src/internal.h @@ -446,6 +446,17 @@ goto label; \ } \ } while (0) +# define virCheckNonEmptyStringArgGoto(argname, label) \ + do { \ + if (argname == NULL) { \ + virReportInvalidNonNullArg(argname); \ + goto label; \ + } \ + if (*argname == '\0') { \ + virReportInvalidEmptyStringArg(argname); \ + goto label; \ + } \ + } while (0) # define virCheckPositiveArgGoto(argname, label) \ do { \ if (argname <= 0) { \ diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index 4d7b88a..909c264 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -6065,7 +6065,7 @@ virDomainBlockPeek(virDomainPtr dom, conn = dom->conn; virCheckReadOnlyGoto(conn->flags, error); - virCheckNonNullArgGoto(disk, error); + virCheckNonEmptyStringArgGoto(disk, error); /* Allow size == 0 as an access test. */ if (size > 0) @@ -6333,7 +6333,7 @@ virDomainGetBlockInfo(virDomainPtr domain, const char *disk, memset(info, 0, sizeof(*info)); virCheckDomainReturn(domain, -1); - virCheckNonNullArgGoto(disk, error); + virCheckNonEmptyStringArgGoto(disk, error); virCheckNonNullArgGoto(info, error); conn = domain->conn; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index c1373de..004da7e 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -11530,12 +11530,6 @@ qemuDomainBlockPeek(virDomainPtr dom, if (virDomainBlockPeekEnsureACL(dom->conn, vm->def) < 0) goto cleanup; - if (!path || path[0] == '\0') { - virReportError(VIR_ERR_INVALID_ARG, - "%s", _("NULL or empty path")); - goto cleanup; - } - /* Check the path belongs to this domain. */ if (!(actual = virDomainDiskPathByName(vm->def, path))) { virReportError(VIR_ERR_INVALID_ARG, @@ -11821,11 +11815,6 @@ qemuDomainGetBlockInfo(virDomainPtr dom, if (virDomainGetBlockInfoEnsureACL(dom->conn, vm->def) < 0) goto cleanup; - if (!path || path[0] == '\0') { - virReportError(VIR_ERR_INVALID_ARG, "%s", _("NULL or empty path")); - goto cleanup; - } - /* Technically, we only need a job if we are going to query the * monitor, which is only for active domains that are using * non-raw block devices. But it is easier to share code if we diff --git a/src/util/virerror.h b/src/util/virerror.h index ad3a946..c1a445e 100644 --- a/src/util/virerror.h +++ b/src/util/virerror.h @@ -95,6 +95,17 @@ void virReportSystemErrorFull(int domcode, 0, 0, \ _("%s in %s must not be NULL"), \ #argname, __FUNCTION__) +# define virReportInvalidEmptyStringArg(argname) \ + virRaiseErrorFull(__FILE__, __FUNCTION__, __LINE__, \ + VIR_FROM_THIS, \ + VIR_ERR_INVALID_ARG, \ + VIR_ERR_ERROR, \ + __FUNCTION__, \ + #argname, \ + NULL, \ + 0, 0, \ + _("string %s in %s must not be non empty"), \ + #argname, __FUNCTION__) # define virReportInvalidPositiveArg(argname) \ virRaiseErrorFull(__FILE__, __FUNCTION__, __LINE__, \ VIR_FROM_THIS, \ -- 2.4.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list