diff --git a/src/Lua-cURL-callback.c b/src/Lua-cURL-callback.c index e82b510..6ced8e4 100644 --- a/src/Lua-cURL-callback.c +++ b/src/Lua-cURL-callback.c @@ -22,6 +22,7 @@ ******************************************************************************/ #include /* memcpy */ +#include /* stdin, stdout */ #include "Lua-cURL.h" #include "Lua-utility.h" @@ -95,6 +96,8 @@ int l_easy_clear_headerfunction(lua_State *L, CURL* curl) { l_easy_private *privatep = luaL_checkudata(L, 1, LUACURL_EASYMETATABLE); if (curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, NULL) != CURLE_OK) luaL_error(L, "%s", privatep->error); + if (curl_easy_setopt(curl, CURLOPT_WRITEHEADER, NULL) != CURLE_OK) + luaL_error(L, "%s", privatep->error); return 0; } @@ -102,6 +105,8 @@ int l_easy_clear_writefunction(lua_State *L, CURL* curl) { l_easy_private *privatep = luaL_checkudata(L, 1, LUACURL_EASYMETATABLE); if (curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL) != CURLE_OK) luaL_error(L, "%s", privatep->error); + if (curl_easy_setopt(curl, CURLOPT_WRITEDATA, stdout) != CURLE_OK) + luaL_error(L, "%s", privatep->error); return 0; } @@ -109,5 +114,7 @@ int l_easy_clear_readfunction(lua_State *L, CURL* curl) { l_easy_private *privatep = luaL_checkudata(L, 1, LUACURL_EASYMETATABLE); if (curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL) != CURLE_OK) luaL_error(L, "%s", privatep->error); + if (curl_easy_setopt(curl, CURLOPT_READDATA, stdin) != CURLE_OK) + luaL_error(L, "%s", privatep->error); return 0; } diff --git a/src/Lua-cURL.c b/src/Lua-cURL.c index bcb61ba..851d4b0 100644 --- a/src/Lua-cURL.c +++ b/src/Lua-cURL.c @@ -128,6 +128,8 @@ int l_easy_perform(lua_State *L) { int headerfunction; /* do readcallback */ int readfunction; + /* curl_easy_perform return code*/ + CURLcode perform_status; /* check optional callback table */ luaL_opt(L, luaL_checktable, 2, lua_newtable(L)); @@ -155,8 +157,7 @@ int l_easy_perform(lua_State *L) { /* callback table is on top on stack */ - if (curl_easy_perform(curl) != CURLE_OK) - luaL_error(L, "%s", privatep->error); + perform_status = curl_easy_perform(curl); /* unset callback functions */ if (headerfunction) @@ -165,6 +166,10 @@ int l_easy_perform(lua_State *L) { l_easy_clear_writefunction(L, privatep->curl); if (readfunction) l_easy_clear_readfunction(L, privatep->curl); + + if (perform_status != CURLE_OK) + return luaL_error(L, "%s", privatep->error); + return 0; }