diff options
author | Thomas Haller <thaller@redhat.com> | 2019-04-04 15:21:37 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2019-04-09 20:43:34 +0200 |
commit | 86bfb6e14e4370d131941063a826a1ff946ffc48 (patch) | |
tree | c862c91a2ab4180bd2f55ab5a1ed6daa8efd606b | |
parent | 7706f1f28b387e3ade5cd7212e242e31b624102f (diff) | |
download | NetworkManager-86bfb6e14e4370d131941063a826a1ff946ffc48.tar.gz |
dhcp: cleanup grab_request_options()
-rw-r--r-- | src/dhcp/nm-dhcp-dhclient-utils.c | 45 |
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 |