Software /
code /
prosody
Comparison
util-src/strbitop.c @ 11172:712b2e6a09d9 0.11
Back out 6dde2c9fa272: Doesn't work on Lua 5.1
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 15 Oct 2020 17:12:33 +0200 |
parent | 11171:2c1583bb0e0f |
child | 11175:235537247aa3 |
comparison
equal
deleted
inserted
replaced
11171:2c1583bb0e0f | 11172:712b2e6a09d9 |
---|---|
1 /* | 1 /* |
2 * This project is MIT licensed. Please see the | 2 * This project is MIT licensed. Please see the |
3 * COPYING file in the source package for more information. | 3 * COPYING file in the source package for more information. |
4 * | 4 * |
5 * Copyright (C) 2016-2020 Kim Alvefur | 5 * Copyright (C) 2016 Kim Alvefur |
6 */ | 6 */ |
7 | 7 |
8 #include <lua.h> | 8 #include <lua.h> |
9 #include <lauxlib.h> | 9 #include <lauxlib.h> |
10 | 10 |
23 if(a == 0 || b == 0) { | 23 if(a == 0 || b == 0) { |
24 lua_settop(L, 1); | 24 lua_settop(L, 1); |
25 return 1; | 25 return 1; |
26 } | 26 } |
27 | 27 |
28 char *cbuf = luaL_buffinitsize(L, &buf, a); | |
29 | |
30 for(i = 0; i < a; i++) { | 28 for(i = 0; i < a; i++) { |
31 cbuf[i] = str_a[i] & str_b[i % b]; | 29 luaL_addchar(&buf, str_a[i] & str_b[i % b]); |
32 } | 30 } |
33 | 31 |
34 luaL_addsize(&buf, a); | |
35 luaL_pushresult(&buf); | 32 luaL_pushresult(&buf); |
36 return 1; | 33 return 1; |
37 } | 34 } |
38 | 35 |
39 int strop_or(lua_State *L) { | 36 int strop_or(lua_State *L) { |
45 if(a == 0 || b == 0) { | 42 if(a == 0 || b == 0) { |
46 lua_settop(L, 1); | 43 lua_settop(L, 1); |
47 return 1; | 44 return 1; |
48 } | 45 } |
49 | 46 |
50 char *cbuf = luaL_buffinitsize(L, &buf, a); | |
51 | |
52 for(i = 0; i < a; i++) { | 47 for(i = 0; i < a; i++) { |
53 cbuf[i] = str_a[i] | str_b[i % b]; | 48 luaL_addchar(&buf, str_a[i] | str_b[i % b]); |
54 } | 49 } |
55 | 50 |
56 luaL_addsize(&buf, a); | |
57 luaL_pushresult(&buf); | 51 luaL_pushresult(&buf); |
58 return 1; | 52 return 1; |
59 } | 53 } |
60 | 54 |
61 int strop_xor(lua_State *L) { | 55 int strop_xor(lua_State *L) { |
62 luaL_Buffer buf; | 56 luaL_Buffer buf; |
63 size_t a, b, i; | 57 size_t a, b, i; |
64 const char *str_a = luaL_checklstring(L, 1, &a); | 58 const char *str_a = luaL_checklstring(L, 1, &a); |
65 const char *str_b = luaL_checklstring(L, 2, &b); | 59 const char *str_b = luaL_checklstring(L, 2, &b); |
66 | 60 |
61 luaL_buffinit(L, &buf); | |
62 | |
67 if(a == 0 || b == 0) { | 63 if(a == 0 || b == 0) { |
68 lua_settop(L, 1); | 64 lua_settop(L, 1); |
69 return 1; | 65 return 1; |
70 } | 66 } |
71 | 67 |
72 char *cbuf = luaL_buffinitsize(L, &buf, a); | |
73 | |
74 for(i = 0; i < a; i++) { | 68 for(i = 0; i < a; i++) { |
75 cbuf[i] = str_a[i] ^ str_b[i % b]; | 69 luaL_addchar(&buf, str_a[i] ^ str_b[i % b]); |
76 } | 70 } |
77 | 71 |
78 luaL_addsize(&buf, a); | |
79 luaL_pushresult(&buf); | 72 luaL_pushresult(&buf); |
80 return 1; | 73 return 1; |
81 } | 74 } |
82 | 75 |
83 LUA_API int luaopen_util_strbitop(lua_State *L) { | 76 LUA_API int luaopen_util_strbitop(lua_State *L) { |