diff options
-rw-r--r-- | src/main.c | 2 | ||||
-rw-r--r-- | src/util.c | 17 | ||||
-rw-r--r-- | src/util.h | 3 |
3 files changed, 22 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c index 045203383d..e10441c862 100644 --- a/src/main.c +++ b/src/main.c @@ -1033,6 +1033,8 @@ int main(int argc, char *argv[]) { program_invocation_short_name = systemd; prctl(PR_SET_NAME, systemd); + saved_argv = argv; + saved_argc = argc; log_show_color(isatty(STDERR_FILENO) > 0); log_show_location(false); diff --git a/src/util.c b/src/util.c index a0c04e3204..270c7dac79 100644 --- a/src/util.c +++ b/src/util.c @@ -64,6 +64,9 @@ #include "exit-status.h" #include "hashmap.h" +int saved_argc = 0; +char **saved_argv = NULL; + size_t page_size(void) { static __thread size_t pgsz = 0; long r; @@ -3026,6 +3029,20 @@ void rename_process(const char name[8]) { if (program_invocation_name) strncpy(program_invocation_name, name, strlen(program_invocation_name)); + + if (saved_argc > 0) { + int i; + + if (saved_argv[0]) + strncpy(saved_argv[0], name, strlen(saved_argv[0])); + + for (i = 1; i < saved_argc; i++) { + if (!saved_argv[i]) + break; + + memset(saved_argv[i], 0, strlen(saved_argv[i])); + } + } } void sigset_add_many(sigset_t *ss, ...) { diff --git a/src/util.h b/src/util.h index a26fb6f177..083da2a545 100644 --- a/src/util.h +++ b/src/util.h @@ -477,4 +477,7 @@ int signal_from_string(const char *s); int signal_from_string_try_harder(const char *s); +extern int saved_argc; +extern char **saved_argv; + #endif |