diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/c.h | 36 |
1 files changed, 36 insertions, 0 deletions
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 */ |