diff --git a/settings.c b/settings.c index 126cd15..7d4066d 100644 --- a/settings.c +++ b/settings.c @@ -12,6 +12,7 @@ #include "option_parser.h" #include "settings.h" #include "config.h" +#include "utils.h" settings_t settings; @@ -174,7 +175,7 @@ void load_settings(char *cmdline_config_path) settings.dmenu = option_get_string("global", "dmenu", "-dmenu", dmenu, "path to dmenu"); - settings.dmenu_cmd = g_strsplit(dmenu, " ", 0); + settings.dmenu_cmd = string_to_argv(settings.dmenu); settings.browser = option_get_string("global", "browser", "-browser", browser, diff --git a/utils.c b/utils.c index 2df96eb..d0bbe75 100644 --- a/utils.c +++ b/utils.c @@ -68,6 +68,24 @@ char *string_append(char *a, const char *b, const char *sep) } +char **string_to_argv(const char *s) +{ + char *str = strdup(s); + char **argv = NULL; + char *p = strtok (str, " "); + int n_spaces = 0; + + while (p) { + argv = realloc (argv, sizeof (char*) * ++n_spaces); + argv[n_spaces-1] = p; + p = strtok (NULL, " "); + } + argv = realloc (argv, sizeof (char*) * (n_spaces+1)); + argv[n_spaces] = NULL; + + return argv; +} + int digit_count(int i) { i = ABS(i); diff --git a/utils.h b/utils.h index 7a87b19..9617301 100644 --- a/utils.h +++ b/utils.h @@ -15,6 +15,8 @@ char *string_replace(const char *needle, const char *replacement, char *string_append(char *a, const char *b, const char *sep); +char **string_to_argv(const char *s); + /* exit with an error message */ void die(char *msg, int exit_value);