From 82162316b6cb6cc1b55320d903dee1b55e29c338 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Wed, 29 Jun 2011 11:30:43 -0600 Subject: [PATCH] util: fix virSkipSpaces 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 ae0d199516..0fab8a65c2 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1031,6 +1031,7 @@ virSetInherit; virSetNonBlock; virSetUIDGID; virSkipSpaces; +virSkipSpacesAndBackslash; virStrToDouble; virStrToLong_i; virStrToLong_l; diff --git a/src/util/util.c b/src/util/util.c index 0472e3944f..c0d8f57ec0 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -1532,16 +1532,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 155565364f..ccc32fed68 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, bool allowMissing); diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c index d41884755a..d0eb32a02d 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++) -- GitLab