shared: add nm_utils_str_simpletokens_extract_next()
This commit is contained in:
@@ -2505,6 +2505,59 @@ _nm_utils_unescape_plain (char *str, const char *candidates, gboolean do_strip)
|
||||
return str;
|
||||
}
|
||||
|
||||
char *
|
||||
nm_utils_str_simpletokens_extract_next (char **p_line_start)
|
||||
{
|
||||
char *s_next;
|
||||
char *s_start;
|
||||
gsize j;
|
||||
|
||||
s_start = *p_line_start;
|
||||
if (!s_start)
|
||||
return NULL;
|
||||
|
||||
s_start = nm_str_skip_leading_spaces (s_start);
|
||||
|
||||
if (s_start[0] == '\0') {
|
||||
*p_line_start = s_start;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
s_next = s_start;
|
||||
j = 0;
|
||||
while (TRUE) {
|
||||
if (s_next[0] == '\0') {
|
||||
s_start[j] = '\0';
|
||||
*p_line_start = s_next;
|
||||
return s_start;
|
||||
}
|
||||
if (s_next[0] == '\\') {
|
||||
s_next++;
|
||||
if (s_next[0] == '\0') {
|
||||
/* trailing backslash at end of word. That's an error,
|
||||
* but we silently drop the backslash and signal success. */
|
||||
*p_line_start = s_next;
|
||||
if (j == 0)
|
||||
return NULL;
|
||||
s_start[j] = '\0';
|
||||
return s_start;
|
||||
}
|
||||
|
||||
s_start[j++] = (s_next++)[0];
|
||||
continue;
|
||||
}
|
||||
if (!g_ascii_isspace (s_next[0])) {
|
||||
s_start[j++] = (s_next++)[0];
|
||||
continue;
|
||||
}
|
||||
|
||||
nm_assert (j > 0);
|
||||
s_start[j] = '\0';
|
||||
*p_line_start = nm_str_skip_leading_spaces (&s_next[1]);
|
||||
return s_start;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
typedef struct {
|
||||
|
@@ -446,6 +446,8 @@ int nm_utils_dbus_path_cmp (const char *dbus_path_a, const char *dbus_path_b);
|
||||
|
||||
const char **nm_utils_strsplit_set (const char *str, const char *delimiters, gboolean allow_escaping);
|
||||
|
||||
char *nm_utils_str_simpletokens_extract_next (char **p_line_start);
|
||||
|
||||
gssize nm_utils_strv_find_first (char **list, gssize len, const char *needle);
|
||||
|
||||
char **_nm_utils_strv_cleanup (char **strv,
|
||||
|
Reference in New Issue
Block a user