X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/ad3c9f2af814c84582fdd1649e49ec4f68572c5a..b061a43bf32824cb214e9e3a29a974341de443d4:/include/secure/_stdio.h diff --git a/include/secure/_stdio.h b/include/secure/_stdio.h index 49caf72..c4dc7b2 100644 --- a/include/secure/_stdio.h +++ b/include/secure/_stdio.h @@ -32,42 +32,55 @@ #if _USE_FORTIFY_LEVEL > 0 -#undef sprintf -#undef vsprintf - -#if __DARWIN_C_LEVEL >= 200112L -#undef snprintf -#undef vsnprintf +#ifndef __has_builtin +#define _undef__has_builtin +#define __has_builtin(x) 0 #endif /* sprintf, vsprintf, snprintf, vsnprintf */ - +#if __has_builtin(__builtin___sprintf_chk) || defined(__GNUC__) extern int __sprintf_chk (char * __restrict, int, size_t, const char * __restrict, ...); +#undef sprintf #define sprintf(str, ...) \ __builtin___sprintf_chk (str, 0, __darwin_obsz(str), __VA_ARGS__) +#endif +#if __DARWIN_C_LEVEL >= 200112L +#if __has_builtin(__builtin___snprintf_chk) || defined(__GNUC__) extern int __snprintf_chk (char * __restrict, size_t, int, size_t, const char * __restrict, ...); -#if __DARWIN_C_LEVEL >= 200112L +#undef snprintf #define snprintf(str, len, ...) \ __builtin___snprintf_chk (str, len, 0, __darwin_obsz(str), __VA_ARGS__) +#endif +#if __has_builtin(__builtin___vsprintf_chk) || defined(__GNUC__) extern int __vsprintf_chk (char * __restrict, int, size_t, const char * __restrict, va_list); +#undef vsprintf #define vsprintf(str, format, ap) \ __builtin___vsprintf_chk (str, 0, __darwin_obsz(str), format, ap) +#endif +#if __has_builtin(__builtin___vsnprintf_chk) || defined(__GNUC__) extern int __vsnprintf_chk (char * __restrict, size_t, int, size_t, const char * __restrict, va_list); +#undef vsnprintf #define vsnprintf(str, len, format, ap) \ __builtin___vsnprintf_chk (str, len, 0, __darwin_obsz(str), format, ap) #endif -#endif +#endif /* __DARWIN_C_LEVEL >= 200112L */ +#ifdef _undef__has_builtin +#undef _undef__has_builtin +#undef __has_builtin #endif + +#endif /* _USE_FORTIFY_LEVEL > 0 */ +#endif /* _SECURE__STDIO_H_ */