I am trying to write a http client to send a HTTPs PUT request and save the
response in memory.  To try this I have combined the anyauthput.c
<https://curl.se/libcurl/c/anyauthput.html>and getinmemory.c
<https://curl.se/libcurl/c/getinmemory.html>examples but when I run it the
user pointer set via the CURLOPT_WRITEDATA is not being passed back in the
callback. Instead a different pointer is passed (and so trying to access it
leads to a segmentation fault).

I have put the code on my google drive if anyone cares to have a look.
<https://drive.google.com/file/d/11YVmqj4qGxSy5Ax_55PYz6POzoYDGpyT/view?usp=sharing>

I have reviewed the code many times and cannot see what it is I'm doing
wrong. I'm starting to suspect a bug in libcurl but would like to eliminate
anything obvious someone could see that I'm overlooking.

I print the value of the pointer set in CURLOPT_WRITEDATA and the value
that is passed when the callback is invoked and I can clearly see it is
different.

in the main initialization:
struct MemoryStruct chunk;
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)(*&chunk*));
*printf("chunk: %p, chunk.memory: %p, chunk.size: %lu\n", &chunk,
chunk.memory, (unsigned long)chunk.size);*

in WriteMemoryCallback:
static size_t WriteMemoryCallback(void *contents, size_t size, size_t
nmemb, *void *userp*) {
  *fprintf(stderr, "contents: %p, size: %lu, nmemb: %lu, userp: %p\n",
contents, size, nmemb, userp);*

The print output shows the following:
chunk: *0x7ffc7f6ea470*, chunk.memory: 0x15b4840, chunk.size: 0
...
contents: 0x15d5dc0, size: 1, nmemb: 15, userp: *0x1593010*

Can anyone help ?  Thanks.
-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette:   https://curl.se/mail/etiquette.html

Reply via email to