aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChloe Kudryavtsev <code@toast.bunkerlabs.net>2023-03-25 21:26:23 -0400
committerChloe Kudryavtsev <code@toast.bunkerlabs.net>2023-03-25 21:26:23 -0400
commit890548308a637fac12194a8aae2ee08f4626b22d (patch)
tree7f7d399742171455c8f224634699475b3a71b882 /src
parentnative: use a macro for size of jurl_opts (diff)
native: allow write callback to handle <size bytes
Diffstat (limited to 'src')
-rw-r--r--src/callbacks.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/callbacks.c b/src/callbacks.c
index 9968c5a..7e92ba5 100644
--- a/src/callbacks.c
+++ b/src/callbacks.c
@@ -9,7 +9,10 @@ static size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdat
janet_buffer_push_bytes(buf, (const uint8_t*)ptr, realsize);
Janet argv[1] = { janet_wrap_buffer(buf), };
- janet_call(fun, 1, argv);
+ Janet out = janet_call(fun, 1, argv);
+ if (janet_checktype(out, JANET_NUMBER)) {
+ return janet_unwrap_integer(out); // TODO: maybe try 64bit?
+ }
return realsize;
}
@@ -142,7 +145,7 @@ static int prereq_callback(void *clientp,
CURLcode jurl_setcallback(jurl_handle *jurl, CURLoption opt, JanetFunction *fun) {
CURLcode res = 0; // we |= it so just check for != CURLE_OK
switch (opt) {
- case CURLOPT_WRITEFUNCTION: // buffer -> void
+ case CURLOPT_WRITEFUNCTION: // buffer -> number | any
res |= curl_easy_setopt(jurl->handle, CURLOPT_WRITEDATA, fun);
res |= curl_easy_setopt(jurl->handle, CURLOPT_WRITEFUNCTION, write_callback);
break;