]> source.dussan.org Git - rspamd.git/commitdiff
Return zero-copy objects for large blobs.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 8 Apr 2015 10:02:39 +0000 (11:02 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 8 Apr 2015 10:02:39 +0000 (11:02 +0100)
src/lua/lua_task.c

index 08470fcade35d517faccf9ea50e2047a1d91b2af..555341ba98ebbecae15557f2ca8cb507407a0a7f 100644 (file)
@@ -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;
 }