From 981fc3618a78970cca6327666366a7056edd3ebf Mon Sep 17 00:00:00 2001 From: Brent Cook Date: Mon, 28 Jul 2014 12:09:38 -0500 Subject: Guard individual compatibility header prototypes. This is to avoid redefining prototypes from the libc headers. Also, simplify the autoconf function checks and remove some copy/paste errors checking for 'write'. ok wouter@ --- configure.ac.tpl | 108 +++++++++++++++++++++++++++---------------------------- include/stdlib.h | 8 +++++ include/string.h | 15 +++++++- include/unistd.h | 5 +++ 4 files changed, 81 insertions(+), 55 deletions(-) diff --git a/configure.ac.tpl b/configure.ac.tpl index d7bb8aa..bb5e04a 100644 --- a/configure.ac.tpl +++ b/configure.ac.tpl @@ -57,60 +57,60 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], ) CFLAGS="$save_cflags $AM_CFLAGS" -AC_CHECK_FUNC(strlcpy,[AC_SEARCH_LIBS(strlcpy,, [NO_STRLCPY=], - [NO_STRLCPY=yes])], [NO_STRLCPY=yes]) -AC_SUBST(NO_STRLCPY) -AM_CONDITIONAL(NO_STRLCPY, test "x$NO_STRLCPY" = "xyes") - -AC_CHECK_FUNC(strlcat,[AC_SEARCH_LIBS(strlcat,, [NO_STRLCAT=], - [NO_STRLCAT=yes])], [NO_STRLCAT=yes]) -AC_SUBST(NO_STRLCAT) -AM_CONDITIONAL(NO_STRLCAT, test "x$NO_STRLCAT" = "xyes") - -AC_CHECK_FUNC(strndup,[AC_SEARCH_LIBS(strndup,, [NO_STRNDUP=], - [NO_STRNDUP=yes])], [NO_STRNDUP=yes]) -AC_SUBST(NO_STRNDUP) -AM_CONDITIONAL(NO_STRNDUP, test "x$NO_STRNDUP" = "xyes") - -AC_CHECK_FUNC(reallocarray,[AC_SEARCH_LIBS(reallocarray,, [NO_REALLOCARRAY=], - [NO_REALLOCARRAY=yes])], [NO_REALLOCARRAY=yes]) -AC_SUBST(NO_REALLOCARRAY) -AM_CONDITIONAL(NO_REALLOCARRAY, test "x$NO_REALLOCARRAY" = "xyes") - -AC_CHECK_FUNC(timingsafe_bcmp,[AC_SEARCH_LIBS(timingsafe_bcmp,, [NO_TIMINGSAFE_BCMP=], - [NO_TIMINGSAFE_BCMP=yes])], [NO_TIMINGSAFE_BCMP=yes]) -AC_SUBST(NO_TIMINGSAFE_BCMP) -AM_CONDITIONAL(NO_TIMINGSAFE_BCMP, test "x$NO_TIMINGSAFE_BCMP" = "xyes") - -AC_CHECK_FUNC(timingsafe_memcmp,[AC_SEARCH_LIBS(timingsafe_memcmp,, [NO_TIMINGSAFE_MEMCMP=], - [NO_TIMINGSAFE_MEMCMP=yes])], [NO_TIMINGSAFE_MEMCMP=yes]) -AC_SUBST(NO_TIMINGSAFE_MEMCMP) -AM_CONDITIONAL(NO_TIMINGSAFE_MEMCMP, test "x$NO_TIMINGSAFE_MEMCMP" = "xyes") - -AC_CHECK_FUNC(arc4random_buf,[AC_SEARCH_LIBS(write,, [NO_ARC4RANDOM_BUF=], - [NO_ARC4RANDOM_BUF=yes])], [NO_ARC4RANDOM_BUF=yes]) -AC_SUBST(NO_ARC4RANDOM_BUF) -AM_CONDITIONAL(NO_ARC4RANDOM_BUF, test "x$NO_ARC4RANDOM_BUF" = "xyes") - -AC_CHECK_FUNC(getentropy,[AC_SEARCH_LIBS(write,, [NO_GETENTROPY=], - [NO_GETENTROPY=yes])], [NO_GETENTROPY=yes]) -AC_SUBST(NO_GETENTROPY) -AM_CONDITIONAL(NO_GETENTROPY, test "x$NO_GETENTROPY" = "xyes") - -AC_CHECK_FUNC(issetugid,[AC_SEARCH_LIBS(write,, [NO_ISSETUGID=], - [NO_ISSETUGID=yes])], [NO_ISSETUGID=yes]) -AC_SUBST(NO_ISSETUGID) -AM_CONDITIONAL(NO_ISSETUGID, test "x$NO_ISSETUGID" = "xyes") - -AC_CHECK_FUNC(strtonum,[AC_SEARCH_LIBS(write,, [NO_STRTONUM=], - [NO_STRTONUM=yes])], [NO_STRTONUM=yes]) -AC_SUBST(NO_STRTONUM) -AM_CONDITIONAL(NO_STRTONUM, test "x$NO_STRTONUM" = "xyes") - -AC_CHECK_FUNC(explicit_bzero,[AC_SEARCH_LIBS(write,, [NO_EXPLICIT_BZERO=], - [NO_EXPLICIT_BZERO=yes])], [NO_EXPLICIT_BZERO=yes]) -AC_SUBST(NO_EXPLICIT_BZERO) -AM_CONDITIONAL(NO_EXPLICIT_BZERO, test "x$NO_EXPLICIT_BZERO" = "xyes") +AC_CHECK_FUNC(strlcpy, + AM_CONDITIONAL(NO_STRLCPY, false), + AC_DEFINE(NO_STRLCPY) + AM_CONDITIONAL(NO_STRLCPY, true)) + +AC_CHECK_FUNC(strlcat, + AM_CONDITIONAL(NO_STRLCAT, false), + AC_DEFINE(NO_STRLCAT) + AM_CONDITIONAL(NO_STRLCAT, true)) + +AC_CHECK_FUNC(strndup, + AM_CONDITIONAL(NO_STRNDUP, false), + AC_DEFINE(NO_STRNDUP) + AM_CONDITIONAL(NO_STRNDUP, true)) + +AC_CHECK_FUNC(reallocarray, + AM_CONDITIONAL(NO_REALLOCARRAY, false), + AC_DEFINE(NO_REALLOCARRAY) + AM_CONDITIONAL(NO_REALLOCARRAY, true)) + +AC_CHECK_FUNC(timingsafe_bcmp, + AM_CONDITIONAL(NO_TIMINGSAFE_BCMP, false), + AC_DEFINE(NO_TIMINGSAFE_BCMP) + AM_CONDITIONAL(NO_TIMINGSAFE_BCMP, true)) + +AC_CHECK_FUNC(timingsafe_memcmp, + AM_CONDITIONAL(NO_TIMINGSAFE_MEMCMP, false), + AC_DEFINE(NO_TIMINGSAFE_MEMCMP) + AM_CONDITIONAL(NO_TIMINGSAFE_MEMCMP, true)) + +AC_CHECK_FUNC(arc4random_buf, + AM_CONDITIONAL(NO_ARC4RANDOM_BUF, false), + AC_DEFINE(NO_ARC4RANDOM_BUF) + AM_CONDITIONAL(NO_ARC4RANDOM_BUF, true)) + +AC_CHECK_FUNC(getentropy, + AM_CONDITIONAL(NO_GETENTROPY, false), + AC_DEFINE(NO_GETENTROPY) + AM_CONDITIONAL(NO_GETENTROPY, true)) + +AC_CHECK_FUNC(issetugid, + AM_CONDITIONAL(NO_ISSETUGID, false), + AC_DEFINE(NO_ISSETUGID) + AM_CONDITIONAL(NO_ISSETUGID, true)) + +AC_CHECK_FUNC(strtonum, + AM_CONDITIONAL(NO_STRTONUM, false), + AC_DEFINE(NO_STRTONUM) + AM_CONDITIONAL(NO_STRTONUM, true)) + +AC_CHECK_FUNC(explicit_bzero, + AM_CONDITIONAL(NO_EXPLICIT_BZERO, false), + AC_DEFINE(NO_EXPLICIT_BZERO) + AM_CONDITIONAL(NO_EXPLICIT_BZERO, true)) AC_CHECK_FUNC(getauxval, AC_DEFINE(HAVE_GETAUXVAL)) diff --git a/include/stdlib.h b/include/stdlib.h index 6c2de93..c314f38 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -7,10 +7,18 @@ #include #include +#ifdef NO_ARC4RANDOM_BUF uint32_t arc4random(void); void arc4random_buf(void *_buf, size_t n); +#endif + +#ifdef NO_REALLOCARRAY void *reallocarray(void *, size_t, size_t); +#endif + +#ifdef NO_STRTONUM long long strtonum(const char *nptr, long long minval, long long maxval, const char **errstr); +#endif #endif diff --git a/include/string.h b/include/string.h index cd3430a..c4bf1e4 100644 --- a/include/string.h +++ b/include/string.h @@ -12,21 +12,34 @@ #include #endif +#ifdef NO_STRLCPY size_t strlcpy(char *dst, const char *src, size_t siz); +#endif +#ifdef NO_STRLCAT size_t strlcat(char *dst, const char *src, size_t siz); +#endif +#ifdef NO_STRNDUP char * strndup(const char *str, size_t maxlen); - size_t strnlen(const char *str, size_t maxlen); +#endif +#ifdef NO_EXPLICIT_BZERO void explicit_bzero(void *, size_t); +#endif +#ifdef NO_TIMINGSAFE_BCMP int timingsafe_bcmp(const void *b1, const void *b2, size_t n); +#endif +#ifdef NO_TIMINGSAFE_MEMCMP int timingsafe_memcmp(const void *b1, const void *b2, size_t len); +#endif +#ifdef NO_MEMMEM void * memmem(const void *big, size_t big_len, const void *little, size_t little_len); +#endif #endif diff --git a/include/unistd.h b/include/unistd.h index ae82b95..037b11a 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -3,7 +3,12 @@ #ifndef LIBCRYPTOCOMPAT_UNISTD_H #define LIBCRYPTOCOMPAT_UNISTD_H +#ifdef NO_GETENTROPY int getentropy(void *buf, size_t buflen); +#endif + +#ifdef NO_ISSETUGID int issetugid(void); +#endif #endif -- cgit v1.2.3-55-g6feb