Replace string_to_argv util function with g_shell_parse_argv

string_to_argv parsing was very simplistic and didn't properly handle
quotations. Since we are already using glib, g_shell_parse_argv serves
the same purpose with much better parsing and error handling.
This commit is contained in:
Nikos Tsipinakis 2017-02-05 12:55:10 +02:00
parent f0808f8d3f
commit 0c49b49254
3 changed files with 14 additions and 27 deletions

View File

@ -188,6 +188,10 @@ void dispatch_menu_result(const char *input)
*/ */
void context_menu(void) void context_menu(void)
{ {
if (settings.dmenu_cmd == NULL) {
fprintf(stderr, "dmenu command not set properly. Cowardly refusing to open the context menu.\n");
return;
}
char *dmenu_input = NULL; char *dmenu_input = NULL;
for (GList * iter = g_queue_peek_head_link(displayed); iter; for (GList * iter = g_queue_peek_head_link(displayed); iter;

View File

@ -325,7 +325,16 @@ void load_settings(char *cmdline_config_path)
"path to dmenu" "path to dmenu"
); );
settings.dmenu_cmd = string_to_argv(settings.dmenu); {
GError *error = NULL;
if (!g_shell_parse_argv(settings.dmenu, NULL, &settings.dmenu_cmd, &error)) {
fprintf(stderr, "Unable to parse dmenu command: %s\n", error->message);
fprintf(stderr, "dmenu functionality will be disabled.\n");
g_error_free(error);
settings.dmenu_cmd = NULL;
}
}
settings.browser = option_get_string( settings.browser = option_get_string(
"global", "global",

View File

@ -74,31 +74,6 @@ TEST test_string_append(void)
PASS(); PASS();
} }
TEST test_string_to_argv(void)
{
char **argv = string_to_argv("argv");
ASSERT_STR_EQ("argv", argv[0]);
ASSERT_EQ( NULL, argv[1]);
free(argv[0]);
free(argv);
argv = NULL;
argv = string_to_argv("echo test");
ASSERT_STR_EQ("echo", argv[0]);
ASSERT_STR_EQ("test", argv[1]);
ASSERT_EQ( NULL, argv[2]);
free(argv[0]);
free(argv[1]);
free(argv);
argv = NULL;
argv = string_to_argv("");
ASSERT_EQ( NULL, argv[0]);
free(argv);
PASS();
}
TEST test_string_strip_delimited(void) TEST test_string_strip_delimited(void)
{ {
char *text = malloc(128 * sizeof(char)); char *text = malloc(128 * sizeof(char));
@ -133,7 +108,6 @@ SUITE(suite_utils)
RUN_TEST(test_string_replace_all); RUN_TEST(test_string_replace_all);
RUN_TEST(test_string_replace); RUN_TEST(test_string_replace);
RUN_TEST(test_string_append); RUN_TEST(test_string_append);
RUN_TEST(test_string_to_argv);
RUN_TEST(test_string_strip_delimited); RUN_TEST(test_string_strip_delimited);
} }
/* vim: set tabstop=8 shiftwidth=8 expandtab textwidth=0: */ /* vim: set tabstop=8 shiftwidth=8 expandtab textwidth=0: */