mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-07-24 03:35:38 +03:00
64 lines
1.7 KiB
Diff
64 lines
1.7 KiB
Diff
--- ./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;
|
|
}
|