mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-26 03:21:44 +03:00
util: add virTrimSpaces
The next patch wants to adjust an end pointer to trim trailing spaces but without modifying the underlying string, but a more generally useful ability to trim trailing spaces in place is also worth providing. * src/util/util.h (virTrimSpaces, virSkipSpacesBackwards): New prototypes. * src/util/util.c (virTrimSpaces, virSkipSpacesBackwards): New functions. * src/libvirt_private.syms (util.h): Export new functions. Inspired by a patch by Minoru Usui.
This commit is contained in:
parent
82162316b6
commit
01374ec8b1
@ -1032,6 +1032,7 @@ virSetNonBlock;
|
|||||||
virSetUIDGID;
|
virSetUIDGID;
|
||||||
virSkipSpaces;
|
virSkipSpaces;
|
||||||
virSkipSpacesAndBackslash;
|
virSkipSpacesAndBackslash;
|
||||||
|
virSkipSpacesBackwards;
|
||||||
virStrToDouble;
|
virStrToDouble;
|
||||||
virStrToLong_i;
|
virStrToLong_i;
|
||||||
virStrToLong_l;
|
virStrToLong_l;
|
||||||
@ -1043,6 +1044,7 @@ virStrcpy;
|
|||||||
virStrncpy;
|
virStrncpy;
|
||||||
virTimeMs;
|
virTimeMs;
|
||||||
virTimestamp;
|
virTimestamp;
|
||||||
|
virTrimSpaces;
|
||||||
virVasprintf;
|
virVasprintf;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1561,6 +1561,62 @@ virSkipSpacesAndBackslash(const char **str)
|
|||||||
*str = cur;
|
*str = cur;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virTrimSpaces:
|
||||||
|
* @str: string to modify to remove all trailing spaces
|
||||||
|
* @endp: track the end of the string
|
||||||
|
*
|
||||||
|
* If @endp is NULL on entry, then all spaces prior to the trailing
|
||||||
|
* NUL in @str are removed, by writing NUL into the appropriate
|
||||||
|
* location. If @endp is non-NULL but points to a NULL pointer,
|
||||||
|
* then all spaces prior to the trailing NUL in @str are removed,
|
||||||
|
* NUL is written to the new string end, and endp is set to the
|
||||||
|
* location of the (new) string end. If @endp is non-NULL and
|
||||||
|
* points to a non-NULL pointer, then that pointer is used as
|
||||||
|
* the end of the string, endp is set to the (new) location, but
|
||||||
|
* no NUL pointer is written into the string.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
virTrimSpaces(char *str, char **endp)
|
||||||
|
{
|
||||||
|
char *end;
|
||||||
|
|
||||||
|
if (!endp || !*endp)
|
||||||
|
end = str + strlen(str);
|
||||||
|
else
|
||||||
|
end = *endp;
|
||||||
|
while (end > str && c_isspace(end[-1]))
|
||||||
|
end--;
|
||||||
|
if (endp) {
|
||||||
|
if (!*endp)
|
||||||
|
*end = '\0';
|
||||||
|
*endp = end;
|
||||||
|
} else {
|
||||||
|
*end = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virSkipSpacesBackwards:
|
||||||
|
* @str: start of string
|
||||||
|
* @endp: on entry, *endp must be NULL or a location within @str, on exit,
|
||||||
|
* will be adjusted to skip trailing spaces, or to NULL if @str had nothing
|
||||||
|
* but spaces.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
virSkipSpacesBackwards(const char *str, char **endp)
|
||||||
|
{
|
||||||
|
/* Casting away const is safe, since virTrimSpaces does not
|
||||||
|
* modify string with this particular usage. */
|
||||||
|
char *s = (char*) str;
|
||||||
|
|
||||||
|
if (!*endp)
|
||||||
|
*endp = s + strlen(s);
|
||||||
|
virTrimSpaces(s, endp);
|
||||||
|
if (s == *endp)
|
||||||
|
*endp = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virParseNumber:
|
* virParseNumber:
|
||||||
* @str: pointer to the char pointer used
|
* @str: pointer to the char pointer used
|
||||||
|
@ -166,8 +166,12 @@ int virHexToBin(unsigned char c);
|
|||||||
|
|
||||||
int virMacAddrCompare (const char *mac1, const char *mac2);
|
int virMacAddrCompare (const char *mac1, const char *mac2);
|
||||||
|
|
||||||
void virSkipSpaces(const char **str);
|
void virSkipSpaces(const char **str) ATTRIBUTE_NONNULL(1);
|
||||||
void virSkipSpacesAndBackslash(const char **str);
|
void virSkipSpacesAndBackslash(const char **str) ATTRIBUTE_NONNULL(1);
|
||||||
|
void virTrimSpaces(char *str, char **endp) ATTRIBUTE_NONNULL(1);
|
||||||
|
void virSkipSpacesBackwards(const char *str, char **endp)
|
||||||
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
|
||||||
|
|
||||||
int virParseNumber(const char **str);
|
int virParseNumber(const char **str);
|
||||||
int virParseVersionString(const char *str, unsigned long *version,
|
int virParseVersionString(const char *str, unsigned long *version,
|
||||||
bool allowMissing);
|
bool allowMissing);
|
||||||
|
Loading…
Reference in New Issue
Block a user