Skip to content

Commit 3663d60

Browse files
att
1 parent 8baa986 commit 3663d60

File tree

2 files changed

+78
-10
lines changed

2 files changed

+78
-10
lines changed

LuaCEmbed.h

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
#ifndef LUACEMBED_H
55

66

7+
#ifdef _WIN32
8+
#include <windows.h>
9+
#else
10+
#include <signal.h>
11+
#include <unistd.h>
12+
#endif
713

814
#include <setjmp.h>
915
#include <signal.h>
@@ -23092,7 +23098,13 @@ void LuaCEmbed_add_callback(LuaCEmbed *self, const char *callback_name, LuaCEmbe
2309223098

2309323099

2309423100

23095-
void private_LuaCembed_handle_timeout(int signum) ;
23101+
#ifdef _WIN32
23102+
VOID CALLBACK TimerHandler(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
23103+
#else
23104+
23105+
void private_LuaCembed_handle_timeout(int signum);
23106+
23107+
#endif
2309623108

2309723109
int privateLuaCEmbed_start_func_evaluation(lua_State *state);
2309823110

@@ -25314,23 +25326,45 @@ void LuaCEmbed_add_callback(LuaCEmbed *self, const char *callback_name, LuaCEmbe
2531425326

2531525327

2531625328

25329+
25330+
#ifdef _WIN32
25331+
VOID CALLBACK TimerHandler(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) {
25332+
25333+
privateLuaCEmbed_raise_error_not_jumping(global_current_lua_embed_object, PRIVATE_LUA_CEMBED_TIMEOUT_ERROR);
25334+
lua_pushstring(global_current_lua_embed_object->state,PRIVVATE_LUA_CEMBED_TIMEOUT_ERROR);
25335+
lua_error(global_current_lua_embed_object->state);
25336+
}
25337+
25338+
#else
25339+
2531725340
void private_LuaCembed_handle_timeout(int signum) {
2531825341

2531925342
privateLuaCEmbed_raise_error_not_jumping(global_current_lua_embed_object, PRIVATE_LUA_CEMBED_TIMEOUT_ERROR);
2532025343
lua_pushstring(global_current_lua_embed_object->state,PRIVVATE_LUA_CEMBED_TIMEOUT_ERROR);
2532125344
lua_error(global_current_lua_embed_object->state);
2532225345
}
2532325346

25347+
#endif
25348+
25349+
25350+
2532425351
int privateLuaCEmbed_start_func_evaluation(lua_State *state){
2532525352

2532625353
int evaluation_type = lua_tointeger(state, lua_upvalueindex(1));
2532725354
char *text_value = (char*)lua_touserdata(state,lua_upvalueindex(2));
2532825355
LuaCEmbed *self = (LuaCEmbed*)lua_touserdata(state,lua_upvalueindex(3));
2532925356
global_current_lua_embed_object = self;
25330-
if(self->timeout){
25331-
signal(SIGALRM, private_LuaCembed_handle_timeout);
25332-
alarm(self->timeout);
25333-
}
25357+
#ifdef _WIN32
25358+
if (self->timeout > 0) {
25359+
SetTimer(NULL, 0, self->timeout * 1000, TimerHandler);
25360+
}
25361+
#else
25362+
if (self->timeout > 0) {
25363+
signal(SIGALRM, private_LuaCembed_handle_timeout);
25364+
alarm(self->timeout);
25365+
}
25366+
#endif
25367+
2533425368
int error = 0;
2533525369
if(evaluation_type == PRIVATE_LUA_EMBED_FILE_EVALUATION_TYPE){
2533625370
error =luaL_dofile(self->state,text_value);

tests/LuaCEmbed.h

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
#ifndef LUACEMBED_H
55

66

7+
#ifdef _WIN32
8+
#include <windows.h>
9+
#else
10+
#include <signal.h>
11+
#include <unistd.h>
12+
#endif
713

814
#include <setjmp.h>
915
#include <signal.h>
@@ -23092,7 +23098,13 @@ void LuaCEmbed_add_callback(LuaCEmbed *self, const char *callback_name, LuaCEmbe
2309223098

2309323099

2309423100

23095-
void private_LuaCembed_handle_timeout(int signum) ;
23101+
#ifdef _WIN32
23102+
VOID CALLBACK TimerHandler(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
23103+
#else
23104+
23105+
void private_LuaCembed_handle_timeout(int signum);
23106+
23107+
#endif
2309623108

2309723109
int privateLuaCEmbed_start_func_evaluation(lua_State *state);
2309823110

@@ -25314,23 +25326,45 @@ void LuaCEmbed_add_callback(LuaCEmbed *self, const char *callback_name, LuaCEmbe
2531425326

2531525327

2531625328

25329+
25330+
#ifdef _WIN32
25331+
VOID CALLBACK TimerHandler(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) {
25332+
25333+
privateLuaCEmbed_raise_error_not_jumping(global_current_lua_embed_object, PRIVATE_LUA_CEMBED_TIMEOUT_ERROR);
25334+
lua_pushstring(global_current_lua_embed_object->state,PRIVVATE_LUA_CEMBED_TIMEOUT_ERROR);
25335+
lua_error(global_current_lua_embed_object->state);
25336+
}
25337+
25338+
#else
25339+
2531725340
void private_LuaCembed_handle_timeout(int signum) {
2531825341

2531925342
privateLuaCEmbed_raise_error_not_jumping(global_current_lua_embed_object, PRIVATE_LUA_CEMBED_TIMEOUT_ERROR);
2532025343
lua_pushstring(global_current_lua_embed_object->state,PRIVVATE_LUA_CEMBED_TIMEOUT_ERROR);
2532125344
lua_error(global_current_lua_embed_object->state);
2532225345
}
2532325346

25347+
#endif
25348+
25349+
25350+
2532425351
int privateLuaCEmbed_start_func_evaluation(lua_State *state){
2532525352

2532625353
int evaluation_type = lua_tointeger(state, lua_upvalueindex(1));
2532725354
char *text_value = (char*)lua_touserdata(state,lua_upvalueindex(2));
2532825355
LuaCEmbed *self = (LuaCEmbed*)lua_touserdata(state,lua_upvalueindex(3));
2532925356
global_current_lua_embed_object = self;
25330-
if(self->timeout){
25331-
signal(SIGALRM, private_LuaCembed_handle_timeout);
25332-
alarm(self->timeout);
25333-
}
25357+
#ifdef _WIN32
25358+
if (self->timeout > 0) {
25359+
SetTimer(NULL, 0, self->timeout * 1000, TimerHandler);
25360+
}
25361+
#else
25362+
if (self->timeout > 0) {
25363+
signal(SIGALRM, private_LuaCembed_handle_timeout);
25364+
alarm(self->timeout);
25365+
}
25366+
#endif
25367+
2533425368
int error = 0;
2533525369
if(evaluation_type == PRIVATE_LUA_EMBED_FILE_EVALUATION_TYPE){
2533625370
error =luaL_dofile(self->state,text_value);

0 commit comments

Comments
 (0)