summaryrefslogtreecommitdiff
path: root/src/shared/musl_missing.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/musl_missing.c')
-rw-r--r--src/shared/musl_missing.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/shared/musl_missing.c b/src/shared/musl_missing.c
new file mode 100644
index 000000000..5ce787beb
--- /dev/null
+++ b/src/shared/musl_missing.c
@@ -0,0 +1,36 @@
+#include <string.h>
+#include "alloc-util.h"
+
+#ifndef __GLIBC__
+char *program_invocation_name = NULL;
+char *program_invocation_short_name = NULL;
+#endif // __GLIBC__
+
+#include "musl_missing.h"
+
+static void elogind_free_program_name(void) {
+ if (program_invocation_name)
+ program_invocation_name = mfree(program_invocation_name);
+ if (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]);
+
+ if ( ( program_invocation_name
+ && strcmp(program_invocation_name, pcall))
+ || ( program_invocation_short_name
+ && strcmp(program_invocation_short_name, basename(pcall)) ) )
+ elogind_free_program_name();
+
+ if (NULL == program_invocation_name)
+ program_invocation_name = strdup(pcall);
+ if (NULL == program_invocation_short_name)
+ program_invocation_short_name = strdup(basename(pcall));
+
+#ifndef __GLIBC__
+ atexit(elogind_free_program_name);
+#endif // __GLIBC__
+}
+