Use getexecname() if available for getprogname() This function is present on Solaris.
diff --git a/configure.ac b/configure.ac
index 06a02b7..c9cf0a4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -37,6 +37,7 @@ AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
# Checks for library functions.
+AC_CHECK_FUNCS([getexecname])
AC_CONFIG_FILES([
Makefile
diff --git a/src/progname.c b/src/progname.c
index f24071a..b5132d8 100644
--- a/src/progname.c
+++ b/src/progname.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2006 Robert Millan
- * Copyright © 2010-2011 Guillem Jover
+ * Copyright © 2010-2012 Guillem Jover <guillem@hadrons.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -41,6 +41,10 @@ getprogname(void)
#ifdef __GLIBC__
if (__progname == NULL)
__progname = program_invocation_short_name;
+#elif defined(HAVE_GETEXECNAME)
+ /* getexecname(3) returns an absolute pathname, normalize it. */
+ if (__progname == NULL)
+ setprogname(getexecname());
#endif
return __progname;