heimdal_build: Try again to sort out the strerror_r mess
authorAndrew Bartlett <abartlet@samba.org>
Mon, 19 Nov 2012 12:25:45 +0000 (23:25 +1100)
committerStefan Metzmacher <metze@samba.org>
Sat, 19 Jan 2013 09:32:17 +0000 (10:32 +0100)
Reviewed-by: Stefan Metzmacher <metze@samba.org>
lib/replace/replace.c
lib/replace/replace.h
source4/heimdal_build/roken.h
source4/heimdal_build/wscript_build
source4/heimdal_build/wscript_configure

index 8f1315a3a5de2f1352b4b34bacdc8e1de7175afd..37edb310c59ecde926eb0144e9c273df632aa5c9 100644 (file)
@@ -785,7 +785,7 @@ char *rep_get_current_dir_name(void)
 }
 #endif
 
-#if !defined(HAVE_STRERROR_R) && !defined(strerror_r)
+#ifndef HAVE_STRERROR_R
 int rep_strerror_r(int errnum, char *buf, size_t buflen)
 {
        char *s = strerror(errnum);
index 62172a9a127fe0f95ce75dff8092e86ffaa2f636..9774da4673f5f0ed7e56748da365c60ff9f94c90 100644 (file)
@@ -570,7 +570,8 @@ ssize_t rep_pwrite(int __fd, const void *__buf, size_t __nbytes, off_t __offset)
 char *rep_get_current_dir_name(void);
 #endif
 
-#if !defined(HAVE_STRERROR_R) && !defined(strerror_r)
+#ifndef HAVE_STRERROR_R
+#define strerror_r rep_strerror_r
 int rep_strerror_r(int errnum, char *buf, size_t buflen);
 #endif
 
index b762545535a2a3a9f0bf8bde673797c85e59c7c2..9752c04a741f87e78f2782d57e438b5fb3326c78 100644 (file)
 #define HAVE_SETEUID
 #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
-
 #ifndef HAVE_DIRFD
 #ifdef HAVE_DIR_DD_FD
 #define dirfd(x) ((x)->dd_fd)
index f4837ace1bbcfc8ce73577c95cf33b10bdd48a5c..f4471159eb00c985ac851e12ef21226fe2f547cd 100644 (file)
@@ -408,6 +408,7 @@ if not bld.CONFIG_SET('USING_SYSTEM_ROKEN'):
         lib/roken/resolve.c
         lib/roken/socket.c
         lib/roken/roken_gethostby.c
+        lib/roken/strerror_r.c
     '''
 
     HEIMDAL_LIBRARY('roken',
index 168be6d0e409b7998c8336c6c9747236df37afcb..2bb465a1fd11df26dff88f88b46f3be2235648c8 100755 (executable)
@@ -28,6 +28,13 @@ conf.CHECK_FUNCS('''atexit cgetent getprogname setprogname gethostname
             strptime strsep strsep_copy    strtok_r strupr swab umask uname unsetenv
             closefrom err warn errx warnx flock writev''')
 
+if conf.CHECK_FUNCS('strerror_r'):
+    # Check if strerror_r is BSD compatible (default GNU implementation is not what Heimdal expects)
+    conf.CHECK_CODE('int strerror_r(int errnum, char *buf, size_t buflen);',
+                    'STRERROR_R_PROTO_COMPATIBLE',
+                    headers='string.h', addmain=False, link=False,
+                    msg="Checking for XSI (rather than GNU) prototype for strerror_r")
+
 conf.CHECK_FUNCS_IN('hstrerror', 'resolv socket nsl', checklibc=True)
 conf.CHECK_FUNCS_IN('''getnameinfo sendmsg socket getipnodebyname gethostent gethostent_r
                        sethostent endhostent getipnodebyaddr freehostent gethostbyname