summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2012-11-19 23:25:45 +1100
committerStefan Metzmacher <metze@samba.org>2013-01-19 10:32:17 +0100
commitdda48146a2781fe685eeb9dc5194d142ee5ca0ef (patch)
treeb098ac5828b4d226227e5f286e13985d1512d0d7
parentd90b709ebb22fb40cbd46bdddd28d9ec1be7b0ce (diff)
downloadsamba-dda48146a2781fe685eeb9dc5194d142ee5ca0ef.tar.gz
samba-dda48146a2781fe685eeb9dc5194d142ee5ca0ef.tar.bz2
samba-dda48146a2781fe685eeb9dc5194d142ee5ca0ef.zip
heimdal_build: Try again to sort out the strerror_r mess
Reviewed-by: Stefan Metzmacher <metze@samba.org>
-rw-r--r--lib/replace/replace.c2
-rw-r--r--lib/replace/replace.h3
-rw-r--r--source4/heimdal_build/roken.h8
-rw-r--r--source4/heimdal_build/wscript_build1
-rwxr-xr-xsource4/heimdal_build/wscript_configure7
5 files changed, 11 insertions, 10 deletions
diff --git a/lib/replace/replace.c b/lib/replace/replace.c
index 8f1315a3a5..37edb310c5 100644
--- a/lib/replace/replace.c
+++ b/lib/replace/replace.c
@@ -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);
diff --git a/lib/replace/replace.h b/lib/replace/replace.h
index 62172a9a12..9774da4673 100644
--- a/lib/replace/replace.h
+++ b/lib/replace/replace.h
@@ -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
diff --git a/source4/heimdal_build/roken.h b/source4/heimdal_build/roken.h
index b762545535..9752c04a74 100644
--- a/source4/heimdal_build/roken.h
+++ b/source4/heimdal_build/roken.h
@@ -123,14 +123,6 @@
#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)
diff --git a/source4/heimdal_build/wscript_build b/source4/heimdal_build/wscript_build
index f4837ace1b..f4471159eb 100644
--- a/source4/heimdal_build/wscript_build
+++ b/source4/heimdal_build/wscript_build
@@ -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',
diff --git a/source4/heimdal_build/wscript_configure b/source4/heimdal_build/wscript_configure
index 168be6d0e4..2bb465a1fd 100755
--- a/source4/heimdal_build/wscript_configure
+++ b/source4/heimdal_build/wscript_configure
@@ -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