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:
parent
f0808f8d3f
commit
0c49b49254
@ -188,6 +188,10 @@ void dispatch_menu_result(const char *input)
|
||||
*/
|
||||
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;
|
||||
|
||||
for (GList * iter = g_queue_peek_head_link(displayed); iter;
|
||||
|
@ -325,7 +325,16 @@ void load_settings(char *cmdline_config_path)
|
||||
"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(
|
||||
"global",
|
||||
|
26
test/utils.c
26
test/utils.c
@ -74,31 +74,6 @@ TEST test_string_append(void)
|
||||
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)
|
||||
{
|
||||
char *text = malloc(128 * sizeof(char));
|
||||
@ -133,7 +108,6 @@ SUITE(suite_utils)
|
||||
RUN_TEST(test_string_replace_all);
|
||||
RUN_TEST(test_string_replace);
|
||||
RUN_TEST(test_string_append);
|
||||
RUN_TEST(test_string_to_argv);
|
||||
RUN_TEST(test_string_strip_delimited);
|
||||
}
|
||||
/* vim: set tabstop=8 shiftwidth=8 expandtab textwidth=0: */
|
||||
|
Loading…
x
Reference in New Issue
Block a user