^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$$)
(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;
}
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;
}
{
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;
}
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;
}
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) {
goto cleanup;
}
- if (virAsprintf(®func, "%sRegister", name) < 0) {
+ if (virAsprintfQuiet(®func, "%sRegister", name) < 0) {
goto cleanup;
}
# util/virstring.h
virArgvToString;
-virAsprintf;
+virAsprintfInternal;
virSkipSpaces;
virSkipSpacesAndBackslash;
virSkipSpacesBackwards;
virStrToLong_ul;
virStrToLong_ull;
virTrimSpaces;
-virVasprintf;
+virVasprintfInternal;
# util/virsysinfo.h
} else {
va_list ap;
va_start(ap, fmt);
- ignore_value(virVasprintf(&str, fmt, ap));
+ ignore_value(virVasprintfQuiet(&str, fmt, ap));
va_end(ap);
}
* 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;
}
/*
* serialize the error message, add level and timestamp
*/
- if (virVasprintf(&str, fmt, vargs) < 0) {
+ if (virVasprintfQuiet(&str, fmt, vargs) < 0) {
goto cleanup;
}
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)));
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;
}
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)
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:
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__ */
# include "testutilsqemu.h"
# include "virstring.h"
+# define VIR_FROM_THIS VIR_FROM_NONE
+
static virQEMUDriver driver;
static int
#include "virutil.h"
#include "testutils.h"
+#define VIR_FROM_THIS VIR_FROM_NONE
+
static char *fchost_prefix;
#define TEST_FC_HOST_PREFIX fchost_prefix
#include "testutilsqemu.h"
#include "virstring.h"
+#define VIR_FROM_THIS VIR_FROM_NONE
+
static int
testCompareXMLToXMLFiles(const char *xml)
{
# include "testutilslxc.h"
# include "virstring.h"
+# define VIR_FROM_THIS VIR_FROM_NONE
+
static virCapsPtr caps;
static virDomainXMLOptionPtr xmlopt;
#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)
#include "testutilsqemu.h"
#include "virstring.h"
+#define VIR_FROM_THIS VIR_FROM_NONE
+
static int
testCompareXMLToXMLFiles(const char *xml)
{
#include "virfile.h"
#include "virstring.h"
+#define VIR_FROM_THIS VIR_FROM_NONE
+
#if ! (defined __linux__ && (defined(__x86_64__) || \
defined(__amd64__) || \
defined(__i386__) || \
#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)
# include "testutilsqemu.h"
# include "virstring.h"
+# define VIR_FROM_THIS VIR_FROM_NONE
+
static virQEMUDriver driver;
static int blankProblemElements(char *data)
# include "viralloc.h"
# include "virstring.h"
+# define VIR_FROM_THIS VIR_FROM_NONE
+
struct testInfo {
const char *name;
virQEMUCapsPtr flags;
# include "testutilsqemu.h"
# include "virstring.h"
+# define VIR_FROM_THIS VIR_FROM_NONE
+
static virQEMUDriver driver;
static int
#include "testutilsxen.h"
#include "virstring.h"
+#define VIR_FROM_THIS VIR_FROM_NONE
+
static virCapsPtr caps;
static int
#include "testutilsqemu.h"
#include "virstring.h"
+#define VIR_FROM_THIS VIR_FROM_NONE
+
static int
testCompareXMLToXMLFiles(const char *inxml, const char *outxml)
{
#include "testutilsqemu.h"
#include "virstring.h"
+#define VIR_FROM_THIS VIR_FROM_NONE
+
const char create_tool[] = "qemu-img";
static int
#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)
#include "virfile.h"
#include "virstring.h"
+#define VIR_FROM_THIS VIR_FROM_NONE
+
#if defined (__linux__)
# if defined(__s390__) || defined(__s390x__) || \
#include "viralloc.h"
#include "virstring.h"
+#define VIR_FROM_THIS VIR_FROM_NONE
+
#define TEST_ERROR(...) \
do { \
if (virTestGetDebug()) \
#include "virlog.h"
#include "virstring.h"
+#define VIR_FROM_THIS VIR_FROM_NONE
+
#define testError(...) \
do { \
char *str; \
#include "testutils.h"
#include "virstring.h"
+#define VIR_FROM_THIS VIR_FROM_NONE
+
#ifdef WIN32
int
#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)
#include "testutilsxen.h"
#include "virstring.h"
+#define VIR_FROM_THIS VIR_FROM_NONE
+
static virCapsPtr caps;
static virDomainXMLOptionPtr xmlopt;
#include "virt-host-validate-common.h"
#include "virstring.h"
+#define VIR_FROM_THIS VIR_FROM_NONE
+
static bool quiet;
void virHostMsgSetQuiet(bool quietFlag)