Commit 5ba8c5bab05c8315439c351e91ce554d4f092915

Guillem Jover 2018-03-05T00:37:47

progname: Port to Windows Define the directory separator depending on the system targetted. Reported-by: Progyan Bhattacharya <progyanb@acm.org>

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;
 }