about summary refs log tree commit diff
path: root/misc
diff options
context:
space:
mode:
Diffstat (limited to 'misc')
-rw-r--r--misc/Makefile7
-rw-r--r--misc/err.c87
-rw-r--r--misc/err.h56
-rw-r--r--misc/error.c134
-rw-r--r--misc/error.h48
5 files changed, 330 insertions, 2 deletions
diff --git a/misc/Makefile b/misc/Makefile
index 173413c9ed..102fdd343f 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -25,7 +25,8 @@ subdir	:= misc
 headers	:= sys/uio.h sys/ioctl.h sys/ptrace.h ioctls.h sys/file.h	\
 	   a.out.h nlist.h stab.h stab.def sgtty.h sys/dir.h sys/cdefs.h \
 	   ttyent.h syscall.h syslog.h sys/syslog.h paths.h sys/reboot.h \
-	   sys/mman.h sys/param.h fstab.h mntent.h search.h utmp.h
+	   sys/mman.h sys/param.h fstab.h mntent.h search.h utmp.h	 \
+	   err.h error.h
 
 routines := brk sbrk sstk ioctl \
 	    readv writev \
@@ -50,12 +51,14 @@ routines := brk sbrk sstk ioctl \
 	    syslog syscall daemon \
 	    mmap munmap mprotect msync madvise \
 	    efgcvt efgcvt_r \
-	    hsearch hsearch_r tsearch
+	    hsearch hsearch_r tsearch \
+	    err error
 aux := progname init-misc
 distribute := bsd-compat.c
 extra-objs := bsd-compat.o
 install-lib := libbsd-compat.a libg.a
 non-lib.a := libbsd-compat.a
+gpl2lgpl := error.c error.h
 
 # Build the -lutil library with these extra functions.
 extra-libs	:= libutil
