]> Pileus Git - ~andy/fetchmail/blobdiff - xmalloc.c
Merge branch 'legacy_63'
[~andy/fetchmail] / xmalloc.c
index c5af357c0f9193e2fce47d7b846daacb4e7b330b..6107564d93eb51731e966c89eec8c396e7fed3b8 100644 (file)
--- a/xmalloc.c
+++ b/xmalloc.c
 #include <stdio.h>
 #include <errno.h>
 #include <string.h>
-#if defined(STDC_HEADERS)
 #include  <stdlib.h>
-#endif
 #include "fetchmail.h"
-#include "i18n.h"
+#include "gettext.h"
 
-#if defined(HAVE_VOIDPOINTER)
-#define XMALLOCTYPE void
-#else
-#define XMALLOCTYPE char
-#endif
-
-XMALLOCTYPE *
-xmalloc (size_t n)
+void *xmalloc (size_t n)
 {
-    XMALLOCTYPE *p;
+    void *p;
 
-    p = (XMALLOCTYPE *) malloc(n);
-    if (p == (XMALLOCTYPE *) 0)
+    p = (void *) malloc(n);
+    if (p == (void *) 0)
     {
        report(stderr, GT_("malloc failed\n"));
-       exit(PS_UNDEFINED);
+       abort();
     }
     return(p);
 }
 
-XMALLOCTYPE *
-xrealloc (XMALLOCTYPE *p, size_t n)
+void *xrealloc (void *p, size_t n)
 {
     if (p == 0)
        return xmalloc (n);
-    p = (XMALLOCTYPE *) realloc(p, n);
-    if (p == (XMALLOCTYPE *) 0)
+    p = (void *) realloc(p, n);
+    if (p == (void *) 0)
     {
        report(stderr, GT_("realloc failed\n"));
-       exit(PS_UNDEFINED);
+       abort();
     }
     return p;
 }
@@ -58,14 +48,17 @@ char *xstrdup(const char *s)
     return p;
 }
 
-#if !defined(HAVE_STRDUP)
-char *strdup(const char *s)
+char *xstrndup(const char *s, size_t len)
 {
     char *p;
-    p = (char *) malloc(strlen(s)+1);
-    strcpy(p,s);
+    size_t l = strlen(s);
+
+    if (len < l) l = len;
+    p = (char *)xmalloc(l + 1);
+    memcpy(p, s, l);
+    p[l] = '\0';
     return p;
 }
-#endif /* !HAVE_STRDUP */
+
 
 /* xmalloc.c ends here */