]> Pileus Git - ~andy/fetchmail/blobdiff - xmalloc.c
Attempt merging from 6.3.24.
[~andy/fetchmail] / xmalloc.c
index b5d03f89c1444d7de83a26d99add65e9c99a2ad5..6107564d93eb51731e966c89eec8c396e7fed3b8 100644 (file)
--- a/xmalloc.c
+++ b/xmalloc.c
@@ -1,38 +1,64 @@
-/* Copyright 1993-95 by Carl Harris, Jr. Copyright 1996 by Eric S. Raymond
- * All rights reserved.
+/*
+ * xmalloc.c -- allocate space or die 
+ *
+ * Copyright 1998 by Eric S. Raymond.
  * For license terms, see the file COPYING in this directory.
  */
 
-/***********************************************************************
-  module:       xmalloc.c
-  project:      fetchmail
-  programmer:   Carl Harris, ceharris@mal.com
-  description:  malloc wrapper.
+#include "config.h"
+#include <sys/types.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include  <stdlib.h>
+#include "fetchmail.h"
+#include "gettext.h"
 
- ***********************************************************************/
+void *xmalloc (size_t n)
+{
+    void *p;
 
+    p = (void *) malloc(n);
+    if (p == (void *) 0)
+    {
+       report(stderr, GT_("malloc failed\n"));
+       abort();
+    }
+    return(p);
+}
 
-#include <config.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include "fetchmail.h"
+void *xrealloc (void *p, size_t n)
+{
+    if (p == 0)
+       return xmalloc (n);
+    p = (void *) realloc(p, n);
+    if (p == (void *) 0)
+    {
+       report(stderr, GT_("realloc failed\n"));
+       abort();
+    }
+    return p;
+}
 
-#if defined(HAVE_VOIDPOINTER)
-#define XMALLOCTYPE void
-#else
-#define XMALLOCTYPE char
-#endif
+char *xstrdup(const char *s)
+{
+    char *p;
+    p = (char *) xmalloc(strlen(s)+1);
+    strcpy(p,s);
+    return p;
+}
 
-XMALLOCTYPE *
-xmalloc (n)
-size_t n;
+char *xstrndup(const char *s, size_t len)
 {
-  XMALLOCTYPE *p;
-
-  p = (XMALLOCTYPE *) malloc(n);
-  if (p == (XMALLOCTYPE *) 0) {
-    fputs("malloc failed\n",stderr);
-    exit(PS_UNDEFINED);
-  }
-  return(p);
+    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 */