summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2019-03-25 17:04:08 +0100
committerThomas Haller <thaller@redhat.com>2019-03-27 16:23:30 +0100
commite96643a0b66cea03ca709b0ed22e57ff37f05b81 (patch)
tree344229d609b6ab6e219a0f597d2e69a3cefb5069
parent0ccb25c5fa5c912f0151823b50aa375bc454a6dd (diff)
downloadNetworkManager-e96643a0b66cea03ca709b0ed22e57ff37f05b81.tar.gz
shared: add nm_utils_str_simpletokens_extract_next()
-rw-r--r--shared/nm-utils/nm-shared-utils.c53
-rw-r--r--shared/nm-utils/nm-shared-utils.h2
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,