[Libguestfs] [PATCH miniexpect 2/2] Add debugging capability at runtime.

Eric Blake eblake at redhat.com
Thu Oct 12 14:25:28 UTC 2017


On 10/12/2017 09:12 AM, Pino Toscano wrote:
> On Wednesday, 11 October 2017 17:23:45 CEST Richard W.M. Jones wrote:
>> +static int
>> +mexp_vprintf (mexp_h *h, int password, const char *fs, va_list args)
>>  {
>> -  va_list args;
>>    char *msg;
>>    int len;
>>    size_t n;
>>    ssize_t r;
>>    char *p;
>>  
>> -  va_start (args, fs);
>>    len = vasprintf (&msg, fs, args);
>> -  va_end (args);
> 
> Due to the nature of va_list (whose implementation greatly differs per
> architecture -- from a pointer, to a list of pointers, to structs, etc),
> I think that here you need to copy the va_list using va_copy(), and
> pass the copy to vasprintf.

Not needed here. If you take va_list as a parameter and do nothing
further with it other than to forward on to another function that takes
va_list, you are fine.

If you use va_list* anywhere, or if you want to do partial processing on
args before handing the rest of args to another function, then you are
indeed correct that a va_copy makes life easier.

> 
> I cannot find a better reference, but
> https://stackoverflow.com/questions/3369588/pass-va-list-or-pointer-to-va-list
> has a piece of advice on that.

Here's a recent explanation on the qemu list, where va_list* is
involved, and thus the va_copy is necessary:

https://lists.gnu.org/archive/html/qemu-devel/2017-10/msg00171.html

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20171012/c096d517/attachment.sig>


More information about the Libguestfs mailing list