#endif
#ifdef __GNUC__
-#define GCC_VERSION (__GNUC__ * 10000 \
- + __GNUC_MINOR__ * 100 \
- + __GNUC_PATCHLEVEL__)
+#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
+
+#if GCC_VERSION < 40900
+#define WITHOUT_C11_GENERIC 1
+#endif
#if __x86_64__ || __ppc64__
#define ENVIRONMENT64
// ----------------------------------------------------------------------------
// error log
+#ifdef WITHOUT_C11_GENERIC
+
+#ifdef STRERROR_R_POSIX
+// POSIX version of strerror_r
+static const char *strerror_result(int a, const char *b) { (void)a; return b; }
+#else
+// GLIBC version of strerror_r
+static const char *strerror_result(const char *a, const char *b) { (void)b; return a; }
+#endif
+
+#else /* ! WITHOUT_C11_GENERIC */
+
// what a trick!
// http://stackoverflow.com/questions/479207/function-overloading-in-c
static const char *strerror_result_int(int a, const char *b) { (void)a; return b; }
char *: strerror_result_string \
)(a, b)
+#endif /* ! WITHOUT_C11_GENERIC */
+
void error_int( const char *prefix, const char *file, const char *function, const unsigned long line, const char *fmt, ... )
{
va_list args;