Fix argument terminator handling in dunstify
`g_option_context_parse` which we use to parse command line arguments leaves the argument terminator, "--", in the argv under specific circumstances which can cause inconsistent results. Credit to Opal Hart for reporting this.
This commit is contained in:
parent
264df67a63
commit
7fc23b23d0
38
dunstify.c
38
dunstify.c
@ -76,6 +76,33 @@ void print_serverinfo(void)
|
||||
spec_version);
|
||||
}
|
||||
|
||||
/*
|
||||
* Glib leaves the option terminator "--" in the argv after parsing in some
|
||||
* cases. This function gets the specified argv element ignoring the first
|
||||
* terminator.
|
||||
*
|
||||
* See https://developer.gnome.org/glib/stable/glib-Commandline-option-parser.html#g-option-context-parse for details
|
||||
*/
|
||||
char *get_argv(char *argv[], int index)
|
||||
{
|
||||
for (int i = 0; i <= index; i++) {
|
||||
if (strcmp(argv[i], "--") == 0) {
|
||||
return argv[index + 1];
|
||||
}
|
||||
}
|
||||
return argv[index];
|
||||
}
|
||||
|
||||
/* Count the number of arguments in argv excluding the terminator "--" */
|
||||
int count_args(char *argv[], int argc) {
|
||||
for (int i = 0; i < argc; i++) {
|
||||
if (strcmp(argv[i], "--") == 0)
|
||||
return argc - 1;
|
||||
}
|
||||
|
||||
return argc;
|
||||
}
|
||||
|
||||
void parse_commandline(int argc, char *argv[])
|
||||
{
|
||||
GError *error = NULL;
|
||||
@ -100,17 +127,18 @@ void parse_commandline(int argc, char *argv[])
|
||||
die(0);
|
||||
}
|
||||
|
||||
if (argc < 2 && close_id < 1) {
|
||||
int n_args = count_args(argv, argc);
|
||||
if (n_args < 2 && close_id < 1) {
|
||||
g_printerr("I need at least a summary\n");
|
||||
die(1);
|
||||
} else if (argc < 2) {
|
||||
} else if (n_args < 2) {
|
||||
summary = g_strdup("These are not the summaries you are looking for");
|
||||
} else {
|
||||
summary = g_strdup(argv[1]);
|
||||
summary = g_strdup(get_argv(argv, 1));
|
||||
}
|
||||
|
||||
if (argc > 2) {
|
||||
body = g_strcompress(argv[2]);
|
||||
if (n_args > 2) {
|
||||
body = g_strcompress(get_argv(argv, 2));
|
||||
}
|
||||
|
||||
if (urgency_str) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user