<URL: http://bugs.freeciv.org/Ticket/Display.html?id=40551 >

Attached patch fixes some more places in the code where player
numbers were assumed to be in [0, player_count()).


-----------------------------------------------------------------------
虫を食うな!
 client/gui-gtk-2.0/plrdlg.c |    4 ++--
 client/gui-sdl/finddlg.c    |   11 +++++++----
 client/gui-win32/plrdlg.c   |    5 +++--
 server/gamehand.c           |    4 ++--
 server/savegame.c           |   15 +--------------
 5 files changed, 15 insertions(+), 24 deletions(-)

diff --git a/client/gui-gtk-2.0/plrdlg.c b/client/gui-gtk-2.0/plrdlg.c
index b1ac79e..e8e1bbe 100644
--- a/client/gui-gtk-2.0/plrdlg.c
+++ b/client/gui-gtk-2.0/plrdlg.c
@@ -664,11 +664,11 @@ static bool player_should_be_shown(int plrno) {
 void update_players_dialog(void)
 {
   if (players_dialog_shell && !is_plrdlg_frozen()) {
-    gboolean exists[player_count()];
+    gboolean exists[player_slot_count()];
     gint i;
     GtkTreeIter it, it_next;
 
-    for (i = 0; i < player_count(); i++) {
+    for (i = 0; i < player_slot_count(); i++) {
       exists[i] = FALSE;
     }
 
diff --git a/client/gui-sdl/finddlg.c b/client/gui-sdl/finddlg.c
index 8a31002..8fae390 100644
--- a/client/gui-sdl/finddlg.c
+++ b/client/gui-sdl/finddlg.c
@@ -104,7 +104,7 @@ void popup_find_dialog(void)
   SDL_Surface *pLogo = NULL;
   SDL_String16 *pStr;
   char cBuf[128]; 
-  int i = 0, h = 0, n = 0, w = 0, units_h = 0;
+  int h = 0, n = 0, w = 0, units_h = 0;
   struct player *owner = NULL;
   struct tile *original;
   int window_x = 0, window_y = 0;
@@ -112,9 +112,12 @@ void popup_find_dialog(void)
   SDL_Rect area;
   
   /* check that there are any cities to find */
-  while(!h && i < player_count()) {
-    h = city_list_size(player_by_number(i++)->cities);
-  }
+  players_iterate(pplayer) {
+    h = city_list_size(pplayer->cities);
+    if (h > 0) {
+      break;
+    }
+  } players_iterate_end;
   
   if (pFind_City_Dlg && !h) {
     return;
diff --git a/client/gui-win32/plrdlg.c b/client/gui-win32/plrdlg.c
index d9abe4e..49ec072 100644
--- a/client/gui-win32/plrdlg.c
+++ b/client/gui-win32/plrdlg.c
@@ -398,7 +398,8 @@ update_players_dialog(void)
     lv=GetDlgItem(players_dialog,ID_PLAYERS_LIST);
     ListView_DeleteAllItems(lv);
 
-    for (i = 0; i < player_count(); i++) {
+    players_iterate(pplayer) {
+      i = player_number(pplayer);
       build_row(row_texts, i, 0);
       row=fcwin_listview_add_row(lv,i,NUM_COLUMNS, (char **)row_texts);
       lvi.iItem=row;
@@ -406,7 +407,7 @@ update_players_dialog(void)
       lvi.lParam=i;
       lvi.mask=LVIF_PARAM;
       ListView_SetItem(lv,&lvi);
-    }
+    } players_iterate_end;
     ListView_SetColumnWidth(lv,0,LVSCW_AUTOSIZE);
     for (i=1;i<NUM_COLUMNS;i++) {
       ListView_SetColumnWidth(lv,i,LVSCW_AUTOSIZE_USEHEADER); 
diff --git a/server/gamehand.c b/server/gamehand.c
index f129067..c4c68ae 100644
--- a/server/gamehand.c
+++ b/server/gamehand.c
@@ -192,8 +192,8 @@ static struct tile *find_dispersed_position(struct player *pplayer,
 void init_new_game(void)
 {
   const int NO_START_POS = -1;
-  int start_pos[player_count()];
-  int placed_units[player_count()];
+  int start_pos[player_slot_count()];
+  int placed_units[player_slot_count()];
   bool pos_used[map.num_start_positions];
   int i, num_used = 0;
 
diff --git a/server/savegame.c b/server/savegame.c
index 33d3200..33966d9 100644
--- a/server/savegame.c
+++ b/server/savegame.c
@@ -2261,7 +2261,7 @@ static void player_load_main(struct player *plr, int plrno,
 				   "player%d.revolution_finishes", plrno);
   }
 
-  for (i = 0; i < player_count(); i++) {
+  for (i = 0; i < player_slot_count(); i++) {
     plr->diplstates[i].type = 
       secfile_lookup_int_default(file, DS_WAR,
 				 "player%d.diplstate%d.type", plrno, i);
@@ -2282,19 +2282,6 @@ static void player_load_main(struct player *plr, int plrno,
       secfile_lookup_int_default(file, 0,
 			   "player%d.diplstate%d.contact_turns_left", plrno, i);
   }
-  /* We don't need this info, but savegames carry it anyway.
-     To avoid getting "unused" warnings we touch the values like this. */
-  for (i = player_count(); i < MAX_NUM_PLAYERS + MAX_NUM_BARBARIANS; i++) {
-    secfile_lookup_int_default(file, DS_WAR,
-			       "player%d.diplstate%d.type", plrno, i);
-    secfile_lookup_int_default(file, 0,
-			       "player%d.diplstate%d.turns_left", plrno, i);
-    secfile_lookup_int_default(file, 0,
-			       "player%d.diplstate%d.has_reason_to_cancel",
-			       plrno, i);
-    secfile_lookup_int_default(file, 0,
-			   "player%d.diplstate%d.contact_turns_left", plrno, i);
-  }
 
   { /* spacerace */
     struct player_spaceship *ship = &plr->spaceship;
_______________________________________________
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

Reply via email to