Commit 1497d34760d53777648f91b357762ba8bbb2d5ce

Guillem Jover 2011-02-25T13:52:59

Initialize __progname to program_invocation_short_name As we do not have cooperation from the crt0 code to set __progname, we have to set it ourselves from getprogname() in case it's NULL. On GNU systems we can use program_invocation_short_name which is actually set on crt0.

diff --git a/src/progname.c b/src/progname.c
index ef56144..1079429 100644
--- a/src/progname.c
+++ b/src/progname.c
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2006 Robert Millan
- * Copyright © 2010 Guillem Jover
+ * Copyright © 2010-2011 Guillem Jover
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -29,6 +29,7 @@
   Rejected in glibc (http://sourceware.org/ml/libc-alpha/2006-03/msg00125.html)
 */
 
+#include <errno.h>
 #include <string.h>
 
 #include <bsd/stdlib.h>
@@ -38,6 +39,11 @@ static const char *__progname = NULL;
 const char *
 getprogname(void)
 {
+#ifdef __GLIBC__
+	if (__progname == NULL)
+		__progname = program_invocation_short_name;
+#endif
+
 	return __progname;
 }