[PATCH] compat: add memrchr()
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Oct 15, 2010, 05:17 UTC
- Message-ID
- <20101015051750.GA21830@burratino>
- In-Reply-To
- <1287098999-9244-1-git-send-email-ydirson@altern.org>
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 <jrnieder@gmail.com> --- 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