Most clients of virSkipSpaces don't want to omit backslashes. Also, open-coding the list of spaces is not as nice as using c_isspace. * src/util/util.c (virSkipSpaces): Use c_isspace. (virSkipSpacesAndBackslash): New function. * src/util/util.h (virSkipSpacesAndBackslash): New prototype. * src/xen/xend_internal.c (sexpr_to_xend_topology): Update caller. * src/libvirt_private.syms (util.h): Export new function. --- src/libvirt_private.syms | 1 + src/util/util.c | 23 +++++++++++++++++++---- src/util/util.h | 1 + src/xen/xend_internal.c | 4 ++-- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 626ac6c..024b3f1 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1030,6 +1030,7 @@ virSetInherit; virSetNonBlock; virSetUIDGID; virSkipSpaces; +virSkipSpacesAndBackslash; virStrToDouble; virStrToLong_i; virStrToLong_l; diff --git a/src/util/util.c b/src/util/util.c index 463d2b8..27eefb2 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -1535,16 +1535,31 @@ virHexToBin(unsigned char c) * @str: pointer to the char pointer used * * Skip potential blanks, this includes space tabs, line feed, - * carriage returns and also '\\' which can be erronously emitted - * by xend + * carriage returns. */ void virSkipSpaces(const char **str) { const char *cur = *str; - while ((*cur == ' ') || (*cur == '\t') || (*cur == '\n') || - (*cur == '\r') || (*cur == '\\')) + while (c_isspace(*cur)) + cur++; + *str = cur; +} + +/** + * virSkipSpacesAndBackslash: + * @str: pointer to the char pointer used + * + * Like virSkipSpaces, but also skip backslashes erroneously emitted + * by xend + */ +void +virSkipSpacesAndBackslash(const char **str) +{ + const char *cur = *str; + + while (c_isspace(*cur) || *cur == '\\') cur++; *str = cur; } diff --git a/src/util/util.h b/src/util/util.h index 0c43f7a..8dec78a 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -167,6 +167,7 @@ int virHexToBin(unsigned char c); int virMacAddrCompare (const char *mac1, const char *mac2); void virSkipSpaces(const char **str); +void virSkipSpacesAndBackslash(const char **str); int virParseNumber(const char **str); int virParseVersionString(const char *str, unsigned long *version); int virAsprintf(char **strp, const char *fmt, ...) diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c index d418847..d0eb32a0 100644 --- a/src/xen/xend_internal.c +++ b/src/xen/xend_internal.c @@ -1199,11 +1199,11 @@ sexpr_to_xend_topology(const struct sexpr *root, cell = virParseNumber(&cur); if (cell < 0) goto parse_error; - virSkipSpaces(&cur); + virSkipSpacesAndBackslash(&cur); if (*cur != ':') goto parse_error; cur++; - virSkipSpaces(&cur); + virSkipSpacesAndBackslash(&cur); if (STRPREFIX(cur, "no cpus")) { nb_cpus = 0; for (cpu = 0; cpu < numCpus; cpu++) -- 1.7.4.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list