shared: add nm_utils_str_simpletokens_extract_next()

This commit is contained in:
Thomas Haller
2019-03-25 17:04:08 +01:00
parent 0ccb25c5fa
commit e96643a0b6
2 changed files with 55 additions and 0 deletions

View File

@@ -2505,6 +2505,59 @@ _nm_utils_unescape_plain (char *str, const char *candidates, gboolean do_strip)
return str; 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 { typedef struct {

View File

@@ -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); 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); gssize nm_utils_strv_find_first (char **list, gssize len, const char *needle);
char **_nm_utils_strv_cleanup (char **strv, char **_nm_utils_strv_cleanup (char **strv,