diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2014-07-12 23:20:39 -0700 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2014-07-12 23:20:39 -0700 |
commit | de3372f0d98c7137823e7d5630d03429bb77d1f2 (patch) | |
tree | 389fa3f5f107b3ca1178e6d7a65e66ff3644e29c /xalloc.h | |
parent | ebb6772e9eabeb81e3cc9305a6bec7adf7aad450 (diff) | |
parent | df2eaea6a92c7d89d604d0a4e885d064678ce3ed (diff) | |
download | egawk-de3372f0d98c7137823e7d5630d03429bb77d1f2.tar.gz egawk-de3372f0d98c7137823e7d5630d03429bb77d1f2.tar.bz2 egawk-de3372f0d98c7137823e7d5630d03429bb77d1f2.zip |
Merge branch 'master' into comment
Diffstat (limited to 'xalloc.h')
-rw-r--r-- | xalloc.h | 24 |
1 files changed, 20 insertions, 4 deletions
@@ -136,6 +136,8 @@ xnmalloc (size_t n, size_t s) #ifdef GAWK #include <errno.h> +extern void r_fatal(const char *msg, ...) ATTRIBUTE_NORETURN ; + /* Allocate an array of N objects, each with S bytes of memory, dynamically, with error checking. S must be nonzero. Clear the contents afterwards. */ @@ -165,8 +167,6 @@ xrealloc(void *p, size_t size) void xalloc_die (void) { - extern void r_fatal(const char *msg, ...) ATTRIBUTE_NORETURN ; - r_fatal(_("xalloc: malloc failed: %s"), strerror(errno)); } @@ -179,6 +179,22 @@ xmemdup (void const *p, size_t s) { return memcpy (xmalloc (s), p, s); } + +/* xstrdup --- strdup and die if fails */ +char *xstrdup(const char *s) +{ + char *p; + int l; + + if (s == NULL) + r_fatal(_("xstrdup: null parameter")); + + l = strlen(s); + p = xmemdup(s, l + 1); + p[l] = '\0'; + + return p; +} #endif /* Change the size of an allocated block of memory P to an array of N @@ -260,7 +276,7 @@ x2nrealloc (void *p, size_t *pn, size_t s) requests, when the invoking code specifies an old size of zero. 64 bytes is the largest "small" request for the GNU C library malloc. */ - enum { DEFAULT_MXFAST = 64 }; + enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; n = DEFAULT_MXFAST / s; n += !n; @@ -274,7 +290,7 @@ x2nrealloc (void *p, size_t *pn, size_t s) worth the trouble. */ if ((size_t) -1 / 3 * 2 / s <= n) xalloc_die (); - n += (n + 1) / 2; + n += n / 2 + 1; } *pn = n; |