diff --git a/misc/err.c b/misc/err.c
new file mode 100644
index 0000000000..82719a8756
--- /dev/null
+++ b/misc/err.c
@@ -0,0 +1,87 @@
+/* err.c --- 4.4BSD utility functions for error messages.
+Copyright (C) 1995 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include <stdarg.h>
+#include <err.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+extern char *__progname;
+
+#define VA(call)							      \
+{									      \
+  va_list ap;								      \
+  va_start (ap, format);						      \
+  call;									      \
+  va_end (ap);								      \
+}
+
+void
+vwarn (const char *format, __gnuc_va_list ap)
+{
+  fprintf (stderr, format, ap);
+}
+
+void
+vwarnx (const char *format, __gnuc_va_list ap)
+{
+  if (__progname)
+    fprintf (stderr, "%s: ", __progname);
+  fprintf (stderr, format, ap);
+  putc ('\n', stderr);
+}
+
+
+void
+warn (const char *format, ...)
+{
+  VA (vwarn (format, ap))
+}
+
+void
+warnx (const char *format, ...)
+{
+  VA (vwarnx (format, ap))
+}
+
+void
+verr (int status, const char *format, __gnuc_va_list ap)
+{
+  vwarn (format, ap);
+  exit (status);
+}
+
+void
+verrx (int status, const char *format, __gnuc_va_list ap)
+{
+  vwarnx (format, ap);
+  exit (status);
+}
+
+void
+err (int status, const char *format, ...)
+{
+  VA (verr (status, format, ap))
+}
+
+void
+errx (int status, const char *format, ...)
+{
+  VA (verrx (status, format, ap))
+}
diff --git a/misc/err.h b/misc/err.h
new file mode 100644
index 0000000000..c81de1b396
--- /dev/null
+++ b/misc/err.h
@@ -0,0 +1,56 @@
+/* err.h --- 4.4BSD utility functions for error messages.
+Copyright (C) 1995 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#ifndef	_ERR_H_
+#define	_ERR_H_	1
+#include <features.h>
+
+#define	__need___va_list
+#include <stdarg.h>
+#ifndef	__GNUC_VA_LIST
+#define	__gnuc_va_list	__ptr_t
+#endif
+
+__BEGIN_DECLS
+
+/* Print FORMAT on stderr.  */
+extern void warn __P ((const char *__format, ...))
+     __attribute__ ((format (printf, 1, 2)));
+extern void vwarn __P ((const char *__format, __gnuc_va_list))
+     __attribute__ ((format (printf, 1, 0)));
+
+/* Print "program: ", and FORMAT, and a newline, on stderr.  */
+extern void warnx __P ((const char *__format, ...))
+     __attribute__ ((format (printf, 1, 2)));
+extern void vwarnx __P ((const char *__format, __gnuc_va_list))
+     __attribute__ ((format (printf, 1, 0)));
+
+/* Likewise, and then exit with STATUS.  */
+extern void err __P ((int __status, const char *__format, ...))
+     __attribute__ ((noreturn, format (printf, 2, 3)));
+extern void verr __P ((int __status, const char *__format, __gnuc_va_list))
+     __attribute__ ((noreturn, format (printf, 2, 0)));
+extern void errx __P ((int __status, const char *__format, ...))
+     __attribute__ ((noreturn, format (printf, 2, 3)));
+extern void verrx __P ((int __status, const char *, __gnuc_va_list))
+     __attribute__ ((noreturn, format (printf, 2, 0)));
+
+__END_DECLS
+
+#endif	/* err.h */
diff --git a/misc/error.c b/misc/error.c
new file mode 100644
index 0000000000..da3c6ee1b2
--- /dev/null
+++ b/misc/error.c
@@ -0,0 +1,134 @@
+/* error.c -- error handler for noninteractive utilities
+   Copyright (C) 1990, 91, 92, 93, 94, 95 Free Software Foundation, Inc.
+
+This file is part of the GNU C Library.  Its master source is NOT part of
+the C library, however.  The master source lives in /gd/gnu/lib.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+/* Written by David MacKenzie <djm@gnu.ai.mit.edu>.  */
+
+#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
+
+/* This variable is incremented each time `error' is called.  */
+unsigned int error_message_count;
+
+/* 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 _LIBC
+#define program_name program_invocation_name
+#endif
+
+/* The calling program should define program_name and set it to the
+   name of the executing program.  */
+extern char *program_name;
+
+#if HAVE_STRERROR || _LIBC
+# ifndef strerror		/* On some systems, strerror is a macro */
+char *strerror ();
+# endif
+#else
+static char *
+private_strerror (errnum)
+     int errnum;
+{
+  extern char *sys_errlist[];
+  extern int sys_nerr;
+
+  if (errnum > 0 && errnum <= sys_nerr)
+    return sys_errlist[errnum];
+  return "Unknown system error";
+}
+#define strerror private_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(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
+{
+#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);
+# if HAVE_VPRINTF || _LIBC
+  vfprintf (stderr, message, args);
+# else
+  _doprnt (message, args, stderr);
+# endif
+  va_end (args);
+#else
+  fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
+#endif
+
+  ++error_message_count;
+
+  if (errnum)
+    fprintf (stderr, ": %s", strerror (errnum));
+  putc ('\n', stderr);
+  fflush (stderr);
+  if (status)
+    exit (status);
+}
diff --git a/misc/error.h b/misc/error.h
new file mode 100644
index 0000000000..40b345b9fc
--- /dev/null
+++ b/misc/error.h
@@ -0,0 +1,48 @@
+/* error.h -- declaration for error-reporting function
+   Copyright (C) 1995 Software Foundation, Inc.
+
+This file is part of the GNU C Library.  Its master source is NOT part of
+the C library, however.  The master source lives in /gd/gnu/lib.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#ifndef _error_h_
+#define _error_h_
+
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
+#  define __attribute__(Spec) /* empty */
+# endif
+/* The __-protected variants of `format' and `printf' attributes
+   are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+#  define __format__ format
+#  define __printf__ printf
+# endif
+#endif
+
+#if __STDC__
+void error (int, int, const char *, ...) \
+  __attribute__ ((__format__ (__printf__, 3, 4)));
+#else
+void error ();
+#endif
+
+/* This variable is incremented each time `error' is called.  */
+extern unsigned int error_message_count;
+
+#endif /* _error_h_ */