* further limits how much of the tail is trimmed. If @str is NULL, then
* @len must be non-negative.
*
- * Returns -1 if @buf has previously encountered an error or if @len is
- * invalid, 0 if there was nothing to trim (@buf was too short or @str
- * didn't match), and 1 if the trim was successful.
+ * Sets error to -1 (usage) if str is NULL and len is less than zero.
*/
-int
+void
virBufferTrim(virBufferPtr buf, const char *str, int len)
{
size_t len2 = 0;
- if (!buf || buf->error || (!str && len < 0))
- return -1;
+ if (!buf || buf->error)
+ return;
+ if (!str && len < 0) {
+ virBufferSetError(buf, -1);
+ return;
+ }
if (len > 0 && len > buf->use)
- return 0;
+ return;
if (str) {
len2 = strlen(str);
if (len2 > buf->use ||
memcmp(&buf->content[buf->use - len2], str, len2) != 0)
- return 0;
+ return;
}
buf->use -= len < 0 ? len2 : len;
buf->content[buf->use] = '\0';
- return 1;
}
void virBufferAdjustIndent(virBufferPtr buf, int indent);
int virBufferGetIndent(const virBufferPtr buf, bool dynamic);
-int virBufferTrim(virBufferPtr buf, const char *trim, int len);
+void virBufferTrim(virBufferPtr buf, const char *trim, int len);
#endif /* __VIR_BUFFER_H__ */
char *result = NULL;
const char *expected = "a,b";
int ret = -1;
- int i = 1;
-
-#define ACT(str, len, result) \
- do { \
- if (virBufferTrim(buf, str, len) != result) { \
- TEST_ERROR("trim %d failed", i); \
- goto cleanup; \
- } \
- i++; \
- } while (0);
-
- if (virBufferTrim(buf, "", 0) != -1) {
- TEST_ERROR("Wrong failure detection 1");
- goto cleanup;
- }
+
+ virBufferTrim(buf, "", 0);
buf = &bufinit;
- if (virBufferTrim(buf, NULL, -1) != -1) {
- TEST_ERROR("Wrong failure detection 2");
- goto cleanup;
- }
virBufferAddLit(buf, "a;");
- ACT("", 0, 1);
- ACT("", -1, 1);
- ACT(NULL, 1, 1);
- ACT(NULL, 5, 0);
- ACT("a", 2, 0);
+ virBufferTrim(buf, "", 0);
+ virBufferTrim(buf, "", -1);
+ virBufferTrim(buf, NULL, 1);
+ virBufferTrim(buf, NULL, 5);
+ virBufferTrim(buf, "a", 2);
virBufferAddLit(buf, ",b,,");
- ACT("b", -1, 0);
- ACT("b,,", 1, 1);
- ACT(",", -1, 1);
+ virBufferTrim(buf, "b", -1);
+ virBufferTrim(buf, "b,,", 1);
+ virBufferTrim(buf, ",", -1);
result = virBufferContentAndReset(buf);
if (!result || STRNEQ(result, expected)) {
goto cleanup;
}
+ virBufferTrim(buf, NULL, -1);
+ if (virBufferError(buf) != -1) {
+ TEST_ERROR("Usage error not flagged");
+ goto cleanup;
+ }
+
ret = 0;
cleanup:
false, indent) < 0)
goto cleanup;
}
- if (virBufferTrim(indent, " ", -1) < 0)
- goto cleanup;
+ virBufferTrim(indent, " ", -1);
/* If there was no child device, and we're the last in
* a list of devices, then print another blank line */
if (nextlastdev == -1 && devid == lastdev)
vshPrint(ctl, "%s\n", virBufferCurrentContent(indent));
- if (!root) {
- if (virBufferTrim(indent, NULL, 2) < 0)
- goto cleanup;
- }
+ if (!root)
+ virBufferTrim(indent, NULL, 2);
ret = 0;
cleanup:
return ret;