X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=xmalloc.c;h=c2ca4a66e932a32d99716d851914b13ca05da6f0;hb=4260a265b2da01ba1a9757ffb2693db898349ecc;hp=10b3d7e13d9bb73e7209f08eaf60b76a701861f3;hpb=eabdfb5e1ebf83147017c57db3659e7b2e8ecad1;p=~andy%2Ffetchmail diff --git a/xmalloc.c b/xmalloc.c index 10b3d7e1..c2ca4a66 100644 --- a/xmalloc.c +++ b/xmalloc.c @@ -1,17 +1,20 @@ /* * xmalloc.c -- allocate space or die * + * Copyright 1998 by Eric S. Raymond. * For license terms, see the file COPYING in this directory. */ -#include +#include "config.h" +#include #include +#include #include -#include #if defined(STDC_HEADERS) #include #endif #include "fetchmail.h" +#include "i18n.h" #if defined(HAVE_VOIDPOINTER) #define XMALLOCTYPE void @@ -20,26 +23,62 @@ #endif XMALLOCTYPE * -xmalloc (n) -int n; +xmalloc (size_t n) +{ + XMALLOCTYPE *p; + + p = (XMALLOCTYPE *) malloc(n); + if (p == (XMALLOCTYPE *) 0) + { + report(stderr, GT_("malloc failed\n")); + abort(); + } + return(p); +} + +XMALLOCTYPE * +xrealloc (XMALLOCTYPE *p, size_t n) { - XMALLOCTYPE *p; - - p = (XMALLOCTYPE *) malloc(n); - if (p == (XMALLOCTYPE *) 0) { - fputs("fetchmail: malloc failed\n",stderr); - exit(PS_UNDEFINED); - } - return(p); + if (p == 0) + return xmalloc (n); + p = (XMALLOCTYPE *) realloc(p, n); + if (p == (XMALLOCTYPE *) 0) + { + report(stderr, GT_("realloc failed\n")); + abort(); + } + return p; } -char *xstrdup(s) -char *s; -{ - char *p; - p = (char *) xmalloc(strlen(s)+1); - strcpy(p,s); - return p; +char *xstrdup(const char *s) +{ + char *p; + p = (char *) xmalloc(strlen(s)+1); + strcpy(p,s); + return p; +} + +#if !defined(HAVE_STRDUP) +char *strdup(const char *s) +{ + char *p; + p = (char *) malloc(strlen(s)+1); + if (p) + strcpy(p,s); + return p; +} +#endif /* !HAVE_STRDUP */ + +char *xstrndup(const char *s, size_t len) +{ + char *p; + size_t l = strlen(s); + + if (len < l) l = len; + p = (char *)xmalloc(l + 1); + memcpy(p, s, l); + p[l] = '\0'; + return p; } /* xmalloc.c ends here */