aboutsummaryrefslogtreecommitdiffstats
path: root/main/libuv/fix-process-title.patch
blob: ee0bdf878959442db58b61663d01c22c8c5f4424 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
From fd8e69547a00e69f10d4d4c46a5ff01b49143d2b Mon Sep 17 00:00:00 2001
From: Matthew Taylor <mstaveleytaylor@gmail.com>
Date: Thu, 17 Aug 2017 18:25:29 +0100
Subject: [PATCH] unix: modify argv[0] when process title is set

Ensures that argv[0] is changed when uv_set_process_title is called
Before, on some unix systems uv__set_process_title was being called but
argv[0] was not modified.

See #1396 for more details.
This partially reverts commit 78c17238f48d9083359206a2215fc63dd7a0283d.
---
 src/unix/proctitle.c | 22 ++++++++--------------
 1 file changed, 8 insertions(+), 14 deletions(-)

diff --git a/src/unix/proctitle.c b/src/unix/proctitle.c
index 70e91bfc2..2ed0b21c6 100644
--- a/src/unix/proctitle.c
+++ b/src/unix/proctitle.c
@@ -48,14 +48,12 @@ char** uv_setup_args(int argc, char** argv) {
   for (i = 0; i < argc; i++)
     size += strlen(argv[i]) + 1;
 
-  process_title.str = uv__strdup(argv[0]);
-  if (process_title.str == NULL)
-    return argv;
-  
 #if defined(__MVS__)
   /* argv is not adjacent. So just use argv[0] */
-  process_title.len = strlen(process_title.str);
+  process_title.str = argv[0];
+  process_title.len = strlen(argv[0]);
 #else
+  process_title.str = argv[0];
   process_title.len = argv[argc - 1] + strlen(argv[argc - 1]) - argv[0];
   assert(process_title.len + 1 == size);  /* argv memory should be adjacent. */
 #endif
@@ -83,15 +81,11 @@ char** uv_setup_args(int argc, char** argv) {
 
 
 int uv_set_process_title(const char* title) {
-  char* new_title;
-  /* Copy the title into our own buffer. We don't want to free the pointer
-   * on libuv shutdown because the program might still be using it. */
-  new_title = uv__strdup(title);
-  if (new_title == NULL)
-    return -ENOMEM;
-  uv__free(process_title.str);
-  process_title.str = new_title;
-  process_title.len = strlen(new_title);
+  if (process_title.len == 0)
+    return 0;
+
+  /* No need to terminate, byte after is always '\0'. */
+  strncpy(process_title.str, title, process_title.len);
   uv__set_process_title(title);
 
   return 0;