mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 21:55:25 +00:00
util: buf: Remove virBufferEscapeN
The function was used only in the tests, remove it. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
3d6ba96ff6
commit
e25492444f
@ -1488,7 +1488,6 @@ virBufferContentAndReset;
|
|||||||
virBufferCurrentContent;
|
virBufferCurrentContent;
|
||||||
virBufferError;
|
virBufferError;
|
||||||
virBufferEscape;
|
virBufferEscape;
|
||||||
virBufferEscapeN;
|
|
||||||
virBufferEscapeRegex;
|
virBufferEscapeRegex;
|
||||||
virBufferEscapeSexpr;
|
virBufferEscapeSexpr;
|
||||||
virBufferEscapeShell;
|
virBufferEscapeShell;
|
||||||
|
@ -643,99 +643,6 @@ virBufferEscape(virBufferPtr buf, char escape, const char *toescape,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
struct virBufferEscapePair {
|
|
||||||
char escape;
|
|
||||||
char *toescape;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* virBufferEscapeN:
|
|
||||||
* @buf: the buffer to append to
|
|
||||||
* @format: a printf like format string but with only one %s parameter
|
|
||||||
* @str: the string argument which needs to be escaped
|
|
||||||
* @...: the variable list of escape pairs
|
|
||||||
*
|
|
||||||
* The variable list of arguments @... must be composed of
|
|
||||||
* 'char escape, char *toescape' pairs followed by NULL.
|
|
||||||
*
|
|
||||||
* This has the same functionality as virBufferEscape with the extension
|
|
||||||
* that allows to specify multiple pairs of chars that needs to be escaped.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
virBufferEscapeN(virBufferPtr buf,
|
|
||||||
const char *format,
|
|
||||||
const char *str,
|
|
||||||
...)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
size_t i;
|
|
||||||
VIR_AUTOFREE(char *) escaped = NULL;
|
|
||||||
char *out;
|
|
||||||
const char *cur;
|
|
||||||
struct virBufferEscapePair escapeItem;
|
|
||||||
struct virBufferEscapePair *escapeList = NULL;
|
|
||||||
size_t nescapeList = 0;
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
if ((format == NULL) || (buf == NULL) || (str == NULL))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (buf->error)
|
|
||||||
return;
|
|
||||||
|
|
||||||
len = strlen(str);
|
|
||||||
|
|
||||||
va_start(ap, str);
|
|
||||||
|
|
||||||
while ((escapeItem.escape = va_arg(ap, int))) {
|
|
||||||
if (!(escapeItem.toescape = va_arg(ap, char *))) {
|
|
||||||
virBufferSetError(buf, errno);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcspn(str, escapeItem.toescape) == len)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (VIR_APPEND_ELEMENT_QUIET(escapeList, nescapeList, escapeItem) < 0) {
|
|
||||||
virBufferSetError(buf, errno);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nescapeList == 0) {
|
|
||||||
virBufferAsprintf(buf, format, str);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (xalloc_oversized(2, len) ||
|
|
||||||
VIR_ALLOC_N_QUIET(escaped, 2 * len + 1) < 0) {
|
|
||||||
virBufferSetError(buf, errno);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
cur = str;
|
|
||||||
out = escaped;
|
|
||||||
while (*cur != 0) {
|
|
||||||
for (i = 0; i < nescapeList; i++) {
|
|
||||||
if (strchr(escapeList[i].toescape, *cur)) {
|
|
||||||
*out++ = escapeList[i].escape;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*out++ = *cur;
|
|
||||||
cur++;
|
|
||||||
}
|
|
||||||
*out = 0;
|
|
||||||
|
|
||||||
virBufferAsprintf(buf, format, escaped);
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
va_end(ap);
|
|
||||||
VIR_FREE(escapeList);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virBufferURIEncodeString:
|
* virBufferURIEncodeString:
|
||||||
* @buf: the buffer to append to
|
* @buf: the buffer to append to
|
||||||
|
@ -84,8 +84,6 @@ void virBufferStrcatVArgs(virBufferPtr buf, va_list ap);
|
|||||||
|
|
||||||
void virBufferEscape(virBufferPtr buf, char escape, const char *toescape,
|
void virBufferEscape(virBufferPtr buf, char escape, const char *toescape,
|
||||||
const char *format, const char *str);
|
const char *format, const char *str);
|
||||||
void virBufferEscapeN(virBufferPtr buf, const char *format,
|
|
||||||
const char *str, ...);
|
|
||||||
void virBufferEscapeString(virBufferPtr buf, const char *format,
|
void virBufferEscapeString(virBufferPtr buf, const char *format,
|
||||||
const char *str);
|
const char *str);
|
||||||
void virBufferEscapeSexpr(virBufferPtr buf, const char *format,
|
void virBufferEscapeSexpr(virBufferPtr buf, const char *format,
|
||||||
|
@ -372,35 +372,6 @@ testBufEscapeStr(const void *opaque ATTRIBUTE_UNUSED)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
|
||||||
testBufEscapeN(const void *opaque)
|
|
||||||
{
|
|
||||||
const struct testBufAddStrData *data = opaque;
|
|
||||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
|
||||||
char *actual;
|
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
virBufferEscapeN(&buf, "%s", data->data, '\\', "=", ',', ",", NULL);
|
|
||||||
|
|
||||||
if (!(actual = virBufferContentAndReset(&buf))) {
|
|
||||||
VIR_TEST_DEBUG("testBufEscapeN: buf is empty");
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (STRNEQ_NULLABLE(actual, data->expect)) {
|
|
||||||
VIR_TEST_DEBUG("testBufEscapeN: Strings don't match:\n");
|
|
||||||
virTestDifference(stderr, data->expect, actual);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = 0;
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
VIR_FREE(actual);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
testBufEscapeRegex(const void *opaque)
|
testBufEscapeRegex(const void *opaque)
|
||||||
{
|
{
|
||||||
@ -506,18 +477,6 @@ mymain(void)
|
|||||||
DO_TEST_ESCAPE("\x01\x01\x02\x03\x05\x08",
|
DO_TEST_ESCAPE("\x01\x01\x02\x03\x05\x08",
|
||||||
"<c>\n <el></el>\n</c>");
|
"<c>\n <el></el>\n</c>");
|
||||||
|
|
||||||
#define DO_TEST_ESCAPEN(data, expect) \
|
|
||||||
do { \
|
|
||||||
struct testBufAddStrData info = { data, expect }; \
|
|
||||||
if (virTestRun("Buf: EscapeN", testBufEscapeN, &info) < 0) \
|
|
||||||
ret = -1; \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
DO_TEST_ESCAPEN("noescape", "noescape");
|
|
||||||
DO_TEST_ESCAPEN("comma,escape", "comma,,escape");
|
|
||||||
DO_TEST_ESCAPEN("equal=escape", "equal\\=escape");
|
|
||||||
DO_TEST_ESCAPEN("comma,equal=escape", "comma,,equal\\=escape");
|
|
||||||
|
|
||||||
#define DO_TEST_ESCAPE_REGEX(data, expect) \
|
#define DO_TEST_ESCAPE_REGEX(data, expect) \
|
||||||
do { \
|
do { \
|
||||||
struct testBufAddStrData info = { data, expect }; \
|
struct testBufAddStrData info = { data, expect }; \
|
||||||
|
Loading…
Reference in New Issue
Block a user