diff options
author | Thomas Haller <thaller@redhat.com> | 2019-03-25 17:04:08 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2019-03-27 16:23:30 +0100 |
commit | e96643a0b66cea03ca709b0ed22e57ff37f05b81 (patch) | |
tree | 344229d609b6ab6e219a0f597d2e69a3cefb5069 | |
parent | 0ccb25c5fa5c912f0151823b50aa375bc454a6dd (diff) | |
download | NetworkManager-e96643a0b66cea03ca709b0ed22e57ff37f05b81.tar.gz |
shared: add nm_utils_str_simpletokens_extract_next()
-rw-r--r-- | shared/nm-utils/nm-shared-utils.c | 53 | ||||
-rw-r--r-- | shared/nm-utils/nm-shared-utils.h | 2 |
2 files changed, 55 insertions, 0 deletions
diff --git a/shared/nm-utils/nm-shared-utils.c b/shared/nm-utils/nm-shared-utils.c index 215a87b59b..33d7ad12f2 100644 --- a/shared/nm-utils/nm-shared-utils.c +++ b/shared/nm-utils/nm-shared-utils.c @@ -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 { diff --git a/shared/nm-utils/nm-shared-utils.h b/shared/nm-utils/nm-shared-utils.h index fae0abe828..af9e1cf6e9 100644 --- a/shared/nm-utils/nm-shared-utils.h +++ b/shared/nm-utils/nm-shared-utils.h @@ -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, |