diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-04-08 11:02:39 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-04-08 11:02:39 +0100 |
commit | 8d583f322bedd97d1cff1f231fa38eab4bac0696 (patch) | |
tree | 0a32b0ed3a4e29d9813ca8782bbd8074560c51f7 /src/lua/lua_task.c | |
parent | 95ddd51575fdfe1a855a4886e789297a17b3bbe1 (diff) | |
download | rspamd-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.c | 18 |
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; } |