version 1.7, 2014/10/20 23:57:14 |
version 1.8, 2015/11/17 18:25:03 |
|
|
#include "tmux.h" |
#include "tmux.h" |
|
|
char * |
char * |
xstrdup(const char *s) |
xstrdup(const char *str) |
{ |
{ |
char *ptr; |
char *cp; |
size_t len; |
|
|
|
len = strlen(s) + 1; |
if ((cp = strdup(str)) == NULL) |
ptr = xmalloc(len); |
fatal("xstrdup"); |
|
return (cp); |
strlcpy(ptr, s, len); |
|
return (ptr); |
|
} |
} |
|
|
void * |
void * |
|
|
void *ptr; |
void *ptr; |
|
|
if (size == 0 || nmemb == 0) |
if (size == 0 || nmemb == 0) |
fatalx("zero size"); |
fatalx("xcalloc: zero size"); |
if (SIZE_MAX / nmemb < size) |
|
fatalx("nmemb * size > SIZE_MAX"); |
|
if ((ptr = calloc(nmemb, size)) == NULL) |
if ((ptr = calloc(nmemb, size)) == NULL) |
fatal("xcalloc failed"); |
log_fatal("xcalloc: allocating %zu bytes", size); |
|
|
return (ptr); |
return (ptr); |
} |
} |
|
|
void *ptr; |
void *ptr; |
|
|
if (size == 0) |
if (size == 0) |
fatalx("zero size"); |
fatalx("xmalloc: zero size"); |
if ((ptr = malloc(size)) == NULL) |
if ((ptr = malloc(size)) == NULL) |
fatal("xmalloc failed"); |
log_fatal("xmalloc: allocating %zu bytes", size); |
|
|
return (ptr); |
return (ptr); |
} |
} |
|
|
void *newptr; |
void *newptr; |
|
|
if (newsize == 0) |
if (newsize == 0) |
fatalx("zero size"); |
fatalx("xrealloc: zero size"); |
if ((newptr = realloc(oldptr, newsize)) == NULL) |
if ((newptr = realloc(oldptr, newsize)) == NULL) |
fatal("xrealloc failed"); |
log_fatal("xrealloc: allocating %zu bytes", newsize); |
|
|
return (newptr); |
return (newptr); |
} |
} |
|
|
void * |
void * |
xreallocarray(void *oldptr, size_t nmemb, size_t size) |
xreallocarray(void *oldptr, size_t nmemb, size_t size) |
{ |
{ |
size_t newsize = nmemb * size; |
|
void *newptr; |
void *newptr; |
|
|
if (newsize == 0) |
if (nmemb == 0 || size == 0) |
fatalx("zero size"); |
fatalx("xreallocarray: zero size"); |
if (SIZE_MAX / nmemb < size) |
if ((newptr = reallocarray(oldptr, nmemb, size)) == NULL) |
fatalx("nmemb * size > SIZE_MAX"); |
log_fatal("xreallocarray: allocating %zu * %zu bytes", |
if ((newptr = realloc(oldptr, newsize)) == NULL) |
nmemb, size); |
fatal("xreallocarray failed"); |
|
|
|
return (newptr); |
return (newptr); |
} |
} |
|
|
|
|
i = vasprintf(ret, fmt, ap); |
i = vasprintf(ret, fmt, ap); |
if (i < 0 || *ret == NULL) |
if (i < 0 || *ret == NULL) |
fatal("xvasprintf failed"); |
fatal("xvasprintf"); |
|
|
return (i); |
return (i); |
} |
} |
|
|
int i; |
int i; |
|
|
if (len > INT_MAX) |
if (len > INT_MAX) |
fatalx("len > INT_MAX"); |
fatalx("xvsnprintf: len > INT_MAX"); |
|
|
i = vsnprintf(buf, len, fmt, ap); |
i = vsnprintf(buf, len, fmt, ap); |
if (i < 0) |
if (i < 0 || i >= (int)len) |
fatal("vsnprintf failed"); |
fatalx("xvsnprintf: overflow"); |
|
|
return (i); |
return (i); |
} |
} |