progname: Port to Windows Define the directory separator depending on the system targetted. Reported-by: Progyan Bhattacharya <progyanb@acm.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
diff --git a/src/progname.c b/src/progname.c
index 10c3701..3edbf24 100644
--- a/src/progname.c
+++ b/src/progname.c
@@ -34,6 +34,12 @@
#include <string.h>
#include <stdlib.h>
+#if defined(_WIN32) || defined(__WIN32__) || defined(__WINDOWS__)
+#define LIBBSD_IS_PATHNAME_SEPARATOR(c) ((c) == '/' || (c) == '\\')
+#else
+#define LIBBSD_IS_PATHNAME_SEPARATOR(c) ((c) == '/')
+#endif
+
#ifdef HAVE___PROGNAME
extern const char *__progname;
#else
@@ -58,11 +64,13 @@ getprogname(void)
void
setprogname(const char *progname)
{
- const char *last_slash;
+ size_t i;
- last_slash = strrchr(progname, '/');
- if (last_slash == NULL)
- __progname = progname;
- else
- __progname = last_slash + 1;
+ for (i = strlen(progname); i > 0; i--) {
+ if (LIBBSD_IS_PATHNAME_SEPARATOR(progname[i - 1])) {
+ __progname = progname + i;
+ return;
+ }
+ }
+ __progname = progname;
}