aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThijs <thijs@thijsschreijer.nl>2024-05-23 08:51:31 +0200
committerThijs <thijs@thijsschreijer.nl>2024-05-23 09:05:07 +0200
commit9f6958c429627190917f742f46a3ae60ed6e7ca0 (patch)
tree9c2e6fb0a4bb952de1d66a851bbfcb34cfddf4c1 /src
parent7e9447c98588730738724176d9acc595be6299e6 (diff)
downloadluasystem-9f6958c429627190917f742f46a3ae60ed6e7ca0.tar.gz
luasystem-9f6958c429627190917f742f46a3ae60ed6e7ca0.tar.bz2
luasystem-9f6958c429627190917f742f46a3ae60ed6e7ca0.zip
Windows fixes, some manual tests
Diffstat (limited to 'src')
-rw-r--r--src/compat.c16
-rw-r--r--src/compat.h1
-rw-r--r--src/term.c12
3 files changed, 25 insertions, 4 deletions
diff --git a/src/compat.c b/src/compat.c
index 6f98854..2d2bec9 100644
--- a/src/compat.c
+++ b/src/compat.c
@@ -14,4 +14,20 @@ void luaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup) {
14 } 14 }
15 lua_pop(L, nup); /* remove upvalues */ 15 lua_pop(L, nup); /* remove upvalues */
16} 16}
17
18void *luaL_testudata(lua_State *L, int ud, const char *tname) {
19 void *p = lua_touserdata(L, ud);
20 if (p != NULL) { /* Check for userdata */
21 if (lua_getmetatable(L, ud)) { /* Does it have a metatable? */
22 lua_getfield(L, LUA_REGISTRYINDEX, tname); /* Get metatable we're looking for */
23 if (lua_rawequal(L, -1, -2)) { /* Compare metatables */
24 lua_pop(L, 2); /* Remove metatables from stack */
25 return p;
26 }
27 lua_pop(L, 2); /* Remove metatables from stack */
28 }
29 }
30 return NULL; /* Return NULL if check fails */
31}
32
17#endif 33#endif
diff --git a/src/compat.h b/src/compat.h
index 7a1fcee..2033aa3 100644
--- a/src/compat.h
+++ b/src/compat.h
@@ -6,6 +6,7 @@
6 6
7#if LUA_VERSION_NUM == 501 7#if LUA_VERSION_NUM == 501
8void luaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup); 8void luaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup);
9void *luaL_testudata(lua_State *L, int ud, const char *tname);
9#endif 10#endif
10 11
11 12
diff --git a/src/term.c b/src/term.c
index c0699f9..99d3b2b 100644
--- a/src/term.c
+++ b/src/term.c
@@ -493,6 +493,9 @@ static int lst_tcgetattr(lua_State *L)
493 lua_setfield(L, -2, "cc"); 493 lua_setfield(L, -2, "cc");
494 494
495#else 495#else
496 lua_settop(L, 1); // remove all but file handle
497 get_console_handle(L, 1); //check args
498
496 lua_newtable(L); 499 lua_newtable(L);
497 lsbf_pushbitflags(L, 0); 500 lsbf_pushbitflags(L, 0);
498 lua_setfield(L, -2, "iflag"); 501 lua_setfield(L, -2, "iflag");
@@ -584,11 +587,12 @@ static int lst_tcsetattr(lua_State *L)
584 587
585#else 588#else
586 // Windows does not have a tcsetattr function, but we check arguments anyway 589 // Windows does not have a tcsetattr function, but we check arguments anyway
587 get_console_handle(L, 1); // to validate args
588 luaL_checkinteger(L, 2); 590 luaL_checkinteger(L, 2);
589 lsbf_checkbitflagsfield(L, 3, "iflag", t.c_iflag); 591 lsbf_checkbitflagsfield(L, 3, "iflag", 0);
590 lsbf_checkbitflagsfield(L, 3, "oflag", t.c_iflag); 592 lsbf_checkbitflagsfield(L, 3, "oflag", 0);
591 lsbf_checkbitflagsfield(L, 3, "lflag", t.c_iflag); 593 lsbf_checkbitflagsfield(L, 3, "lflag", 0);
594 lua_settop(L, 1); // remove all but file handle
595 get_console_handle(L, 1);
592#endif 596#endif
593 597
594 lua_pushboolean(L, 1); 598 lua_pushboolean(L, 1);