From: Pierre Habouzit Date: Sat, 15 Sep 2007 21:53:05 +0000 (+0200) Subject: Add xmemdupz() that duplicates a block of memory, and NUL terminates it. X-Git-Tag: v1.5.4-rc0~295^2~9 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=68d3025a805097ec148ec6e9b0b54a5db1ef138e;p=git.git Add xmemdupz() that duplicates a block of memory, and NUL terminates it. A lot of places in git's code use code like: char *res; len = ... find length of an interesting segment in src ...; res = xmalloc(len + 1); memcpy(res, src, len); res[len] = '\0'; return res; A new function xmemdupz() captures the allocation, copy and NUL termination. Existing xstrndup() is reimplemented in terms of this new function. Signed-off-by: Pierre Habouzit Signed-off-by: Junio C Hamano --- diff --git a/git-compat-util.h b/git-compat-util.h index 1bfbdeb94..f23d934f6 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -211,19 +211,20 @@ static inline void *xmalloc(size_t size) return ret; } -static inline char *xstrndup(const char *str, size_t len) +static inline void *xmemdupz(const void *data, size_t len) { - char *p; - - p = memchr(str, '\0', len); - if (p) - len = p - str; - p = xmalloc(len + 1); - memcpy(p, str, len); + char *p = xmalloc(len + 1); + memcpy(p, data, len); p[len] = '\0'; return p; } +static inline char *xstrndup(const char *str, size_t len) +{ + char *p = memchr(str, '\0', len); + return xmemdupz(str, p ? p - str : len); +} + static inline void *xrealloc(void *ptr, size_t size) { void *ret = realloc(ptr, size);