--- lbbs/src/menu_proc.c 2005/05/07 12:08:28 1.4 +++ lbbs/src/menu_proc.c 2025/05/05 11:11:06 1.10 @@ -1,9 +1,9 @@ /*************************************************************************** - menu_proc.c - description - ------------------- - begin : Fri May 6 2005 - copyright : (C) 2005 by Leaflet - email : leaflet@leafok.com + menu_proc.c - description + ------------------- + begin : Fri May 6 2005 + copyright : (C) 2005 by Leaflet + email : leaflet@leafok.com ***************************************************************************/ /*************************************************************************** @@ -18,99 +18,100 @@ #include "bbs.h" #include "bbs_cmd.h" #include "common.h" +#include "log.h" #include "io.h" +#include "screen.h" #include #include +#include #include #include #include #include -int -exec_mbem(const char *str) +int exec_mbem(const char *str) { - void *hdll; - int (*func) (); - char *c,*s; - char buf[1024]; + void *hdll; + int (*func)(); + char *c, *s; + char buf[FILE_PATH_LEN]; - strcpy(buf, str); - s = strstr(buf, "@mod:"); - if (s) { - c = strstr(s + 5, "#"); - if (c) { - *c = 0; - c++; - } + strncpy(buf, str, sizeof(buf) - 1); + buf[sizeof(buf) - 1] = '\0'; - hdll = dlopen (s + 5, RTLD_LAZY); + s = strstr(buf, "@mod:"); + if (s) + { + c = strstr(s + 5, "#"); + if (c) + { + *c = 0; + c++; + } - if (hdll) { - char *error; + hdll = dlopen(s + 5, RTLD_LAZY); - if ((func = dlsym (hdll, c ? c : "mod_main")) != NULL) - func (); - else if ((error = dlerror ()) != NULL) { - clearscr (); - prints ("%s\r\n", error); - press_any_key (); - } - dlclose (hdll); - } else { - clearscr (); - prints ("加载库文件 [%s] 失败!!\r\n", s + 5); - prints ("失败原因:%s\r\n", dlerror()); - press_any_key (); - } - } + if (hdll) + { + char *error; - return REDRAW; + if ((func = dlsym(hdll, c ? c : "mod_main")) != NULL) + func(); + else if ((error = dlerror()) != NULL) + { + clearscr(); + prints("%s\r\n", error); + press_any_key(); + } + dlclose(hdll); + } + else + { + clearscr(); + prints("加载库文件 [%s] 失败!!\r\n", s + 5); + prints("失败原因:%s\r\n", dlerror()); + press_any_key(); + } + } + + return REDRAW; } -int -exitbbs (const char *s) +int exitbbs(const char *s) { - return EXITBBS; + return EXITBBS; } -int -license (const char *s) +int license(const char *s) { - char temp[256]; - - strcpy (temp, app_home_dir); - strcat (temp, "data/license.txt"); - display_file_ex (temp, 0, 1); + display_file_ex(DATA_LICENSE, 1, 1); - return REDRAW; + return REDRAW; } -int -copyright (const char *s) +int copyright(const char *s) { - char temp[256]; - - strcpy (temp, app_home_dir); - strcat (temp, "data/copyright.txt"); - display_file_ex (temp, 0, 1); + display_file_ex(DATA_COPYRIGHT, 1, 1); - return REDRAW; + return REDRAW; } -int -reloadbbsmenu (const char *s) +int reloadbbsmenu(const char *s) { - if (kill (getppid (), SIG_RELOAD_MENU) < 0) - log_error ("Send SIG_RELOAD_MENU signal failed (%d)\n", errno); + if (kill(getppid(), SIG_RELOAD_MENU) < 0) + { + log_error("Send SIG_RELOAD_MENU signal failed (%d)\n", errno); + } - return REDRAW; + return REDRAW; } -int -shutdownbbs (const char *s) +int shutdownbbs(const char *s) { - if (kill (0, SIG_BBS_EXIT) < 0) - log_error ("Send SIG_BBS_EXIT signal failed (%d)\n", errno); + if (kill(0, SIGTERM) < 0) + { + log_error("Send SIGTERM signal failed (%d)\n", errno); + } - return REDRAW; + return REDRAW; }