Always trim the full specified suffix. All of the callers outside of tests were passing either strlen or the actual length of the string. Signed-off-by: Ján Tomko <jtomko@xxxxxxxxxx> --- src/conf/domain_addr.c | 2 +- src/conf/domain_conf.c | 6 +++--- src/cpu/cpu_x86.c | 6 +++--- src/qemu/qemu_command.c | 8 ++++---- src/rpc/virnetsshsession.c | 2 +- src/storage/storage_util.c | 4 ++-- src/util/virbuffer.c | 28 ++++++++-------------------- src/util/virbuffer.h | 2 +- src/util/virqemu.c | 2 +- src/util/virresctrl.c | 4 ++-- tests/qemublocktest.c | 2 +- tests/qemumonitorjsontest.c | 4 ++-- tests/virbuftest.c | 13 ++++++------- tools/virsh-domain.c | 8 ++++---- tools/vsh.c | 4 ++-- 15 files changed, 41 insertions(+), 54 deletions(-) diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c index bde0784189..c0e468122a 100644 --- a/src/conf/domain_addr.c +++ b/src/conf/domain_addr.c @@ -1946,7 +1946,7 @@ virDomainUSBAddressPortFormatBuf(virBufferPtr buf, break; virBufferAsprintf(buf, "%u.", port[i]); } - virBufferTrim(buf, ".", -1); + virBufferTrim(buf, "."); } diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 9b60db7ecd..c95bd34fb5 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -25521,7 +25521,7 @@ virDomainVirtioNetGuestOptsFormat(char **outstr, virBufferAsprintf(&buf, "ufo='%s' ", virTristateSwitchTypeToString(def->driver.virtio.guest.ufo)); } - virBufferTrim(&buf, " ", -1); + virBufferTrim(&buf, " "); *outstr = virBufferContentAndReset(&buf); return 0; @@ -25561,7 +25561,7 @@ virDomainVirtioNetHostOptsFormat(char **outstr, virBufferAsprintf(&buf, "mrg_rxbuf='%s' ", virTristateSwitchTypeToString(def->driver.virtio.host.mrg_rxbuf)); } - virBufferTrim(&buf, " ", -1); + virBufferTrim(&buf, " "); *outstr = virBufferContentAndReset(&buf); return 0; @@ -30580,7 +30580,7 @@ virDomainGetBlkioParametersAssignFromDef(virDomainDefPtr def, def->blkio.devices[i].path, \ def->blkio.devices[i].param); \ } \ - virBufferTrim(&buf, ",", -1); \ + virBufferTrim(&buf, ","); \ data = virBufferContentAndReset(&buf); \ if (virTypedParameterAssign(&(params[(*nparams)++]), name, \ VIR_TYPED_PARAM_STRING, data) < 0) \ diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 9b7981d574..dca9ed2979 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -1981,7 +1981,7 @@ x86FormatSignatures(virCPUx86ModelPtr model) (unsigned long)model->signatures[i]); } - virBufferTrim(&buf, ",", -1); + virBufferTrim(&buf, ","); return virBufferContentAndReset(&buf); } @@ -3059,8 +3059,8 @@ virCPUx86UpdateLive(virCPUDefPtr cpu, } } - virBufferTrim(&bufAdded, ",", -1); - virBufferTrim(&bufRemoved, ",", -1); + virBufferTrim(&bufAdded, ","); + virBufferTrim(&bufRemoved, ","); added = virBufferContentAndReset(&bufAdded); removed = virBufferContentAndReset(&bufRemoved); diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index c8195cfbb9..81f5fa3416 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2360,7 +2360,7 @@ qemuBuildFloppyCommandLineControllerOptions(virCommandPtr cmd, if (explicitfdc && hasfloppy) { /* Newer Q35 machine types require an explicit FDC controller */ - virBufferTrim(&fdc_opts, ",", -1); + virBufferTrim(&fdc_opts, ","); virCommandAddArg(cmd, "-device"); virCommandAddArgBuffer(cmd, &fdc_opts); } @@ -3979,7 +3979,7 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, } - virBufferTrim(&buf, ",", -1); + virBufferTrim(&buf, ","); return virBufferContentAndReset(&buf); } @@ -6330,7 +6330,7 @@ qemuBuildBootCommandLine(virCommandPtr cmd, if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOT_STRICT)) virBufferAddLit(&boot_buf, "strict=on,"); - virBufferTrim(&boot_buf, ",", -1); + virBufferTrim(&boot_buf, ","); boot_opts_str = virBufferContentAndReset(&boot_buf); if (boot_opts_str) { @@ -7744,7 +7744,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, * doesn't support it, it fallbacks to previous migration algorithm silently. */ virBufferAddLit(&opt, "seamless-migration=on,"); - virBufferTrim(&opt, ",", -1); + virBufferTrim(&opt, ","); virCommandAddArg(cmd, "-spice"); virCommandAddArgBuffer(cmd, &opt); diff --git a/src/rpc/virnetsshsession.c b/src/rpc/virnetsshsession.c index 63773ecfc2..c31d80d4eb 100644 --- a/src/rpc/virnetsshsession.c +++ b/src/rpc/virnetsshsession.c @@ -357,7 +357,7 @@ virNetSSHCheckHostKey(virNetSSHSessionPtr sess) * we have to use a *MAGIC* constant. */ for (i = 0; i < 16; i++) virBufferAsprintf(&buff, "%02hhX:", keyhash[i]); - virBufferTrim(&buff, ":", 1); + virBufferTrim(&buff, ":"); keyhashstr = virBufferContentAndReset(&buff); diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c index d285e66879..7688ea9fd9 100644 --- a/src/storage/storage_util.c +++ b/src/storage/storage_util.c @@ -755,7 +755,7 @@ storageBackendCreateQemuImgOpts(virStorageEncryptionInfoDefPtr encinfo, } } - virBufferTrim(&buf, ",", -1); + virBufferTrim(&buf, ","); *opts = virBufferContentAndReset(&buf); return 0; @@ -4083,7 +4083,7 @@ virStorageBackendFileSystemMountAddOptions(virCommandPtr cmd, "mount_opts from XML", def->name, uuidstr); } - virBufferTrim(&buf, ",", -1); + virBufferTrim(&buf, ","); mountOpts = virBufferContentAndReset(&buf); if (mountOpts) diff --git a/src/util/virbuffer.c b/src/util/virbuffer.c index b76d99b56f..b78c3debe9 100644 --- a/src/util/virbuffer.c +++ b/src/util/virbuffer.c @@ -637,39 +637,27 @@ virBufferStrcat(virBufferPtr buf, ...) /** * virBufferTrim: * @buf: the buffer to trim - * @str: the optional string, to force an exact trim - * @len: the number of bytes to trim, or -1 to use @str + * @str: the string to be trimmed from the tail * - * Trim the tail of a buffer. If @str is provided, the trim only occurs - * if the current tail of the buffer matches @str; a non-negative @len - * further limits how much of the tail is trimmed. If @str is NULL, then - * @len must be non-negative. + * Trim the supplied string from the tail of the buffer. */ void -virBufferTrim(virBufferPtr buf, const char *str, int len) +virBufferTrim(virBufferPtr buf, const char *str) { - size_t len2 = 0; + size_t len = 0; if (!buf || !buf->str) return; - if (!str && len < 0) + if (!str) return; + len = strlen(str); - if (len > 0 && len > buf->str->len) + if (len > buf->str->len || + memcmp(&buf->str->str[buf->str->len - len], str, len) != 0) return; - if (str) { - len2 = strlen(str); - if (len2 > buf->str->len || - memcmp(&buf->str->str[buf->str->len - len2], str, len2) != 0) - return; - } - - if (len < 0) - len = len2; - g_string_truncate(buf->str, buf->str->len - len); } diff --git a/src/util/virbuffer.h b/src/util/virbuffer.h index 7b068075b2..b66b1f2b23 100644 --- a/src/util/virbuffer.h +++ b/src/util/virbuffer.h @@ -91,7 +91,7 @@ void virBufferSetIndent(virBufferPtr, int indent); size_t virBufferGetIndent(const virBuffer *buf); size_t virBufferGetEffectiveIndent(const virBuffer *buf); -void virBufferTrim(virBufferPtr buf, const char *trim, int len); +void virBufferTrim(virBufferPtr buf, const char *trim); void virBufferTrimChars(virBufferPtr buf, const char *trim); void virBufferTrimLen(virBufferPtr buf, int len); void virBufferAddStr(virBufferPtr buf, const char *str); diff --git a/src/util/virqemu.c b/src/util/virqemu.c index 8d0429625d..78a9e0480b 100644 --- a/src/util/virqemu.c +++ b/src/util/virqemu.c @@ -220,7 +220,7 @@ virQEMUBuildCommandLineJSON(virJSONValuePtr value, if (virQEMUBuildCommandLineJSONRecurse(NULL, value, buf, array, false) < 0) return -1; - virBufferTrim(buf, ",", -1); + virBufferTrim(buf, ","); return 0; } diff --git a/src/util/virresctrl.c b/src/util/virresctrl.c index 213d7492d3..569a9ee770 100644 --- a/src/util/virresctrl.c +++ b/src/util/virresctrl.c @@ -1432,7 +1432,7 @@ virResctrlAllocMemoryBandwidthFormat(virResctrlAllocPtr alloc, } } - virBufferTrim(buf, ";", 1); + virBufferTrim(buf, ";"); virBufferAddChar(buf, '\n'); return 0; } @@ -1574,7 +1574,7 @@ virResctrlAllocFormatCache(virResctrlAllocPtr alloc, VIR_FREE(mask_str); } - virBufferTrim(buf, ";", 1); + virBufferTrim(buf, ";"); virBufferAddChar(buf, '\n'); } } diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c index 3076dc9645..4cfabf0766 100644 --- a/tests/qemublocktest.c +++ b/tests/qemublocktest.c @@ -454,7 +454,7 @@ testQemuImageCreate(const void *opaque) virBufferStrcat(&actualbuf, "protocol:\n", NULLSTR(jsonprotocol), "\nformat:\n", NULLSTR(jsonformat), NULL); - virBufferTrim(&actualbuf, "\n", -1); + virBufferTrim(&actualbuf, "\n"); virBufferAddLit(&actualbuf, "\n"); jsonpath = g_strdup_printf("%s%s.json", testQemuImageCreatePath, data->name); diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 0334f83628..1c7083ca79 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -2777,7 +2777,7 @@ testBlockNodeNameDetect(const void *opaque) virHashForEach(nodedata, testBlockNodeNameDetectFormat, &buf); - virBufferTrim(&buf, "\n", -1); + virBufferTrim(&buf, "\n"); actual = virBufferContentAndReset(&buf); @@ -2919,7 +2919,7 @@ testQueryJobs(const void *opaque) for (i = 0; i < njobs; i++) testQueryJobsPrintJob(&buf, jobs[i]); - virBufferTrim(&buf, "\n", -1); + virBufferTrim(&buf, "\n"); actual = virBufferContentAndReset(&buf); diff --git a/tests/virbuftest.c b/tests/virbuftest.c index f2d4d9b9de..f9d19ff1a1 100644 --- a/tests/virbuftest.c +++ b/tests/virbuftest.c @@ -102,21 +102,20 @@ static int testBufTrim(const void *data G_GNUC_UNUSED) const char *expected = "a,b"; int ret = -1; - virBufferTrim(buf, "", 0); + virBufferTrim(buf, ""); buf = &bufinit; virBufferAddLit(buf, "a;"); - virBufferTrim(buf, "", 0); - virBufferTrim(buf, "", -1); + virBufferTrim(buf, ""); + virBufferTrim(buf, ""); virBufferTrimLen(buf, 1); virBufferTrimLen(buf, 5); virBufferTrimLen(buf, 2); virBufferAddLit(buf, ",b,,"); - virBufferTrim(buf, NULL, -1); - virBufferTrim(buf, "b", -1); - virBufferTrim(buf, "b,,", 1); - virBufferTrim(buf, ",", -1); + virBufferTrim(buf, NULL); + virBufferTrim(buf, "b"); + virBufferTrim(buf, ",,"); result = virBufferContentAndReset(buf); if (!result || STRNEQ(result, expected)) { diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 0bb5de540e..32b2792694 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -8453,7 +8453,7 @@ cmdDesc(vshControl *ctl, const vshCmd *cmd) while ((opt = vshCommandOptArgv(ctl, cmd, opt))) virBufferAsprintf(&buf, "%s ", opt->data); - virBufferTrim(&buf, " ", -1); + virBufferTrim(&buf, " "); desc = virBufferContentAndReset(&buf); @@ -9570,7 +9570,7 @@ cmdQemuMonitorCommand(vshControl *ctl, const vshCmd *cmd) while ((opt = vshCommandOptArgv(ctl, cmd, opt))) virBufferAsprintf(&buf, "%s ", opt->data); - virBufferTrim(&buf, " ", -1); + virBufferTrim(&buf, " "); monitor_cmd = virBufferContentAndReset(&buf); @@ -9863,7 +9863,7 @@ cmdQemuAgentCommand(vshControl *ctl, const vshCmd *cmd) while ((opt = vshCommandOptArgv(ctl, cmd, opt))) virBufferAsprintf(&buf, "%s ", opt->data); - virBufferTrim(&buf, " ", -1); + virBufferTrim(&buf, " "); guest_agent_cmd = virBufferContentAndReset(&buf); @@ -14077,7 +14077,7 @@ cmdDomFSInfo(vshControl *ctl, const vshCmd *cmd) for (j = 0; j < info[i]->ndevAlias; j++) virBufferAsprintf(&targetsBuff, "%s,", info[i]->devAlias[j]); - virBufferTrim(&targetsBuff, ",", -1); + virBufferTrim(&targetsBuff, ","); targets = virBufferContentAndReset(&targetsBuff); diff --git a/tools/vsh.c b/tools/vsh.c index 3c3b4bf1c3..02a6b6c955 100644 --- a/tools/vsh.c +++ b/tools/vsh.c @@ -2225,7 +2225,7 @@ vshOutputLogFile(vshControl *ctl, int log_level, const char *msg_format, } virBufferAsprintf(&buf, "%s ", lvl); virBufferVasprintf(&buf, msg_format, ap); - virBufferTrim(&buf, "\n", -1); + virBufferTrim(&buf, "\n"); virBufferAddChar(&buf, '\n'); str = virBufferContentAndReset(&buf); @@ -2517,7 +2517,7 @@ vshTreePrintInternal(vshControl *ctl, false, indent) < 0) return -1; } - virBufferTrim(indent, " ", -1); + virBufferTrim(indent, " "); /* If there was no child device, and we're the last in * a list of devices, then print another blank line */ -- 2.19.2