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)
|
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;
|
||||||
|
@ -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",
|
||||||
|
26
test/utils.c
26
test/utils.c
@ -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: */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user