From b06dee43696b5057ee8e1b9700655ad9e7d89669 Mon Sep 17 00:00:00 2001 From: Mark Adler Date: Fri, 22 Mar 2013 18:32:37 -0700 Subject: [PATCH] Add gzvprintf() as an undocumented function in zlib. The function is only available if stdarg.h is available. --- gzwrite.c | 19 ++++++++++++------- zconf.h | 6 ++++++ zconf.h.cmakein | 6 ++++++ zconf.h.in | 6 ++++++ zlib.h | 6 ++++++ 5 files changed, 36 insertions(+), 7 deletions(-) diff --git a/gzwrite.c b/gzwrite.c index 1b06cdd..039225b 100644 --- a/gzwrite.c +++ b/gzwrite.c @@ -307,12 +307,11 @@ int ZEXPORT gzputs(file, str) #include /* -- see zlib.h -- */ -int ZEXPORTVA gzprintf (gzFile file, const char *format, ...) +int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) { int size, len; gz_statep state; z_streamp strm; - va_list va; /* get internal structure */ if (file == NULL) @@ -342,25 +341,20 @@ int ZEXPORTVA gzprintf (gzFile file, const char *format, ...) /* do the printf() into the input buffer, put length in len */ size = (int)(state->size); state->in[size - 1] = 0; - va_start(va, format); #ifdef NO_vsnprintf # ifdef HAS_vsprintf_void (void)vsprintf((char *)(state->in), format, va); - va_end(va); for (len = 0; len < size; len++) if (state->in[len] == 0) break; # else len = vsprintf((char *)(state->in), format, va); - va_end(va); # endif #else # ifdef HAS_vsnprintf_void (void)vsnprintf((char *)(state->in), size, format, va); - va_end(va); len = strlen((char *)(state->in)); # else len = vsnprintf((char *)(state->in), size, format, va); - va_end(va); # endif #endif @@ -375,6 +369,17 @@ int ZEXPORTVA gzprintf (gzFile file, const char *format, ...) return len; } +int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) +{ + va_list va; + int ret; + + va_start(va, format); + ret = gzvprintf(file, format, va); + va_end(va); + return ret; +} + #else /* !STDC && !Z_HAVE_STDARG_H */ /* -- see zlib.h -- */ diff --git a/zconf.h b/zconf.h index 76aba96..95c9ef6 100644 --- a/zconf.h +++ b/zconf.h @@ -427,6 +427,12 @@ typedef uLong FAR uLongf; # endif #endif +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + #ifdef _WIN32 # ifndef Z_SOLO # include /* for wchar_t */ diff --git a/zconf.h.cmakein b/zconf.h.cmakein index 8f1956c..028be15 100644 --- a/zconf.h.cmakein +++ b/zconf.h.cmakein @@ -429,6 +429,12 @@ typedef uLong FAR uLongf; # endif #endif +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + #ifdef _WIN32 # ifndef Z_SOLO # include /* for wchar_t */ diff --git a/zconf.h.in b/zconf.h.in index 76aba96..95c9ef6 100644 --- a/zconf.h.in +++ b/zconf.h.in @@ -427,6 +427,12 @@ typedef uLong FAR uLongf; # endif #endif +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + #ifdef _WIN32 # ifndef Z_SOLO # include /* for wchar_t */ diff --git a/zlib.h b/zlib.h index ee38237..e3f11eb 100644 --- a/zlib.h +++ b/zlib.h @@ -1753,6 +1753,12 @@ ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path, const char *mode)); #endif +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +ZEXTERN int ZEXPORTVA gzvprintf Z_ARG((gzFile file, const char *format, + va_list va)); +# endif +#endif #ifdef __cplusplus } -- GitLab