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@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
break;
virBufferAsprintf(buf, "%u.", port[i]);
}
- virBufferTrim(buf, ".", -1);
+ virBufferTrim(buf, ".");
}
virBufferAsprintf(&buf, "ufo='%s' ",
virTristateSwitchTypeToString(def->driver.virtio.guest.ufo));
}
- virBufferTrim(&buf, " ", -1);
+ virBufferTrim(&buf, " ");
*outstr = virBufferContentAndReset(&buf);
return 0;
virBufferAsprintf(&buf, "mrg_rxbuf='%s' ",
virTristateSwitchTypeToString(def->driver.virtio.host.mrg_rxbuf));
}
- virBufferTrim(&buf, " ", -1);
+ virBufferTrim(&buf, " ");
*outstr = virBufferContentAndReset(&buf);
return 0;
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) \
(unsigned long)model->signatures[i]);
}
- virBufferTrim(&buf, ",", -1);
+ virBufferTrim(&buf, ",");
return virBufferContentAndReset(&buf);
}
}
}
- virBufferTrim(&bufAdded, ",", -1);
- virBufferTrim(&bufRemoved, ",", -1);
+ virBufferTrim(&bufAdded, ",");
+ virBufferTrim(&bufRemoved, ",");
added = virBufferContentAndReset(&bufAdded);
removed = virBufferContentAndReset(&bufRemoved);
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);
}
}
- virBufferTrim(&buf, ",", -1);
+ virBufferTrim(&buf, ",");
return virBufferContentAndReset(&buf);
}
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) {
* 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);
* 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);
}
}
- virBufferTrim(&buf, ",", -1);
+ virBufferTrim(&buf, ",");
*opts = virBufferContentAndReset(&buf);
return 0;
"mount_opts from XML", def->name, uuidstr);
}
- virBufferTrim(&buf, ",", -1);
+ virBufferTrim(&buf, ",");
mountOpts = virBufferContentAndReset(&buf);
if (mountOpts)
/**
* 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);
}
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);
if (virQEMUBuildCommandLineJSONRecurse(NULL, value, buf, array, false) < 0)
return -1;
- virBufferTrim(buf, ",", -1);
+ virBufferTrim(buf, ",");
return 0;
}
}
}
- virBufferTrim(buf, ";", 1);
+ virBufferTrim(buf, ";");
virBufferAddChar(buf, '\n');
return 0;
}
VIR_FREE(mask_str);
}
- virBufferTrim(buf, ";", 1);
+ virBufferTrim(buf, ";");
virBufferAddChar(buf, '\n');
}
}
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);
virHashForEach(nodedata, testBlockNodeNameDetectFormat, &buf);
- virBufferTrim(&buf, "\n", -1);
+ virBufferTrim(&buf, "\n");
actual = virBufferContentAndReset(&buf);
for (i = 0; i < njobs; i++)
testQueryJobsPrintJob(&buf, jobs[i]);
- virBufferTrim(&buf, "\n", -1);
+ virBufferTrim(&buf, "\n");
actual = virBufferContentAndReset(&buf);
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)) {
while ((opt = vshCommandOptArgv(ctl, cmd, opt)))
virBufferAsprintf(&buf, "%s ", opt->data);
- virBufferTrim(&buf, " ", -1);
+ virBufferTrim(&buf, " ");
desc = virBufferContentAndReset(&buf);
while ((opt = vshCommandOptArgv(ctl, cmd, opt)))
virBufferAsprintf(&buf, "%s ", opt->data);
- virBufferTrim(&buf, " ", -1);
+ virBufferTrim(&buf, " ");
monitor_cmd = virBufferContentAndReset(&buf);
while ((opt = vshCommandOptArgv(ctl, cmd, opt)))
virBufferAsprintf(&buf, "%s ", opt->data);
- virBufferTrim(&buf, " ", -1);
+ virBufferTrim(&buf, " ");
guest_agent_cmd = virBufferContentAndReset(&buf);
for (j = 0; j < info[i]->ndevAlias; j++)
virBufferAsprintf(&targetsBuff, "%s,", info[i]->devAlias[j]);
- virBufferTrim(&targetsBuff, ",", -1);
+ virBufferTrim(&targetsBuff, ",");
targets = virBufferContentAndReset(&targetsBuff);
}
virBufferAsprintf(&buf, "%s ", lvl);
virBufferVasprintf(&buf, msg_format, ap);
- virBufferTrim(&buf, "\n", -1);
+ virBufferTrim(&buf, "\n");
virBufferAddChar(&buf, '\n');
str = virBufferContentAndReset(&buf);
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 */