chiark / gitweb /
Prep v238: Fix elogind_daemonize(), it failed due to some misunderstandings on my...
[elogind.git] / src / shared / musl_missing.c
index e089367f2db846307f0c912a7f303493f3c21982..ffa0ff78f0ca845655ba285361f10cbe3442aea4 100644 (file)
@@ -28,29 +28,33 @@ char *program_invocation_name       = NULL;
 char *program_invocation_short_name = NULL;
 #endif // __GLIBC__
 
+const char *program_arg_name = NULL;
+
 #include "musl_missing.h"
 
 static void elogind_free_program_name(void) {
-        if (program_invocation_name)
+
+        if (program_invocation_name && (program_invocation_name != program_arg_name) && strlen(program_invocation_name))
                 program_invocation_name       = mfree(program_invocation_name);
-        if (program_invocation_short_name)
+        if (program_invocation_short_name && (program_invocation_short_name != program_arg_name) && strlen(program_invocation_short_name))
                 program_invocation_short_name = mfree(program_invocation_short_name);
 }
 
 void elogind_set_program_name(const char* pcall) {
         assert(pcall && pcall[0]);
 
+        program_arg_name = pcall;
+
         if ( ( program_invocation_name
-            && strcmp(program_invocation_name, pcall))
+            && strcmp(program_invocation_name, program_arg_name))
           || ( program_invocation_short_name
-            && strcmp(program_invocation_short_name, basename(pcall)) ) )
+            && strcmp(program_invocation_short_name, basename(program_arg_name)) ) )
                 elogind_free_program_name();
 
         if (NULL == program_invocation_name)
-                program_invocation_name       = strdup(pcall);
+                program_invocation_name       = strdup(program_arg_name);
         if (NULL == program_invocation_short_name)
-                program_invocation_short_name = strdup(basename(pcall));
-
+                program_invocation_short_name = strdup(basename(program_arg_name));
 #ifndef __GLIBC__
         atexit(elogind_free_program_name);
 #endif // __GLIBC__