--- ray/src/common/fixargv0.c 2020/07/24 16:58:16 2.9 +++ ray/src/common/fixargv0.c 2025/06/03 21:31:51 2.10 @@ -1,36 +1,37 @@ #ifndef lint -static const char RCSid[] = "$Id: fixargv0.c,v 2.9 2020/07/24 16:58:16 greg Exp $"; +static const char RCSid[] = "$Id: fixargv0.c,v 2.10 2025/06/03 21:31:51 greg Exp $"; #endif /* - * Fix argv[0] for DOS environments + * Fix argv[0] and assign global progname variable * * External symbols declared in paths.h */ +#include "paths.h" #include -#include +char *progname = NULL; /* global argv[0] */ + char * fixargv0(char *av0) /* extract command name from full path */ { - char *cp = av0, *end; + char *cp = av0; while (*cp) cp++; /* start from end */ - end = cp; + while (cp-- > av0) - switch (*cp) { /* fix up command name */ + switch (*cp) { + CASEDIRSEP: /* remove directory */ + av0 = cp+1; + break; +#if defined(_WIN32) || defined(_WIN64) /* only do for Windows: */ case '.': /* remove extension */ *cp = '\0'; - end = cp; continue; - case '\\': /* remove directory */ - case '/': - /* make sure the original pointer remains the same */ - memmove(av0, cp+1, end-cp); - return(av0); default: /* convert to lower case */ *cp = tolower(*cp); continue; +#endif } - return(av0); + return(progname = av0); }