dcb: cleanup do_helper() in "nm-dcb.c"

This commit is contained in:
Thomas Haller
2019-04-04 13:46:46 +02:00
parent 994df9244f
commit a55c10754a

View File

@@ -37,9 +37,11 @@ do_helper (const char *iface,
const char *fmt, const char *fmt,
...) ...)
{ {
char **argv = NULL, **split = NULL, *cmdline, *errmsg = NULL; gs_free const char **split = NULL;
gboolean success = FALSE; gs_free char *cmdline = NULL;
guint i, u; gs_free const char **argv = NULL;
gsize i;
gsize u;
va_list args; va_list args;
g_return_val_if_fail (fmt != NULL, FALSE); g_return_val_if_fail (fmt != NULL, FALSE);
@@ -48,35 +50,31 @@ do_helper (const char *iface,
cmdline = g_strdup_vprintf (fmt, args); cmdline = g_strdup_vprintf (fmt, args);
va_end (args); va_end (args);
split = g_strsplit_set (cmdline, " ", 0); split = nm_utils_strsplit_set_with_empty (cmdline, " ");
if (!split) { if (!split) {
g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED, g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED,
"failure parsing %s command line", helper_names[which]); "failure parsing %s command line", helper_names[which]);
goto out; return FALSE;
} }
/* Allocate space for path, custom arg, interface name, arguments, and NULL */ /* Allocate space for path, custom arg, interface name, arguments, and NULL */
i = u = 0; i = 0;
argv = g_new0 (char *, g_strv_length (split) + 4); argv = g_new (const char *, NM_PTRARRAY_LEN (split) + 4);
argv[i++] = NULL; /* Placeholder for dcbtool path */ argv[i++] = NULL; /* Placeholder for dcbtool path */
if (which == DCBTOOL) { if (which == DCBTOOL) {
argv[i++] = "sc"; argv[i++] = "sc";
argv[i++] = (char *) iface; argv[i++] = (char *) iface;
} }
while (u < g_strv_length (split)) for (u = 0; split[u]; u++)
argv[i++] = split[u++]; argv[i++] = split[u];
argv[i++] = NULL; argv[i++] = NULL;
success = run_func (argv, which, user_data, error);
if (!success && error)
g_assert (*error);
out: if (!run_func ((char **) argv, which, user_data, error)) {
if (split) g_assert (!error || !*error);
g_strfreev (split); return FALSE;
g_free (argv); }
g_free (cmdline);
g_free (errmsg); return TRUE;
return success;
} }
gboolean gboolean