On Sun, Aug 10, 2008 at 11:25 AM, Xavier <[EMAIL PROTECTED]> wrote: > On Sat, Aug 9, 2008 at 5:21 AM, Dan McGee <[EMAIL PROTECTED]> wrote: >> Due to differences in handling va_list between i686 and x86_64, this bug >> can only be seen on x86_64. va_list usage is not allowed but we had been >> getting away with it. See >> http://lists.opensuse.org/opensuse-programming/2008-02/msg00005.html >> for details and explanation. >> >> This fixes FS#11096. >> >> Signed-off-by: Dan McGee <[EMAIL PROTECTED]> >> --- >> lib/libalpm/util.c | 11 +++++++++-- >> 1 files changed, 9 insertions(+), 2 deletions(-) >> >> diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c >> index c38dfb5..2847db7 100644 >> --- a/lib/libalpm/util.c >> +++ b/lib/libalpm/util.c >> @@ -25,6 +25,7 @@ >> >> #include <stdio.h> >> #include <stdlib.h> >> +#include <stdarg.h> >> #include <string.h> >> #include <fcntl.h> >> #include <unistd.h> >> @@ -401,12 +402,18 @@ int _alpm_rmrf(const char *path) >> return(0); >> } >> >> -int _alpm_logaction(unsigned short usesyslog, FILE *f, const char *fmt, >> va_list args) >> +int _alpm_logaction(unsigned short usesyslog, FILE *f, >> + const char *fmt, va_list args) >> { >> int ret = 0; >> >> if(usesyslog) { >> - vsyslog(LOG_WARNING, fmt, args); >> + /* we can't use a va_list more than once, so we need to copy >> it >> + * so we can use the original when calling vfprintf below. */ >> + va_list args_syslog; >> + va_copy(args_syslog, args); >> + vsyslog(LOG_WARNING, fmt, args_syslog); >> + va_end(args_syslog); >> } >> >> if(f) { > > Why don't we need to run va_start and va_end on args, as in the > example on opensuse ML?
Note the difference here. Our function doesn't have the ... in the arg list- we are already passing in a va_list parameter, so the va_start was done elsewhere which gave us the va_list to work on. -Dan _______________________________________________ pacman-dev mailing list [email protected] http://archlinux.org/mailman/listinfo/pacman-dev
