/[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.59 by sysadm, Mon Nov 3 08:48:56 2025 UTC Revision 1.62 by sysadm, Tue Nov 4 06:28:14 2025 UTC
# 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 1016  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 1037  int locate_article_in_section(SECTION_LI Line 1039  int locate_article_in_section(SECTION_LI
1039                                                  break;                                                  break;
1040                                          }                                          }
1041                                  }                                  }
1042    
1043                                  p_article = p_article->p_next;                                  p_article = p_article->p_next;
1044                                    if (p_article == p_section->p_page_first_article[page_id])
1045                                    {
1046                                            log_error("Dead loop detected at page=%d, article_count=%d\n", page_id, *p_article_count);
1047                                            break;
1048                                    }
1049                          }                          }
1050    
1051                          // Include ontop articles                          // Include ontop articles
# Line 1055  int locate_article_in_section(SECTION_LI Line 1063  int locate_article_in_section(SECTION_LI
1063          return (ret < 0 ? ret : (p_article == NULL ? 0 : 1));          return (ret < 0 ? ret : (p_article == NULL ? 0 : 1));
1064  }  }
1065    
1066    int last_article_in_section(SECTION_LIST *p_section, const ARTICLE **pp_article)
1067    {
1068            int ret = 0;
1069    
1070            const ARTICLE *p_article;
1071    
1072            if (p_section == NULL || pp_article == NULL)
1073            {
1074                    log_error("NULL pointer error\n");
1075                    return -1;
1076            }
1077    
1078            *pp_article = NULL;
1079    
1080            // acquire lock of section
1081            if ((ret = section_list_rd_lock(p_section)) < 0)
1082            {
1083                    log_error("section_list_rd_lock(sid = %d) error\n", p_section->sid);
1084                    return -2;
1085            }
1086    
1087            for (p_article = p_section->p_article_tail;
1088                     p_article && p_article != p_section->p_article_head && !p_article->visible;
1089                     p_article = p_article->p_prior)
1090                    ;
1091    
1092            if (p_article && p_article->visible)
1093            {
1094                    *pp_article = p_article;
1095                    ret = 1;
1096            }
1097    
1098            // release lock of section
1099            if (section_list_rd_unlock(p_section) < 0)
1100            {
1101                    log_error("section_list_rd_unlock(sid = %d) error\n", p_section->sid);
1102                    ret = -2;
1103            }
1104    
1105            return ret;
1106    }
1107    
1108  int scan_unread_article_in_section(SECTION_LIST *p_section, const ARTICLE *p_article_cur, const ARTICLE **pp_article_unread)  int scan_unread_article_in_section(SECTION_LIST *p_section, const ARTICLE *p_article_cur, const ARTICLE **pp_article_unread)
1109  {  {
1110          ARTICLE *p_article;          ARTICLE *p_article;
# Line 1221  int scan_article_in_section_by_username( Line 1271  int scan_article_in_section_by_username(
1271  }  }
1272    
1273  int scan_article_in_section_by_title(SECTION_LIST *p_section, const ARTICLE *p_article_cur,  int scan_article_in_section_by_title(SECTION_LIST *p_section, const ARTICLE *p_article_cur,
1274                                                                                  int direction, const char *title, const ARTICLE **pp_article)                                                                           int direction, const char *title, const ARTICLE **pp_article)
1275  {  {
1276          ARTICLE *p_article;          ARTICLE *p_article;
1277          int ret = 0;          int ret = 0;


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

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