From dda48146a2781fe685eeb9dc5194d142ee5ca0ef Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 19 Nov 2012 23:25:45 +1100 Subject: [PATCH] heimdal_build: Try again to sort out the strerror_r mess Reviewed-by: Stefan Metzmacher --- lib/replace/replace.c | 2 +- lib/replace/replace.h | 3 ++- source4/heimdal_build/roken.h | 8 -------- source4/heimdal_build/wscript_build | 1 + source4/heimdal_build/wscript_configure | 7 +++++++ 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/replace/replace.c b/lib/replace/replace.c index 8f1315a3a5d..37edb310c59 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 62172a9a127..9774da4673f 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 b762545535a..9752c04a741 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 f4837ace1bb..f4471159eb0 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 168be6d0e40..2bb465a1fd1 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 -- 2.11.4.GIT