Peter O'Gorman wrote: > Solaris seems to have a getexecname Interesting. So this provides a fallback, like on glibc systems, for the case when setprogname(argv[0]) has not been called.
> I'd suggest the following instead of Paul's proposal, as it allows > the programmer to override the program name. Well, Paul's proposal to use 'get/setprogname' also allows the programmer to override the program name. > static char * prog_name = NULL; > > void > set_prog_name(char * name) > { > if (prog_name) free(prog_name); > prog_name = strdup(name); > } > > char * > get_prog_name(void) > { > char * name; > if (prog_name) > name = prog_name; > else > { > #if defined(HAVE_GETPROGNAME) > #include <stdlib.h> > name = getprogname(); > #elif defined(HAVE_GETEXECNAME) > #include <stdlib.h> > name = getexecname(); > #elif defined(HAVE_PROGRAM_INVOCATION_SHORT_NAME) > #include <errno.h> > name = program_invocation_short_name; > #else > name = "executable"; > #endif > } > return name; > } Well, my intention is basically this: #if !(HAVE_GETPROGNAME && HAVE_SETPROGNAME) /* nothing to do on FreeBSD, NetBSD */ static const char * progname = NULL; void setprogname(const char *arg) { progname = arg; } const char * getprogname() { if (progname != NULL) /* actually not only basename, but also remove leading "-" and ".lt-" */ return basename (progname); else { #if HAVE_PROGRAM_INVOCATION_SHORT_NAME /* glibc */ return program_invocation_short_name; #elif HAVE_GETEXECNAME /* Solaris */ return basename (getexecname ()); #else return NULL; #endif } } #endif Bruno _______________________________________________ bug-gnulib mailing list bug-gnulib@gnu.org http://lists.gnu.org/mailman/listinfo/bug-gnulib