From 0135d232fffb15d577e77241d6c654ff6682ffcd Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Tue, 1 Nov 2011 08:56:32 +0000 Subject: main/lua-stringy: moved from testing --- .../0001-use-memcmp-for-startswith-endswith.patch | 78 ++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 main/lua-stringy/0001-use-memcmp-for-startswith-endswith.patch (limited to 'main/lua-stringy/0001-use-memcmp-for-startswith-endswith.patch') diff --git a/main/lua-stringy/0001-use-memcmp-for-startswith-endswith.patch b/main/lua-stringy/0001-use-memcmp-for-startswith-endswith.patch new file mode 100644 index 000000000..4680a0561 --- /dev/null +++ b/main/lua-stringy/0001-use-memcmp-for-startswith-endswith.patch @@ -0,0 +1,78 @@ +From 86e4e9d16befd02230a699f045afdd68a47f6122 Mon Sep 17 00:00:00 2001 +From: Natanael Copa +Date: Wed, 12 Oct 2011 20:57:55 +0200 +Subject: [PATCH] use memcmp for startswith/endswith + +This fixes an uninitialized variable bug and should be faster since +most libc has optimized memcmp() + +Signed-off-by: Natanael Copa +--- + stringy/stringy.c | 43 +++++++++++++------------------------------ + 1 files changed, 13 insertions(+), 30 deletions(-) + +diff --git a/stringy/stringy.c b/stringy/stringy.c +index 3341b87..aa9a2a2 100644 +--- a/stringy/stringy.c ++++ b/stringy/stringy.c +@@ -65,44 +65,27 @@ static int endswith(lua_State *L) { + + size_t token_len; + const char *token = luaL_checklstring(L, 2, &token_len); ++ int end = 0; + +- int ti = token_len, si = string_len, end = 1; +- if(token_len <= string_len){ +- while(ti > 0) { +- if(string[--si] != token[--ti]){ +- end = 0; +- break; +- +- } +- } +- } +- else { +- end = 0; ++ if(token_len <= string_len) { ++ string += string_len - token_len; ++ end = memcmp(string, token, token_len) == 0; + } + lua_pushboolean(L, end); + return 1; + } + + static int startswith(lua_State *L) { +- const char *string = luaL_checkstring(L, 1); +- int string_len = lua_objlen(L, 1); ++ size_t string_len; ++ const char *string = luaL_checklstring(L, 1, &string_len); ++ ++ size_t token_len; ++ const char *token = luaL_checklstring(L, 2, &token_len); ++ int start = 0; ++ ++ if (token_len <= string_len) ++ start = memcmp(string, token, token_len) == 0; + +- const char *token = luaL_checkstring(L, 2); +- int token_len = lua_objlen(L, 2); +- int i, start = 1; +- // please make this less ugly... +- if(token_len <= string_len){ +- while(i < token_len) { +- if(string[i] != token[i]){ +- start = 0; +- break; +- } +- i++; +- } +- } +- else { +- start = 0; +- } + lua_pushboolean(L, start); + return 1; + } +-- +1.7.7 + -- cgit v1.2.3