static int lcurl_url_get(lua_State *L, CURLUPart what, CURLUcode empty) { lcurl_url_t *p = lcurl_geturl(L); CURLUcode code; char *part = NULL; unsigned int flags = 0; flags = (unsigned int)lutil_optint64(L, 2, 0); code = curl_url_get(p->url, what, &part, flags); if (code != CURLUE_OK) { if (part) { curl_free(part); part = NULL; } if (code != empty) { return lcurl_fail_ex(L, p->err_mode, LCURL_ERROR_URL, code); } } if (part == NULL) { lutil_push_null(L); } else { lua_pushstring(L, part); curl_free(part); } return 1; }
int lcurl_url_create(lua_State *L, int error_mode){ lcurl_url_t *p; p = lutil_newudatap(L, lcurl_url_t, LCURL_URL); p->url = curl_url(); if(!p->url) return lcurl_fail_ex(L, p->err_mode, LCURL_ERROR_URL, CURLUE_OUT_OF_MEMORY); p->err_mode = error_mode; if (lua_gettop(L) > 1) { const char *url = luaL_checkstring(L, 1); unsigned int flags = 0; CURLUcode code; if (lua_gettop(L) > 2) { flags = (unsigned int)lutil_optint64(L, 2, 0); } code = curl_url_set(p->url, CURLUPART_URL, url, flags); if (code != CURLUE_OK) { return lcurl_fail_ex(L, p->err_mode, LCURL_ERROR_URL, code); } } return 1; }
static int lcurl_url_set(lua_State *L, CURLUPart what){ lcurl_url_t *p = lcurl_geturl(L); CURLUcode code; const char *part; unsigned int flags = 0; luaL_argcheck(L, lua_type(L, 2) == LUA_TSTRING || lutil_is_null(L, 2), 2, "string expected"); part = lua_tostring(L, 2); flags = (unsigned int)lutil_optint64(L, 3, 0); code = curl_url_set(p->url, what, part, flags); if (code != CURLUE_OK) { return lcurl_fail_ex(L, p->err_mode, LCURL_ERROR_URL, code); } lua_settop(L, 1); return 1; }
curl_socket_t lcurl_opt_os_socket(lua_State *L, int idx, curl_socket_t def) { if (lua_islightuserdata(L, idx)) return (curl_socket_t)lua_touserdata(L, idx); return (curl_socket_t)lutil_optint64(L, idx, def); }