This is the mail archive of the
libffi-discuss@sourceware.org
mailing list for the libffi project.
Re: pass by value and also snprintf()
- From: Bruce Korb <bruce dot korb at gmail dot com>
- To: Richard Henderson <rth at redhat dot com>
- Cc: libffi-discuss at sourceware dot org
- Date: Mon, 27 Apr 2015 11:54:16 -0700
- Subject: Re: pass by value and also snprintf()
- Authentication-results: sourceware.org; auth=none
- References: <CAKRnqNK1D9Wp3uedW62uVk-5FCfzGgDd0xOA2W9qMQeizV1TSw at mail dot gmail dot com> <553E6D2E dot 7060403 at redhat dot com> <CAKRnqNJtEj_VvXNrF=QXteJAwAYmKZ3K1PAxtb35hY43Nr0ezw at mail dot gmail dot com> <553E7994 dot 5040303 at redhat dot com>
Hi Richard, THANK YOU!!
> That would be because you're passing buffer and fmt instead of a pointer to
> buffer and fmt. You need to do
>
> char * buffer_p = buffer;
> const char *fmt_p = fmt;
>
> void * values[5] = {
> [0] = &buffer_p,
> [1] = &bufsz,
> [2] = &fmt_p,
> [3] = &sblock,
> [4] = &band };
>
> One of the many peculiarities of the libffi api...
Indeed. Worthy of a BOLD caveat in the docs.
Googling seems to point mostly here:
http://www.atmark-techno.com/~yashi/libffi.html
but it looks like my info doc, so I hope it is up to date. Anyway, it was there
where I also saw that funny comment about altering passed values.
Based on my understanding of C and calling conventions, it seems pretty
impossible for a callee to alter a caller's value when passed by value, even if
one goes through libffi, so what is that comment trying to say? (RE:
ffi_call())
Anyway, again, thank you! Regards, Bruce