From dc6f2dadace3fcbe184b163dfca4f663e2a468d3 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Fri, 7 Jun 2013 17:10:28 +0200 Subject: [PATCH] Introduce OOM reporting to virAsprintf Actually, I'm turning this function into a macro as filename, function name and line number needs to be passed. The new function virAsprintfInternal is introduced with the extended set of arguments. --- cfg.mk | 2 +- src/conf/domain_audit.c | 36 ++++++++--------- src/driver.c | 4 +- src/libvirt_private.syms | 4 +- src/util/virerror.c | 2 +- src/util/virlog.c | 16 ++++---- src/util/virstring.c | 36 ++++++++++------- src/util/virstring.h | 67 ++++++++++++++++++++++++++++--- tests/domainsnapshotxml2xmltest.c | 2 + tests/fchosttest.c | 2 + tests/interfacexml2xmltest.c | 2 + tests/lxcxml2xmltest.c | 2 + tests/networkxml2xmltest.c | 2 + tests/nodedevxml2xmltest.c | 2 + tests/nodeinfotest.c | 2 + tests/nwfilterxml2xmltest.c | 2 + tests/qemuargv2xmltest.c | 2 + tests/qemuhelptest.c | 2 + tests/qemuxml2xmltest.c | 2 + tests/sexpr2xmltest.c | 2 + tests/storagepoolxml2xmltest.c | 2 + tests/storagevolxml2argvtest.c | 2 + tests/storagevolxml2xmltest.c | 2 + tests/sysinfotest.c | 2 + tests/virbuftest.c | 2 + tests/virhashtest.c | 2 + tests/virshtest.c | 2 + tests/xencapstest.c | 2 + tests/xml2sexprtest.c | 2 + tools/virt-host-validate-common.c | 2 + 30 files changed, 158 insertions(+), 53 deletions(-) diff --git a/cfg.mk b/cfg.mk index 147e788a6d..66b49e6c83 100644 --- a/cfg.mk +++ b/cfg.mk @@ -900,7 +900,7 @@ exclude_file_name_regexp--sc_prohibit_always_true_header_tests = \ ^python/(libvirt-(lxc-|qemu-)?override|typewrappers)\.c$$ exclude_file_name_regexp--sc_prohibit_asprintf = \ - ^(bootstrap.conf$$|src/util/virstring\.c$$|examples/domain-events/events-c/event-test\.c$$|tests/vircgroupmock\.c$$) + ^(bootstrap.conf$$|src/util/virstring\.[ch]$$|examples/domain-events/events-c/event-test\.c$$|tests/vircgroupmock\.c$$) exclude_file_name_regexp--sc_prohibit_strdup = \ ^(docs/|examples/|python/|src/util/virstring\.c$$) diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c index 97e71f7934..e53daf8b91 100644 --- a/src/conf/domain_audit.c +++ b/src/conf/domain_audit.c @@ -46,7 +46,7 @@ virDomainAuditGetRdev(const char *path) (S_ISCHR(sb.st_mode) || S_ISBLK(sb.st_mode))) { int maj = major(sb.st_rdev); int min = minor(sb.st_rdev); - ignore_value(virAsprintf(&ret, "%02X:%02X", maj, min)); + ignore_value(virAsprintfQuiet(&ret, "%02X:%02X", maj, min)); } return ret; } @@ -382,29 +382,29 @@ virDomainAuditHostdev(virDomainObjPtr vm, virDomainHostdevDefPtr hostdev, case VIR_DOMAIN_HOSTDEV_MODE_SUBSYS: switch (hostdev->source.subsys.type) { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: - if (virAsprintf(&address, "%.4x:%.2x:%.2x.%.1x", - hostdev->source.subsys.u.pci.addr.domain, - hostdev->source.subsys.u.pci.addr.bus, - hostdev->source.subsys.u.pci.addr.slot, - hostdev->source.subsys.u.pci.addr.function) < 0) { + if (virAsprintfQuiet(&address, "%.4x:%.2x:%.2x.%.1x", + hostdev->source.subsys.u.pci.addr.domain, + hostdev->source.subsys.u.pci.addr.bus, + hostdev->source.subsys.u.pci.addr.slot, + hostdev->source.subsys.u.pci.addr.function) < 0) { VIR_WARN("OOM while encoding audit message"); goto cleanup; } break; case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: - if (virAsprintf(&address, "%.3d.%.3d", - hostdev->source.subsys.u.usb.bus, - hostdev->source.subsys.u.usb.device) < 0) { + if (virAsprintfQuiet(&address, "%.3d.%.3d", + hostdev->source.subsys.u.usb.bus, + hostdev->source.subsys.u.usb.device) < 0) { VIR_WARN("OOM while encoding audit message"); goto cleanup; } break; case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: - if (virAsprintf(&address, "%s:%d:%d:%d", - hostdev->source.subsys.u.scsi.adapter, - hostdev->source.subsys.u.scsi.bus, - hostdev->source.subsys.u.scsi.target, - hostdev->source.subsys.u.scsi.unit) < 0) { + if (virAsprintfQuiet(&address, "%s:%d:%d:%d", + hostdev->source.subsys.u.scsi.adapter, + hostdev->source.subsys.u.scsi.bus, + hostdev->source.subsys.u.scsi.target, + hostdev->source.subsys.u.scsi.unit) < 0) { VIR_WARN("OOM while encoding audit message"); goto cleanup; } @@ -654,8 +654,8 @@ virDomainAuditCgroupMajor(virDomainObjPtr vm, virCgroupPtr cgroup, { char *extra; - if (virAsprintf(&extra, "major category=%s maj=%02X acl=%s", - name, maj, perms) < 0) { + if (virAsprintfQuiet(&extra, "major category=%s maj=%02X acl=%s", + name, maj, perms) < 0) { VIR_WARN("OOM while encoding audit message"); return; } @@ -693,8 +693,8 @@ virDomainAuditCgroupPath(virDomainObjPtr vm, virCgroupPtr cgroup, rdev = virDomainAuditGetRdev(path); if (!(detail = virAuditEncode("path", path)) || - virAsprintf(&extra, "path %s rdev=%s acl=%s", - detail, VIR_AUDIT_STR(rdev), perms) < 0) { + virAsprintfQuiet(&extra, "path %s rdev=%s acl=%s", + detail, VIR_AUDIT_STR(rdev), perms) < 0) { VIR_WARN("OOM while encoding audit message"); goto cleanup; } diff --git a/src/driver.c b/src/driver.c index c35fcd2de2..a08dd34cbe 100644 --- a/src/driver.c +++ b/src/driver.c @@ -65,7 +65,7 @@ virDriverLoadModule(const char *name) VIR_DEBUG("Module load %s", name); - if (virAsprintf(&modfile, "%s/libvirt_driver_%s.so", moddir, name) < 0) + if (virAsprintfQuiet(&modfile, "%s/libvirt_driver_%s.so", moddir, name) < 0) return NULL; if (access(modfile, R_OK) < 0) { @@ -79,7 +79,7 @@ virDriverLoadModule(const char *name) goto cleanup; } - if (virAsprintf(®func, "%sRegister", name) < 0) { + if (virAsprintfQuiet(®func, "%sRegister", name) < 0) { goto cleanup; } diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 6df55005e9..59583ec7e2 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1871,7 +1871,7 @@ virStorageFileResize; # util/virstring.h virArgvToString; -virAsprintf; +virAsprintfInternal; virSkipSpaces; virSkipSpacesAndBackslash; virSkipSpacesBackwards; @@ -1892,7 +1892,7 @@ virStrToLong_ui; virStrToLong_ul; virStrToLong_ull; virTrimSpaces; -virVasprintf; +virVasprintfInternal; # util/virsysinfo.h diff --git a/src/util/virerror.c b/src/util/virerror.c index e238dceda1..ce3ab859f2 100644 --- a/src/util/virerror.c +++ b/src/util/virerror.c @@ -674,7 +674,7 @@ virRaiseErrorFull(const char *filename ATTRIBUTE_UNUSED, } else { va_list ap; va_start(ap, fmt); - ignore_value(virVasprintf(&str, fmt, ap)); + ignore_value(virVasprintfQuiet(&str, fmt, ap)); va_end(ap); } diff --git a/src/util/virlog.c b/src/util/virlog.c index 20af4ce536..1efa65d3e2 100644 --- a/src/util/virlog.c +++ b/src/util/virlog.c @@ -711,13 +711,13 @@ virLogFormatString(char **msg, * to just grep for it to find the right place. */ if ((funcname != NULL)) { - ret = virAsprintf(msg, "%llu: %s : %s:%d : %s\n", - virThreadSelfID(), virLogPriorityString(priority), - funcname, linenr, str); + ret = virAsprintfQuiet(msg, "%llu: %s : %s:%d : %s\n", + virThreadSelfID(), virLogPriorityString(priority), + funcname, linenr, str); } else { - ret = virAsprintf(msg, "%llu: %s : %s\n", - virThreadSelfID(), virLogPriorityString(priority), - str); + ret = virAsprintfQuiet(msg, "%llu: %s : %s\n", + virThreadSelfID(), virLogPriorityString(priority), + str); } return ret; } @@ -833,7 +833,7 @@ virLogVMessage(virLogSource source, /* * serialize the error message, add level and timestamp */ - if (virVasprintf(&str, fmt, vargs) < 0) { + if (virVasprintfQuiet(&str, fmt, vargs) < 0) { goto cleanup; } @@ -945,7 +945,7 @@ virLogOutputToFd(virLogSource source ATTRIBUTE_UNUSED, if (fd < 0) return; - if (virAsprintf(&msg, "%s: %s", timestamp, str) < 0) + if (virAsprintfQuiet(&msg, "%s: %s", timestamp, str) < 0) return; ignore_value(safewrite(fd, msg, strlen(msg))); diff --git a/src/util/virstring.c b/src/util/virstring.c index 1937f82858..6fc015b093 100644 --- a/src/util/virstring.c +++ b/src/util/virstring.c @@ -321,35 +321,41 @@ virStrToDouble(char const *s, return 0; } -/** - * virVasprintf - * - * like glibc's vasprintf but makes sure *strp == NULL on failure - */ int -virVasprintf(char **strp, const char *fmt, va_list list) +virVasprintfInternal(bool report, + int domcode, + const char *filename, + const char *funcname, + size_t linenr, + char **strp, + const char *fmt, + va_list list) { int ret; - if ((ret = vasprintf(strp, fmt, list)) == -1) + if ((ret = vasprintf(strp, fmt, list)) == -1) { + if (report) + virReportOOMErrorFull(domcode, filename, funcname, linenr); *strp = NULL; - + } return ret; } -/** - * virAsprintf - * - * like glibc's_asprintf but makes sure *strp == NULL on failure - */ int -virAsprintf(char **strp, const char *fmt, ...) +virAsprintfInternal(bool report, + int domcode, + const char *filename, + const char *funcname, + size_t linenr, + char **strp, + const char *fmt, ...) { va_list ap; int ret; va_start(ap, fmt); - ret = virVasprintf(strp, fmt, ap); + ret = virVasprintfInternal(report, domcode, filename, + funcname, linenr, strp, fmt, ap); va_end(ap); return ret; } diff --git a/src/util/virstring.h b/src/util/virstring.h index 34ffae118a..8b66b23fdc 100644 --- a/src/util/virstring.h +++ b/src/util/virstring.h @@ -76,12 +76,6 @@ void virTrimSpaces(char *str, char **endp) ATTRIBUTE_NONNULL(1); void virSkipSpacesBackwards(const char *str, char **endp) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); -int virAsprintf(char **strp, const char *fmt, ...) - ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_FMT_PRINTF(2, 3) - ATTRIBUTE_RETURN_CHECK; -int virVasprintf(char **strp, const char *fmt, va_list list) - ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_FMT_PRINTF(2, 0) - ATTRIBUTE_RETURN_CHECK; char *virStrncpy(char *dest, const char *src, size_t n, size_t destbytes) ATTRIBUTE_RETURN_CHECK; char *virStrcpy(char *dest, const char *src, size_t destbytes) @@ -96,6 +90,16 @@ int virStrdup(char **dest, const char *src, bool report, int domcode, int virStrndup(char **dest, const char *src, ssize_t n, bool report, int domcode, const char *filename, const char *funcname, size_t linenr) ATTRIBUTE_RETURN_CHECK ATTRIBUTE_NONNULL(1); +int virAsprintfInternal(bool report, int domcode, const char *filename, + const char *funcname, size_t linenr, char **strp, + const char *fmt, ...) + ATTRIBUTE_NONNULL(6) ATTRIBUTE_NONNULL(7) ATTRIBUTE_FMT_PRINTF(7, 8) + ATTRIBUTE_RETURN_CHECK; +int virVasprintfInternal(bool report, int domcode, const char *filename, + const char *funcname, size_t linenr, char **strp, + const char *fmt, va_list list) + ATTRIBUTE_NONNULL(6) ATTRIBUTE_NONNULL(7) ATTRIBUTE_FMT_PRINTF(7, 0) + ATTRIBUTE_RETURN_CHECK; /** * VIR_STRDUP: @@ -166,4 +170,55 @@ int virStrndup(char **dest, const char *src, ssize_t n, bool report, int domcode size_t virStringListLength(char **strings); +/** + * virVasprintf + * + * Like glibc's vasprintf but makes sure *strp == NULL on failure, in which + * case the OOM error is reported too. + * + * Returns -1 on failure (with OOM error reported), 0 on success. + */ +# define virVasprintf(strp, fmt, list) \ + virVasprintfInternal(true, VIR_FROM_THIS, __FILE__, __FUNCTION__, \ + __LINE__, strp, fmt, list) + +/** + * virVasprintfQuiet + * + * Like glibc's vasprintf but makes sure *strp == NULL on failure. + * + * Returns -1 on failure, 0 on success. + */ +# define virVasprintfQuiet(strp, fmt, list) \ + virVasprintfInternal(false, 0, NULL, NULL, 0, strp, fmt, list) + +/** + * virAsprintf: + * @strp: variable to hold result (char **) + * @fmt: printf format + * + * Like glibc's_asprintf but makes sure *strp == NULL on failure, in which case + * the OOM error is reported too. + * + * Returns -1 on failure (with OOM error reported), 0 on success. + */ + +# define virAsprintf(strp, ...) \ + virAsprintfInternal(true, VIR_FROM_THIS, __FILE__, __FUNCTION__, __LINE__, \ + strp, __VA_ARGS__) + +/** + * virAsprintfQuiet: + * @strp: variable to hold result (char **) + * @fmt: printf format + * + * Like glibc's_asprintf but makes sure *strp == NULL on failure. + * + * Returns -1 on failure, 0 on success. + */ + +# define virAsprintfQuiet(strp, ...) \ + virAsprintfInternal(false, 0, NULL, NULL, 0, \ + strp, __VA_ARGS__) + #endif /* __VIR_STRING_H__ */ diff --git a/tests/domainsnapshotxml2xmltest.c b/tests/domainsnapshotxml2xmltest.c index 9eddf458fe..defa9553e4 100644 --- a/tests/domainsnapshotxml2xmltest.c +++ b/tests/domainsnapshotxml2xmltest.c @@ -18,6 +18,8 @@ # include "testutilsqemu.h" # include "virstring.h" +# define VIR_FROM_THIS VIR_FROM_NONE + static virQEMUDriver driver; static int diff --git a/tests/fchosttest.c b/tests/fchosttest.c index 76d1795f75..05ff20ba69 100644 --- a/tests/fchosttest.c +++ b/tests/fchosttest.c @@ -23,6 +23,8 @@ #include "virutil.h" #include "testutils.h" +#define VIR_FROM_THIS VIR_FROM_NONE + static char *fchost_prefix; #define TEST_FC_HOST_PREFIX fchost_prefix diff --git a/tests/interfacexml2xmltest.c b/tests/interfacexml2xmltest.c index 9d86198bcb..8092a5964a 100644 --- a/tests/interfacexml2xmltest.c +++ b/tests/interfacexml2xmltest.c @@ -14,6 +14,8 @@ #include "testutilsqemu.h" #include "virstring.h" +#define VIR_FROM_THIS VIR_FROM_NONE + static int testCompareXMLToXMLFiles(const char *xml) { diff --git a/tests/lxcxml2xmltest.c b/tests/lxcxml2xmltest.c index 97f792c25e..ca05d291f7 100644 --- a/tests/lxcxml2xmltest.c +++ b/tests/lxcxml2xmltest.c @@ -17,6 +17,8 @@ # include "testutilslxc.h" # include "virstring.h" +# define VIR_FROM_THIS VIR_FROM_NONE + static virCapsPtr caps; static virDomainXMLOptionPtr xmlopt; diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c index 5eca143ccc..0dfed161ac 100644 --- a/tests/networkxml2xmltest.c +++ b/tests/networkxml2xmltest.c @@ -14,6 +14,8 @@ #include "testutilsqemu.h" #include "virstring.h" +#define VIR_FROM_THIS VIR_FROM_NONE + static int testCompareXMLToXMLFiles(const char *inxml, const char *outxml, unsigned int flags) diff --git a/tests/nodedevxml2xmltest.c b/tests/nodedevxml2xmltest.c index ed49857089..d4f7ee7425 100644 --- a/tests/nodedevxml2xmltest.c +++ b/tests/nodedevxml2xmltest.c @@ -14,6 +14,8 @@ #include "testutilsqemu.h" #include "virstring.h" +#define VIR_FROM_THIS VIR_FROM_NONE + static int testCompareXMLToXMLFiles(const char *xml) { diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c index bce56f3f53..def366cad8 100644 --- a/tests/nodeinfotest.c +++ b/tests/nodeinfotest.c @@ -11,6 +11,8 @@ #include "virfile.h" #include "virstring.h" +#define VIR_FROM_THIS VIR_FROM_NONE + #if ! (defined __linux__ && (defined(__x86_64__) || \ defined(__amd64__) || \ defined(__i386__) || \ diff --git a/tests/nwfilterxml2xmltest.c b/tests/nwfilterxml2xmltest.c index 158bc9f4ce..5476284d73 100644 --- a/tests/nwfilterxml2xmltest.c +++ b/tests/nwfilterxml2xmltest.c @@ -17,6 +17,8 @@ #include "testutilsqemu.h" #include "virstring.h" +#define VIR_FROM_THIS VIR_FROM_NONE + static int testCompareXMLToXMLFiles(const char *inxml, const char *outxml, bool expect_error) diff --git a/tests/qemuargv2xmltest.c b/tests/qemuargv2xmltest.c index 652cd09219..5cf7828986 100644 --- a/tests/qemuargv2xmltest.c +++ b/tests/qemuargv2xmltest.c @@ -17,6 +17,8 @@ # include "testutilsqemu.h" # include "virstring.h" +# define VIR_FROM_THIS VIR_FROM_NONE + static virQEMUDriver driver; static int blankProblemElements(char *data) diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c index 2a3b019068..3826849db3 100644 --- a/tests/qemuhelptest.c +++ b/tests/qemuhelptest.c @@ -11,6 +11,8 @@ # include "viralloc.h" # include "virstring.h" +# define VIR_FROM_THIS VIR_FROM_NONE + struct testInfo { const char *name; virQEMUCapsPtr flags; diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index f8daff9eb0..76570c5c95 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -18,6 +18,8 @@ # include "testutilsqemu.h" # include "virstring.h" +# define VIR_FROM_THIS VIR_FROM_NONE + static virQEMUDriver driver; static int diff --git a/tests/sexpr2xmltest.c b/tests/sexpr2xmltest.c index f4d119e3b3..eafefda0c7 100644 --- a/tests/sexpr2xmltest.c +++ b/tests/sexpr2xmltest.c @@ -14,6 +14,8 @@ #include "testutilsxen.h" #include "virstring.h" +#define VIR_FROM_THIS VIR_FROM_NONE + static virCapsPtr caps; static int diff --git a/tests/storagepoolxml2xmltest.c b/tests/storagepoolxml2xmltest.c index 0376e63b54..53a7f83ca1 100644 --- a/tests/storagepoolxml2xmltest.c +++ b/tests/storagepoolxml2xmltest.c @@ -14,6 +14,8 @@ #include "testutilsqemu.h" #include "virstring.h" +#define VIR_FROM_THIS VIR_FROM_NONE + static int testCompareXMLToXMLFiles(const char *inxml, const char *outxml) { diff --git a/tests/storagevolxml2argvtest.c b/tests/storagevolxml2argvtest.c index 6a6c8e3e1c..89c233fa7b 100644 --- a/tests/storagevolxml2argvtest.c +++ b/tests/storagevolxml2argvtest.c @@ -7,6 +7,8 @@ #include "testutilsqemu.h" #include "virstring.h" +#define VIR_FROM_THIS VIR_FROM_NONE + const char create_tool[] = "qemu-img"; static int diff --git a/tests/storagevolxml2xmltest.c b/tests/storagevolxml2xmltest.c index e87b0163ba..05d2306f45 100644 --- a/tests/storagevolxml2xmltest.c +++ b/tests/storagevolxml2xmltest.c @@ -14,6 +14,8 @@ #include "testutilsqemu.h" #include "virstring.h" +#define VIR_FROM_THIS VIR_FROM_NONE + static int testCompareXMLToXMLFiles(const char *poolxml, const char *inxml, const char *outxml) diff --git a/tests/sysinfotest.c b/tests/sysinfotest.c index dc0451b8d3..ba57a7a740 100644 --- a/tests/sysinfotest.c +++ b/tests/sysinfotest.c @@ -36,6 +36,8 @@ #include "virfile.h" #include "virstring.h" +#define VIR_FROM_THIS VIR_FROM_NONE + #if defined (__linux__) # if defined(__s390__) || defined(__s390x__) || \ diff --git a/tests/virbuftest.c b/tests/virbuftest.c index 3938f0df57..febe6e456c 100644 --- a/tests/virbuftest.c +++ b/tests/virbuftest.c @@ -10,6 +10,8 @@ #include "viralloc.h" #include "virstring.h" +#define VIR_FROM_THIS VIR_FROM_NONE + #define TEST_ERROR(...) \ do { \ if (virTestGetDebug()) \ diff --git a/tests/virhashtest.c b/tests/virhashtest.c index f36fc76c7c..9b7fcbbf58 100644 --- a/tests/virhashtest.c +++ b/tests/virhashtest.c @@ -13,6 +13,8 @@ #include "virlog.h" #include "virstring.h" +#define VIR_FROM_THIS VIR_FROM_NONE + #define testError(...) \ do { \ char *str; \ diff --git a/tests/virshtest.c b/tests/virshtest.c index fad67745be..ca35bb0aca 100644 --- a/tests/virshtest.c +++ b/tests/virshtest.c @@ -9,6 +9,8 @@ #include "testutils.h" #include "virstring.h" +#define VIR_FROM_THIS VIR_FROM_NONE + #ifdef WIN32 int diff --git a/tests/xencapstest.c b/tests/xencapstest.c index 8bdd6cde13..9de3919fef 100644 --- a/tests/xencapstest.c +++ b/tests/xencapstest.c @@ -12,6 +12,8 @@ #include "virfile.h" #include "virstring.h" +#define VIR_FROM_THIS VIR_FROM_NONE + static int testCompareFiles(virArch hostmachine, const char *xml_rel, const char *cpuinfo_rel, const char *capabilities_rel) diff --git a/tests/xml2sexprtest.c b/tests/xml2sexprtest.c index ec196c41d4..87ac2c3e20 100644 --- a/tests/xml2sexprtest.c +++ b/tests/xml2sexprtest.c @@ -16,6 +16,8 @@ #include "testutilsxen.h" #include "virstring.h" +#define VIR_FROM_THIS VIR_FROM_NONE + static virCapsPtr caps; static virDomainXMLOptionPtr xmlopt; diff --git a/tools/virt-host-validate-common.c b/tools/virt-host-validate-common.c index c17c2574d1..496324e63b 100644 --- a/tools/virt-host-validate-common.c +++ b/tools/virt-host-validate-common.c @@ -33,6 +33,8 @@ #include "virt-host-validate-common.h" #include "virstring.h" +#define VIR_FROM_THIS VIR_FROM_NONE + static bool quiet; void virHostMsgSetQuiet(bool quietFlag)