1
0
Fork 0
mirror of https://gitlab.alpinelinux.org/alpine/aports.git synced 2025-07-24 03:35:38 +03:00
aports/testing/lua5.2-stringy/0001-use-memcmp-for-startswith-endswith.patch
2013-06-25 10:55:24 +00:00

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