summaryrefslogtreecommitdiff
path: root/lib/fatal.c
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2000-04-30 16:25:30 +0000
committerJim Meyering <jim@meyering.net>2000-04-30 16:25:30 +0000
commit72d2131b0e2ff186dc276c15e78a55dac4721407 (patch)
tree03dd76e985ab33722b8722b0717c1227c4c66990 /lib/fatal.c
parent2edc7371bce3b6a418db687394c3ece6bf76da03 (diff)
downloadcoreutils-72d2131b0e2ff186dc276c15e78a55dac4721407.tar.xz
.
Diffstat (limited to 'lib/fatal.c')
-rw-r--r--lib/fatal.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/fatal.c b/lib/fatal.c
new file mode 100644
index 000000000..66362b8fe
--- /dev/null
+++ b/lib/fatal.c
@@ -0,0 +1,68 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+
+#if HAVE_VPRINTF || HAVE_DOPRNT || _LIBC
+# 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
+
+#if STDC_HEADERS || _LIBC
+# include <stdlib.h>
+# include <string.h>
+#else
+void exit ();
+#endif
+
+#ifdef _LIBC
+# define program_name program_invocation_name
+#else /* not _LIBC */
+/* The calling program should define program_name and set it to the
+ name of the executing program. */
+extern char *program_name;
+#endif
+
+#include "fatal.h"
+
+/* Like error, but always exit with EXIT_FAILURE. */
+
+void
+#if defined VA_START && __STDC__
+fatal (int errnum, const char *message, ...)
+#else
+fatal (errnum, message, va_alist)
+ int errnum;
+ char *message;
+ va_dcl
+#endif
+{
+#ifdef VA_START
+ va_list args;
+#endif
+
+ if (error_print_progname)
+ (*error_print_progname) ();
+ else
+ {
+ fflush (stdout);
+ fprintf (stderr, "%s: ", program_name);
+ }
+
+#ifdef VA_START
+ VA_START (args, message);
+ error (EXIT_FAILURE, errnum, message, args);
+ va_end (args);
+#else
+ error (EXIT_FAILURE, errnum, message, a1, a2, a3, a4, a5, a6, a7, a8);
+#endif
+}