From: Arun Prakash Jana <engineerarun@gmail.com>
Date: Wed, 5 Jul 2017 04:47:42 +0000 (+0530)
Subject: Use xmemrchr() instead of strrchr()
X-Git-Tag: v1.3~7
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=7bb1e4e4bf193c6f3badeeee61f430817dd0dad0;p=nnn.git

Use xmemrchr() instead of strrchr()
---

diff --git a/nnn.c b/nnn.c
index 7a829043..a5f666ed 100644
--- a/nnn.c
+++ b/nnn.c
@@ -347,23 +347,21 @@ xstrcmp(const char *s1, const char *s2)
 /*
  * The poor man's implementation of memrchr(3).
  * We are only looking for '/' in this program.
+ * Ideally 0 < n <= strlen(s).
  */
 static void *
-xmemrchr(const void *s, uchar ch, size_t n)
+xmemrchr(uchar *s, uchar ch, size_t n)
 {
 	if (!s || !n)
 		return NULL;
 
-	static uchar *p;
-
-	p = (uchar *)s + n - 1;
+	s = s + n - 1;
 
 	while (n) {
-		if (*p == ch)
-			return p;
+		if (*s == ch)
+			return s;
 
-		--p;
-		--n;
+		--n, --s;
 	}
 
 	return NULL;
@@ -384,7 +382,7 @@ xdirname(const char *path)
 	xstrlcpy(buf, path, PATH_MAX);
 
 	/* Find last '/'. */
-	last_slash = strrchr(buf, '/');
+	last_slash = xmemrchr((uchar *)buf, '/', strlen(buf));
 
 	if (last_slash != NULL && last_slash != buf && last_slash[1] == '\0') {
 		/* Determine whether all remaining characters are slashes. */
@@ -396,7 +394,7 @@ xdirname(const char *path)
 
 		/* The '/' is the last character, we have to look further. */
 		if (runp != buf)
-			last_slash = xmemrchr(buf, '/', runp - buf);
+			last_slash = xmemrchr((uchar *)buf, '/', runp - buf);
 	}
 
 	if (last_slash != NULL) {