/[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.14 by sysadm, Wed Oct 22 16:12:50 2025 UTC Revision 1.15 by sysadm, Thu Oct 23 00:48:34 2025 UTC
# Line 119  static int user_info_index_uid_comp(cons Line 119  static int user_info_index_uid_comp(cons
119    
120  int user_list_load(MYSQL *db, USER_LIST *p_list)  int user_list_load(MYSQL *db, USER_LIST *p_list)
121  {  {
         USER_INFO_INDEX_UID index_uid[BBS_max_user_count];  
122          MYSQL_RES *rs = NULL;          MYSQL_RES *rs = NULL;
123          MYSQL_ROW row;          MYSQL_ROW row;
124          char sql[SQL_BUFFER_LEN];          char sql[SQL_BUFFER_LEN];
125          int ret = 0;          int ret = 0;
126          int i = 0;          int i;
127          int32_t last_uid = -1;          int j;
128          size_t intro_buf_offset = 0L;          int32_t last_uid;
129            size_t intro_buf_offset;
130          size_t intro_len;          size_t intro_len;
131    
132          if (db == NULL || p_list == NULL)          if (db == NULL || p_list == NULL)
# Line 139  int user_list_load(MYSQL *db, USER_LIST Line 139  int user_list_load(MYSQL *db, USER_LIST
139          {          {
140                  last_uid = p_list->users[p_list->user_count - 1].uid;                  last_uid = p_list->users[p_list->user_count - 1].uid;
141          }          }
142            else
143            {
144                    last_uid = -1;
145            }
146    
147          snprintf(sql, sizeof(sql),          snprintf(sql, sizeof(sql),
148                           "SELECT user_list.UID AS UID, username, nickname, gender, gender_pub, life, exp, visit_count, "                           "SELECT user_list.UID AS UID, username, nickname, gender, gender_pub, life, exp, visit_count, "
# Line 192  int user_list_load(MYSQL *db, USER_LIST Line 196  int user_list_load(MYSQL *db, USER_LIST
196                  p_list->users[i].intro = p_list->user_intro_buf + intro_buf_offset;                  p_list->users[i].intro = p_list->user_intro_buf + intro_buf_offset;
197                  intro_buf_offset += (intro_len + 1);                  intro_buf_offset += (intro_len + 1);
198    
                 // index  
                 index_uid[i].uid = p_list->users[i].uid;  
                 index_uid[i].id = i;  
   
199                  i++;                  i++;
200                  if (i >= BBS_max_user_count)                  if (i >= BBS_max_user_count)
201                  {                  {
# Line 206  int user_list_load(MYSQL *db, USER_LIST Line 206  int user_list_load(MYSQL *db, USER_LIST
206          mysql_free_result(rs);          mysql_free_result(rs);
207          rs = NULL;          rs = NULL;
208    
         // Sort index  
209          if (i != p_list->user_count || p_list->users[i - 1].uid != last_uid) // Count of users changed          if (i != p_list->user_count || p_list->users[i - 1].uid != last_uid) // Count of users changed
210          {          {
211                  qsort(index_uid, (size_t)i, sizeof(USER_INFO_INDEX_UID), user_info_index_uid_comp);                  // Rebuild index
212                  memcpy(p_list->index_uid, index_uid, sizeof(USER_INFO_INDEX_UID) * (size_t)i);                  for (j = 0; j < i; j++)
213                    {
214                            p_list->index_uid[j].uid = p_list->users[j].uid;
215                            p_list->index_uid[j].id = j;
216                    }
217    
218                    qsort(p_list->index_uid, (size_t)i, sizeof(USER_INFO_INDEX_UID), user_info_index_uid_comp);
219    
220  #ifdef _DEBUG  #ifdef _DEBUG
221                  log_error("Rebuild index of %d users, last_uid=%d\n", i, p_list->users[i - 1].uid);                  log_error("Rebuild index of %d users, last_uid=%d\n", i, p_list->users[i - 1].uid);
# Line 236  int user_online_list_load(MYSQL *db, USE Line 241  int user_online_list_load(MYSQL *db, USE
241          char sql[SQL_BUFFER_LEN];          char sql[SQL_BUFFER_LEN];
242          int ret = 0;          int ret = 0;
243          int i;          int i;
244            int j;
245    
246          if (db == NULL || p_list == NULL)          if (db == NULL || p_list == NULL)
247          {          {
# Line 297  int user_online_list_load(MYSQL *db, USE Line 303  int user_online_list_load(MYSQL *db, USE
303                  p_list->users[i].login_tm = (row[4] == NULL ? 0 : atol(row[4]));                  p_list->users[i].login_tm = (row[4] == NULL ? 0 : atol(row[4]));
304                  p_list->users[i].last_tm = (row[5] == NULL ? 0 : atol(row[5]));                  p_list->users[i].last_tm = (row[5] == NULL ? 0 : atol(row[5]));
305    
                 // index  
                 p_list->index_uid[i].uid = p_list->users[i].user_info.uid;  
                 p_list->index_uid[i].id = i;  
   
306                  i++;                  i++;
307                  if (i >= BBS_max_user_online_count)                  if (i >= BBS_max_user_online_count)
308                  {                  {
# Line 311  int user_online_list_load(MYSQL *db, USE Line 313  int user_online_list_load(MYSQL *db, USE
313          mysql_free_result(rs);          mysql_free_result(rs);
314          rs = NULL;          rs = NULL;
315    
         // Sort index  
316          if (i > 0)          if (i > 0)
317          {          {
318                    // Rebuild index
319                    for (j = 0; j < i; j++)
320                    {
321                            p_list->index_uid[j].uid = p_list->users[j].user_info.uid;
322                            p_list->index_uid[j].id = j;
323                    }
324    
325                  qsort(p_list->index_uid, (size_t)i, sizeof(USER_INFO_INDEX_UID), user_info_index_uid_comp);                  qsort(p_list->index_uid, (size_t)i, sizeof(USER_INFO_INDEX_UID), user_info_index_uid_comp);
326    
327  #ifdef _DEBUG  #ifdef _DEBUG
328                  log_error("Rebuild index of %d online users\n", i);                  log_error("Rebuild index of %d online users\n", i);
329  #endif  #endif


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

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