aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorame <[email protected]>2024-02-01 16:03:43 -0600
committerame <[email protected]>2024-02-01 16:03:43 -0600
commit18a0280167c93985c15eed838a0319448530bee0 (patch)
treefac30011871792c44bcf55d12f37affc15f210e1 /src
parentf93adc667dda0ee87770de78b7e60f4b989c2642 (diff)
fix header parsing
Diffstat (limited to 'src')
-rw-r--r--src/lua.c172
-rw-r--r--src/net.c4
2 files changed, 88 insertions, 88 deletions
diff --git a/src/lua.c b/src/lua.c
index 13cbd9b..a56745b 100644
--- a/src/lua.c
+++ b/src/lua.c
@@ -1,87 +1,87 @@
-#include "lua.h"
-#include <stdio.h>
-#include "io.h"
-#include <stdlib.h>
-#include <string.h>
-#include "i_str.h"
-#include "parray.h"
-
-static int ii = 0;
-void i_dcopy(lua_State* src, lua_State* dest, void* _seen){
- parray_t* seen = (parray_t*)_seen;
- if(seen == NULL) seen = parray_init();
- size_t len;
- int at, at2;
- int *sp = malloc(1);
- char* s;
- void* whar;
- int old_top = lua_gettop(src);
- //printf("%i\n",ii++);
- switch(lua_type(src, -1)){
- case LUA_TNUMBER:
- lua_pushnumber(dest, luaL_checknumber(src, -1));
- break;
- case LUA_TSTRING:
- s = (char*)luaL_checklstring(src, -1, &len);
- lua_pushlstring(dest, s, len);
- break;
- case LUA_TTABLE:
- lua_newtable(dest);
- at = lua_gettop(dest);
- at2 = lua_gettop(src);
-
- *sp = at2;
- whar = parray_get(seen, (void*)lua_topointer(src, at2));
- if( whar != NULL){
- //printf("%s\n",lua_tostring(src, at2));
- //printf("WHAR\n");
-
- lua_pushvalue(dest, *(int*)whar);
- return;
- } else parray_set(seen, (void*)lua_topointer(src, at2), sp);
-
- lua_pushnil(src);
- for(;lua_next(src, at2) != 0;){
- lua_pushvalue(src, -2);
-
- i_dcopy(src, dest, seen);
-
- lua_pushvalue(src, -2);
- i_dcopy(src, dest, seen);
-
- lua_settable(dest, at);
- lua_pop(src, 3);
- }
- lua_settop(dest, at);
- break;
- case LUA_TFUNCTION:
- //lua_pushnil(dest);
- //break;
- if(lua_iscfunction(src, old_top)){
- //kinda silly
- lua_pushcfunction(dest, lua_tocfunction(src, -1));
- break;
- }
-
- lua_getglobal(src, "string");
- lua_pushstring(src, "dump");
- lua_gettable(src, -2);
- lua_pushvalue(src, old_top);
- lua_call(src, 1, 1);
-
- s = (char*)luaL_checklstring(src, -1, &len);
- lua_pushlstring(dest, s, len);
- //for(int i = 0; i != len; i++) printf("%c",s[i]);
- printf("%i\n",luaL_loadbuffer(dest, s, len, "test"));
- //lua_pushvalue(dest, -1);
- break;
- case LUA_TUSERDATA:
- lua_pushlightuserdata(dest, lua_touserdata(src, -1));
- break;
- default:
- printf("%i\n",lua_type(src, -1));
- lua_pushnil(dest);
- break;
- }
- //lua_settop(src, old_top);
+#include "lua.h"
+#include <stdio.h>
+#include "io.h"
+#include <stdlib.h>
+#include <string.h>
+#include "i_str.h"
+#include "parray.h"
+
+static int ii = 0;
+void i_dcopy(lua_State* src, lua_State* dest, void* _seen){
+ parray_t* seen = (parray_t*)_seen;
+ if(seen == NULL) seen = parray_init();
+ size_t len;
+ int at, at2;
+ int *sp = malloc(1);
+ char* s;
+ void* whar;
+ int old_top = lua_gettop(src);
+ //printf("%i\n",ii++);
+ switch(lua_type(src, -1)){
+ case LUA_TNUMBER:
+ lua_pushnumber(dest, luaL_checknumber(src, -1));
+ break;
+ case LUA_TSTRING:
+ s = (char*)luaL_checklstring(src, -1, &len);
+ lua_pushlstring(dest, s, len);
+ break;
+ case LUA_TTABLE:
+ lua_newtable(dest);
+ at = lua_gettop(dest);
+ at2 = lua_gettop(src);
+
+ *sp = at2;
+ whar = parray_get(seen, (void*)lua_topointer(src, at2));
+ if( whar != NULL){
+ //printf("%s\n",lua_tostring(src, at2));
+ //printf("WHAR\n");
+
+ lua_pushvalue(dest, *(int*)whar);
+ return;
+ } else parray_set(seen, (void*)lua_topointer(src, at2), sp);
+
+ lua_pushnil(src);
+ for(;lua_next(src, at2) != 0;){
+ lua_pushvalue(src, -2);
+
+ i_dcopy(src, dest, seen);
+
+ lua_pushvalue(src, -2);
+ i_dcopy(src, dest, seen);
+
+ lua_settable(dest, at);
+ lua_pop(src, 3);
+ }
+ lua_settop(dest, at);
+ break;
+ case LUA_TFUNCTION:
+ //lua_pushnil(dest);
+ //break;
+ if(lua_iscfunction(src, old_top)){
+ //kinda silly
+ lua_pushcfunction(dest, lua_tocfunction(src, -1));
+ break;
+ }
+
+ lua_getglobal(src, "string");
+ lua_pushstring(src, "dump");
+ lua_gettable(src, -2);
+ lua_pushvalue(src, old_top);
+ lua_call(src, 1, 1);
+
+ s = (char*)luaL_checklstring(src, -1, &len);
+ lua_pushlstring(dest, s, len);
+ //for(int i = 0; i != len; i++) printf("%c",s[i]);
+ printf("%i\n",luaL_loadbuffer(dest, s, len, "test"));
+ //lua_pushvalue(dest, -1);
+ break;
+ case LUA_TUSERDATA:
+ lua_pushlightuserdata(dest, lua_touserdata(src, -1));
+ break;
+ default:
+ printf("%i\n",lua_type(src, -1));
+ lua_pushnil(dest);
+ break;
+ }
+ //lua_settop(src, old_top);
} \ No newline at end of file
diff --git a/src/net.c b/src/net.c
index c831803..8dcde19 100644
--- a/src/net.c
+++ b/src/net.c
@@ -243,7 +243,7 @@ int l_send(lua_State* L){
if(strcmp(key, "Code") != 0){
str_push(header_vs, key);
str_push(header_vs, ": ");
- str_push(header_vs, (char*)luaL_checklstring(L, -2, NULL));
+ str_push(header_vs, (char*)luaL_checklstring(L, -1, NULL));
str_push(header_vs, "\r\n");
}
lua_pop(L, 1);
@@ -467,7 +467,7 @@ int l_GET(lua_State* L){
if(paths == NULL)
paths = parray_init();
-
+
//please free this
void* v_old_paths = parray_get(paths, portc);
struct sarray_t* old_paths;