--- lbbs/src/menu.c 2025/05/08 15:24:59 1.33 +++ lbbs/src/menu.c 2025/05/11 13:50:15 1.37 @@ -17,7 +17,6 @@ #include "bbs.h" #include "bbs_cmd.h" #include "user_priv.h" -#include "reg_ex.h" #include "bbs_cmd.h" #include "menu.h" #include "log.h" @@ -522,7 +521,7 @@ int load_menu(MENU_SET *p_menu_set, cons { fin_line++; - memcpy(temp, buffer, sizeof(temp)); // Duplicate line for strtok_r + strncpy(temp, buffer, sizeof(temp)); // Duplicate line for strtok_r p = strtok_r(temp, MENU_CONF_DELIM_WITH_SPACE, &saveptr); if (p != NULL && *p == '%') // END of menu screen { @@ -588,6 +587,13 @@ int display_menu(MENU *p_menu) return -1; } + if (p_menu->item_cur_pos > 0 && + checkpriv(&BBS_priv, 0, p_menu->items[p_menu->item_cur_pos]->priv) != 0 && + checklevel(&BBS_priv, p_menu->items[p_menu->item_cur_pos]->level) != 0) + { + menu_selectable = 1; + } + if (p_menu->title.show) { show_top(p_menu->title.text); @@ -711,9 +717,9 @@ int menu_control(MENU_SET *p_menu_set, i { display_menu_cursor(p_menu, 0); p_menu->item_cur_pos = p_menu->item_count - 1; - while (!p_menu->items[p_menu->item_cur_pos]->display || - p_menu->items[p_menu->item_cur_pos]->priv != 0 || - p_menu->items[p_menu->item_cur_pos]->level != 0) + while (p_menu->item_cur_pos >= 0 && (!p_menu->items[p_menu->item_cur_pos]->display || + p_menu->items[p_menu->item_cur_pos]->priv != 0 || + p_menu->items[p_menu->item_cur_pos]->level != 0)) { p_menu->item_cur_pos--; }