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: Richard Henderson <rth at redhat dot com>
- To: Bruce Korb <bruce dot korb at gmail dot com>
- Cc: libffi-discuss at sourceware dot org
- Date: Mon, 27 Apr 2015 11:01:56 -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>
On 04/27/2015 10:37 AM, Bruce Korb wrote:
> int
> main(int argc, char ** argv)
> {
> char buffer[0x1000];
> size_t bufsz = sizeof(buffer);
> char const fmt[] = "Allocated sblock_id=%d for band_id=%d\n";
> int32_t sblock = 1;
> int32_t band = 1;
> void * fn = sprintf;
...
> void * values[5] = {
> [0] = buffer,
> [1] = &bufsz,
> [2] = UCONST(fmt),
> [3] = &sblock,
> [4] = &band };
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...
r~