]> granicus.if.org Git - procps-ng/commitdiff
configure: Check for error.h
authorRainer Müller <raimue@codingfarm.de>
Wed, 20 Feb 2013 19:14:29 +0000 (20:14 +0100)
committerRainer Müller <raimue@codingfarm.de>
Wed, 20 Mar 2013 15:32:06 +0000 (16:32 +0100)
For portability, check for error.h during configure and define
HAVE_ERROR_H accordingly.

If this header is not available, emulate the functionality of error()
from glibc with an inline wrapper in include/c.h.

configure.ac
include/c.h
lib/fileutils.c

index 08f59e3d41f0d29515e59759fcdd12b840801ac3..6e0883b6a40492b1d55091839e34386c34bf0fb5 100644 (file)
@@ -137,6 +137,8 @@ dnl else
 dnl    ALL_LINGUAS="af am ar as be bg bn_IN bn ca cs cy da de el en_GB es et eu_ES fa fi fr gl gu he hi hr hu hy id is it ja ka kn ko ku lo lt lv mk ml mr ms my nb nl nn no nso or pa pl pt_BR pt ro ru si sk sl sq sr@Latn sr sv ta te th tr uk ur vi zh_CN zh_TW zu"
 dnl fi
 
+AC_CHECK_HEADERS(error.h, [], [], AC_INCLUDES_DEFAULT)
+
 AC_CHECK_HEADERS(stdio_ext.h, [], [], AC_INCLUDES_DEFAULT)
 
 AC_MSG_CHECKING(whether program_invocation_name is defined)
index 737630bb62290de29d28d77ca1a999a8a5f1b9cc..6bcdf5f526f26db0f3522ea1e252038d49826540 100644 (file)
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
+#ifdef HAVE_ERROR_H
 #include <error.h>
+#else
+#include <stdarg.h>
+#endif
 
 /*
  * Compiler specific stuff
@@ -103,6 +107,23 @@ static inline char *prog_inv_sh_nm_from_file(char *f, char stripext)
 /*
  * Error printing.
  */
+#ifndef HAVE_ERROR_H
+/* Emulate the error() function from glibc */
+__attribute__((__format__(__printf__, 3, 4)))
+static void error(int status, int errnum, const char *format, ...)
+{
+        va_list argp;
+        fprintf(stderr, "%s: ", program_invocation_short_name);
+        va_start(argp, format);
+        vfprintf(stderr, format, argp);
+        va_end(argp);
+        if (errnum != 0)
+                fprintf(stderr, ": error code %d", errnum);
+        fprintf(stderr, "\n");
+        if (status != 0)
+                exit(status);
+}
+#endif
 #define xwarn(...) error(0, errno, __VA_ARGS__)
 #define xwarnx(...) error(0, 0, __VA_ARGS__)
 #define xerr(STATUS, ...) error(STATUS, errno, __VA_ARGS__)
index c50d6aa94cbfad493899e24bedf6ee3bce0293e6..a9ef2ff5fa7b909fbd1293363d54a122b78462ca 100644 (file)
@@ -1,5 +1,7 @@
 #include <errno.h>
-#include <error.h>
+#ifdef HAVE_ERROR_H
+# include <error.h>
+#endif
 #ifdef HAVE_STDIO_EXT_H
 # include <stdio_ext.h>
 #else
@@ -12,6 +14,9 @@
 
 #include "nls.h"
 #include "fileutils.h"
+#ifndef HAVE_ERROR_H
+# include "c.h" /* for error() emulation */
+#endif
 
 int close_stream(FILE * stream)
 {