--- lbbs/src/common.c 2025/05/06 05:31:26 1.15 +++ lbbs/src/common.c 2025/05/16 14:09:31 1.21 @@ -20,11 +20,29 @@ #include #include #include -#include // Version information char app_version[256] = "LBBS-devel version 1.0"; +// File loader +const char *data_files_load_startup[] = { + DATA_WELCOME, + DATA_REGISTER, + DATA_GOODBYE, + DATA_LICENSE, + DATA_COPYRIGHT, + DATA_LOGIN_ERROR, + DATA_ACTIVE_BOARD, + DATA_READ_HELP, + VAR_BBS_TOP +}; +int data_files_load_startup_count = 9; // Count of data_files_load_startup[] + +const char *data_files_load_timeval[] = { + VAR_BBS_TOP +}; +int data_files_load_timeval_count = 1; // Count of data_files_load_timeval[] + // Global declaration for sockets int socket_server; int socket_client; @@ -34,8 +52,11 @@ int port_server; int port_client; // Global declaration for system -int SYS_exit; -int SYS_child_process_count; +volatile int SYS_server_exit = 0; +volatile int SYS_child_process_count = 0; +volatile int SYS_child_exit = 0; +volatile int SYS_menu_reload = 0; +volatile int SYS_data_file_reload = 0; // Common function const char *str_space(char *string, int length) @@ -90,28 +111,56 @@ const char *get_time_str(char *s, size_t return s; } -void reload_bbs_menu(int i) +void sig_hup_handler(int i) { - if (reload_menu(&bbs_menu) < 0) - log_error("Reload menu failed\n"); - else - log_std("Reload menu successfully\n"); + SYS_menu_reload = 1; + SYS_data_file_reload = 1; } -void system_exit(int i) +void sig_term_handler(int i) { - SYS_exit = 1; + SYS_server_exit = 1; } -void child_exit(int i) +void sig_chld_handler(int i) { - int pid; + SYS_child_exit = 1; +} - pid = wait(0); +const char *ip_mask(char *s, int level, char mask) +{ + char *p = s; - if (pid > 0) + if (level <= 0) { - SYS_child_process_count--; - log_std("Child process (%d) exited\n", pid); + return s; } + if (level > 4) + { + level = 4; + } + + for (int i = 0; i < 4 - level; i++) + { + p = strchr(p, '.'); + if (p == NULL) + { + return s; + } + p++; + } + + for (int i = 0; i < level; i++) + { + *p = mask; + p++; + if (i < level - 1) + { + *p = '.'; + p++; + } + } + *p = '\0'; + + return s; }