summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonio Cardace <acardace@redhat.com>2020-06-23 17:58:42 +0200
committerAntonio Cardace <acardace@redhat.com>2020-06-26 16:47:56 +0200
commitaa5959a595d12697c5714d50a19d0fdc69b69cff (patch)
tree05c67e0b5c48cda546e13a2911fa0d4942bfbac4
parent3bd30f6064c3e879427bc47e0c258c7797cd3fe6 (diff)
downloadNetworkManager-aa5959a595d12697c5714d50a19d0fdc69b69cff.tar.gz
nm-shared-utils: add util to parse out lines from a string
https://bugzilla.redhat.com/show_bug.cgi?id=1821787
-rw-r--r--shared/nm-glib-aux/nm-shared-utils.c41
-rw-r--r--shared/nm-glib-aux/nm-shared-utils.h5
2 files changed, 46 insertions, 0 deletions
diff --git a/shared/nm-glib-aux/nm-shared-utils.c b/shared/nm-glib-aux/nm-shared-utils.c
index 8290016448..1569662f8c 100644
--- a/shared/nm-glib-aux/nm-shared-utils.c
+++ b/shared/nm-glib-aux/nm-shared-utils.c
@@ -1074,6 +1074,47 @@ nm_utils_parse_inaddr_prefix (int addr_family,
return TRUE;
}
+gboolean
+nm_utils_parse_next_line (const char **inout_ptr,
+ gsize *inout_len,
+ const char **out_line,
+ gsize *out_line_len)
+{
+ const char *line_start;
+ const char *line_end;
+
+ g_return_val_if_fail (inout_ptr, FALSE);
+ g_return_val_if_fail (inout_len, FALSE);
+ g_return_val_if_fail (out_line, FALSE);
+
+ if (*inout_len <= 0)
+ goto error;
+
+ line_start = *inout_ptr;
+ line_end = memchr (line_start, '\n', *inout_len);
+ if (!line_end)
+ line_end = memchr (line_start, '\0', *inout_len);
+ if (!line_end) {
+ line_end = line_start + *inout_len;
+ NM_SET_OUT (inout_len, 0);
+ } else
+ NM_SET_OUT (inout_len, *inout_len - (line_end - line_start) - 1);
+
+ NM_SET_OUT (out_line, line_start);
+ NM_SET_OUT (out_line_len, (gsize) (line_end - line_start));
+
+ if (*inout_len > 0)
+ NM_SET_OUT (inout_ptr, line_end + 1);
+ else
+ NM_SET_OUT (inout_ptr, NULL);
+ return TRUE;
+
+error:
+ NM_SET_OUT (out_line, NULL);
+ NM_SET_OUT (out_line_len, 0);
+ return FALSE;
+}
+
/*****************************************************************************/
gboolean
diff --git a/shared/nm-glib-aux/nm-shared-utils.h b/shared/nm-glib-aux/nm-shared-utils.h
index c16a89b3af..142190ae4b 100644
--- a/shared/nm-glib-aux/nm-shared-utils.h
+++ b/shared/nm-glib-aux/nm-shared-utils.h
@@ -817,6 +817,11 @@ gboolean nm_utils_parse_inaddr_prefix (int addr_family,
char **out_addr,
int *out_prefix);
+gboolean nm_utils_parse_next_line (const char **inout_ptr,
+ gsize *inout_len,
+ const char **out_line,
+ gsize *out_line_len);
+
gint64 nm_g_ascii_strtoll (const char *nptr,
char **endptr,
guint base);