Browse Source

[Minor] Lua: Add rspamd_util.strequal_caseless_utf8 routine

tags/3.0
Vsevolod Stakhov 2 years ago
parent
commit
4854ab4df2
1 changed files with 41 additions and 0 deletions
  1. 41
    0
      src/lua/lua_util.c

+ 41
- 0
src/lua/lua_util.c View File

@@ -260,6 +260,18 @@ LUA_FUNCTION_DEF (util, strcasecmp_ascii);
*/
LUA_FUNCTION_DEF (util, strequal_caseless);


/***
* @function util.strequal_caseless(str1, str2)
* Compares two utf8 strings regardless of their case. Return `true` if `str1` is
* equal to `str2`
* @param {string} str1 utf8 encoded string
* @param {string} str2 utf8 encoded string
* @return {bool} result of comparison
*/
LUA_FUNCTION_DEF (util, strequal_caseless_utf8);


/***
* @function util.get_ticks()
* Returns current number of ticks as floating point number
@@ -673,6 +685,7 @@ static const struct luaL_reg utillib_f[] = {
LUA_INTERFACE_DEF (util, lower_utf8),
LUA_INTERFACE_DEF (util, strcasecmp_ascii),
LUA_INTERFACE_DEF (util, strequal_caseless),
LUA_INTERFACE_DEF (util, strequal_caseless_utf8),
LUA_INTERFACE_DEF (util, get_ticks),
LUA_INTERFACE_DEF (util, get_time),
LUA_INTERFACE_DEF (util, time_to_string),
@@ -1641,6 +1654,34 @@ lua_util_strequal_caseless (lua_State *L)
return 1;
}

static gint
lua_util_strequal_caseless_utf8 (lua_State *L)
{
LUA_TRACE_POINT;
struct rspamd_lua_text *t1, *t2;
gint ret = -1;

t1 = lua_check_text_or_string (L, 1);
t2 = lua_check_text_or_string (L, 2);

if (t1 && t2) {

if (t1->len == t2->len) {
ret = rspamd_utf8_strcmp_sizes(t1->start, t1->len, t2->start, t2->len);
}
else {
ret = t1->len - t2->len;
}
}
else {
return luaL_error (L, "invalid arguments");
}

lua_pushboolean (L, (ret == 0) ? true : false);

return 1;
}

static gint
lua_util_get_ticks (lua_State *L)
{

Loading…
Cancel
Save