[Freeciv-Dev] (PR#40115) vestigial game.info.player_idx removal

2008-02-27 Thread William Allen Simpson

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40115 

Almost all references to game.info.player_idx were eliminated in PR#39872.
This removes the remaining 9 instances in 6 files.

While investigating, another bug was discovered!  When players are
renumbered during pre-game, aconnection.player was not updated.

After considerable discussion in PR#40113, there are no intended differences
between client.playing (nee game.info.player_ptr) and aconnection.player.
This codifies the duplication by always setting them at the same time.

   client.playing: 910 instances in 91 files.
   aconnection.player:   8 instances in  4 files.

Both are duplicates of the actual connection[i].player.

   pc-player:   2 instances in  2 files.
   conn([.-]+)player:  82 instances in 20 files.

Index: server/gamehand.c
===
--- server/gamehand.c   (revision 14424)
+++ server/gamehand.c   (working copy)
@@ -367,8 +367,6 @@
   }
 
   conn_list_iterate(dest, pconn) {
-/* ? fixme: check for non-players: */
-ginfo.player_idx = (pconn-player ? player_number(pconn-player) : -1);
 send_packet_game_info(pconn, ginfo);
   }
   conn_list_iterate_end;
Index: server/savegame.c
===
--- server/savegame.c   (revision 14424)
+++ server/savegame.c   (working copy)
@@ -4407,8 +4407,6 @@
 shuffle_players();
   }
 
-  game.info.player_idx = 0;
-
   /* Fix ferrying sanity */
   players_iterate(pplayer) {
 unit_list_iterate_safe(pplayer-units, punit) {
Index: common/packets.def
===
--- common/packets.def  (revision 14424)
+++ common/packets.def  (working copy)
@@ -380,7 +380,6 @@
   PLAYER min_players;
   PLAYER max_players;
   PLAYER nplayers;
-  PLAYER player_idx;
 
   UINT32 globalwarming, heating, warminglevel;
   UINT32 nuclearwinter, cooling, coolinglevel;
Index: common/game.c
===
--- common/game.c   (revision 14424)
+++ common/game.c   (working copy)
@@ -382,7 +382,7 @@
 game.info.global_advances[i]=FALSE;
   for (i=0; iB_LAST; i++)  /* game.num_impr_types = 0 here */
 game.info.great_wonders[i]=0;
-  game.info.player_idx = 0;
+
   terrain_control.river_help_text[0] = '\0';
 
   game.meta_info.user_message_set = FALSE;
@@ -608,11 +608,6 @@
 assert(city_list_size(game.players[i].cities) == 0);
   }
 
-  /* has no effect in server, but adjusts in client */
-  if(game.info.player_idx  plrno) {
-game.info.player_idx--;
-  }
-
   game.info.nplayers--;
 
   player_init(game.players[game.info.nplayers]);
Index: client/packhand.c
===
--- client/packhand.c   (revision 14424)
+++ client/packhand.c   (working copy)
@@ -218,9 +218,9 @@
 freelog(LOG_VERBOSE, join game accept:%s, message);
 aconnection.established = TRUE;
 aconnection.id = conn_id;
+
 agents_game_joined();
 update_menus();
-
 set_server_busy(FALSE);
 
 if (get_client_page() == PAGE_MAIN
@@ -235,11 +235,13 @@
 my_snprintf(msg, sizeof(msg),
_(You were rejected from the game: %s), message);
 append_output_window(msg);
-aconnection.id = 0;
+aconnection.id = -1; /* not in range of conn_info id */
+
 if (auto_connect) {
   freelog(LOG_NORMAL, %s, msg);
 }
 gui_server_connect();
+
 if (!with_ggz) {
   set_client_page(in_ggz ? PAGE_MAIN : PAGE_GGZ);
 }
@@ -1540,7 +1542,7 @@
 return;
   }
 
-  if (packet-owner == game.info.player_idx) {
+  if (valid_player_by_number(packet-owner) == client.playing) {
 freelog(LOG_ERROR, handle_unit_short_info() for own unit.);
   }
 
@@ -1612,7 +1614,6 @@
 
   game.government_when_anarchy =
 government_by_number(game.info.government_when_anarchy_id);
-  client.playing = valid_player_by_number(game.info.player_idx);
 
   if (C_S_PREPARING == client_state()) {
 /* FIXME: only for change in nations */
@@ -1954,6 +1955,8 @@
   aconnection.established = pconn-established;
   aconnection.observer = pconn-observer;
   aconnection.access_level = pconn-access_level;
+  /* FIXME: duplication */
+  client.playing =
   aconnection.player = pplayer;
 }
   }
Index: client/climisc.c
===
--- client/climisc.c(revision 14424)
+++ client/climisc.c(working copy)
@@ -62,11 +62,15 @@
 **/
 void client_remove_player(int plrno)
 {
+  struct connection *pc = find_conn_by_id(aconnection.id);
+
   game_remove_player(player_by_number(plrno));
   game_renumber_players(plrno);
-  /* ensure our pointer is valid */
-  client.playing = valid_player_by_number(game.info.player_idx);
 
+  /* ensure our duplicate pointers are valid */
+  

Re: [Freeciv-Dev] (PR#40115) vestigial game.info.player_idx removal

2008-02-27 Thread William Allen Simpson

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40115 

Committed trunk revision 14425.
Committed S2_2 revision 14426.



___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev