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

Diff of /lbbs/src/user_list.c

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

Revision 1.1 by sysadm, Tue Oct 21 06:24:51 2025 UTC Revision 1.2 by sysadm, Tue Oct 21 11:11:28 2025 UTC
# Line 24  Line 24 
24  #include <time.h>  #include <time.h>
25  #include <sys/ipc.h>  #include <sys/ipc.h>
26  #include <sys/mman.h>  #include <sys/mman.h>
27    #include <sys/param.h>
28  #include <sys/sem.h>  #include <sys/sem.h>
29  #include <sys/shm.h>  #include <sys/shm.h>
30    
# Line 105  int user_list_load(MYSQL *db, USER_LIST Line 106  int user_list_load(MYSQL *db, USER_LIST
106          p_list->users[i].birthday = (row[9] == NULL ? 0 : atol(row[9]));          p_list->users[i].birthday = (row[9] == NULL ? 0 : atol(row[9]));
107    
108          i++;          i++;
109            if (i >= BBS_max_user_count)
110            {
111                log_error("Too many users, exceed limit %d\n", BBS_max_user_count);
112                break;
113            }
114      }      }
115      mysql_free_result(rs);      mysql_free_result(rs);
116      rs = NULL;      rs = NULL;
# Line 463  int user_list_rw_lock(void) Line 469  int user_list_rw_lock(void)
469      }      }
470    
471      return ret;      return ret;
472    }
473    
474    int query_user_list(int page_id, USER_INFO *p_users, int *p_user_count, int *p_page_count)
475    {
476        int ret = 0;
477    
478        if (p_users == NULL || p_user_count == NULL || p_page_count == NULL)
479        {
480            log_error("NULL pointer error\n");
481            return -1;
482        }
483    
484        // acquire lock of user list
485        if (user_list_rd_lock() < 0)
486        {
487            log_error("user_list_rd_lock() error\n");
488            return -2;
489        }
490    
491        if (p_user_list_pool->p_current->user_count == 0)
492        {
493            // empty list
494            ret = 0;
495            goto cleanup;
496        }
497    
498        *p_page_count = p_user_list_pool->p_current->user_count / BBS_user_limit_per_page +
499                        (p_user_list_pool->p_current->user_count % BBS_user_limit_per_page == 0 ? 0 : 1);
500    
501        if (page_id < 0 || page_id >= *p_page_count)
502        {
503            log_error("Invalid page_id = %d, not in range [0, %d)\n", page_id, *p_page_count);
504            ret = -3;
505            goto cleanup;
506        }
507    
508        *p_user_count = MIN(BBS_user_limit_per_page,
509                            p_user_list_pool->p_current->user_count -
510                                page_id * BBS_user_limit_per_page);
511    
512        memcpy(p_users,
513               p_user_list_pool->p_current->users + page_id * BBS_user_limit_per_page,
514               sizeof(USER_INFO) * (size_t)(*p_user_count));
515    
516    cleanup:
517        // release lock of user list
518        if (user_list_rd_unlock() < 0)
519        {
520            log_error("user_list_rd_unlock() error\n");
521            ret = -1;
522        }
523    
524        return ret;
525  }  }


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

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