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.
/*
* 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
Rejected in glibc (http://sourceware.org/ml/libc-alpha/2006-03/msg00125.html)
*/
+#include <errno.h>
#include <string.h>
#include <bsd/stdlib.h>
const char *
getprogname(void)
{
+#ifdef __GLIBC__
+ if (__progname == NULL)
+ __progname = program_invocation_short_name;
+#endif
+
return __progname;
}