{
LUA_TRACE_POINT;
struct rspamd_lua_text *t;
- const gchar *s = NULL;
gchar *out;
- gsize inlen, outlen;
- guint str_lim = 0;
+ gsize outlen;
+ long str_lim = 0;
gboolean fold = FALSE;
- if (lua_type(L, 1) == LUA_TSTRING) {
- s = luaL_checklstring(L, 1, &inlen);
- }
- else if (lua_type(L, 1) == LUA_TUSERDATA) {
- t = lua_check_text(L, 1);
-
- if (t != NULL) {
- s = t->start;
- inlen = t->len;
- }
- }
+ t = lua_check_text_or_string(L, 1);
if (lua_gettop(L) > 1) {
- str_lim = luaL_checknumber(L, 2);
-
- fold = !!(str_lim > 0);
+ str_lim = luaL_checkinteger(L, 2);
+ fold = str_lim > 0;
}
- if (s == NULL) {
- lua_pushnil(L);
+ if (t == NULL) {
+ return luaL_error(L, "invalid arguments");
}
else {
if (fold) {
- out = rspamd_encode_base64(s, inlen, str_lim, &outlen);
+ out = rspamd_encode_base64(t->start, t->len, str_lim, &outlen);
}
else {
enum rspamd_newlines_type how = RSPAMD_TASK_NEWLINES_CRLF;
}
}
- out = rspamd_encode_base64_fold(s, inlen, str_lim, &outlen, how);
+ out = rspamd_encode_base64_fold(t->start, t->len, str_lim, &outlen, how);
}
if (out != NULL) {
- t = lua_newuserdata(L, sizeof(*t));
- rspamd_lua_setclass(L, "rspamd{text}", -1);
- t->start = out;
- t->len = outlen;
- /* Need destruction */
- t->flags = RSPAMD_TEXT_FLAG_OWN;
+ lua_new_text(L, out, outlen, TRUE);
}
else {
lua_pushnil(L);