/[LeafOK_CVS]/lbbs/src/menu.c
ViewVC logotype

Diff of /lbbs/src/menu.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.44 by sysadm, Sat May 17 15:39:51 2025 UTC Revision 1.47 by sysadm, Sun May 18 08:53:21 2025 UTC
# Line 546  int load_menu(MENU_SET *p_menu_set, cons Line 546  int load_menu(MENU_SET *p_menu_set, cons
546                                                          log_error("Error menu screen name in menu config line %d\n", fin_line);                                                          log_error("Error menu screen name in menu config line %d\n", fin_line);
547                                                          return -1;                                                          return -1;
548                                                  }                                                  }
549                                                  if (trie_dict_get(p_menu_set->p_menu_screen_dict, p, (int64_t *)&screen_id) != 1)                                                  strncpy(p_menu->screen_name, p, sizeof(p_menu->screen_name) - 1);
550                                                  {                                                  p_menu->screen_name[sizeof(p_menu->screen_name) - 1] = '\0';
                                                         log_error("Undefined menu screen [%s]\n", p);  
                                                         return -1;  
                                                 }  
                                                 p_menu->screen_id = screen_id;  
551    
552                                                  // Check syntax                                                  // Check syntax
553                                                  q = strtok_r(NULL, MENU_CONF_DELIM_WITH_SPACE, &saveptr);                                                  q = strtok_r(NULL, MENU_CONF_DELIM_WITH_SPACE, &saveptr);
# Line 628  int load_menu(MENU_SET *p_menu_set, cons Line 624  int load_menu(MENU_SET *p_menu_set, cons
624                                                  break;                                                  break;
625                                          }                                          }
626    
627                                            // Clear line
628                                            if (p_menu_set->p_menu_screen_buf_free + strlen(CTRL_SEQ_CLR_LINE) > q)
629                                            {
630                                                    log_error("Menu screen buffer depleted (%p + %d > %p)\n", p_menu_set->p_menu_screen_buf_free, q, strlen(CTRL_SEQ_CLR_LINE));
631                                                    return -3;
632                                            }
633                                            p_menu_set->p_menu_screen_buf_free = stpcpy(p_menu_set->p_menu_screen_buf_free, CTRL_SEQ_CLR_LINE);
634    
635                                          p = buffer;                                          p = buffer;
636                                          while (*p != '\0')                                          while (*p != '\0')
637                                          {                                          {
# Line 663  int load_menu(MENU_SET *p_menu_set, cons Line 667  int load_menu(MENU_SET *p_menu_set, cons
667          }          }
668          fclose(fin);          fclose(fin);
669    
670            for (menu_id = 0; menu_id < p_menu_set->menu_count; menu_id++)
671            {
672                    p_menu = get_menu_by_id(p_menu_set, menu_id);
673    
674                    if (trie_dict_get(p_menu_set->p_menu_screen_dict, p_menu->screen_name, (int64_t *)(&(p_menu->screen_id))) != 1)
675                    {
676                            log_error("Undefined menu screen [%s]\n", p);
677                            return -1;
678                    }
679            }
680    
681          for (menu_item_id = 0; menu_item_id < p_menu_set->menu_item_count; menu_item_id++)          for (menu_item_id = 0; menu_item_id < p_menu_set->menu_item_count; menu_item_id++)
682          {          {
683                  p_menu_item = get_menu_item_by_id(p_menu_set, menu_item_id);                  p_menu_item = get_menu_item_by_id(p_menu_set, menu_item_id);
# Line 1050  int unload_menu(MENU_SET *p_menu_set) Line 1065  int unload_menu(MENU_SET *p_menu_set)
1065          if (p_menu_set->p_menu_name_dict != NULL)          if (p_menu_set->p_menu_name_dict != NULL)
1066          {          {
1067                  trie_dict_destroy(p_menu_set->p_menu_name_dict);                  trie_dict_destroy(p_menu_set->p_menu_name_dict);
1068                    p_menu_set->p_menu_name_dict = NULL;
1069          }          }
1070    
1071          if (p_menu_set->p_menu_screen_dict != NULL)          if (p_menu_set->p_menu_screen_dict != NULL)
1072          {          {
1073                  trie_dict_destroy(p_menu_set->p_menu_screen_dict);                  trie_dict_destroy(p_menu_set->p_menu_screen_dict);
1074                    p_menu_set->p_menu_screen_dict = NULL;
1075          }          }
1076    
1077          unload_menu_shm(p_menu_set);          unload_menu_shm(p_menu_set);
# Line 1071  int unload_menu(MENU_SET *p_menu_set) Line 1088  int unload_menu(MENU_SET *p_menu_set)
1088  int load_menu_shm(MENU_SET *p_menu_set)  int load_menu_shm(MENU_SET *p_menu_set)
1089  {  {
1090          // Mount shared memory          // Mount shared memory
1091          if (p_menu_set->p_reserved != NULL)          if (p_menu_set->p_reserved == NULL)
1092          {          {
1093                  log_error("Menu is already loaded\n");                  p_menu_set->p_reserved = shmat(p_menu_set->shmid, NULL, SHM_RDONLY);
1094                  return -1;                  if (p_menu_set->p_reserved == (void *)-1)
1095                    {
1096                            log_error("shmat() error (%d)\n", errno);
1097                            return -1;
1098                    }
1099          }          }
1100    
         p_menu_set->p_reserved = shmat(p_menu_set->shmid, NULL, SHM_RDONLY);  
         if (p_menu_set->p_reserved == (void *)-1)  
         {  
                 log_error("shmat() error (%d)\n", errno);  
                 return -2;  
         }  
1101          p_menu_set->p_menu_pool = p_menu_set->p_reserved + MENU_SET_RESERVED_LENGTH;          p_menu_set->p_menu_pool = p_menu_set->p_reserved + MENU_SET_RESERVED_LENGTH;
1102          p_menu_set->p_menu_item_pool = p_menu_set->p_menu_pool + sizeof(MENU) * MAX_MENUS;          p_menu_set->p_menu_item_pool = p_menu_set->p_menu_pool + sizeof(MENU) * MAX_MENUS;
1103          p_menu_set->p_menu_screen_pool = p_menu_set->p_menu_item_pool + sizeof(MENU_ITEM) * MAX_MENUITEMS;          p_menu_set->p_menu_screen_pool = p_menu_set->p_menu_item_pool + sizeof(MENU_ITEM) * MAX_MENUITEMS;


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1