mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-04 13:29:59 -05:00
core-util: Add a pa_split_in_place() string utility function
For specialised uses of pa_split() such as finding substrings for comparison, this avoids the need to repeatedly allocate and deallocate memory.
This commit is contained in:
parent
51c8d5a477
commit
b942af65fe
2 changed files with 24 additions and 0 deletions
|
|
@ -937,6 +937,29 @@ char *pa_split(const char *c, const char *delimiter, const char**state) {
|
||||||
return pa_xstrndup(current, l);
|
return pa_xstrndup(current, l);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Split the specified string wherever one of the strings in delimiter
|
||||||
|
* occurs. Each time it is called returns a pointer to the substring within the
|
||||||
|
* string and the length in 'n'. Note that the resultant string cannot be used
|
||||||
|
* as-is without the length parameter, since it is merely pointing to a point
|
||||||
|
* within the original string. The variable state points to, should be
|
||||||
|
* initialized to NULL before the first call. */
|
||||||
|
const char *pa_split_in_place(const char *c, const char *delimiter, int *n, const char**state) {
|
||||||
|
const char *current = *state ? *state : c;
|
||||||
|
size_t l;
|
||||||
|
|
||||||
|
if (!*current)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
l = strcspn(current, delimiter);
|
||||||
|
*state = current+l;
|
||||||
|
|
||||||
|
if (**state)
|
||||||
|
(*state)++;
|
||||||
|
|
||||||
|
*n = l;
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
|
||||||
/* Split a string into words. Otherwise similar to pa_split(). */
|
/* Split a string into words. Otherwise similar to pa_split(). */
|
||||||
char *pa_split_spaces(const char *c, const char **state) {
|
char *pa_split_spaces(const char *c, const char **state) {
|
||||||
const char *current = *state ? *state : c;
|
const char *current = *state ? *state : c;
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,7 @@ static inline const char *pa_strna(const char *x) {
|
||||||
}
|
}
|
||||||
|
|
||||||
char *pa_split(const char *c, const char*delimiters, const char **state);
|
char *pa_split(const char *c, const char*delimiters, const char **state);
|
||||||
|
const char *pa_split_in_place(const char *c, const char*delimiters, int *n, const char **state);
|
||||||
char *pa_split_spaces(const char *c, const char **state);
|
char *pa_split_spaces(const char *c, const char **state);
|
||||||
|
|
||||||
char *pa_strip_nl(char *s);
|
char *pa_strip_nl(char *s);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue