diff options
| author | 2023-03-19 20:35:58 -0400 | |
|---|---|---|
| committer | 2023-03-19 20:35:58 -0400 | |
| commit | 3ff98f94b98173f063de8990eac7140d65862a92 (patch) | |
| tree | 1b79a7ba15345a754ccfeb47bfb2d6f5aca19a2c | |
| parent | initial commit (diff) | |
add curl global init/cleanup
also move more stuff to JANET_CFUN
| -rw-r--r-- | jurl.c | 44 | ||||
| -rw-r--r-- | main.c | 12 |
2 files changed, 52 insertions, 4 deletions
@@ -16,7 +16,7 @@ const JanetAbstractType jurl_type = { JANET_ATEND_GC }; -Janet jurl_new(int32_t argc, Janet *argv) { +JANET_CFUN(jurl_new) { janet_fixarity(argc, 0); jurl_handle *jurl = (jurl_handle*)janet_abstract(&jurl_type, sizeof(jurl)); jurl->handle = curl_easy_init(); @@ -27,14 +27,14 @@ Janet jurl_new(int32_t argc, Janet *argv) { return janet_wrap_abstract(jurl); } -Janet jurl_reset(int32_t argc, Janet *argv) { +JANET_CFUN(jurl_reset) { janet_fixarity(argc, 1); jurl_handle *jurl = (jurl_handle*)janet_getabstract(argv, 0, &jurl_type); curl_easy_reset(jurl->handle); return janet_wrap_abstract(jurl); } -Janet jurl_dup(int32_t argc, Janet *argv) { +JANET_CFUN(jurl_dup) { janet_fixarity(argc, 1); jurl_handle *jurl = (jurl_handle*)janet_getabstract(argv, 0, &jurl_type); jurl_handle *newj = (jurl_handle*)janet_abstract(&jurl_type, sizeof(jurl)); @@ -42,13 +42,49 @@ Janet jurl_dup(int32_t argc, Janet *argv) { return janet_wrap_abstract(newj); } +JANET_CFUN(jurl_global_init) { + long flags; + if (argc == 0) { + flags = CURL_GLOBAL_ALL; + goto global_init_ret; + } + for (size_t i = 0; i < argc; i++) { + Janet kw = argv[i]; + if(!janet_checktype(kw, JANET_KEYWORD)) { + janet_panicf( + "jurl_global_init: received a non-keyword argument of type %T: %v", + janet_type(kw), kw); + } + if (janet_keyeq(kw, "all")) { + flags |= CURL_GLOBAL_ALL; + } else if (janet_keyeq(kw, "ssl")) { + flags |= CURL_GLOBAL_SSL; + } else if (janet_keyeq(kw, "win32")) { + flags |= CURL_GLOBAL_WIN32; + } else if (janet_keyeq(kw, "nothing")) { + flags |= CURL_GLOBAL_NOTHING; + } else if (janet_keyeq(kw, "ack-eintr")) { + flags |= CURL_GLOBAL_ACK_EINTR; + } else { + janet_panicf("jurl_global_init: unknown keyword %v", kw); + } + } +global_init_ret: + return janet_wrap_integer(curl_global_init(flags)); +} + +JANET_CFUN(jurl_global_cleanup) { + curl_global_cleanup(); + return janet_wrap_nil(); +} + size_t write_buffer_callback(void *contents, size_t size, size_t nmemb, void* userp) { size_t realsize = size * nmemb; janet_buffer_push_bytes(userp, contents, realsize); return realsize; } -Janet jurl_perform(int32_t argc, Janet *argv) { +JANET_CFUN(jurl_perform) { janet_fixarity(argc, 1); jurl_handle *jurl = (jurl_handle*)janet_getabstract(argv, 0, &jurl_type); @@ -19,6 +19,16 @@ JANET_FN(jurl_dup, "(jurl-native/dup handle)", "Duplicate an existing jurl handle"); +JANET_FN(jurl_global_init, + "(jurl-native/global-init)" + "\n" + "(jurl-native/global-init :ssl)", + "Run curl global init"); + +JANET_FN(jurl_global_cleanup, + "(jurl-native/global-cleanup)", + "Run curl global cleanup"); + JANET_FN(jurl_perform, "(jurl-native/perform handle)", "Perform the request associated with a handle"); @@ -42,6 +52,8 @@ static const JanetRegExt cfuns[] = { JANET_REG("new", jurl_new), JANET_REG("reset", jurl_reset), JANET_REG("dup", jurl_dup), + JANET_REG("global-init", jurl_global_init), + JANET_REG("global-cleanup", jurl_global_cleanup), JANET_REG("perform", jurl_perform), // jurl_getinfo.c |
