X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fload-fragment.c;h=1d40b69c98ad538d07128ac9391a88bf03cc1a05;hp=394aa023f319599054997aee200d8f60dadfb7c5;hb=b708e7cea941538bfd5e20ce0a723c19b7da7d1d;hpb=f1dfb62962fd25c1fba9d9479cb5df2d23e6712d diff --git a/src/load-fragment.c b/src/load-fragment.c index 394aa023f..1d40b69c9 100644 --- a/src/load-fragment.c +++ b/src/load-fragment.c @@ -382,7 +382,7 @@ static int config_parse_exec( char *w; size_t l; char *state; - bool honour_argv0, write_to_path; + bool honour_argv0 = false, ignore = false; path = NULL; nce = NULL; @@ -393,9 +393,17 @@ static int config_parse_exec( if (rvalue[0] == 0) break; - honour_argv0 = rvalue[0] == '@'; + if (rvalue[0] == '-') { + ignore = true; + rvalue ++; + } + + if (rvalue[0] == '@') { + honour_argv0 = true; + rvalue ++; + } - if (rvalue[honour_argv0 ? 1 : 0] != '/') { + if (*rvalue != '/') { log_error("[%s:%u] Invalid executable path in command line: %s", filename, line, rvalue); return -EINVAL; } @@ -408,19 +416,18 @@ static int config_parse_exec( k++; } - if (!(n = new(char*, k + (honour_argv0 ? 0 : 1)))) + if (!(n = new(char*, k + !honour_argv0))) return -ENOMEM; k = 0; - write_to_path = honour_argv0; FOREACH_WORD_QUOTED(w, l, rvalue, state) { if (strncmp(w, ";", l) == 0) break; - if (write_to_path) { - if (!(path = cunescape_length(w+1, l-1))) + if (honour_argv0 && w == rvalue) { + assert(!path); + if (!(path = cunescape_length(w, l))) goto fail; - write_to_path = false; } else { if (!(n[k++] = cunescape_length(w, l))) goto fail; @@ -446,6 +453,7 @@ static int config_parse_exec( nce->argv = n; nce->path = path; + nce->ignore = ignore; path_kill_slashes(nce->path);