summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2019-04-04 15:21:37 +0200
committerThomas Haller <thaller@redhat.com>2019-04-09 20:43:34 +0200
commit86bfb6e14e4370d131941063a826a1ff946ffc48 (patch)
treec862c91a2ab4180bd2f55ab5a1ed6daa8efd606b
parent7706f1f28b387e3ade5cd7212e242e31b624102f (diff)
downloadNetworkManager-86bfb6e14e4370d131941063a826a1ff946ffc48.tar.gz
dhcp: cleanup grab_request_options()
-rw-r--r--src/dhcp/nm-dhcp-dhclient-utils.c45
1 files changed, 28 insertions, 17 deletions
diff --git a/src/dhcp/nm-dhcp-dhclient-utils.c b/src/dhcp/nm-dhcp-dhclient-utils.c
index ec2d168abc..2a37ce9253 100644
--- a/src/dhcp/nm-dhcp-dhclient-utils.c
+++ b/src/dhcp/nm-dhcp-dhclient-utils.c
@@ -62,37 +62,48 @@ add_request (GPtrArray *array, const char *item)
static gboolean
grab_request_options (GPtrArray *store, const char* line)
{
- char **areq, **aiter;
- gboolean end = FALSE;
+ gs_free const char **line_v = NULL;
+ gsize i;
/* Grab each 'request' or 'also request' option and save for later */
- areq = g_strsplit_set (line, "\t ,", -1);
- for (aiter = areq; aiter && *aiter; aiter++) {
- if (!strlen (g_strstrip (*aiter)))
- continue;
+ line_v = nm_utils_strsplit_set (line, "\t ,");
+ for (i = 0; line_v && line_v[i]; i++) {
+ const char *ss = nm_str_skip_leading_spaces (line_v[i]);
+ gsize l;
+ gboolean end = FALSE;
- if (*aiter[0] == ';') {
+ if (!ss[0])
+ continue;
+ if (ss[0] == ';') {
/* all done */
- end = TRUE;
- break;
+ return TRUE;
}
- if (!g_ascii_isalnum ((*aiter)[0]))
+ if (!g_ascii_isalnum (ss[0]))
continue;
- if ((*aiter)[strlen (*aiter) - 1] == ';') {
+ l = strlen (ss);
+
+ while ( l > 0
+ && g_ascii_isspace (ss[l - 1])) {
+ ((char *) ss)[l - 1] = '\0';
+ l--;
+ }
+ if ( l > 0
+ && ss[l - 1] == ';') {
/* Remove the EOL marker */
- (*aiter)[strlen (*aiter) - 1] = '\0';
+ ((char *) ss)[l - 1] = '\0';
end = TRUE;
}
- add_request (store, *aiter);
- }
+ if (ss[0])
+ add_request (store, ss);
- if (areq)
- g_strfreev (areq);
+ if (end)
+ return TRUE;
+ }
- return end;
+ return FALSE;
}
static void