aboutsummaryrefslogtreecommitdiffstats
path: root/xalloc.h
diff options
context:
space:
mode:
authorJuergen Kahrs <Juergen.Kahrs@googlemail.com>2014-06-24 13:18:33 +0200
committerJuergen Kahrs <Juergen.Kahrs@googlemail.com>2014-06-24 13:18:33 +0200
commitf1245d04a9f076773c60499b468f44ed9c91b59b (patch)
tree2b49234400150bfaac7ebf8c017562300edc7471 /xalloc.h
parentee9707cc44eea3ca64cb71666ac3e8ed26a3bb7f (diff)
parent78ded8ee8f11a321c96417e7d02dac2f5723a221 (diff)
downloadegawk-f1245d04a9f076773c60499b468f44ed9c91b59b.tar.gz
egawk-f1245d04a9f076773c60499b468f44ed9c91b59b.tar.bz2
egawk-f1245d04a9f076773c60499b468f44ed9c91b59b.zip
Merge remote-tracking branch 'origin/master' into cmake
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;