aboutsummaryrefslogtreecommitdiffstats
path: root/xalloc.h
diff options
context:
space:
mode:
authorAndrew J. Schorr <aschorr@telemetry-investments.com>2014-09-21 15:49:47 -0400
committerAndrew J. Schorr <aschorr@telemetry-investments.com>2014-09-21 15:49:47 -0400
commitb4d06df669e1eaf6c98cacb5c5f299bb5324e804 (patch)
tree50fb039c2cf280921e7650230cb42b0669e17f0b /xalloc.h
parent94e3f93395de538d73826e128281a3ea9591a5a9 (diff)
parent8b4e8f702df30b2b2238158504de5d8eb436958d (diff)
downloadegawk-b4d06df669e1eaf6c98cacb5c5f299bb5324e804.tar.gz
egawk-b4d06df669e1eaf6c98cacb5c5f299bb5324e804.tar.bz2
egawk-b4d06df669e1eaf6c98cacb5c5f299bb5324e804.zip
Merge 'master' into select
Diffstat (limited to 'xalloc.h')
-rw-r--r--xalloc.h24
1 files changed, 20 insertions, 4 deletions
diff --git a/xalloc.h b/xalloc.h
index eb0ef1a0..0d169cf9 100644
--- a/xalloc.h
+++ b/xalloc.h
@@ -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;