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?
_______________________________________________
pacman-dev mailing list
[email protected]
http://archlinux.org/mailman/listinfo/pacman-dev

Reply via email to