mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-07-24 03:35:38 +03:00
78 lines
2.1 KiB
Diff
78 lines
2.1 KiB
Diff
From 86e4e9d16befd02230a699f045afdd68a47f6122 Mon Sep 17 00:00:00 2001
|
|
From: Natanael Copa <ncopa@alpinelinux.org>
|
|
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 <ncopa@alpinelinux.org>
|
|
---
|
|
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
|
|
|