diff options
Diffstat (limited to 'src/shared/musl_missing.c')
-rw-r--r-- | src/shared/musl_missing.c | 36 |
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__ +} + |