s4-waf: use the libreplace strerror_r if needed
authorAndrew Tridgell <tridge@samba.org>
Mon, 29 Mar 2010 09:53:16 +0000 (20:53 +1100)
committerAndrew Tridgell <tridge@samba.org>
Mon, 29 Mar 2010 10:34:29 +0000 (21:34 +1100)
lib/replace/replace.c
lib/replace/replace.h
source4/heimdal_build/internal.mk
source4/heimdal_build/roken.h

index 6a325400f4741a21f28f018a6f54ddaaebd2583c..12716ea6d339936e259500b67c00ab9735580da3 100644 (file)
@@ -748,10 +748,15 @@ char *rep_get_current_dir_name(void)
 }
 #endif
 
-#ifndef HAVE_STRERROR_R
-char *rep_strerror_r(int errnum, char *buf, size_t buflen)
+#if !defined(HAVE_STRERROR_R) || !defined(STRERROR_R_PROTO_COMPATIBLE)
+int rep_strerror_r(int errnum, char *buf, size_t buflen)
 {
-       strncpy(buf, strerror(errnum), buflen);
-       return buf;
+       char *s = strerror(errnum);
+       if (strlen(s)+1 > buflen) {
+               errno = ERANGE;
+               return -1;
+       }
+       strncpy(buf, s, buflen);
+       return 0;
 }
 #endif
index 9eb6604c96c473156c4266e05370fc144cd3d53a..7adc224bf2de944ba49850809ea3bdb23e08c1c6 100644 (file)
@@ -512,9 +512,9 @@ ssize_t rep_pwrite(int __fd, const void *__buf, size_t __nbytes, off_t __offset)
 char *rep_get_current_dir_name(void);
 #endif
 
-#ifndef HAVE_STRERROR_R
+#if !defined(HAVE_STRERROR_R) || !defined(STRERROR_R_PROTO_COMPATIBLE)
 #define strerror_r rep_strerror_r
-char *rep_strerror_r(int errnum, char *buf, size_t buflen);
+int rep_strerror_r(int errnum, char *buf, size_t buflen);
 #endif
 
 #ifdef HAVE_LIMITS_H
index 6c6bfcec6513e54c167ce31696ef3942706b6f69..8b834ab5252988b8415f9223d9c23633829aced1 100644 (file)
@@ -640,7 +640,6 @@ HEIMDAL_ROKEN_OBJ_FILES = \
        $(heimdalsrcdir)/lib/roken/erealloc.o \
        $(heimdalsrcdir)/lib/roken/simple_exec.o \
        $(heimdalsrcdir)/lib/roken/strcollect.o \
-       $(heimdalsrcdir)/lib/roken/strerror_r.o \
        $(heimdalsrcdir)/lib/roken/rtbl.o \
        $(heimdalsrcdir)/lib/roken/cloexec.o \
        $(heimdalsrcdir)/lib/roken/xfree.o \
index c95e6dfaeff67aca27fe8fa481c10857fdfe7631..172dc76a29af70c68c23c3dfa40d62242acc97ca 100644 (file)
 #define HAVE_GETTIMEOFDAY
 #endif
 
+/* force the use of the libreplace strerror_r */
+#ifndef HAVE_STRERROR_R
+#define HAVE_STRERROR_R
+#endif
+#ifndef STRERROR_R_PROTO_COMPATIBLE
+#define STRERROR_R_PROTO_COMPATIBLE
+#endif
+
+
 /* we lie about having pidfile() so that NetBSD5 can compile. Nothing
    in the parts of heimdal we use actually uses pidfile(), and we
    don't use it in Samba, so this works, although its ugly */