From 7bb1e4e4bf193c6f3badeeee61f430817dd0dad0 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Wed, 5 Jul 2017 10:17:42 +0530 Subject: [PATCH] Use xmemrchr() instead of strrchr() --- nnn.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) 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) {