#include "xmalloc.h" #include #include #include #include extern char *program_name; void malloc_fail(void) { fprintf(stderr, "%s: could not allocate memory: %s\n", program_name, strerror(errno)); exit(42); } char *xstrndup(const char *str, size_t n) { int len; char *s; len = strlen(str); if (n > len) n = len; s = malloc(n + 1); if (unlikely(s == NULL)) malloc_fail(); memcpy(s, str, n); s[n] = 0; return s; } char **str_array_add(char **a, int *allocp, int *posp, char *str) { int alloc = *allocp; int pos = *posp; if (pos + 1 >= alloc) { alloc = (alloc + 16) * 3 / 2 + 1; a = xrenew(char *, a, alloc); *allocp = alloc; } a[pos++] = str; *posp = pos; return a; }