linux updates, use the trying_to_kill/perform_kill thing + make set_file_list more consistent with win32 behaviour
parent
5857726201
commit
23d611201e
|
@ -130,4 +130,4 @@ delayed_action_repush(Delay *delay, Delayed_Action *act){
|
||||||
#define delayed_try_kill(delay, ...) delayed_action_(delay, DACT_TRY_KILL, __VA_ARGS__)
|
#define delayed_try_kill(delay, ...) delayed_action_(delay, DACT_TRY_KILL, __VA_ARGS__)
|
||||||
#define delayed_kill(delay, ...) delayed_action_(delay, DACT_KILL, __VA_ARGS__)
|
#define delayed_kill(delay, ...) delayed_action_(delay, DACT_KILL, __VA_ARGS__)
|
||||||
#define delayed_touch_file(delay, ...) delayed_action_(delay, DACT_TOUCH_FILE, __VA_ARGS__)
|
#define delayed_touch_file(delay, ...) delayed_action_(delay, DACT_TOUCH_FILE, __VA_ARGS__)
|
||||||
#define delayed_close(delay, ...) delayed_action_(delay, DACT_CLOSE, __VA_ARGS__)
|
#define delayed_close(delay, ...) delayed_action_(delay, DACT_CLOSE, ##__VA_ARGS__)
|
||||||
|
|
|
@ -326,10 +326,23 @@ Sys_Set_File_List_Sig(system_set_file_list){
|
||||||
File_Info *info_ptr;
|
File_Info *info_ptr;
|
||||||
i32 count, file_count, size, required_size;
|
i32 count, file_count, size, required_size;
|
||||||
|
|
||||||
|
if(directory.size <= 0){
|
||||||
|
if(!directory.str){
|
||||||
|
system_free_memory(file_list->block);
|
||||||
|
file_list->block = 0;
|
||||||
|
file_list->block_size = 0;
|
||||||
|
}
|
||||||
|
file_list->infos = 0;
|
||||||
|
file_list->count = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
char* dir = (char*) alloca(directory.size + 1);
|
char* dir = (char*) alloca(directory.size + 1);
|
||||||
memcpy(dir, directory.str, directory.size);
|
memcpy(dir, directory.str, directory.size);
|
||||||
dir[directory.size] = 0;
|
dir[directory.size] = 0;
|
||||||
|
|
||||||
|
LINUX_FN_DEBUG("%s", dir);
|
||||||
|
|
||||||
d = opendir(dir);
|
d = opendir(dir);
|
||||||
if (d){
|
if (d){
|
||||||
count = 0;
|
count = 0;
|
||||||
|
@ -421,15 +434,15 @@ static_assert(
|
||||||
|
|
||||||
Sys_File_Unique_Hash_Sig(system_file_unique_hash){
|
Sys_File_Unique_Hash_Sig(system_file_unique_hash){
|
||||||
Unique_Hash result = {};
|
Unique_Hash result = {};
|
||||||
struct stat st;
|
struct stat st = {};
|
||||||
|
|
||||||
if(stat(filename.str, &st) == -1){
|
if(stat(filename.str, &st) == 0){
|
||||||
perror("sys_file_unique_hash: stat");
|
|
||||||
} else {
|
|
||||||
memcpy(&result, &st.st_dev, sizeof(st.st_dev));
|
memcpy(&result, &st.st_dev, sizeof(st.st_dev));
|
||||||
memcpy((char*)&result + sizeof(st.st_dev), &st.st_ino, sizeof(st.st_ino));
|
memcpy((char*)&result + sizeof(st.st_dev), &st.st_ino, sizeof(st.st_ino));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LINUX_FN_DEBUG("%s = %ld:%ld", filename.str, (long)st.st_dev, (long)st.st_ino);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -526,7 +539,7 @@ Sys_Yield_Coroutine_Sig(system_yield_coroutine){
|
||||||
}
|
}
|
||||||
|
|
||||||
Sys_CLI_Call_Sig(system_cli_call){
|
Sys_CLI_Call_Sig(system_cli_call){
|
||||||
// fprintf(stderr, "cli call: %s, %s\n", path, script_name);
|
LINUX_FN_DEBUG("%s %s", path, script_name);
|
||||||
|
|
||||||
int pipe_fds[2];
|
int pipe_fds[2];
|
||||||
if(pipe(pipe_fds) == -1){
|
if(pipe(pipe_fds) == -1){
|
||||||
|
@ -815,6 +828,8 @@ FILE_EXISTS_SIG(system_file_exists){
|
||||||
result = stat(buff, &st) == 0 && S_ISREG(st.st_mode);
|
result = stat(buff, &st) == 0 && S_ISREG(st.st_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LINUX_FN_DEBUG("%s: %d", buff, result);
|
||||||
|
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -852,6 +867,8 @@ DIRECTORY_CD_SIG(system_directory_cd){
|
||||||
|
|
||||||
*len = directory.size;
|
*len = directory.size;
|
||||||
|
|
||||||
|
LINUX_FN_DEBUG("%.*s: %d", directory.size, directory.str, result);
|
||||||
|
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1107,10 +1124,14 @@ Sys_To_Binary_Path(system_to_binary_path){
|
||||||
b32 translate_success = 0;
|
b32 translate_success = 0;
|
||||||
i32 max = out_filename->memory_size;
|
i32 max = out_filename->memory_size;
|
||||||
i32 size = readlink("/proc/self/exe", out_filename->str, max);
|
i32 size = readlink("/proc/self/exe", out_filename->str, max);
|
||||||
|
|
||||||
|
LINUX_FN_DEBUG();
|
||||||
|
|
||||||
if (size > 0 && size < max-1){
|
if (size > 0 && size < max-1){
|
||||||
out_filename->size = size;
|
out_filename->size = size;
|
||||||
remove_last_folder(out_filename);
|
remove_last_folder(out_filename);
|
||||||
if (append(out_filename, filename) && terminate_with_null(out_filename)){
|
if (append(out_filename, filename) && terminate_with_null(out_filename)){
|
||||||
|
LINUX_FN_DEBUG("%s", out_filename->str);
|
||||||
translate_success = 1;
|
translate_success = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2140,7 +2161,7 @@ main(int argc, char **argv)
|
||||||
LinuxResizeTarget(WinWidth, WinHeight);
|
LinuxResizeTarget(WinWidth, WinHeight);
|
||||||
b32 keep_running = 1;
|
b32 keep_running = 1;
|
||||||
|
|
||||||
while(keep_running)
|
while(1)
|
||||||
{
|
{
|
||||||
XEvent PrevEvent = {};
|
XEvent PrevEvent = {};
|
||||||
|
|
||||||
|
@ -2271,7 +2292,7 @@ main(int argc, char **argv)
|
||||||
|
|
||||||
case ClientMessage: {
|
case ClientMessage: {
|
||||||
if ((Atom)Event.xclient.data.l[0] == WM_DELETE_WINDOW) {
|
if ((Atom)Event.xclient.data.l[0] == WM_DELETE_WINDOW) {
|
||||||
keep_running = false;
|
keep_running = 0;
|
||||||
}
|
}
|
||||||
else if ((Atom)Event.xclient.data.l[0] == _NET_WM_PING) {
|
else if ((Atom)Event.xclient.data.l[0] == _NET_WM_PING) {
|
||||||
Event.xclient.window = DefaultRootWindow(linuxvars.XDisplay);
|
Event.xclient.window = DefaultRootWindow(linuxvars.XDisplay);
|
||||||
|
@ -2416,6 +2437,9 @@ main(int argc, char **argv)
|
||||||
result.redraw = linuxvars.redraw;
|
result.redraw = linuxvars.redraw;
|
||||||
result.lctrl_lalt_is_altgr = 0;
|
result.lctrl_lalt_is_altgr = 0;
|
||||||
|
|
||||||
|
result.trying_to_kill = !keep_running;
|
||||||
|
result.perform_kill = 0;
|
||||||
|
|
||||||
u64 start_time = system_time();
|
u64 start_time = system_time();
|
||||||
|
|
||||||
linuxvars.app.step(linuxvars.system,
|
linuxvars.app.step(linuxvars.system,
|
||||||
|
@ -2428,6 +2452,10 @@ main(int argc, char **argv)
|
||||||
1, linuxvars.first, linuxvars.redraw,
|
1, linuxvars.first, linuxvars.redraw,
|
||||||
&result);
|
&result);
|
||||||
|
|
||||||
|
if(result.perform_kill){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (linuxvars.redraw || result.redraw){
|
if (linuxvars.redraw || result.redraw){
|
||||||
LinuxRedrawTarget();
|
LinuxRedrawTarget();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue