Skip to content

Commit 6dc7a9d

Browse files
committed
Added: Curl Wrapper, stb style implentation.
1 parent 4b3018d commit 6dc7a9d

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

src/lib/curl.h

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#ifndef ZAKAROUF_CURLWRAP_H
2+
#define ZAKAROUF_CURLWRAP_H
3+
4+
typedef struct z__Curl z__Curl;
5+
z__Curl *z__Curl_new(void);
6+
void z__Curl_delete(z__Curl *zc);
7+
void z__Curl_request(z__Curl *zc, const char *link_nullterm);
8+
9+
#define ZAKAROUF_CURLWRAP_IMPLEMENTATION
10+
#ifdef ZAKAROUF_CURLWRAP_IMPLEMENTATION
11+
#include <stdlib.h>
12+
#include <string.h>
13+
14+
#include <z_/arr.h>
15+
#include <curl/curl.h>
16+
17+
struct z__Curl {
18+
CURL *handle;
19+
z__byteArr data;
20+
CURLcode code;
21+
};
22+
23+
static size_t _WriteMemoryCallback(
24+
void *contents, size_t size
25+
, size_t nmemb, void *userp)
26+
{
27+
size_t realsize = size * nmemb;
28+
z__byteArr *mem = (z__byteArr *)userp;
29+
30+
z__Arr_expand_ifneeded(mem, realsize+1);
31+
32+
memcpy(&(mem->data[mem->lenUsed]), contents, realsize);
33+
mem->lenUsed += realsize;
34+
mem->data[mem->lenUsed] = 0;
35+
printf("hi %zu %zu\n", size, nmemb);
36+
return realsize;
37+
}
38+
39+
z__Curl *z__Curl_new(void)
40+
{
41+
z__Curl *zc = z__MALLOC(sizeof(*zc));
42+
zc->handle = curl_easy_init();
43+
z__Arr_new(&zc->data, 1024);
44+
return zc;
45+
}
46+
47+
void z__Curl_delete(z__Curl *zc)
48+
{
49+
z__Arr_delete(&zc->data);
50+
curl_easy_cleanup(zc->handle);
51+
z__FREE(zc);
52+
}
53+
54+
void z__Curl_request(z__Curl *zc, const char *link_nullterm)
55+
{
56+
CURL *curl_handle = zc->handle;
57+
zc->data.lenUsed = 0;
58+
curl_easy_setopt(curl_handle, CURLOPT_URL, link_nullterm);
59+
curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L);
60+
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, _WriteMemoryCallback);
61+
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&zc->data);
62+
curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
63+
64+
zc->code = curl_easy_perform(curl_handle);
65+
}
66+
67+
#endif
68+
#endif

0 commit comments

Comments
 (0)