mirror of
				https://gitlab.alpinelinux.org/alpine/aports.git
				synced 2025-10-31 00:12:05 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			79 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
 | |
| 
 |