From e958a474b0fe7baaf44356cf0e9e74dc4c35d092 Mon Sep 17 00:00:00 2001 From: hniksic Date: Mon, 3 Nov 2003 12:08:46 -0800 Subject: [PATCH] [svn] Renamed logvprintf to log_vprintf_internal. --- src/ChangeLog | 6 ++++++ src/log.c | 23 ++++++++++++++--------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 95a66123..ece87987 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2003-11-03 Hrvoje Niksic + + * log.c (logvprintf): Documented better. Renamed to + log_vprintf_internal to avoid confusion with the public API + functions logprintf and logputs. + 2003-11-03 Hrvoje Niksic * wget.h (N_): Don't parenthesize argument. diff --git a/src/log.c b/src/log.c index 4befb998..48cf2c3e 100644 --- a/src/log.c +++ b/src/log.c @@ -350,15 +350,20 @@ struct logvprintf_state { /* Print a message to the log. A copy of message will be saved to saved_log, for later reusal by log_dump_context(). - It is not possible to code this function in a "natural" way, using - a loop, because of the braindeadness of the varargs API. - Specifically, each call to vsnprintf() must be preceded by va_start - and followed by va_end. And this is possible only in the function - that contains the `...' declaration. The alternative would be to - use va_copy, but that's not portable. */ + Normally we'd want this function to loop around vsnprintf until + sufficient room is allocated, as the Linux man page recommends. + However each call to vsnprintf() must be preceded by va_start and + followed by va_end. Since calling va_start/va_end is possible only + in the function that contains the `...' declaration, we cannot call + vsnprintf more than once. Therefore this function saves its state + to logvprintf_state and signals the parent to call it again. + + (An alternative approach would be to use va_copy, but that's not + portable.) */ static int -logvprintf (struct logvprintf_state *state, const char *fmt, va_list args) +log_vprintf_internal (struct logvprintf_state *state, const char *fmt, + va_list args) { char smallmsg[128]; char *write_ptr = smallmsg; @@ -504,7 +509,7 @@ logprintf (enum log_options o, const char *fmt, ...) do { VA_START (args, fmt); - done = logvprintf (&lpstate, fmt, args); + done = log_vprintf_internal (&lpstate, fmt, args); va_end (args); } while (!done); @@ -530,7 +535,7 @@ debug_logprintf (const char *fmt, ...) do { VA_START (args, fmt); - done = logvprintf (&lpstate, fmt, args); + done = log_vprintf_internal (&lpstate, fmt, args); va_end (args); } while (!done);