aboutsummaryrefslogtreecommitdiffstats
path: root/src/lua/lua_task.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-04-08 11:02:39 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-04-08 11:02:39 +0100
commit8d583f322bedd97d1cff1f231fa38eab4bac0696 (patch)
tree0a32b0ed3a4e29d9813ca8782bbd8074560c51f7 /src/lua/lua_task.c
parent95ddd51575fdfe1a855a4886e789297a17b3bbe1 (diff)
downloadrspamd-8d583f322bedd97d1cff1f231fa38eab4bac0696.tar.gz
rspamd-8d583f322bedd97d1cff1f231fa38eab4bac0696.zip
Return zero-copy objects for large blobs.
Diffstat (limited to 'src/lua/lua_task.c')
-rw-r--r--src/lua/lua_task.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c
index 08470fcad..555341ba9 100644
--- a/src/lua/lua_task.c
+++ b/src/lua/lua_task.c
@@ -1215,9 +1215,13 @@ static gint
lua_task_get_raw_headers (lua_State *L)
{
struct rspamd_task *task = lua_check_task (L, 1);
+ struct rspamd_lua_text *t;
if (task) {
- lua_pushstring (L, task->raw_headers_str);
+ t = lua_newuserdata (L, sizeof (*t));
+ rspamd_lua_setclass (L, "rspamd{text}", -1);
+ t->start = task->raw_headers_str;
+ t->len = strlen (t->start);
}
else {
lua_pushnil (L);
@@ -2103,13 +2107,17 @@ static gint
lua_textpart_get_content (lua_State * L)
{
struct mime_text_part *part = lua_check_textpart (L);
+ struct rspamd_lua_text *t;
if (part == NULL || part->is_empty) {
lua_pushnil (L);
return 1;
}
- lua_pushlstring (L, (const gchar *)part->content->data, part->content->len);
+ t = lua_newuserdata (L, sizeof (*t));
+ rspamd_lua_setclass (L, "rspamd{text}", -1);
+ t->start = part->content->data;
+ t->len = part->content->len;
return 1;
}
@@ -2291,13 +2299,17 @@ static gint
lua_mimepart_get_content (lua_State * L)
{
struct mime_part *part = lua_check_mimepart (L);
+ struct rspamd_lua_text *t;
if (part == NULL) {
lua_pushnil (L);
return 1;
}
- lua_pushlstring (L, (const gchar *)part->content->data, part->content->len);
+ t = lua_newuserdata (L, sizeof (*t));
+ rspamd_lua_setclass (L, "rspamd{text}", -1);
+ t->start = part->content->data;
+ t->len = part->content->len;
return 1;
}