[PATCH] compat: add memrchr()
From: Jonathan Nieder <hidden>
Date: 2016-06-15 22:49:47
Subsystem:
the rest · Maintainer:
Linus Torvalds
Reimplement another handy convenience function from glibc. memrchr() searches from the end of a memory area for a particular character. It is similar to strrchr() but takes a length argument and is binary-safe. The whole-directory rename detection patch could use this to find the last directory separator in a (possibly truncated) pathname. Signed-off-by: Jonathan Nieder <redacted> --- Yann Dirson wrote:
* memrchr() implementation for portability
Something like this? Untested. git-compat-util.h | 16 ++++++++++++++++ 1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/git-compat-util.h b/git-compat-util.h
index 2af8d3e..6f1020e 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h@@ -366,6 +366,9 @@ extern int git_vsnprintf(char *str, size_t maxsize, #define HAVE_STRCHRNUL #define HAVE_MEMPCPY #endif +#if __GLIBC_PREREQ(2, 2) +#define HAVE_MEMRCHR +#endif #endif #ifndef HAVE_STRCHRNUL
@@ -386,6 +389,19 @@ static inline void *gitmempcpy(void *dest, const void *src, size_t n) } #endif +#ifndef HAVE_MEMRCHR +#define memrchr gitmemrchr +static inline void *gitmemrchr(const void *s, int c, size_t n) +{ + const char *p = s; + p += n; + while (p != s) + if (*--p == c) + return p; + return NULL; +} +#endif + extern void release_pack_memory(size_t, int); typedef void (*try_to_free_t)(size_t);
--
1.7.2.3