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@xxxxxxxxxx> --- 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@xxxxxxxxxxxxxx> * Copyright (C) 2012 Ata E Husain Bohra <ata.husain@xxxxxxxxxxx> * @@ -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@xxxxxxxxx> * * 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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list