[PATCH] kernel32: Use setprogname(3) to set the program name if available.

Charles Davis cdavis5x at gmail.com
Thu Feb 18 03:21:30 CST 2016


Signed-off-by: Charles Davis <cdavis5x at gmail.com>
---
 configure.ac            |  1 +
 dlls/kernel32/process.c | 22 +++++++++++++++-------
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/configure.ac b/configure.ac
index c9445e7..2ebbb10 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 86333be..290a554 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -1118,21 +1118,29 @@ static void set_process_name( int argc, char *argv[] )
 {
 #ifdef HAVE_SETPROCTITLE
     setproctitle("-%s", argv[1]);
-#endif
-
-#ifdef HAVE_PRCTL
+#elif defined(HAVE_PRCTL) || defined(HAVE_SETPROGNAME)
     int i, offset;
     char *p, *prctl_name = argv[1];
     char *end = argv[argc-1] + strlen(argv[argc-1]) + 1;
-
-#ifndef PR_SET_NAME
-# define PR_SET_NAME 15
+#ifdef HAVE_SETPROGNAME
+    static char progname[PATH_MAX];
 #endif
 
     if ((p = strrchr( prctl_name, '\\' ))) prctl_name = p + 1;
     if ((p = strrchr( prctl_name, '/' ))) prctl_name = p + 1;
 
+#ifdef HAVE_SETPROGNAME
+    lstrcpynA( progname, prctl_name, sizeof(progname)/sizeof(progname[0]) );
+    progname[PATH_MAX-1] = 0;
+    setprogname( progname );
+    if (1)
+#elif defined(HAVE_PRCTL)
+#ifndef PR_SET_NAME
+# define PR_SET_NAME 15
+#endif
+
     if (prctl( PR_SET_NAME, prctl_name ) != -1)
+#endif
     {
         offset = argv[1] - argv[0];
         memmove( argv[1] - offset, argv[1], end - argv[1] );
@@ -1141,7 +1149,7 @@ static void set_process_name( int argc, char *argv[] )
         argv[i-1] = NULL;
     }
     else
-#endif  /* HAVE_PRCTL */
+#endif  /* HAVE_PRCTL || HAVE_SETPROGNAME */
     {
         /* remove argv[0] */
         memmove( argv, argv + 1, argc * sizeof(argv[0]) );
-- 
2.7.1




More information about the wine-patches mailing list