e.g.
static size_t curl_to_jansson_to_version(void *buffer, size_t size, size_t nmemb, void *outstream) { json_t *json = outstream; ... } Some coding standards would suggest/require a cast to json_t on outstream to make it explicit (and compatible with c++). In any case, don't worry about introducing the extra variable - the compiler will optimize it away (on most architectures). Glad things worked out. P.S. "Tim" is fine. Timothe Litt ACM Distinguished Engineer -------------------------- This communication may not represent the ACM or my employer's views, if any, on the matters discussed. On 21-Jan-22 07:17, Gavin Henry via curl-library wrote:
On Fri, 21 Jan 2022 at 11:36, Timothe Litt via curl-library <curl-library@lists.haxx.se> wrote:Casting isn't the answer. Read the error carefully. You're returning a size_t (integer) from a function declared to return a function pointer. The pointer is supposed to be to a function that returns a size_t. multiplying 2 size_t variables results in a size_t, not a function pointer. curl_write_callback declares a pointer to the callback function. Your function (as in the example) needs to be the actual function - I assumed that was obvious. Sorry that I wasn't explicit. So your callback wants to be a typedef size_t (curl_write_callback_action)(char *buffer, size_t size, size_t nitems, void *outstream); note the omitted "*" vs. the original. Perhaps curl.h should include typedefs for the callback actions as well as for the pointers...Thanks for time here Timothe (sorry, I shortened to TIm before). So confirm, the only difference in the example vs my usage is the last argument to my callback isn't a pointer to void, but to json_t. Switching that to void removes the error: This is fine, which made me look extra hard at my function: gcc -Wall -Werror -Wextra -Wpedantic -pedantic -Wformat=2 -Wno-unused-parameter -Wshadow -Wwrite-strings -Wstrict-prototypes -Wold-style-definition -Wredundant-decls -Wnested-externs -Wmissing-include-dirs -std=c18 -D_FORTIFY_SOURCE=2 -fpie -fpic -g3 -O2 -fstack-protector-strong -grecord-gcc-switches -Werror=format-security -Werror=implicit-function-declaration -Wmisleading-indentation -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -g -O2 -o gitmemory gitmemory.c -lcurl Mine was: static size_t curl_to_jansson_to_version(void *buffer, size_t size, size_t nmemb, json_t *json) { and is now: static size_t curl_to_jansson_to_version(void *buffer, size_t size, size_t nmemb, void *json) { so the error has gone. Thanks for explaining. Gavin.
OpenPGP_signature
Description: OpenPGP digital signature
-- Unsubscribe: https://lists.haxx.se/listinfo/curl-library Etiquette: https://curl.haxx.se/mail/etiquette.html