From 5a4576ee09cff4a886c2d502bde7d1d6418a0ee5 Mon Sep 17 00:00:00 2001 From: Charles Davis Date: Fri, 19 Feb 2016 15:33:33 -0700 Subject: [PATCH] kernel32: Use setprogname(3) to set the program name if available. Signed-off-by: Charles Davis Signed-off-by: Alexandre Julliard --- configure | 1 + configure.ac | 1 + dlls/kernel32/process.c | 17 ++++++++++++++--- include/config.h.in | 3 +++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/configure b/configure index 85293066a11..8200927d9fc 100755 --- a/configure +++ b/configure @@ -15047,6 +15047,7 @@ for ac_func in \ sched_yield \ select \ setproctitle \ + setprogname \ setrlimit \ settimeofday \ sigaltstack \ diff --git a/configure.ac b/configure.ac index c9445e73588..2ebbb1079f8 100644 --- a/configure.ac +++ b/configure.ac @@ -2026,6 +2026,7 @@ AC_CHECK_FUNCS(\ sched_yield \ select \ setproctitle \ + setprogname \ setrlimit \ settimeofday \ sigaltstack \ diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c index 86333be9eef..4771108a320 100644 --- a/dlls/kernel32/process.c +++ b/dlls/kernel32/process.c @@ -1118,9 +1118,20 @@ static void set_process_name( int argc, char *argv[] ) { #ifdef HAVE_SETPROCTITLE setproctitle("-%s", argv[1]); -#endif + /* remove argv[0] */ + memmove( argv, argv + 1, argc * sizeof(argv[0]) ); +#elif defined(HAVE_SETPROGNAME) + int i, offset; + char *end = argv[argc-1] + strlen(argv[argc-1]) + 1; -#ifdef HAVE_PRCTL + offset = argv[1] - argv[0]; + memmove( argv[1] - offset, argv[1], end - argv[1] ); + memset( end - offset, 0, offset ); + for (i = 1; i < argc; i++) argv[i-1] = argv[i] - offset; + argv[i-1] = NULL; + + setprogname( argv[0] ); +#elif defined(HAVE_PRCTL) int i, offset; char *p, *prctl_name = argv[1]; char *end = argv[argc-1] + strlen(argv[argc-1]) + 1; @@ -1141,11 +1152,11 @@ static void set_process_name( int argc, char *argv[] ) argv[i-1] = NULL; } else -#endif /* HAVE_PRCTL */ { /* remove argv[0] */ memmove( argv, argv + 1, argc * sizeof(argv[0]) ); } +#endif /* HAVE_PRCTL */ } diff --git a/include/config.h.in b/include/config.h.in index 86318c5f185..86da1a51f5a 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -774,6 +774,9 @@ /* Define to 1 if you have the `setproctitle' function. */ #undef HAVE_SETPROCTITLE +/* Define to 1 if you have the `setprogname' function. */ +#undef HAVE_SETPROGNAME + /* Define to 1 if you have the `setrlimit' function. */ #undef HAVE_SETRLIMIT