It costs quite a few processor cycles to go through printf parsing just to determine that we only meant to append. * src/xen/xend_internal.c (xend_op_ext): Consolidate multiple printfs into one. * src/qemu/qemu_command.c (qemuBuildWatchdogDevStr) (qemuBuildUSBInputDevStr, qemuBuildSoundDevStr) (qemuBuildSoundCodecStr, qemuBuildVideoDevStr): Likewise. (qemuBuildCpuArgStr, qemuBuildCommandLine): Prefer virBufferAdd over virBufferVsprintf for trivial appends. * src/phyp/phyp_driver.c (phypExec, phypUUIDTable_Push) (phypUUIDTable_Pull): Likewise. * src/conf/nwfilter_conf.c (macProtocolIDFormatter) (arpOpcodeFormatter, formatIPProtocolID, printStringItems) (virNWFilterPrintStateMatchFlags, virNWIPAddressFormat) (virNWFilterDefFormat): Likewise. * src/security/virt-aa-helper.c (main): Likewise. * src/util/sexpr.c (sexpr2string): Likewise. * src/xenxs/xen_sxpr.c (xenFormatSxprChr): Likewise. * src/xenxs/xen_xm.c (xenFormatXMDisk): Likewise. --- src/conf/nwfilter_conf.c | 16 ++++++++-------- src/phyp/phyp_driver.c | 7 +++---- src/qemu/qemu_command.c | 30 +++++++++++------------------- src/security/virt-aa-helper.c | 2 +- src/util/sexpr.c | 4 ++-- src/xen/xend_internal.c | 6 ++---- src/xenxs/xen_sxpr.c | 2 +- src/xenxs/xen_xm.c | 4 ++-- 8 files changed, 30 insertions(+), 41 deletions(-) diff --git a/src/conf/nwfilter_conf.c b/src/conf/nwfilter_conf.c index 0732322..327fab3 100644 --- a/src/conf/nwfilter_conf.c +++ b/src/conf/nwfilter_conf.c @@ -488,7 +488,7 @@ macProtocolIDFormatter(virBufferPtr buf, if (intMapGetByInt(macProtoMap, nwf->p.ethHdrFilter.dataProtocolID.u.u16, &str)) { - virBufferVSprintf(buf, "%s", str); + virBufferAdd(buf, str, -1); } else { if (nwf->p.ethHdrFilter.dataProtocolID.datatype == DATATYPE_UINT16) asHex = false; @@ -591,7 +591,7 @@ arpOpcodeFormatter(virBufferPtr buf, if (intMapGetByInt(arpOpcodeMap, nwf->p.arpHdrFilter.dataOpcode.u.u16, &str)) { - virBufferVSprintf(buf, "%s", str); + virBufferAdd(buf, str, -1); } else { virBufferVSprintf(buf, "%d", nwf->p.arpHdrFilter.dataOpcode.u.u16); } @@ -653,7 +653,7 @@ formatIPProtocolID(virBufferPtr buf, if (intMapGetByInt(ipProtoMap, nwf->p.ipHdrFilter.ipHdr.dataProtocolID.u.u8, &str)) { - virBufferVSprintf(buf, "%s", str); + virBufferAdd(buf, str, -1); } else { if (nwf->p.ipHdrFilter.ipHdr.dataProtocolID.datatype == DATATYPE_UINT8) asHex = false; @@ -734,8 +734,8 @@ printStringItems(virBufferPtr buf, const struct int_map *int_map, for (i = 0; int_map[i].val; i++) { if (mask == int_map[i].attr) { if (c >= 1) - virBufferVSprintf(buf, "%s", sep); - virBufferVSprintf(buf, "%s", int_map[i].val); + virBufferAdd(buf, sep, -1); + virBufferAdd(buf, int_map[i].val, -1); c++; } } @@ -769,7 +769,7 @@ virNWFilterPrintStateMatchFlags(virBufferPtr buf, const char *prefix, if (!disp_none && (flags & RULE_FLAG_STATE_NONE)) return; - virBufferVSprintf(buf, "%s", prefix); + virBufferAdd(buf, prefix, -1); printStringItems(buf, stateMatchMap, flags, ","); } @@ -2699,7 +2699,7 @@ virNWIPAddressFormat(virBufferPtr buf, virSocketAddrPtr ipaddr) char *output = virSocketFormatAddr(ipaddr); if (output) { - virBufferVSprintf(buf, "%s", output); + virBufferAdd(buf, output, -1); VIR_FREE(output); } } @@ -2936,7 +2936,7 @@ virNWFilterDefFormat(virNWFilterDefPtr def) xml = virNWFilterEntryFormat(def->filterEntries[i]); if (!xml) goto err_exit; - virBufferVSprintf(&buf, "%s", xml); + virBufferAdd(&buf, xml, -1); VIR_FREE(xml); } diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c index 3862c9c..5742d95 100644 --- a/src/phyp/phyp_driver.c +++ b/src/phyp/phyp_driver.c @@ -1,4 +1,3 @@ - /* * Copyright (C) 2010-2011 Red Hat, Inc. * Copyright IBM Corp. 2009 @@ -156,7 +155,7 @@ phypExec(LIBSSH2_SESSION *session, const char *cmd, int *exit_status, rc = libssh2_channel_read(channel, buffer, buffer_size); if (rc > 0) { bytecount += rc; - virBufferVSprintf(&tex_ret, "%s", buffer); + virBufferAdd(&tex_ret, buffer, -1); } } while (rc > 0); @@ -494,7 +493,7 @@ phypUUIDTable_Push(virConnectPtr conn) char *remote_file = NULL; if (conn->uri->user != NULL) { - virBufferVSprintf(&username, "%s", conn->uri->user); + virBufferAdd(&username, conn->uri->user, -1); if (virBufferError(&username)) { virBufferFreeAndReset(&username); @@ -711,7 +710,7 @@ phypUUIDTable_Pull(virConnectPtr conn) char *remote_file = NULL; if (conn->uri->user != NULL) { - virBufferVSprintf(&username, "%s", conn->uri->user); + virBufferAdd(&username, conn->uri->user, -1); if (virBufferError(&username)) { virBufferFreeAndReset(&username); diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 71e5062..2205ed1 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1798,8 +1798,7 @@ qemuBuildWatchdogDevStr(virDomainWatchdogDefPtr dev, goto error; } - virBufferVSprintf(&buf, "%s", model); - virBufferVSprintf(&buf, ",id=%s", dev->info.alias); + virBufferVSprintf(&buf, "%s,id=%s", model, dev->info.alias); if (qemuBuildDeviceAddressStr(&buf, &dev->info, qemuCaps) < 0) goto error; @@ -1845,10 +1844,9 @@ qemuBuildUSBInputDevStr(virDomainInputDefPtr dev) { virBuffer buf = VIR_BUFFER_INITIALIZER; - virBufferVSprintf(&buf, "%s", + virBufferVSprintf(&buf, "%s,id=%s", dev->type == VIR_DOMAIN_INPUT_TYPE_MOUSE ? - "usb-mouse" : "usb-tablet"); - virBufferVSprintf(&buf, ",id=%s", dev->info.alias); + "usb-mouse" : "usb-tablet", dev->info.alias); if (virBufferError(&buf)) { virReportOOMError(); @@ -1884,8 +1882,7 @@ qemuBuildSoundDevStr(virDomainSoundDefPtr sound, else if (STREQ(model, "ich6")) model = "intel-hda"; - virBufferVSprintf(&buf, "%s", model); - virBufferVSprintf(&buf, ",id=%s", sound->info.alias); + virBufferVSprintf(&buf, "%s,id=%s", model, sound->info.alias); if (qemuBuildDeviceAddressStr(&buf, &sound->info, qemuCaps) < 0) goto error; @@ -1908,10 +1905,8 @@ qemuBuildSoundCodecStr(virDomainSoundDefPtr sound, virBuffer buf = VIR_BUFFER_INITIALIZER; int cad = 0; - virBufferVSprintf(&buf, "%s", codec); - virBufferVSprintf(&buf, ",id=%s-codec%d", sound->info.alias, cad); - virBufferVSprintf(&buf, ",bus=%s.0", sound->info.alias); - virBufferVSprintf(&buf, ",cad=%d", cad); + virBufferVSprintf(&buf, "%s,id=%s-codec%d,bus=%s.0,cad=%d", + codec, sound->info.alias, cad, sound->info.alias, cad); if (virBufferError(&buf)) { virReportOOMError(); @@ -1938,8 +1933,7 @@ qemuBuildVideoDevStr(virDomainVideoDefPtr video, goto error; } - virBufferVSprintf(&buf, "%s", model); - virBufferVSprintf(&buf, ",id=%s", video->info.alias); + virBufferVSprintf(&buf, "%s,id=%s", model, video->info.alias); if (video->type == VIR_DOMAIN_VIDEO_TYPE_QXL) { if (video->vram > (UINT_MAX / 1024)) { @@ -2572,7 +2566,7 @@ qemuBuildCpuArgStr(const struct qemud_driver *driver, goto cleanup; *hasHwVirt = hasSVM > 0 ? true : false; - virBufferVSprintf(&buf, "%s", guest->model); + virBufferAdd(&buf, guest->model, -1); for (i = 0; i < guest->nfeatures; i++) { char sign; if (guest->features[i].policy == VIR_CPU_FEATURE_DISABLE) @@ -3128,7 +3122,7 @@ qemuBuildCommandLine(virConnectPtr conn, else if (def->os.bootmenu == VIR_DOMAIN_BOOT_MENU_DISABLED) virBufferVSprintf(&boot_buf, "order=%s,menu=off", boot); } else { - virBufferVSprintf(&boot_buf, "%s", boot); + virBufferAdd(&boot_buf, boot, -1); } virCommandAddArgBuffer(cmd, &boot_buf); @@ -3291,8 +3285,7 @@ qemuBuildCommandLine(virConnectPtr conn, host->name, host->port); } else { - virBufferVSprintf(&rbd_hosts, "%s", - host->name); + virBufferAdd(&rbd_hosts, host->name, -1); } } } @@ -3414,8 +3407,7 @@ qemuBuildCommandLine(virConnectPtr conn, host->name, host->port); } else { - virBufferVSprintf(&rbd_hosts, "%s", - host->name); + virBufferAdd(&rbd_hosts, host->name, -1); } } break; diff --git a/src/security/virt-aa-helper.c b/src/security/virt-aa-helper.c index bb716e6..08ff53c 100644 --- a/src/security/virt-aa-helper.c +++ b/src/security/virt-aa-helper.c @@ -1204,7 +1204,7 @@ main(int argc, char **argv) virBufferVSprintf(&buf, " \"%s/run/libvirt/**/%s.pid\" rwk,\n", LOCALSTATEDIR, ctl->def->name); if (ctl->files) - virBufferVSprintf(&buf, "%s", ctl->files); + virBufferAdd(&buf, ctl->files, -1); } if (virBufferError(&buf)) { diff --git a/src/util/sexpr.c b/src/util/sexpr.c index ae1692a..da3d4b3 100644 --- a/src/util/sexpr.c +++ b/src/util/sexpr.c @@ -1,7 +1,7 @@ /* * sexpr.c : S-Expression routines to communicate with the Xen Daemon * - * Copyright (C) 2010 Red Hat, Inc. + * Copyright (C) 2010-2011 Red Hat, Inc. * Copyright (C) 2005 Anthony Liguori <aliguori@xxxxxxxxxx> * * This file is subject to the terms and conditions of the GNU Lesser General @@ -234,7 +234,7 @@ sexpr2string(const struct sexpr *sexpr, virBufferPtr buffer) strchr(sexpr->u.value, '(')) virBufferVSprintf(buffer, "'%s'", sexpr->u.value); else - virBufferVSprintf(buffer, "%s", sexpr->u.value); + virBufferAdd(buffer, sexpr->u.value, -1); break; case SEXPR_NIL: diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c index 04122ba..57422d3 100644 --- a/src/xen/xend_internal.c +++ b/src/xen/xend_internal.c @@ -487,13 +487,11 @@ xend_op_ext(virConnectPtr xend, const char *path, const char *key, va_list ap) while (k) { v = va_arg(ap, const char *); - virBufferVSprintf(&buf, "%s", k); - virBufferVSprintf(&buf, "%s", "="); - virBufferVSprintf(&buf, "%s", v); + virBufferVSprintf(&buf, "%s=%s", k, v); k = va_arg(ap, const char *); if (k) - virBufferVSprintf(&buf, "%s", "&"); + virBufferAddChar(&buf, '&'); } if (virBufferError(&buf)) { diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c index b590517..d2ec370 100644 --- a/src/xenxs/xen_sxpr.c +++ b/src/xenxs/xen_sxpr.c @@ -1514,7 +1514,7 @@ xenFormatSxprChr(virDomainChrDefPtr def, case VIR_DOMAIN_CHR_TYPE_STDIO: case VIR_DOMAIN_CHR_TYPE_VC: case VIR_DOMAIN_CHR_TYPE_PTY: - virBufferVSprintf(buf, "%s", type); + virBufferAdd(buf, type, -1); break; case VIR_DOMAIN_CHR_TYPE_FILE: diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c index 89f75a5..dbcaf15 100644 --- a/src/xenxs/xen_xm.c +++ b/src/xenxs/xen_xm.c @@ -1115,13 +1115,13 @@ static int xenFormatXMDisk(virConfValuePtr list, goto cleanup; } } - virBufferVSprintf(&buf, "%s", disk->src); + virBufferAdd(&buf, disk->src, -1); } virBufferAddLit(&buf, ","); if (hvm && xendConfigVersion == 1) virBufferAddLit(&buf, "ioemu:"); - virBufferVSprintf(&buf, "%s", disk->dst); + virBufferAdd(&buf, disk->dst, -1); if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) virBufferAddLit(&buf, ":cdrom"); -- 1.7.4.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list