summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>1994-10-13 02:05:39 +0000
committerJim Meyering <jim@meyering.net>1994-10-13 02:05:39 +0000
commit4bb1a680d36d6d4de5375010559a0a157184d3ca (patch)
treea329d1612b19668ed0cf8d5e57cceabf20fd65f4
parente7f9522b97d6d146e1149aa3c38e318254592d04 (diff)
downloadgnulib-SHELLUTILS-1_10u.tar.gz
GNU shell utilitiesSHELLUTILS-1_10u
-rw-r--r--lib/error.c98
-rw-r--r--lib/xmalloc.c20
2 files changed, 66 insertions, 52 deletions
diff --git a/lib/error.c b/lib/error.c
index e1d24dfce8..19c2ba8863 100644
--- a/lib/error.c
+++ b/lib/error.c
@@ -1,5 +1,5 @@
/* error.c -- error handler for noninteractive utilities
- Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
+ Copyright (C) 1990, 91, 92, 93, 94 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-/* Written by David MacKenzie. */
+/* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */
#ifdef HAVE_CONFIG_H
#include <config.h>
@@ -23,38 +23,38 @@
#include <stdio.h>
-#ifdef HAVE_VPRINTF
-
-#if __STDC__
-#include <stdarg.h>
-#define VA_START(args, lastarg) va_start(args, lastarg)
-#else /* !__STDC__ */
-#include <varargs.h>
-#define VA_START(args, lastarg) va_start(args)
-#endif /* !__STDC__ */
-
-#else /* !HAVE_VPRINTF */
-
-#ifdef HAVE_DOPRNT
-#define va_alist args
-#define va_dcl int args;
-#else /* !HAVE_DOPRNT */
-#define va_alist a1, a2, a3, a4, a5, a6, a7, a8
-#define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8;
-#endif /* !HAVE_DOPRNT */
-
-#endif /* !HAVE_VPRINTF */
+#if HAVE_VPRINTF || HAVE_DOPRNT
+# if __STDC__
+# include <stdarg.h>
+# define VA_START(args, lastarg) va_start(args, lastarg)
+# else
+# include <varargs.h>
+# define VA_START(args, lastarg) va_start(args)
+# endif
+#else
+# define va_alist a1, a2, a3, a4, a5, a6, a7, a8
+# define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8;
+#endif
-#ifdef STDC_HEADERS
-#include <stdlib.h>
-#include <string.h>
-#else /* !STDC_HEADERS */
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#else
void exit ();
-#endif /* !STDC_HEADERS */
+#endif
+
+/* If NULL, error will flush stdout, then print on stderr the program
+ name, a colon and a space. Otherwise, error will call this
+ function without parameters instead. */
+void (*error_print_progname) () = NULL;
+/* The calling program should define program_name and set it to the
+ name of the executing program. */
extern char *program_name;
-#ifndef HAVE_STRERROR
+#if HAVE_STRERROR
+char *strerror ();
+#else
static char *
private_strerror (errnum)
int errnum;
@@ -67,41 +67,49 @@ private_strerror (errnum)
return "Unknown system error";
}
#define strerror private_strerror
-#endif /* !HAVE_STRERROR */
+#endif
/* Print the program name and error message MESSAGE, which is a printf-style
format string with optional args.
If ERRNUM is nonzero, print its corresponding system error message.
Exit with status STATUS if it is nonzero. */
/* VARARGS */
+
void
-#if defined (HAVE_VPRINTF) && __STDC__
-error (int status, int errnum, char *message, ...)
-#else /* !HAVE_VPRINTF or !__STDC__ */
+#if defined(VA_START) && __STDC__
+error (int status, int errnum, const char *message, ...)
+#else
error (status, errnum, message, va_alist)
int status;
int errnum;
char *message;
va_dcl
-#endif /* !HAVE_VPRINTF or !__STDC__ */
+#endif
{
-#ifdef HAVE_VPRINTF
+#ifdef VA_START
va_list args;
-#endif /* HAVE_VPRINTF */
+#endif
- fflush (stdout);
- fprintf (stderr, "%s: ", program_name);
-#ifdef HAVE_VPRINTF
+ if (error_print_progname)
+ (*error_print_progname) ();
+ else
+ {
+ fflush (stdout);
+ fprintf (stderr, "%s: ", program_name);
+ }
+
+#ifdef VA_START
VA_START (args, message);
+# if HAVE_VPRINTF
vfprintf (stderr, message, args);
+# else
+ _doprnt (message, args, stderr);
+# endif
va_end (args);
-#else /* !HAVE_VPRINTF */
-#ifdef HAVE_DOPRNT
- _doprnt (message, &args, stderr);
-#else /* !HAVE_DOPRNT */
+#else
fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
-#endif /* !HAVE_DOPRNT */
-#endif /* !HAVE_VPRINTF */
+#endif
+
if (errnum)
fprintf (stderr, ": %s", strerror (errnum));
putc ('\n', stderr);
diff --git a/lib/xmalloc.c b/lib/xmalloc.c
index dc44ba4cf7..0a4ad4f35d 100644
--- a/lib/xmalloc.c
+++ b/lib/xmalloc.c
@@ -1,5 +1,5 @@
/* xmalloc.c -- malloc with out of memory checking
- Copyright (C) 1990, 1991, 1993 Free Software Foundation, Inc.
+ Copyright (C) 1990, 91, 92, 93, 94 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -35,8 +35,16 @@ VOID *realloc ();
void free ();
#endif
-#if __STDC__ && defined (HAVE_VPRINTF)
-void error (int, int, char const *, ...);
+#ifndef EXIT_FAILURE
+#define EXIT_FAILURE 1
+#endif
+
+/* Exit value when the requested amount of memory is not available.
+ The caller may set it to some other value. */
+int xmalloc_exit_failure = EXIT_FAILURE;
+
+#if __STDC__ && (HAVE_VPRINTF || HAVE_DOPRNT)
+void error (int, int, const char *, ...);
#else
void error ();
#endif
@@ -51,8 +59,7 @@ xmalloc (n)
p = malloc (n);
if (p == 0)
- /* Must exit with 2 for `cmp'. */
- error (2, 0, "memory exhausted");
+ error (xmalloc_exit_failure, 0, "memory exhausted");
return p;
}
@@ -75,7 +82,6 @@ xrealloc (p, n)
}
p = realloc (p, n);
if (p == 0)
- /* Must exit with 2 for `cmp'. */
- error (2, 0, "memory exhausted");
+ error (xmalloc_exit_failure, 0, "memory exhausted");
return p;
}