From d4f1d0e900482c9275f5e0098c2c4d22e9d89abb Mon Sep 17 00:00:00 2001 From: "Asanka C. Herath" Date: Mon, 29 Nov 2010 13:32:15 -0500 Subject: [PATCH] Canonicalize the program name if necessary in setprogname() --- lib/roken/setprogname.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/lib/roken/setprogname.c b/lib/roken/setprogname.c index 115af77b8..88a5f9bb4 100644 --- a/lib/roken/setprogname.c +++ b/lib/roken/setprogname.c @@ -40,19 +40,52 @@ extern const char *__progname; #endif #ifndef HAVE_SETPROGNAME + ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL setprogname(const char *argv0) { + #ifndef HAVE___PROGNAME + const char *p; if(argv0 == NULL) return; p = strrchr(argv0, '/'); + +#ifdef BACKSLASH_PATH_DELIM + { + const char * pb; + + pb = strrchr((p != NULL)? p : argv0, '\\'); + if (pb != NULL) + p = pb; + } +#endif + if(p == NULL) p = argv0; else p++; + +#ifdef _WIN32 + { + char * fn = strdup(p); + char * ext; + + strlwr(fn); + ext = strrchr(fn, '.'); + if (ext != NULL && !strcmp(ext, ".exe")) + *ext = '\0'; + + __progname = fn; + } +#else + __progname = p; + #endif + +#endif /* HAVE___PROGNAME */ } + #endif /* HAVE_SETPROGNAME */