summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac16
-rw-r--r--include/c.h36
-rw-r--r--shlibs/blkid/samples/partitions.c1
3 files changed, 53 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index 59b55ea09..f27ba3e18 100644
--- a/configure.ac
+++ b/configure.ac
@@ -191,6 +191,7 @@ AC_CHECK_FUNCS(
strtoull \
sysconf \
getdtablesize \
+ getexecname \
getrlimit \
srandom \
setresgid \
@@ -248,6 +249,21 @@ no:no)
esac
+AC_MSG_CHECKING(whether program_invocation_short_name is defined)
+AC_TRY_COMPILE([#include <argp.h>],
+ [program_invocation_short_name = "test";],
+ AC_DEFINE(HAVE_PROGRAM_INVOCATION_SHORT_NAME, 1,
+ [Define if program_invocation_short_name is defined])
+ AC_MSG_RESULT(yes),
+ AC_MSG_RESULT(no))
+
+AC_MSG_CHECKING([whether __progname is defined])
+AC_LINK_IFELSE([AC_LANG_PROGRAM([extern char *__progname;],
+ [if (*__progname == 0) return;])],
+ AC_DEFINE(HAVE___PROGNAME, 1, [Define if __progname is defined])
+ AC_MSG_RESULT(yes),
+ AC_MSG_RESULT(no))
+
dnl Static compilation
m4_define([UTIL_STATIC_PROGRAMS], [losetup, mount, umount, fdisk, sfdisk, blkid])
diff --git a/include/c.h b/include/c.h
index b37c44224..70e911ddc 100644
--- a/include/c.h
+++ b/include/c.h
@@ -82,5 +82,41 @@ static inline int dirfd(DIR *d)
}
#endif
+#ifndef HAVE_PROGRAM_INVOCATION_SHORT_NAME
+# ifdef HAVE___PROGNAME
+extern char *__progname;
+# define program_invocation_short_name __progname
+# else
+# include <string.h>
+# ifdef HAVE_GETEXECNAME
+# include <stdlib.h>
+# define program_invocation_short_name \
+ prog_inv_sh_nm_from_file(getexecname(), 0)
+# else
+# define program_invocation_short_name \
+ prog_inv_sh_nm_from_file(__FILE__, 1)
+# endif
+static char prog_inv_sh_nm_buf[256];
+static inline char *
+prog_inv_sh_nm_from_file(char *f, char stripext)
+{
+ char *t;
+
+ if ((t = strrchr(f, '/')) != NULL)
+ t++;
+ else
+ t = f;
+
+ strncpy(prog_inv_sh_nm_buf, t, sizeof(prog_inv_sh_nm_buf) - 1);
+ prog_inv_sh_nm_buf[sizeof(prog_inv_sh_nm_buf) - 1] = '\0';
+
+ if (stripext && (t = strrchr(prog_inv_sh_nm_buf, '.')) != NULL)
+ *t = '\0';
+
+ return prog_inv_sh_nm_buf;
+}
+# endif
+#endif
+
#endif /* UTIL_LINUX_C_H */
diff --git a/shlibs/blkid/samples/partitions.c b/shlibs/blkid/samples/partitions.c
index db1b5ff2e..8ee559969 100644
--- a/shlibs/blkid/samples/partitions.c
+++ b/shlibs/blkid/samples/partitions.c
@@ -14,6 +14,7 @@
#include <errno.h>
#include <blkid.h>
+#include "c.h"
int main(int argc, char *argv[])
{