Re: varargs mehrfach benutzbar?



Thomas Richter schrieb:
<snip>
va_list args;
<snip>
va_init(args,fmt);
size = vsnprintf(buf,32,fmt,args);
<snip>
vsnprintf(largebuf,size,fmt,args);
/* more code here...*/
va_end(args);
}

<snip>
Funktionieren tut's so mit g++-4.1.2 auf i386, abst"urzen tut's mit dem
gleichen Compiler auf AMD64. Eine weitere Untersuchung ergab, dass das erste vsnprintf() die Argumentenliste "args" ver"andert, so dass das zweite vsnprintf() nur noch M"ull findet. Fix oder worarkound ist relativ leicht:


va_init(args,fmt);
size = vsnprintf(buf,32,fmt,args);
va_end(args); /* inserted...*/
va_start(args,fmt); /* inserted... */
largebuf = malloc(size + 1); /* error checking dropped... */

Auch das funktioniert IMO nicht garantiert, da nirgendwo steht,
dass man va_start zweimal verwenden kann -- allerdings steht
auch nur da, dass va_arg() die va_list veraendert; vielleicht
uebersehe ich auch etwas.
Wenn Du vsnprintf() (dank C99) hast, sollte auch va_copy in
<stdarg.h> zu finden sein, womit es garantiert funktioniert.


Gruss
Michael
--
E-Mail: Mine is an /at/ gmx /dot/ de address.
.



Relevant Pages

  • Re: looking for fix to AMD64 python dl problem....
    ... looking for fix to AMD64 python dl problem.... ... To UNSUBSCRIBE, email to debian-user-REQUEST@xxxxxxxxxxxxxxxx with a subject of "unsubscribe". ...
    (Debian-User)
  • Re: OT:Perl, appending to @INC
    ... Back in December, 2004, Perl-Tk wouldn't run for me on an AMD64 system. ... After Googling and searching, I found a fix. ... Perl, Perl-Tk quit working for me again. ...
    (Fedora)
  • Re: 2.6.14-rc3-rt1
    ... 2.6.14-rc2-rt7 on AMD64 has been working well for me the ... > the biggest change is the merge of the generic ARM-irq patches into the ... > - fix audit.c compilation error ... send the line "unsubscribe linux-kernel" in ...
    (Linux-Kernel)
  • Re: [PATCH] Please test ACPI-CA 20051021 fix
    ... > try this patch and let me know: ... Doesn't fix a problem for me, ... This is on amd64, FWIW. ... FreeBSD committer ...
    (freebsd-current)