diff options
| author | 0x221E | 2026-04-23 23:55:09 +0200 |
|---|---|---|
| committer | 0x221E | 2026-04-23 23:55:09 +0200 |
| commit | ab9a7898f4fc97588a394fb0b5140eb47bfecdf5 (patch) | |
| tree | ac6efe271b252c34ecb5da4b2171f6b48da99f68 | |
| parent | 871e8819bdbad30bf64ae775ee825193f9be2706 (diff) | |
net: add write to file callback
Creates a write_opts argument in net_send_request() where you can
specify WRITE_OPT_MEMORY or WRITE_OPT_FILE. Modifies existing calls.
| -rw-r--r-- | include/net.h | 12 | ||||
| -rw-r--r-- | src/main.c | 2 | ||||
| -rw-r--r-- | src/net.c | 27 |
3 files changed, 37 insertions, 4 deletions
diff --git a/include/net.h b/include/net.h index f599122..e6cb32a 100644 --- a/include/net.h +++ b/include/net.h @@ -2,15 +2,25 @@ #define NET_H #include <stddef.h> +#include <stdio.h> + +#define WRITE_OPT_MEMORY 1 +#define WRITE_OPT_FILE 2 + +typedef struct string_view string_view; struct memory { char *buffer; size_t size; }; +struct net_fwrite_userdata { + FILE *file; +}; + int net_init(); void net_shutdown(); -int net_send_request(char *url, struct memory *mem); +int net_send_request(char *url, struct memory *mem, int write_opts); #endif @@ -48,7 +48,7 @@ int cmd_install(int argc, char **argv) int ret = 1; struct memory mem = { 0 }; - net_send_request("https://packages.0xinfinity.dev/list", &mem); + net_send_request("https://packages.0xinfinity.dev/list", &mem, WRITE_OPT_MEMORY); struct um_user_data userdata = { 0 }; struct parser parser; @@ -24,6 +24,21 @@ size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata) return nmemb; } +size_t write_file_cb(char *ptr, size_t size, size_t nmemb, void *userdata) +{ + assert(ptr != NULL); + assert(ptr != NULL); + + struct net_fwrite_userdata *user = (struct net_fwrite_userdata*)userdata; + + if (user->file == NULL) { + fprintf(stderr, "net: Write failed, file stream could not be found!\n"); + return 0; + } + + return fwrite(ptr, nmemb, 1, user->file); +} + int net_init() { CURLcode result = curl_global_init(CURL_GLOBAL_ALL); @@ -37,7 +52,7 @@ void net_shutdown() curl_global_cleanup(); } -int net_send_request(char *url, struct memory *mem) +int net_send_request(char *url, struct memory *mem, int write_opts) { assert(mem != NULL); CURL *curl; @@ -46,7 +61,15 @@ int net_send_request(char *url, struct memory *mem) return -CONINITERR; curl_easy_setopt(curl, CURLOPT_URL, url); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); + + if (write_opts == WRITE_OPT_MEMORY) + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); + else if (write_opts == WRITE_OPT_FILE) + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_file_cb); + else { + fprintf(stderr, "net: a valid write_opts must be specified! current: %d", write_opts); + } + curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)mem); curl_easy_setopt(curl, CURLOPT_CA_CACHE_TIMEOUT, 604800L); |
