#endif
#include <sys/types.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <errno.h>
#if STDC_HEADERS
# include <stdlib.h>
void free ();
#endif
-#if ENABLE_NLS
-# include <libintl.h>
-# define _(Text) gettext (Text)
-#else
-# define textdomain(Domain)
-# define _(Text) Text
-#endif
-#define N_(Text) Text
-
-#include "error.h"
+#include "gettext.h"
#include "xalloc.h"
#ifndef EXIT_FAILURE
void *xrealloc (void *p, size_t n);
#endif
-#ifndef HAVE_DONE_WORKING_MALLOC_CHECK
-you must run the autoconf test for a properly working malloc -- see malloc.m4
-#endif
-
-#ifndef HAVE_DONE_WORKING_REALLOC_CHECK
-you must run the autoconf test for a properly working realloc -- see realloc.m4
-#endif
-
/* Exit value when the requested amount of memory is not available.
The caller may set it to some other value. */
int xalloc_exit_failure = EXIT_FAILURE;
/* FIXME: describe */
void (*xalloc_fail_func) (int) = 0;
-#if __STDC__ && (HAVE_VPRINTF || HAVE_DOPRNT)
-void error (int, int, const char *, ...);
-#else
-void error ();
-#endif
-
static void
xalloc_fail (int size)
{
if (xalloc_fail_func)
(*xalloc_fail_func) (size);
- error (xalloc_exit_failure, 0, xalloc_msg_memory_exhausted);
+ fprintf(stderr, "%s\n", xalloc_msg_memory_exhausted);
+ exit(xalloc_exit_failure);
}
/* Allocate N bytes of memory dynamically, with error checking. */
size_t n;
{
void *p;
- extern char*cp_file;
- extern int cp_line;
p = malloc (n);
if (p == 0)
return p;
}
+/* Allocate N bytes of memory dynamically, and set it all to zero. */
+
+void *
+xmalloc_and_zero (n)
+ size_t n;
+{
+ void *p;
+
+ p = malloc (n);
+ if (p == 0)
+ xalloc_fail ((int)n);
+ memset (p, '\0', n);
+ return p;
+}
+
/* Change the size of an allocated block of memory P to N bytes,
with error checking.
If P is NULL, run xmalloc. */
return p;
}
+/* Duplicate a string */
+
+char *xstrdup(const char *s)
+{
+ char *p;
+
+ p = strdup(s);
+ if(!p)
+ xalloc_fail ((int)strlen(s));
+ return p;
+}
+
#ifdef NOT_USED
/* Allocate memory for N elements of S bytes, with error checking. */
}
#endif /* NOT_USED */
+
+int xasprintf(char **strp, const char *fmt, ...) {
+ int result;
+ va_list ap;
+ va_start(ap, fmt);
+ result = xvasprintf(strp, fmt, ap);
+ va_end(ap);
+ return result;
+}
+
+int xvasprintf(char **strp, const char *fmt, va_list ap) {
+ int result = vasprintf(strp, fmt, ap);
+ if(result < 0) {
+ fprintf(stderr, "vasprintf() failed: %s\n", strerror(errno));
+ exit(xalloc_exit_failure);
+ }
+ return result;
+}