diff options
author | Stefan Metzmacher <metze@samba.org> | 2012-11-13 14:07:11 +0100 |
---|---|---|
committer | Bjoern Jacke <bj@sernet.de> | 2012-11-14 19:41:14 +0100 |
commit | a15da3625850d97b3da1b02308c870f820007c52 (patch) | |
tree | 92c12b6fbae709a72c81fee2a484df7780b5dd09 | |
parent | a53caea7a27c8616cabfc2e5bdf91a90e35891d5 (diff) | |
download | samba-a15da3625850d97b3da1b02308c870f820007c52.tar.gz samba-a15da3625850d97b3da1b02308c870f820007c52.tar.bz2 samba-a15da3625850d97b3da1b02308c870f820007c52.zip |
lib/replace: replace all *printf function if we replace snprintf (bug #9390)
This fixes segfaults in log level = 10 on Solaris.
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Björn Jacke <bj@sernet.de>
Autobuild-User(master): Björn Jacke <bj@sernet.de>
Autobuild-Date(master): Wed Nov 14 19:41:14 CET 2012 on sn-devel-104
-rw-r--r-- | lib/replace/replace.c | 4 | ||||
-rw-r--r-- | lib/replace/replace.h | 42 | ||||
-rw-r--r-- | lib/replace/snprintf.c | 5 |
3 files changed, 34 insertions, 17 deletions
diff --git a/lib/replace/replace.c b/lib/replace/replace.c index e461471e55..7ee5f4bc1e 100644 --- a/lib/replace/replace.c +++ b/lib/replace/replace.c @@ -741,7 +741,7 @@ void *rep_memmem(const void *haystack, size_t haystacklen, } #endif -#ifndef HAVE_VDPRINTF +#if !defined(HAVE_VDPRINTF) || !defined(HAVE_C99_VSNPRINTF) int rep_vdprintf(int fd, const char *format, va_list ap) { char *s = NULL; @@ -758,7 +758,7 @@ int rep_vdprintf(int fd, const char *format, va_list ap) } #endif -#ifndef HAVE_DPRINTF +#if !defined(HAVE_DPRINTF) || !defined(HAVE_C99_VSNPRINTF) int rep_dprintf(int fd, const char *format, ...) { int ret; diff --git a/lib/replace/replace.h b/lib/replace/replace.h index bbea0fc774..cb412c273d 100644 --- a/lib/replace/replace.h +++ b/lib/replace/replace.h @@ -376,16 +376,6 @@ int rep_dlclose(void *handle); /* prototype is in system/network.h */ #endif -#ifndef HAVE_VDPRINTF -#define vdprintf rep_vdprintf -int rep_vdprintf(int fd, const char *format, va_list ap); -#endif - -#ifndef HAVE_DPRINTF -#define dprintf rep_dprintf -int rep_dprintf(int fd, const char *format, ...); -#endif - #ifndef PRINTF_ATTRIBUTE #if (__GNUC__ >= 3) && (__GNUC_MINOR__ >= 1 ) /** Use gcc attribute to check printf fns. a1 is the 1-based index of @@ -406,7 +396,17 @@ int rep_dprintf(int fd, const char *format, ...); #endif #endif -#ifndef HAVE_VASPRINTF +#if !defined(HAVE_VDPRINTF) || !defined(HAVE_C99_VSNPRINTF) +#define vdprintf rep_vdprintf +int rep_vdprintf(int fd, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0); +#endif + +#if !defined(HAVE_DPRINTF) || !defined(HAVE_C99_VSNPRINTF) +#define dprintf rep_dprintf +int rep_dprintf(int fd, const char *format, ...) PRINTF_ATTRIBUTE(2,3); +#endif + +#if !defined(HAVE_VASPRINTF) || !defined(HAVE_C99_VSNPRINTF) #define vasprintf rep_vasprintf int rep_vasprintf(char **ptr, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0); #endif @@ -421,11 +421,29 @@ int rep_snprintf(char *,size_t ,const char *, ...) PRINTF_ATTRIBUTE(3,4); int rep_vsnprintf(char *,size_t ,const char *, va_list ap) PRINTF_ATTRIBUTE(3,0); #endif -#ifndef HAVE_ASPRINTF +#if !defined(HAVE_ASPRINTF) || !defined(HAVE_C99_VSNPRINTF) #define asprintf rep_asprintf int rep_asprintf(char **,const char *, ...) PRINTF_ATTRIBUTE(2,3); #endif +#if !defined(HAVE_C99_VSNPRINTF) +#ifdef REPLACE_BROKEN_PRINTF +/* + * We do not redefine printf by default + * as it breaks the build if system headers + * use __attribute__((format(printf, 3, 0))) + * instead of __attribute__((format(__printf__, 3, 0))) + */ +#define printf rep_printf +#endif +int rep_printf(const char *, ...) PRINTF_ATTRIBUTE(1,2); +#endif + +#if !defined(HAVE_C99_VSNPRINTF) +#define fprintf rep_fprintf +int rep_fprintf(FILE *stream, const char *, ...) PRINTF_ATTRIBUTE(2,3); +#endif + #ifndef HAVE_VSYSLOG #ifdef HAVE_SYSLOG #define vsyslog rep_vsyslog diff --git a/lib/replace/snprintf.c b/lib/replace/snprintf.c index 877d2a1d62..6b4a711045 100644 --- a/lib/replace/snprintf.c +++ b/lib/replace/snprintf.c @@ -1256,7 +1256,7 @@ static int add_cnk_list_entry(struct pr_chunk_x **list, #endif -#ifndef HAVE_VASPRINTF +#if !defined(HAVE_VASPRINTF) || !defined(HAVE_C99_VSNPRINTF) int rep_vasprintf(char **ptr, const char *format, va_list ap) { int ret; @@ -1278,8 +1278,7 @@ static int add_cnk_list_entry(struct pr_chunk_x **list, } #endif - -#ifndef HAVE_ASPRINTF +#if !defined(HAVE_ASPRINTF) || !defined(HAVE_C99_VSNPRINTF) int rep_asprintf(char **ptr, const char *format, ...) { va_list ap; |