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

Diff of /lbbs/src/section_list_loader.c

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

Revision 1.56 by sysadm, Mon Nov 3 06:43:55 2025 UTC Revision 1.60 by sysadm, Mon Nov 3 15:05:02 2025 UTC
# Line 723  int section_list_loader_launch(void) Line 723  int section_list_loader_launch(void)
723          detach_menu_shm(&top10_menu);          detach_menu_shm(&top10_menu);
724    
725          // Set signal handler          // Set signal handler
726          act.sa_handler = SIG_DFL;          act.sa_handler = SIG_IGN;
727          if (sigaction(SIGHUP, &act, NULL) == -1)          if (sigaction(SIGHUP, &act, NULL) == -1)
728          {          {
729                  log_error("set signal action of SIGHUP error: %d\n", errno);                  log_error("set signal action of SIGHUP error: %d\n", errno);
# Line 892  int query_section_articles(SECTION_LIST Line 892  int query_section_articles(SECTION_LIST
892          }          }
893          else if (page_id < 0 || page_id >= *p_page_count)          else if (page_id < 0 || page_id >= *p_page_count)
894          {          {
895    #ifdef _DEBUG
896                  log_error("Invalid page_id=%d, not in range [0, %d)\n", page_id, *p_page_count);                  log_error("Invalid page_id=%d, not in range [0, %d)\n", page_id, *p_page_count);
897    #endif
898                  ret = -3;                  ret = -3;
899          }          }
900          else          else
# Line 931  int query_section_articles(SECTION_LIST Line 933  int query_section_articles(SECTION_LIST
933                                           : (page_id - p_section->page_count + 1) * BBS_article_limit_per_page - p_section->last_page_visible_article_count);                                           : (page_id - p_section->page_count + 1) * BBS_article_limit_per_page - p_section->last_page_visible_article_count);
934                          while (*p_article_count < BBS_article_limit_per_page && i < p_section->ontop_article_count)                          while (*p_article_count < BBS_article_limit_per_page && i < p_section->ontop_article_count)
935                          {                          {
936                                  p_articles[(*p_article_count)++] = p_section->p_ontop_articles[i++];                                  p_articles[*p_article_count] = p_section->p_ontop_articles[i++];
937                                    (*p_article_count)++;
938                          }                          }
939                  }                  }
940          }          }
# Line 1015  int locate_article_in_section(SECTION_LI Line 1018  int locate_article_in_section(SECTION_LI
1018                  p_article = section_list_find_article_with_offset(p_section, aid, &page_id, &offset, &p_tmp);                  p_article = section_list_find_article_with_offset(p_section, aid, &page_id, &offset, &p_tmp);
1019                  if (p_article != NULL)                  if (p_article != NULL)
1020                  {                  {
1021                          *p_article_count = (page_id == p_section->page_count - 1 ? p_section->last_page_visible_article_count : BBS_article_limit_per_page);                          *p_article_count = (page_id >= p_section->page_count - 1 ? p_section->last_page_visible_article_count : BBS_article_limit_per_page);
1022    
1023                          p_article = p_section->p_page_first_article[page_id];                          p_article = p_section->p_page_first_article[page_id];
1024                          for (i = 0; i < *p_article_count && p_article != NULL;)                          for (i = 0; i < *p_article_count && p_article != NULL;)
# Line 1205  int scan_article_in_section_by_username( Line 1208  int scan_article_in_section_by_username(
1208                          {                          {
1209                                  *pp_article = p_article;                                  *pp_article = p_article;
1210                                  break;                                  break;
1211                            }
1212                    }
1213            }
1214    
1215            // release lock of section
1216            if (section_list_rd_unlock(p_section) < 0)
1217            {
1218                    log_error("section_list_rd_unlock(sid = %d) error\n", p_section->sid);
1219                    return -2;
1220            }
1221    
1222            return (p_article != NULL && p_article != p_article_cur ? 1 : 0);
1223    }
1224    
1225    int scan_article_in_section_by_title(SECTION_LIST *p_section, const ARTICLE *p_article_cur,
1226                                                                                    int direction, const char *title, const ARTICLE **pp_article)
1227    {
1228            ARTICLE *p_article;
1229            int ret = 0;
1230    
1231            if (p_section == NULL || p_article_cur == NULL || title == NULL || pp_article == NULL)
1232            {
1233                    log_error("NULL pointer error\n");
1234                    return -1;
1235            }
1236    
1237            if (p_article_cur->sid != p_section->sid)
1238            {
1239                    log_error("Inconsistent SID\n");
1240                    return -1;
1241            }
1242    
1243            // acquire lock of section
1244            if ((ret = section_list_rd_lock(p_section)) < 0)
1245            {
1246                    log_error("section_list_rd_lock(sid = %d) error\n", p_section->sid);
1247                    return -2;
1248            }
1249    
1250            *pp_article = NULL;
1251    
1252            if (direction >= 0)
1253            {
1254                    for (p_article = p_article_cur->p_next; p_article != NULL && p_article != p_article_cur; p_article = p_article->p_next)
1255                    {
1256                            if (p_article->visible && strcasestr(p_article->title, title) != NULL)
1257                            {
1258                                    *pp_article = p_article;
1259                                    break;
1260                            }
1261                    }
1262            }
1263            else // direction < 0
1264            {
1265                    for (p_article = p_article_cur->p_prior; p_article != NULL && p_article != p_article_cur; p_article = p_article->p_prior)
1266                    {
1267                            if (p_article->visible && strcasestr(p_article->title, title) != NULL)
1268                            {
1269                                    *pp_article = p_article;
1270                                    break;
1271                          }                          }
1272                  }                  }
1273          }          }


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

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