diff --git a/src/nnn.c b/src/nnn.c index cc40a98e..fbeb41bf 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -926,7 +926,7 @@ static size_t xstrsncpy(char *restrict dst, const char *restrict src, size_t n) return end - dst; } -static inline size_t xstrlen(const char *s) +static inline size_t xstrlen(const char *restrict s) { #if !defined(__GLIBC__) return strlen(s); // NOLINT @@ -935,7 +935,7 @@ static inline size_t xstrlen(const char *s) #endif } -static char *xstrdup(const char *s) +static char *xstrdup(const char *restrict s) { size_t len = xstrlen(s) + 1; char *ptr = malloc(len); @@ -965,8 +965,12 @@ static bool is_suffix(const char *str, const char *suffix) * And we are NOT expecting a '/' at the end. * Ideally 0 < n <= xstrlen(s). */ -static void *xmemrchr(uchar *s, uchar ch, size_t n) +static void *xmemrchr(uchar *restrict s, uchar ch, size_t n) { +#if defined(__GLIBC__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) + return memrchr(s, ch, n); +#else + if (!s || !n) return NULL; @@ -978,6 +982,7 @@ static void *xmemrchr(uchar *s, uchar ch, size_t n) while (s != ptr); return NULL; +#endif } /* Assumes both the paths passed are directories */