
On 05/03/2013 04:53 PM, Michal Privoznik wrote:
--- src/util/virauth.c | 17 +-- src/util/virauthconfig.c | 8 +- src/util/virbitmap.c | 9 +- src/util/vircgroup.c | 36 ++--- src/util/vircommand.c | 33 ++--- src/util/virconf.c | 34 ++--- src/util/virdnsmasq.c | 22 +-- src/util/virebtables.c | 34 ++--- src/util/virebtables.h | 2 +- src/util/virerror.c | 19 +-- src/util/virhash.c | 5 +- src/util/viridentity.c | 15 +- src/util/virinitctl.c | 4 +- src/util/viriptables.c | 4 +- src/util/virjson.c | 18 ++- src/util/virkeyfile.c | 13 +- src/util/virlockspace.c | 25 ++-- src/util/virlog.c | 25 ++-- src/util/virnetdevmacvlan.c | 16 +-- src/util/virnetdevtap.c | 11 +- src/util/virnetdevvportprofile.c | 4 +- src/util/virobject.c | 16 ++- src/util/virpci.c | 14 +- src/util/virsexpr.c | 37 ++--- src/util/virsocketaddr.c | 9 +- src/util/virstoragefile.c | 18 +-- src/util/virstring.c | 17 +-- src/util/virsysinfo.c | 290 ++++++++++++++++----------------------- src/util/virtypedparam.c | 14 +- src/util/viruri.c | 58 ++++---- src/util/virutil.c | 91 +++++------- src/util/virxml.c | 5 +- 32 files changed, 356 insertions(+), 567 deletions(-)
diff --git a/src/util/virbitmap.c b/src/util/virbitmap.c index c81555a..cf6a099 100644 --- a/src/util/virbitmap.c +++ b/src/util/virbitmap.c @@ -37,6 +37,8 @@ #include "count-one-bits.h" #include "virstring.h"
+#define VIR_FROM_THIS VIR_FROM_NONE + struct _virBitmap { size_t max_bit; size_t map_len; @@ -226,8 +228,11 @@ char *virBitmapFormat(virBitmapPtr bitmap) return NULL;
cur = virBitmapNextSetBit(bitmap, -1); - if (cur < 0) - return strdup(""); + if (cur < 0) { + char *ret; + ignore_value(VIR_STRDUP(ret, ""));
VIR_STRDUP_QUIET (and drop the #define), otherwise the function will report an error on OOM in VIR_STRDUP and it won't report it on OOM in the virBuffer code. (unless you plan to convert those as well)
+ return ret; + }
start = prev = cur; while (prev >= 0) { diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index 473d2fc..b3845ea 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -116,19 +116,14 @@ static int virCgroupCopyMounts(virCgroupPtr group, if (!parent->controllers[i].mountPoint) continue;
- group->controllers[i].mountPoint = - strdup(parent->controllers[i].mountPoint); - - if (!group->controllers[i].mountPoint) + if (VIR_STRDUP(group->controllers[i].mountPoint, + parent->controllers[i].mountPoint) < 0)
VIR_STRDUP_QUIET
return -ENOMEM;
- if (parent->controllers[i].linkPoint) { - group->controllers[i].linkPoint = - strdup(parent->controllers[i].linkPoint); - - if (!group->controllers[i].linkPoint) - return -ENOMEM; - } + if (parent->controllers[i].linkPoint && + VIR_STRDUP(group->controllers[i].linkPoint, + parent->controllers[i].linkPoint) < 0)
here too
+ return -ENOMEM; } return 0; } @@ -177,8 +172,8 @@ static int virCgroupDetectMounts(virCgroupPtr group) struct stat sb; char *tmp2;
- if (!(group->controllers[i].mountPoint = strdup(entry.mnt_dir))) - goto no_memory; + if (VIR_STRDUP(group->controllers[i].mountPoint, entry.mnt_dir) < 0) + goto error;
VIR_STRDUP_QUIET and goto no_memory; no_memory doesn't report an error here, it sets errno.
tmp2 = strrchr(entry.mnt_dir, '/'); if (!tmp2) { @@ -239,7 +234,7 @@ static int virCgroupCopyPlacement(virCgroupPtr group, continue;
if (path[0] == '/') { - if (!(group->controllers[i].placement = strdup(path))) + if (VIR_STRDUP(group->controllers[i].placement, path) < 0) return -ENOMEM; } else { /* @@ -821,7 +816,7 @@ static int virCgroupNew(const char *path, }
if (path[0] == '/' || !parent) { - if (!((*group)->path = strdup(path))) { + if (VIR_STRDUP((*group)->path, path) < 0) { rc = -ENOMEM; goto err; }
VIR_STRDUP_QUIET in both hunks above.
@@ -1027,7 +1022,7 @@ static int virCgroupAddTaskStrController(virCgroupPtr group, int rc = 0; char *endp;
- if (!(str = strdup(pidstr))) + if (VIR_STRDUP(str, pidstr) < 0) return -1;
VIR_STRDUP_QUIET return -ENOMEM;
cur = str; @@ -1253,7 +1248,7 @@ int virCgroupNewPartition(const char *path,
if (STRNEQ(newpath, "/")) { char *tmp; - if (!(parentPath = strdup(newpath))) { + if (VIR_STRDUP(parentPath, newpath) < 0) {
VIR_STRDUP_QUIET
rc = -ENOMEM; goto cleanup; }
@@ -2543,12 +2538,11 @@ static char *virCgroupIdentifyRoot(virCgroupPtr group) }
All this:
tmp[0] = '\0'; - ret = strdup(group->controllers[i].mountPoint); - tmp[0] = '/'; - if (!ret) { - virReportOOMError(); + if (VIR_STRDUP(ret, group->controllers[i].mountPoint) < 0) { + tmp[0] = '/'; return NULL; } + tmp[0] = '/';
can be replaced by: ignore_value(VIR_STRNDUP(ret, group->controllers[i].mountPoint, tmp - group->controllers[i].mountPoint)); althought that would probably work better as a separate patch.
return ret; }
diff --git a/src/util/vircommand.c b/src/util/vircommand.c index f6f27d9..eecda58 100644 --- a/src/util/vircommand.c +++ b/src/util/vircommand.c @@ -946,9 +946,8 @@ virCommandSetPidFile(virCommandPtr cmd, const char *pidfile) return;
VIR_FREE(cmd->pidfile); - if (!(cmd->pidfile = strdup(pidfile))) { + if (VIR_STRDUP(cmd->pidfile, pidfile) < 0) cmd->has_error = ENOMEM; - } }
@@ -1049,7 +1048,7 @@ virCommandSetSELinuxLabel(virCommandPtr cmd,
#if defined(WITH_SECDRIVER_SELINUX) VIR_FREE(cmd->seLinuxLabel); - if (label && !(cmd->seLinuxLabel = strdup(label))) + if (label && VIR_STRDUP(cmd->seLinuxLabel, label) < 0) cmd->has_error = ENOMEM; #endif return; @@ -1074,7 +1073,7 @@ virCommandSetAppArmorProfile(virCommandPtr cmd,
#if defined(WITH_SECDRIVER_APPARMOR) VIR_FREE(cmd->appArmorProfile); - if (profile && !(cmd->appArmorProfile = strdup(profile))) + if (profile && VIR_STRDUP(cmd->appArmorProfile, profile) < 0) cmd->has_error = ENOMEM; #endif return; @@ -1205,7 +1204,7 @@ virCommandAddEnvString(virCommandPtr cmd, const char *str) if (!cmd || cmd->has_error) return;
- if (!(env = strdup(str))) { + if (VIR_STRDUP(env, str) < 0) { cmd->has_error = ENOMEM; return; } @@ -1309,7 +1308,7 @@ virCommandAddArg(virCommandPtr cmd, const char *val) if (!cmd || cmd->has_error) return;
- if (!(arg = strdup(val))) { + if (VIR_STRDUP(arg, val) < 0) { cmd->has_error = ENOMEM; return; } @@ -1350,11 +1349,11 @@ virCommandAddArgBuffer(virCommandPtr cmd, virBufferPtr buf) }
cmd->args[cmd->nargs] = virBufferContentAndReset(buf); - if (!cmd->args[cmd->nargs]) - cmd->args[cmd->nargs] = strdup(""); if (!cmd->args[cmd->nargs]) { - cmd->has_error = ENOMEM; - return; + if (VIR_STRDUP(cmd->args[cmd->nargs], "") < 0) { + cmd->has_error = ENOMEM; + return; + } } cmd->nargs++; } @@ -1440,8 +1439,9 @@ virCommandAddArgSet(virCommandPtr cmd, const char *const*vals)
narg = 0; while (vals[narg] != NULL) { - char *arg = strdup(vals[narg++]); - if (!arg) { + char *arg; + + if (VIR_STRDUP(arg, vals[narg++]) < 0) { cmd->has_error = ENOMEM; return; } @@ -1481,8 +1481,7 @@ virCommandAddArgList(virCommandPtr cmd, ...) char *arg = va_arg(list, char *); if (!arg) break; - arg = strdup(arg); - if (!arg) { + if (VIR_STRDUP(arg, arg) < 0) { cmd->has_error = ENOMEM; va_end(list); return; @@ -1511,8 +1510,7 @@ virCommandSetWorkingDirectory(virCommandPtr cmd, const char *pwd) cmd->has_error = -1; VIR_DEBUG("cannot set directory twice"); } else { - cmd->pwd = strdup(pwd); - if (!cmd->pwd) + if (VIR_STRDUP(cmd->pwd, pwd) < 0) cmd->has_error = ENOMEM; } } @@ -1539,8 +1537,7 @@ virCommandSetInputBuffer(virCommandPtr cmd, const char *inbuf) return; }
- cmd->inbuf = strdup(inbuf); - if (!cmd->inbuf) + if (VIR_STRDUP(cmd->inbuf, inbuf) < 0) cmd->has_error = ENOMEM; }
VIR_STRDUP_QUIET for all of the above. OOM Error for these is reported in virCommandRun.
diff --git a/src/util/virhash.c b/src/util/virhash.c index 2fe8751..bb708fc 100644 --- a/src/util/virhash.c +++ b/src/util/virhash.c @@ -85,7 +86,9 @@ static bool virHashStrEqual(const void *namea, const void *nameb)
static void *virHashStrCopy(const void *name) { - return strdup(name); + char *ret; + ignore_value(VIR_STRDUP(ret, name)); + return ret; }
VIR_STRDUP_QUIET, as the error gets reported in virHashAddOrUpdateEntry.
static void virHashStrFree(void *name)
diff --git a/src/util/viriptables.c b/src/util/viriptables.c index 06a1356..88c3bcd 100644 --- a/src/util/viriptables.c +++ b/src/util/viriptables.c @@ -118,10 +118,10 @@ iptRulesNew(const char *table, if (VIR_ALLOC(rules) < 0) return NULL;
- if (!(rules->table = strdup(table))) + if (VIR_STRDUP(rules->table, table) < 0) goto error;
- if (!(rules->chain = strdup(chain))) + if (VIR_STRDUP(rules->chain, chain) < 0) goto error;
return rules;
VIR_STRDUP_QUIET, unless you plan to adjust the comment for iptablesContextNew and remove the extra OOMError from bridge_driver.c
diff --git a/src/util/virjson.c b/src/util/virjson.c index 92138d3..66376c1 100644 --- a/src/util/virjson.c +++ b/src/util/virjson.c @@ -107,7 +107,7 @@ virJSONValuePtr virJSONValueNewString(const char *data) return NULL;
val->type = VIR_JSON_TYPE_STRING; - if (!(val->data.string = strdup(data))) { + if (VIR_STRDUP(val->data.string, data) < 0) { VIR_FREE(val); return NULL; } @@ -126,7 +126,7 @@ virJSONValuePtr virJSONValueNewStringLen(const char *data, size_t length) return NULL;
val->type = VIR_JSON_TYPE_STRING; - if (!(val->data.string = strndup(data, length))) { + if (VIR_STRNDUP(val->data.string, data, length) < 0) { VIR_FREE(val); return NULL; } @@ -142,7 +142,7 @@ static virJSONValuePtr virJSONValueNewNumber(const char *data) return NULL;
val->type = VIR_JSON_TYPE_NUMBER; - if (!(val->data.number = strdup(data))) { + if (VIR_STRDUP(val->data.number, data) < 0) { VIR_FREE(val); return NULL; } @@ -269,7 +269,7 @@ int virJSONValueObjectAppend(virJSONValuePtr object, const char *key, virJSONVal if (virJSONValueObjectHasKey(object, key)) return -1;
- if (!(newkey = strdup(key))) + if (VIR_STRDUP(newkey, key) < 0) return -1;
if (VIR_REALLOC_N(object->data.object.pairs, @@ -751,10 +751,10 @@ static int virJSONParserHandleNumber(void *ctx, yajl_size_t l) { virJSONParserPtr parser = ctx; - char *str = strndup(s, l); + char *str; virJSONValuePtr value;
- if (!str) + if (VIR_STRNDUP(str, s, l) < 0) return -1; value = virJSONValueNewNumber(str); VIR_FREE(str); @@ -808,8 +808,7 @@ static int virJSONParserHandleMapKey(void *ctx, state = &parser->state[parser->nstate-1]; if (state->key) return 0; - state->key = strndup((const char *)stringVal, stringLen); - if (!state->key) + if (VIR_STRNDUP(state->key, (const char *)stringVal, stringLen) < 0) return 0; return 1; }
All these are expected by the callers to be quiet.
@@ -1094,8 +1093,7 @@ char *virJSONValueToString(virJSONValuePtr object, goto cleanup; }
- if (!(ret = strdup((const char *)str))) - virReportOOMError(); + ignore_value(VIR_STRDUP(ret, (const char *)str));
cleanup: yajl_gen_free(g);
diff --git a/src/util/virlog.c b/src/util/virlog.c index eee9ddc..2ed0b10 100644 --- a/src/util/virlog.c +++ b/src/util/virlog.c @@ -557,8 +557,7 @@ virLogDefineFilter(const char *match, } }
- mdup = strdup(match); - if (mdup == NULL) { + if (VIR_STRDUP(mdup, match) < 0) { i = -1; goto cleanup; } @@ -664,13 +663,9 @@ virLogDefineOutput(virLogOutputFunc f, if (f == NULL) return -1;
- if (dest == VIR_LOG_TO_SYSLOG || dest == VIR_LOG_TO_FILE) { - if (name == NULL) - return -1; - ndup = strdup(name); - if (ndup == NULL) - return -1; - } + if ((dest == VIR_LOG_TO_SYSLOG || dest == VIR_LOG_TO_FILE) && + (!name || VIR_STRDUP(ndup, name) < 0)) + return -1;
virLogLock(); if (VIR_REALLOC_N(virLogOutputs, virLogNbOutputs + 1)) { @@ -1047,8 +1042,7 @@ virLogAddOutputToSyslog(virLogPriority priority, * ident needs to be kept around on Solaris */ VIR_FREE(current_ident); - current_ident = strdup(ident); - if (current_ident == NULL) + if (VIR_STRDUP(current_ident, ident) < 0) return -1;
openlog(current_ident, 0, 0); @@ -1329,8 +1323,7 @@ virLogParseOutputs(const char *outputs) if (str == cur) goto cleanup; #if HAVE_SYSLOG_H - name = strndup(str, cur - str); - if (name == NULL) + if (VIR_STRNDUP(name, str, cur - str) < 0) goto cleanup; if (virLogAddOutputToSyslog(prio, name) == 0) count++; @@ -1346,8 +1339,7 @@ virLogParseOutputs(const char *outputs) cur++; if (str == cur) goto cleanup; - name = strndup(str, cur - str); - if (name == NULL) + if (VIR_STRNDUP(name, str, cur - str) < 0) goto cleanup; if (virFileAbsPath(name, &abspath) < 0) { VIR_FREE(name); @@ -1424,8 +1416,7 @@ virLogParseFilters(const char *filters) cur++; if (str == cur) goto cleanup; - name = strndup(str, cur - str); - if (name == NULL) + if (VIR_STRNDUP(name, str, cur - str) < 0) goto cleanup; if (virLogDefineFilter(name, prio, flags) >= 0) count++;
All the calls in this file should be quiet too.
diff --git a/src/util/virnetdevmacvlan.c b/src/util/virnetdevmacvlan.c index 0c4fcbd..93bf798 100644 --- a/src/util/virnetdevmacvlan.c +++ b/src/util/virnetdevmacvlan.c @@ -764,14 +765,14 @@ virNetDevMacVLanVPortProfileRegisterCallback(const char *ifname, if (virtPortProfile && virNetlinkEventServiceIsRunning(NETLINK_ROUTE)) { if (VIR_ALLOC(calld) < 0) goto memory_error; - if ((calld->cr_ifname = strdup(ifname)) == NULL) - goto memory_error; + if (VIR_STRDUP(calld->cr_ifname, ifname) < 0) + goto error; if (VIR_ALLOC(calld->virtPortProfile) < 0) goto memory_error; memcpy(calld->virtPortProfile, virtPortProfile, sizeof(*virtPortProfile)); virMacAddrSet(&calld->macaddress, macaddress); - if ((calld->linkdev = strdup(linkdev)) == NULL) - goto memory_error; + if (VIR_STRDUP(calld->linkdev, linkdev) < 0) + goto error;
double space ^^
memcpy(calld->vmuuid, vmuuid, sizeof(calld->vmuuid));
calld->vmOp = vmOp;
diff --git a/src/util/virobject.c b/src/util/virobject.c index 93e37e4..72a5248 100644 --- a/src/util/virobject.c +++ b/src/util/virobject.c @@ -28,6 +28,7 @@ #include "viratomic.h" #include "virerror.h" #include "virlog.h" +#include "virstring.h"
#define VIR_FROM_THIS VIR_FROM_NONE
@@ -37,7 +38,7 @@ struct _virClass { virClassPtr parent;
unsigned int magic; - const char *name; + char *name; size_t objectSize;
virObjectDisposeCallback dispose; @@ -131,21 +132,22 @@ virClassPtr virClassNew(virClassPtr parent, return NULL; }
- if (VIR_ALLOC(klass) < 0) - goto no_memory; + if (VIR_ALLOC(klass) < 0) { + virReportOOMError(); + goto error; + }
klass->parent = parent; - if (!(klass->name = strdup(name))) - goto no_memory; + if (VIR_STRDUP(klass->name, name) < 0) + goto error;
Wouldn't it be nicer to do it with a temporary variable, so we can keep the const?
klass->magic = virAtomicIntInc(&magicCounter); klass->objectSize = objectSize; klass->dispose = dispose;
return klass;
-no_memory: +error: VIR_FREE(klass); - virReportOOMError(); return NULL; }
diff --git a/src/util/virsexpr.c b/src/util/virsexpr.c index 23b6781..b17c0d4 100644 --- a/src/util/virsexpr.c +++ b/src/util/virsexpr.c @@ -119,16 +119,10 @@ sexpr_string(const char *str, ssize_t len) if (ret == NULL) return ret; ret->kind = SEXPR_VALUE; - if (len > 0) { - ret->u.value = strndup(str, len); - } else { - ret->u.value = strdup(str); - }
- if (ret->u.value == NULL) { + if ((len > 0 && VIR_STRNDUP(ret->u.value, str, len) < 0) || + (len <= 0 && VIR_STRDUP(ret->u.value, str) < 0)) VIR_FREE(ret); - return NULL; - }
return ret; }
This function was quiet before, but it doesn't seem to be used anywhere.
@@ -527,13 +511,10 @@ int sexpr_node_copy(const struct sexpr *sexpr, const char *node, char **dst) { const char *val = sexpr_node(sexpr, node);
- if (val && *val) { - *dst = strdup(val); - if (!(*dst)) - return -1; - } else { - *dst = NULL; - } + if (val && *val) + return VIR_STRDUP(*dst, val); + + *dst = NULL; return 0; }
Callers report the OOM error for this function, but it seems it would be better to leave it here and clean them up.
diff --git a/src/util/virsysinfo.c b/src/util/virsysinfo.c index 2efe634..7fd2537 100644 --- a/src/util/virsysinfo.c +++ b/src/util/virsysinfo.c @@ -144,32 +144,26 @@ virSysinfoParseSystem(const char *base, virSysinfoDefPtr ret) cur = strchr(cur, ':') + 1; eol = strchr(cur, '\n'); virSkipSpaces(&cur); - if (eol && - ((ret->system_family = strndup(cur, eol - cur)) == NULL)) - goto no_memory; + if (eol && VIR_STRNDUP(ret->system_family, cur, eol - cur) < 0) + return -1;
if ((cur = strstr(base, "model")) != NULL) { cur = strchr(cur, ':') + 1; eol = strchr(cur, '\n'); virSkipSpaces(&cur); - if (eol && ((ret->system_serial = strndup(cur, eol - cur)) - == NULL)) - goto no_memory; + if (eol && VIR_STRNDUP(ret->system_serial, cur, eol - cur) < 0) + return -1; }
if ((cur = strstr(base, "machine")) != NULL) { cur = strchr(cur, ':') + 1; eol = strchr(cur, '\n'); virSkipSpaces(&cur); - if (eol && ((ret->system_version = strndup(cur, eol - cur)) - == NULL)) - goto no_memory; + if (eol && VIR_STRNDUP(ret->system_version, cur, eol - cur) < 0) + return -1; }
return 0; - -no_memory: - return -1; }
static int @@ -185,34 +179,31 @@ virSysinfoParseProcessor(const char *base, virSysinfoDefPtr ret) cur = strchr(base, ':') + 1;
if (VIR_EXPAND_N(ret->processor, ret->nprocessor, 1) < 0) { - goto no_memory; + return -1; } processor = &ret->processor[ret->nprocessor - 1];
virSkipSpaces(&cur); - if (eol && - ((processor->processor_socket_destination = strndup - (cur, eol - cur)) == NULL)) - goto no_memory; + if (eol && VIR_STRNDUP(processor->processor_socket_destination, + cur, eol - cur) < 0) + return -1;
if ((cur = strstr(base, "cpu")) != NULL) { cur = strchr(cur, ':') + 1; eol = strchr(cur, '\n'); virSkipSpaces(&cur); - if (eol && - ((processor->processor_type = strndup(cur, eol - cur)) - == NULL)) - goto no_memory; + if (eol && VIR_STRNDUP(processor->processor_type, + cur, eol - cur) < 0) + return -1; }
if ((cur = strstr(base, "revision")) != NULL) { cur = strchr(cur, ':') + 1; eol = strchr(cur, '\n'); virSkipSpaces(&cur); - if (eol && - ((processor->processor_version = strndup(cur, eol - cur)) - == NULL)) - goto no_memory; + if (eol && VIR_STRNUDP(processor->processor_version,
typo ^^
+ cur, eol - cur) < 0) + return -1; }
base = cur;
You have replaced all occurences of goto no_memory with return -1, but you left the no_memory label here.
@@ -270,32 +261,26 @@ virSysinfoParseSystem(const char *base, virSysinfoDefPtr ret) cur = strchr(cur, ':') + 1; eol = strchr(cur, '\n'); virSkipSpaces(&cur); - if (eol && - ((ret->system_family = strndup(cur, eol - cur)) == NULL)) - goto no_memory; + if (eol && VIR_STRNDUP(ret->system_family, cur, eol - cur) < 0) + return -1;
if ((cur = strstr(base, "model")) != NULL) { cur = strchr(cur, ':') + 1; eol = strchr(cur, '\n'); virSkipSpaces(&cur); - if (eol && ((ret->system_serial = strndup(cur, eol - cur)) - == NULL)) - goto no_memory; + if (eol && VIR_STRNDUP(ret->system_serial, cur, eol - cur) < 0) + return -1; }
if ((cur = strstr(base, "machine")) != NULL) { cur = strchr(cur, ':') + 1; eol = strchr(cur, '\n'); virSkipSpaces(&cur); - if (eol && ((ret->system_version = strndup(cur, eol - cur)) - == NULL)) - goto no_memory; + if (eol && VIR_STRNDUP(ret->system_version, cur, eol - cur) < 0) + return -1; }
return 0; - -no_memory: - return -1; }
static int @@ -313,10 +298,8 @@ virSysinfoParseProcessor(const char *base, virSysinfoDefPtr ret) eol = strchr(base, '\n'); cur = strchr(base, ':') + 1; virSkipSpaces(&cur); - if (eol && - ((processor_type = strndup(cur, eol - cur)) - == NULL)) - goto no_memory; + if (eol && VIR_STRNDUP(processor_type, cur, eol - cur) < 0) + goto error; base = cur;
while ((tmp_base = strstr(base, "processor")) != NULL) { @@ -325,19 +308,20 @@ virSysinfoParseProcessor(const char *base, virSysinfoDefPtr ret) cur = strchr(base, ':') + 1;
if (VIR_EXPAND_N(ret->processor, ret->nprocessor, 1) < 0) { - goto no_memory; + virReportOOMError();
Unrelated, but missing.
+ goto error; } processor = &ret->processor[ret->nprocessor - 1];
virSkipSpaces(&cur); if (eol && - ((processor->processor_socket_destination = strndup - (cur, eol - cur)) == NULL)) - goto no_memory; + VIR_STRNDUP(processor->processor_socket_destination, + cur, eol - cur) < 0) + goto error;
if (processor_type && - !(processor->processor_type = strdup(processor_type))) - goto no_memory; + VIR_STRDUP(processor->processor_type, processor_type) < 0) + goto error;
base = cur; }
virSysinfoRead for non-windows x86 seems to be the only one reporting OOM errors, which should be deleted after you switch VIR_ALLOC to report errors too and the other architectures might be missing some OOM errors, like arm in the hunk above.
diff --git a/src/util/virutil.c b/src/util/virutil.c index 982d4a3..d3d77b2 100644 --- a/src/util/virutil.c +++ b/src/util/virutil.c @@ -547,11 +547,8 @@ virFileResolveLinkHelper(const char *linkpath, if (lstat(linkpath, &st) < 0) return -1;
- if (!S_ISLNK(st.st_mode)) { - if (!(*resultpath = strdup(linkpath))) - return -1; - return 0; - } + if (!S_ISLNK(st.st_mode)) + return VIR_STRDUP(*resultpath, linkpath); }
*resultpath = canonicalize_file_name(linkpath);
This function should return -1 and set errno on error, not report an error.
@@ -623,9 +620,11 @@ char *virFindFileInPath(const char *file) * copy of that path, after validating that it is executable */ if (IS_ABSOLUTE_FILE_NAME(file)) { - if (virFileIsExecutable(file)) - return strdup(file); - else + if (virFileIsExecutable(file)) { + char *ret; + ignore_value(VIR_STRDUP(ret, file));
VIR_STRDUP_QUIET
+ return ret; + } else return NULL; }
@@ -641,7 +640,7 @@ char *virFindFileInPath(const char *file) /* copy PATH env so we can tweak it */ path = getenv("PATH");
- if (path == NULL || (path = strdup(path)) == NULL) + if (!path|| VIR_STRDUP(path, path) < 0)
missing space; VIR_STRDUP_QUIET
return NULL;
/* for each path segment, append the file to search for and test for @@ -1296,7 +1295,7 @@ virFileMakePathWithMode(const char *path, int ret = -1; char *tmp;
- if ((tmp = strdup(path)) == NULL) + if (VIR_STRDUP(tmp, path) < 0) goto cleanup;
This one should be quiet and set errno.
ret = virFileMakePathHelper(tmp, mode); @@ -1503,8 +1502,7 @@ int virFileAbsPath(const char *path, char **abspath) char *buf;
if (path[0] == '/') { - if (!(*abspath = strdup(path))) - return -1; + return VIR_STRDUP(*abspath, path);
VIR_STRDUP_QUIET
} else { buf = getcwd(NULL, 0); if (buf == NULL)
@@ -2810,7 +2782,8 @@ char *virFileFindMountPoint(const char *type)
while (getmntent_r(f, &mb, mntbuf, sizeof(mntbuf))) { if (STREQ(mb.mnt_type, type)) { - ret = strdup(mb.mnt_dir); + if (VIR_STRDUP(ret, mb.mnt_dir) < 0)
VIR_STRDUP_QUIET
+ errno = ENOMEM; goto cleanup; } }
ACK (but I only compiled it on amd64 linux) Jan