Mercurial > gnulib
changeset 262:a70a20230879
GNU shell utilities
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Thu, 13 Oct 1994 02:05:39 +0000 |
parents | 8cf333566445 |
children | 39c6d5681ff0 |
files | lib/error.c lib/xmalloc.c |
diffstat | 2 files changed, 66 insertions(+), 52 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/error.c Sun Oct 02 22:50:11 1994 +0000 +++ b/lib/error.c Thu Oct 13 02:05:39 1994 +0000 @@ -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 */ +#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 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 */ +#if STDC_HEADERS +# include <stdlib.h> +# include <string.h> +#else +void exit (); +#endif -#endif /* !HAVE_VPRINTF */ +/* 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; -#ifdef STDC_HEADERS -#include <stdlib.h> -#include <string.h> -#else /* !STDC_HEADERS */ -void exit (); -#endif /* !STDC_HEADERS */ - +/* 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 @@ 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);
--- a/lib/xmalloc.c Sun Oct 02 22:50:11 1994 +0000 +++ b/lib/xmalloc.c Thu Oct 13 02:05:39 1994 +0000 @@ -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 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 @@ 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 @@ } 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; }