Make xstrndup common
This also improves the implementation to match how strndup is specified (by GNU): if the length given is longer than the string, only the string's length is allocated and copied, but the string need not be null-terminated if it is at least as long as the given length. Signed-off-by: Daniel Barkalow <barkalow@iabervon.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
cdda666201
commit
5094102e13
8
commit.c
8
commit.c
@ -720,14 +720,6 @@ static char *logmsg_reencode(const struct commit *commit,
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *xstrndup(const char *text, int len)
|
|
||||||
{
|
|
||||||
char *result = xmalloc(len + 1);
|
|
||||||
memcpy(result, text, len);
|
|
||||||
result[len] = '\0';
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void fill_person(struct interp *table, const char *msg, int len)
|
static void fill_person(struct interp *table, const char *msg, int len)
|
||||||
{
|
{
|
||||||
int start, end, tz = 0;
|
int start, end, tz = 0;
|
||||||
|
@ -189,6 +189,19 @@ static inline void *xmalloc(size_t size)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline char *xstrndup(const char *str, size_t len)
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
p = memchr(str, '\0', len);
|
||||||
|
if (p)
|
||||||
|
len = p - str;
|
||||||
|
p = xmalloc(len + 1);
|
||||||
|
memcpy(p, str, len);
|
||||||
|
p[len] = '\0';
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void *xrealloc(void *ptr, size_t size)
|
static inline void *xrealloc(void *ptr, size_t size)
|
||||||
{
|
{
|
||||||
void *ret = realloc(ptr, size);
|
void *ret = realloc(ptr, size);
|
||||||
|
Loading…
Reference in New Issue
Block a user