#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;
}
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 */