virAsprintf(&foo, "%s", bar) is wasteful compared to
foo = strdup(bar) (or eventually, VIR_STRDUP(foo, bar),
but one thing at a time...).
Noticed while reviewing Laine's attempt to clean up broken
qemu:///session.
* cfg.mk (sc_prohibit_asprintf): Enhance rule.
* src/esx/esx_storage_backend_vmfs.c
(esxStorageBackendVMFSVolumeLookupByKey): Fix offender.
* src/network/bridge_driver.c (networkStateInitialize): Likewise.
* src/nwfilter/nwfilter_dhcpsnoop.c (virNWFilterSnoopDHCPOpen):
Likewise.
* src/storage/storage_backend_sheepdog.c
(virStorageBackendSheepdogRefreshVol): Likewise.
* src/util/vircgroup.c (virCgroupAddTaskStrController): Likewise.
* src/util/virdnsmasq.c (addnhostsAdd): Likewise.
* src/xen/block_stats.c (xenLinuxDomainDeviceID): Likewise.
* src/xen/xen_driver.c (xenUnifiedConnectOpen): Likewise.
* tools/virsh.c (vshGetTypedParamValue): Likewise.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
cfg.mk | 4 ++++
src/esx/esx_storage_backend_vmfs.c | 5 ++---
src/network/bridge_driver.c | 9 +++------
src/nwfilter/nwfilter_dhcpsnoop.c | 4 ++--
src/storage/storage_backend_sheepdog.c | 3 ++-
src/util/vircgroup.c | 2 +-
src/util/virdnsmasq.c | 7 ++++---
src/xen/block_stats.c | 8 ++++----
src/xen/xen_driver.c | 2 +-
tools/virsh.c | 2 +-
10 files changed, 24 insertions(+), 22 deletions(-)
diff --git a/cfg.mk b/cfg.mk
index d499ded..1d63bbd 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -378,10 +378,14 @@ sc_prohibit_strtol:
$(_sc_search_regexp)
# Use virAsprintf rather than as'printf since *strp is undefined on error.
+# But for plain %s, virAsprintf is overkill compared to strdup.
sc_prohibit_asprintf:
@prohibit='\<v?a[s]printf\>' \
halt='use virAsprintf, not as'printf \
$(_sc_search_regexp)
+ @prohibit='virAsprintf.*, *"%s",' \
+ halt='use strdup instead of virAsprintf with "%s"' \
+ $(_sc_search_regexp)
# Prefer virSetUIDGID.
sc_prohibit_setuid:
diff --git a/src/esx/esx_storage_backend_vmfs.c b/src/esx/esx_storage_backend_vmfs.c
index dea6716..5d6f183 100644
--- a/src/esx/esx_storage_backend_vmfs.c
+++ b/src/esx/esx_storage_backend_vmfs.c
@@ -3,7 +3,7 @@
* esx_storage_backend_vmfs.c: ESX storage driver backend for
* managing VMFS datastores
*
- * Copyright (C) 2010-2011 Red Hat, Inc.
+ * Copyright (C) 2010-2011, 2013 Red Hat, Inc.
* Copyright (C) 2010-2012 Matthias Bolte <matthias.bolte(a)googlemail.com>
* Copyright (C) 2012 Ata E Husain Bohra <ata.husain(a)hotmail.com>
*
@@ -791,8 +791,7 @@ esxStorageBackendVMFSVolumeLookupByKey(virConnectPtr conn, const char
*key)
VIR_FREE(datastorePath);
if (length < 1) {
- if (virAsprintf(&volumeName, "%s",
- fileInfo->path) < 0) {
+ if (!(volumeName = strdup(fileInfo->path))) {
virReportOOMError();
goto cleanup;
}
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 35202f1..3ddea18 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -393,12 +393,9 @@ networkStateInitialize(bool privileged,
}
VIR_FREE(userdir);
- userdir = virGetUserConfigDirectory();
- if (virAsprintf(&base, "%s", userdir) == -1) {
- VIR_FREE(userdir);
- goto out_of_memory;
- }
- VIR_FREE(userdir);
+ base = virGetUserConfigDirectory();
+ if (!base)
+ goto error;
}
/* Configuration paths are either ~/.libvirt/qemu/... (session) or
diff --git a/src/nwfilter/nwfilter_dhcpsnoop.c b/src/nwfilter/nwfilter_dhcpsnoop.c
index df11e89..50042df 100644
--- a/src/nwfilter/nwfilter_dhcpsnoop.c
+++ b/src/nwfilter/nwfilter_dhcpsnoop.c
@@ -2,7 +2,7 @@
* nwfilter_dhcpsnoop.c: support for DHCP snooping used by a VM
* on an interface
*
- * Copyright (C) 2012 Red Hat, Inc.
+ * Copyright (C) 2012-2013 Red Hat, Inc.
* Copyright (C) 2011,2012 IBM Corp.
*
* Authors:
@@ -1110,7 +1110,7 @@ virNWFilterSnoopDHCPOpen(const char *ifname, virMacAddr *mac,
* generate much more traffic than if we filtered by VM and
* braodcast MAC as well
*/
- if (virAsprintf(&ext_filter, "%s", filter) < 0) {
+ if (!(ext_filter = strdup(filter))) {
virReportOOMError();
return NULL;
}
diff --git a/src/storage/storage_backend_sheepdog.c
b/src/storage/storage_backend_sheepdog.c
index a9ee7d3..2e62e6d 100644
--- a/src/storage/storage_backend_sheepdog.c
+++ b/src/storage/storage_backend_sheepdog.c
@@ -1,6 +1,7 @@
/*
* storage_backend_sheepdog.c: storage backend for Sheepdog handling
*
+ * Copyright (C) 2013 Red Hat, Inc.
* Copyright (C) 2012 Wido den Hollander
* Copyright (C) 2012 Frank Spijkerman
* Copyright (C) 2012 Sebastian Wiedenroth
@@ -268,7 +269,7 @@ virStorageBackendSheepdogRefreshVol(virConnectPtr conn
ATTRIBUTE_UNUSED,
}
VIR_FREE(vol->target.path);
- if (virAsprintf(&vol->target.path, "%s", vol->name) == -1) {
+ if (!(vol->target.path = strdup(vol->name))) {
virReportOOMError();
goto cleanup;
}
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index b05fc45..473d2fc 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -1027,7 +1027,7 @@ static int virCgroupAddTaskStrController(virCgroupPtr group,
int rc = 0;
char *endp;
- if (virAsprintf(&str, "%s", pidstr) < 0)
+ if (!(str = strdup(pidstr)))
return -1;
cur = str;
diff --git a/src/util/virdnsmasq.c b/src/util/virdnsmasq.c
index 4f05633..36f31d2 100644
--- a/src/util/virdnsmasq.c
+++ b/src/util/virdnsmasq.c
@@ -1,7 +1,7 @@
/*
* virdnsmasq.c: Helper APIs for managing dnsmasq
*
- * Copyright (C) 2007-2012 Red Hat, Inc.
+ * Copyright (C) 2007-2013 Red Hat, Inc.
* Copyright (C) 2010 Satoru SATOH <satoru.satoh(a)gmail.com>
*
* This library is free software; you can redistribute it and/or
@@ -118,7 +118,7 @@ addnhostsAdd(dnsmasqAddnHostsfile *addnhostsfile,
if (VIR_ALLOC(addnhostsfile->hosts[idx].hostnames) < 0)
goto alloc_error;
- if (virAsprintf(&addnhostsfile->hosts[idx].ip, "%s", ipstr) <
0)
+ if (!(addnhostsfile->hosts[idx].ip = strdup(ipstr)))
goto alloc_error;
addnhostsfile->hosts[idx].nhostnames = 0;
@@ -128,7 +128,8 @@ addnhostsAdd(dnsmasqAddnHostsfile *addnhostsfile,
if (VIR_REALLOC_N(addnhostsfile->hosts[idx].hostnames,
addnhostsfile->hosts[idx].nhostnames + 1) < 0)
goto alloc_error;
- if
(virAsprintf(&addnhostsfile->hosts[idx].hostnames[addnhostsfile->hosts[idx].nhostnames],
"%s", name) < 0)
+ if
(!(addnhostsfile->hosts[idx].hostnames[addnhostsfile->hosts[idx].nhostnames]
+ = strdup(name)))
goto alloc_error;
VIR_FREE(ipstr);
diff --git a/src/xen/block_stats.c b/src/xen/block_stats.c
index 8c18ed5..ded8d7f 100644
--- a/src/xen/block_stats.c
+++ b/src/xen/block_stats.c
@@ -1,7 +1,7 @@
/*
* Linux block and network stats.
*
- * Copyright (C) 2007-2009 Red Hat, Inc.
+ * Copyright (C) 2007-2009, 2013 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -293,11 +293,11 @@ xenLinuxDomainDeviceID(int domid, const char *path)
*/
if (strlen(path) >= 5 && STRPREFIX(path, "/dev/"))
- retval = virAsprintf(&mod_path, "%s", path);
+ mod_path = strdup(path);
else
- retval = virAsprintf(&mod_path, "/dev/%s", path);
+ ignore_value(virAsprintf(&mod_path, "/dev/%s", path));
- if (retval < 0) {
+ if (!mod_path) {
virReportOOMError();
return -1;
}
diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
index 938205e..6ad050c 100644
--- a/src/xen/xen_driver.c
+++ b/src/xen/xen_driver.c
@@ -443,7 +443,7 @@ xenUnifiedConnectOpen(virConnectPtr conn, virConnectAuthPtr auth,
unsigned int f
}
#endif
- if (virAsprintf(&priv->saveDir, "%s", XEN_SAVE_DIR) == -1) {
+ if (!(priv->saveDir = strdup(XEN_SAVE_DIR))) {
virReportOOMError();
goto fail;
}
diff --git a/tools/virsh.c b/tools/virsh.c
index 22bcec2..7ef0bda 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -2181,7 +2181,7 @@ vshGetTypedParamValue(vshControl *ctl, virTypedParameterPtr item)
break;
case VIR_TYPED_PARAM_BOOLEAN:
- ret = virAsprintf(&str, "%s", item->value.b ? _("yes")
: _("no"));
+ str = vshStrdup(ctl, item->value.b ? _("yes") : _("no"));
break;
case VIR_TYPED_PARAM_STRING:
--
1.8.1.4