diff options
author | Pierre Habouzit <madcoder@debian.org> | 2007-09-15 23:53:05 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-09-18 03:07:58 -0700 |
commit | 68d3025a805097ec148ec6e9b0b54a5db1ef138e (patch) | |
tree | f6e8d1a5fdb89dd52a7f90d34bb271a2c4048cc4 /git-compat-util.h | |
parent | 0557656930d41f10c90bccf90e3c5bd87bd53661 (diff) | |
download | git-68d3025a805097ec148ec6e9b0b54a5db1ef138e.tar.gz |
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 <madcoder@debian.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-compat-util.h')
-rw-r--r-- | git-compat-util.h | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/git-compat-util.h b/git-compat-util.h index 1bfbdeb94f..f23d934f66 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); |