summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.c2
-rw-r--r--src/util.c17
-rw-r--r--src/util.h3
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