зеркало из https://github.com/microsoft/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 <madcoder@debian.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
0557656930
Коммит
68d3025a80
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче