Commit 1d87476250217a87319df48a8f473415c0515106

Robert Millan 2006-03-30T11:14:56

Duplicate setprogname argument For some reason, accessing the argv vector directly may cause SIGSEV.

diff --git a/src/progname.c b/src/progname.c
index 7777658..e422b5e 100644
--- a/src/progname.c
+++ b/src/progname.c
@@ -19,9 +19,10 @@
   Rejected in glibc (http://sourceware.org/ml/libc-alpha/2006-03/msg00125.html)
 */
 
-#include <bsd/stdlib.h>
+#include <bsd/stdlib.h>		/* progname, strdup */
+#include <string.h>		/* free */
 
-static char *__progname = NULL;
+char *__progname = NULL;
 
 char *
 getprogname ()
@@ -32,5 +33,10 @@ getprogname ()
 void
 setprogname (char *new)
 {
-  __progname = new;
+  /* For some reason, accessing the argv vector directly may cause SIGSEV.  Let's copy it to avoid trouble. */
+
+  if (__progname != NULL)
+    free (__progname);
+
+  __progname = strdup (new);
 }