<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