Added the AC_FUNC_STRERROR_R check.
authorSebastian Harl <sh@tokkee.org>
Sun, 2 Sep 2007 14:24:28 +0000 (16:24 +0200)
committerFlorian Forster <octo@huhu.verplant.org>
Sun, 2 Sep 2007 15:54:29 +0000 (17:54 +0200)
Even though Posix requires "strerror_r" to return an "int", some systems
(e.g. the GNU libc) return a "char *" _and_ ignore the second argument.

sstrerror() (in src/common.c) has been changed to be aware of this and
handle both cases correctly.

Signed-off-by: Sebastian Harl <sh@tokkee.org>
Signed-off-by: Florian Forster <octo@huhu.verplant.org>
configure.in
src/common.c

index 14fcaa7..162acd7 100644 (file)
@@ -424,6 +424,8 @@ AC_CHECK_FUNCS(strchr memcpy strstr strcmp strncmp strncpy strlen)
 AC_CHECK_FUNCS(strncasecmp strcasecmp)
 AC_CHECK_FUNCS(openlog syslog closelog)
 
+AC_FUNC_STRERROR_R
+
 AC_CHECK_FUNCS(getpwnam_r)
 AC_CHECK_FUNCS(getgrnam_r)
 
index 9ebfe27..f8655a9 100644 (file)
@@ -70,12 +70,17 @@ char *sstrdup (const char *s)
        return (r);
 }
 
-/* Don't use the return value of `strerror_r', because the GNU-people got
- * inventive there.. -octo */
+/* Even though Posix requires "strerror_r" to return an "int",
+ * some systems (e.g. the GNU libc) return a "char *" _and_
+ * ignore the second argument ... -tokkee */
 char *sstrerror (int errnum, char *buf, size_t buflen)
 {
        buf[0] = '\0';
+#ifdef STRERROR_R_CHAR_P
+       buf = strerror_r (errnum, buf, buflen);
+#else
        strerror_r (errnum, buf, buflen);
+#endif /* STRERROR_R_CHAR_P */
        return (buf);
 } /* char *sstrerror */