diff options
author | Thijs <thijs@thijsschreijer.nl> | 2024-05-23 08:51:31 +0200 |
---|---|---|
committer | Thijs <thijs@thijsschreijer.nl> | 2024-05-23 09:05:07 +0200 |
commit | 9f6958c429627190917f742f46a3ae60ed6e7ca0 (patch) | |
tree | 9c2e6fb0a4bb952de1d66a851bbfcb34cfddf4c1 /src | |
parent | 7e9447c98588730738724176d9acc595be6299e6 (diff) | |
download | luasystem-9f6958c429627190917f742f46a3ae60ed6e7ca0.tar.gz luasystem-9f6958c429627190917f742f46a3ae60ed6e7ca0.tar.bz2 luasystem-9f6958c429627190917f742f46a3ae60ed6e7ca0.zip |
Windows fixes, some manual tests
Diffstat (limited to 'src')
-rw-r--r-- | src/compat.c | 16 | ||||
-rw-r--r-- | src/compat.h | 1 | ||||
-rw-r--r-- | src/term.c | 12 |
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 | |||
18 | void *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 |
8 | void luaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup); | 8 | void luaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup); |
9 | void *luaL_testudata(lua_State *L, int ud, const char *tname); | ||
9 | #endif | 10 | #endif |
10 | 11 | ||
11 | 12 | ||
@@ -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); |