--- ./stringy.c.orig +++ ./stringy.c @@ -8,49 +8,27 @@ static int endswith(lua_State *L) { - const char *string = luaL_checkstring(L, 1); - int string_len = lua_objlen(L, 1); + size_t string_len, token_len; + const char *string = luaL_checklstring(L, 1, &string_len); + const char *token = luaL_checklstring(L, 2, &token_len); + int end = 0; - const char *token = luaL_checkstring(L, 2); - int token_len = lua_objlen(L, 2); - - 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; - - } - } + string += string_len - token_len; + end = memcmp(string, token, token_len) == 0; } - else { - end = 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, token_len; + const char *string = luaL_checklstring(L, 1, &string_len); + const char *token = luaL_checklstring(L, 2, &token_len); + int start = 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; - } + if(token_len <= string_len) + start = memcmp(string, token, token_len) == 0; lua_pushboolean(L, start); return 1; }