From c597521228619cf1faff8502f8d8a1601f999ef0 Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Fri, 15 Apr 2016 16:19:57 +0300 Subject: [PATCH 1/2] Change. Use string value to represent error category. ```Lua err = curl.error(curl.ERROR_EASY, curl.E_OK) -- err:category() == 'CURL-EASY' -- tostring(err) == '[CURL-EASY][OK] No error (0)' ``` --- appveyor.yml | 2 +- doc/lcurl.ldoc | 2 +- src/lcerror.c | 83 +++++++++++++++++++++++++++++++++++++--------- test/test_easy.lua | 49 +++++++++++++++++++++++++++ 4 files changed, 119 insertions(+), 17 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 8a65403..e929d4c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,7 +7,7 @@ shallow_clone: true environment: LUAROCKS_VER: 2.2.1 - CURL_VER: 7.41.0 + CURL_VER: 7.48.0 matrix: - LUA_VER: 5.1.5 diff --git a/doc/lcurl.ldoc b/doc/lcurl.ldoc index 5b4f8b0..8f01b0f 100644 --- a/doc/lcurl.ldoc +++ b/doc/lcurl.ldoc @@ -155,7 +155,7 @@ do --- Get the error category. -- --- @treturn number number of error category (curl.ERROR_XXX constants) +-- @treturn string string of error category (curl.ERROR_XXX constants) -- -- @usage -- if err:category() == curl.ERROR_EASY then diff --git a/src/lcerror.c b/src/lcerror.c index 50050b4..29f7672 100644 --- a/src/lcerror.c +++ b/src/lcerror.c @@ -16,6 +16,11 @@ #define LCURL_ERROR_NAME LCURL_PREFIX" Error" static const char *LCURL_ERROR = LCURL_ERROR_NAME; +#define LCURL_ERROR_EASY_NAME "CURL-EASY" +#define LCURL_ERROR_MULTI_NAME "CURL-MULTI" +#define LCURL_ERROR_SHARE_NAME "CURL-SHARE" +#define LCURL_ERROR_FORM_NAME "CURL-FORM" + typedef struct lcurl_error_tag{ int tp; int no; @@ -89,8 +94,41 @@ static const char* _lcurl_err_msg(int tp, int err){ return ""; } +static const char* _lcurl_err_category_name(int tp){ + assert( + (tp == LCURL_ERROR_EASY ) || + (tp == LCURL_ERROR_MULTI) || + (tp == LCURL_ERROR_SHARE) || + (tp == LCURL_ERROR_FORM ) || + 0 + ); + + switch(tp){ + case LCURL_ERROR_EASY: { + static const char *name = LCURL_ERROR_EASY_NAME; + return name; + } + case LCURL_ERROR_MULTI: { + static const char *name = LCURL_ERROR_MULTI_NAME; + return name; + } + case LCURL_ERROR_SHARE: { + static const char *name = LCURL_ERROR_SHARE_NAME; + return name; + } + case LCURL_ERROR_FORM: { + static const char *name = LCURL_ERROR_FORM_NAME; + return name; + } + } + + assert(0); + return NULL; +} + static void _lcurl_err_pushstring(lua_State *L, int tp, int err){ - lua_pushfstring(L, "[%s] %s (%d)", + lua_pushfstring(L, "[%s][%s] %s (%d)", + _lcurl_err_category_name(tp), _lcurl_err_mnemo(tp, err), _lcurl_err_msg(tp, err), err @@ -158,7 +196,7 @@ static int lcurl_err_equal(lua_State *L){ static int lcurl_err_category(lua_State *L){ lcurl_error_t *err = lcurl_geterror(L); - lua_pushinteger(L, err->tp); + lua_pushstring(L, _lcurl_err_category_name(err->tp)); return 1; } @@ -190,9 +228,30 @@ int lcurl_fail(lua_State *L, int error_type, int code){ //} +static const int ERROR_CATEGORIES[] = { + LCURL_ERROR_EASY, + LCURL_ERROR_MULTI, + LCURL_ERROR_SHARE, + LCURL_ERROR_FORM, +}; + +static const char* ERROR_CATEGORIES_NAME[] = { + LCURL_ERROR_EASY_NAME, + LCURL_ERROR_MULTI_NAME, + LCURL_ERROR_SHARE_NAME, + LCURL_ERROR_FORM_NAME, + NULL +}; + int lcurl_error_new(lua_State *L){ - int tp = luaL_checkint(L, 1); - int no = luaL_checkint(L, 2); + int tp, no = luaL_checkint(L, 2); + if (lua_isnumber(L, 1)){ + tp = luaL_checkint(L, 2); + } + else{ + tp = luaL_checkoption(L, 1, NULL, ERROR_CATEGORIES_NAME); + tp = ERROR_CATEGORIES[tp]; + } //! @todo checks error type value @@ -234,21 +293,15 @@ static const lcurl_const_t lcurl_error_codes[] = { {NULL, 0} }; -static const lcurl_const_t lcurl_error_category[] = { - {"ERROR_CURL", LCURL_ERROR_CURL}, - {"ERROR_EASY", LCURL_ERROR_EASY}, - {"ERROR_MULTI", LCURL_ERROR_MULTI}, - {"ERROR_SHARE", LCURL_ERROR_SHARE}, - {"ERROR_FORM", LCURL_ERROR_FORM}, - - {NULL, 0} -}; - void lcurl_error_initlib(lua_State *L, int nup){ if(!lutil_createmetap(L, LCURL_ERROR, lcurl_err_methods, nup)) lua_pop(L, nup); lua_pop(L, 1); lcurl_util_set_const(L, lcurl_error_codes); - lcurl_util_set_const(L, lcurl_error_category); + + lua_pushstring(L, _lcurl_err_category_name(LCURL_ERROR_EASY ));lua_setfield(L, -2, "ERROR_EASY" ); + lua_pushstring(L, _lcurl_err_category_name(LCURL_ERROR_MULTI ));lua_setfield(L, -2, "ERROR_MULTI"); + lua_pushstring(L, _lcurl_err_category_name(LCURL_ERROR_SHARE ));lua_setfield(L, -2, "ERROR_SHARE"); + lua_pushstring(L, _lcurl_err_category_name(LCURL_ERROR_FORM ));lua_setfield(L, -2, "ERROR_FORM" ); } diff --git a/test/test_easy.lua b/test/test_easy.lua index 56ceeab..4bc7572 100644 --- a/test/test_easy.lua +++ b/test/test_easy.lua @@ -89,6 +89,55 @@ end local ENABLE = true +local _ENV = TEST_CASE'curl error' if ENABLE then + +function test_eq_with_same_cat() + local e1 = curl.error(curl.ERROR_EASY, curl.E_OK) + local e2 = curl.error(curl.ERROR_EASY, curl.E_OK) + assert_equal(e1, e2) + print() + print(e1) +end + +function test_eq_with_different_cat() + local e1 = curl.error(curl.ERROR_EASY, curl.E_OK) + local e2 = curl.error(curl.ERROR_FORM, curl.E_OK) + + assert_equal(e1:no(), e2:no()) + assert_not_equal(e1, e2) +end + +function test_ctor_cat() + local e + + e = curl.error(curl.ERROR_EASY, curl.E_OK) + assert_equal(e:category(), curl.ERROR_EASY) + assert_equal(e:no(), curl.E_OK) + + e = curl.error(curl.ERROR_MULTI, curl.E_OK) + assert_equal(e:category(), curl.ERROR_MULTI) + assert_equal(e:no(), curl.E_OK) + + e = curl.error(curl.ERROR_SHARE, curl.E_OK) + assert_equal(e:category(), curl.ERROR_SHARE) + assert_equal(e:no(), curl.E_OK) + + e = curl.error(curl.ERROR_FORM, curl.E_OK) + assert_equal(e:category(), curl.ERROR_FORM) + assert_equal(e:no(), curl.E_OK) + + assert_error(function() + curl.error(nil, curl.E_OK) + end) + + assert_error(function() + curl.error('UNKNOWN STRING', curl.E_OK) + end) + +end + +end + local _ENV = TEST_CASE'write_callback' if ENABLE then local c, f From b5a69f87a9ccc56026ca85e70a377a5b693688e8 Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Fri, 15 Apr 2016 16:34:16 +0300 Subject: [PATCH 2/2] Remove debug print --- test/test_easy.lua | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/test_easy.lua b/test/test_easy.lua index 4bc7572..9615395 100644 --- a/test/test_easy.lua +++ b/test/test_easy.lua @@ -95,8 +95,6 @@ function test_eq_with_same_cat() local e1 = curl.error(curl.ERROR_EASY, curl.E_OK) local e2 = curl.error(curl.ERROR_EASY, curl.E_OK) assert_equal(e1, e2) - print() - print(e1) end function test_eq_with_different_cat()