Giel van Schijndel wrote:
Giel van Schijndel schreef:
Gerard Krol schreef:
I know I only posted it only 4 days ago, but I really sleep better
when I know my patches have been applied. Could someone apply this
patch? I even polished it a little bit more.

This patch prevents a segfault when designing a droid on amd64.
Reproduce: on amd64, go to the droid design screen and design a
construction droid. Then hover your mouse over another system, like
sensor or command.

Regards,

Gerard
Applied in r750.

Hope you did sleep well enough those 4 days? Anyway I'm hoping you'll
sleep better now again  ;-) .
Sorry, I haven't looked at your latest patch until after committing the
previous one.

Anyway your latest version looks a bit ugly to me. There's an awfully
large amount of casts in there, not to mention that your insertion of
that switch statement uses the variable `type` which at that point isn't
yet initialized => undefined behaviour.
Oops, I guess that must be a copy-paste error.
Plus I'm not quite sure what the difference is between the first and
second patch. Not meaning to offend you though.
I just noticed that my patch created a lot of warnings (16) about 'warning: initialization from incompatible pointer type'. The second patch was a quick attempt to solve that problem. A little too quick as it seems.

I tought about it a little and the attached patch avoids the casting problem and also doesn't give the warnings.

- Gerard
Index: src/design.c
===================================================================
--- src/design.c	(revision 762)
+++ src/design.c	(working copy)
@@ -3615,14 +3615,14 @@
 	UDWORD				power, i;
 
 	if (psStats != NULL) {
-        COMP_BASE_STATS* bodyStats = asBodyStats + sCurrDesign.asParts[COMP_BODY];
-        COMP_BASE_STATS* brainStats = asBrainStats + sCurrDesign.asParts[COMP_BRAIN];
-        COMP_BASE_STATS* sensorStats = asSensorStats + sCurrDesign.asParts[COMP_SENSOR];
-        COMP_BASE_STATS* ECMStats = asECMStats + sCurrDesign.asParts[COMP_ECM];
-        COMP_BASE_STATS* repairStats = asRepairStats + sCurrDesign.asParts[COMP_REPAIRUNIT];
-        COMP_BASE_STATS* constructStats = asConstructStats + sCurrDesign.asParts[COMP_CONSTRUCT];
-        COMP_BASE_STATS* propulsionStats = asPropulsionStats + sCurrDesign.asParts[COMP_PROPULSION];
-        COMP_BASE_STATS* weaponStats = asWeaponStats + sCurrDesign.asWeaps[0];
+        UDWORD bodyPower        = (asBodyStats + sCurrDesign.asParts[COMP_BODY])->buildPower;
+        UDWORD brainPower       = (asBrainStats + sCurrDesign.asParts[COMP_BRAIN])->buildPower;
+        UDWORD sensorPower      = (asSensorStats + sCurrDesign.asParts[COMP_SENSOR])->buildPower;
+        UDWORD ECMPower         = (asECMStats + sCurrDesign.asParts[COMP_ECM])->buildPower;
+        UDWORD repairPower      = (asRepairStats + sCurrDesign.asParts[COMP_REPAIRUNIT])->buildPower;
+        UDWORD constructPower   = (asConstructStats + sCurrDesign.asParts[COMP_CONSTRUCT])->buildPower;
+        UDWORD propulsionPower  = (asPropulsionStats + sCurrDesign.asParts[COMP_PROPULSION])->buildPower;
+        UDWORD weaponPower      = (asWeaponStats + sCurrDesign.asWeaps[0])->buildPower;
 
 
 		type = statType(psStats->ref);
@@ -3662,25 +3662,25 @@
 		switch (type)
 		{
 		case COMP_BODY:
-			bodyStats = psStats;
+			bodyPower = psStats->buildPower;
 			break;
 		case COMP_PROPULSION:
-			propulsionStats = psStats;
+			propulsionPower = psStats->buildPower;
 			break;
 		case COMP_ECM:
-			ECMStats = psStats;
+			ECMPower = psStats->buildPower;
 			break;
 		case COMP_SENSOR:
-			sensorStats = psStats;
+			sensorPower = psStats->buildPower;
 			break;
 		case COMP_CONSTRUCT:
-			constructStats = psStats;
+			constructPower = psStats->buildPower;
 			break;
 		case COMP_REPAIRUNIT:
-			repairStats = psStats;
+			repairPower = psStats->buildPower;
 			break;
 		case COMP_WEAPON:
-			weaponStats = psStats;
+			weaponPower = psStats->buildPower;
 			break;
 		//default:
 			//don't want to draw for unknown comp
@@ -3689,15 +3689,15 @@
 		// this code is from calcTemplatePower
 
     	//get the component power
-    	power = bodyStats->buildPower + brainStats->buildPower + sensorStats->buildPower + ECMStats->buildPower + repairStats->buildPower + constructStats->buildPower;
+    	power = bodyPower + brainPower + sensorPower + ECMPower + repairPower + constructPower;
 
     	/* propulsion power points are a percentage of the bodys' power points */
-    	power += (propulsionStats->buildPower *
-    		bodyStats->buildPower) / 100;
+    	power += (propulsionPower *
+    		bodyPower) / 100;
     		
      	//add weapon power
         // FIXME: Only takes first weapon into account
-        power += weaponStats->buildPower;
+        power += weaponPower;
     	for(i=1; i<sCurrDesign.numWeaps; i++)
     	{
     		power += (asWeaponStats + sCurrDesign.asWeaps[i])->buildPower;
@@ -3727,14 +3727,14 @@
 	UDWORD				body, i;
 
 	if (psStats != NULL) {
-        COMP_BASE_STATS* bodyStats = asBodyStats + sCurrDesign.asParts[COMP_BODY];
-        COMP_BASE_STATS* brainStats = asBrainStats + sCurrDesign.asParts[COMP_BRAIN];
-        COMP_BASE_STATS* sensorStats = asSensorStats + sCurrDesign.asParts[COMP_SENSOR];
-        COMP_BASE_STATS* ECMStats = asECMStats + sCurrDesign.asParts[COMP_ECM];
-        COMP_BASE_STATS* repairStats = asRepairStats + sCurrDesign.asParts[COMP_REPAIRUNIT];
-        COMP_BASE_STATS* constructStats = asConstructStats + sCurrDesign.asParts[COMP_CONSTRUCT];
-        COMP_BASE_STATS* propulsionStats = asPropulsionStats + sCurrDesign.asParts[COMP_PROPULSION];
-        COMP_BASE_STATS* weaponStats = asWeaponStats + sCurrDesign.asWeaps[0];
+        UDWORD bodyBody        = (asBodyStats + sCurrDesign.asParts[COMP_BODY])->body;
+        UDWORD brainBody       = (asBrainStats + sCurrDesign.asParts[COMP_BRAIN])->body;
+        UDWORD sensorBody      = (asSensorStats + sCurrDesign.asParts[COMP_SENSOR])->body;
+        UDWORD ECMBody         = (asECMStats + sCurrDesign.asParts[COMP_ECM])->body;
+        UDWORD repairBody      = (asRepairStats + sCurrDesign.asParts[COMP_REPAIRUNIT])->body;
+        UDWORD constructBody   = (asConstructStats + sCurrDesign.asParts[COMP_CONSTRUCT])->body;
+        UDWORD propulsionBody  = (asPropulsionStats + sCurrDesign.asParts[COMP_PROPULSION])->body;
+        UDWORD weaponBody      = (asWeaponStats + sCurrDesign.asWeaps[0])->body;
 
 
 		type = statType(psStats->ref);
@@ -3774,42 +3774,41 @@
 		switch (type)
 		{
 		case COMP_BODY:
-			bodyStats = psStats;
+			bodyBody = psStats->body;
 			break;
 		case COMP_PROPULSION:
-			propulsionStats = psStats;
+			propulsionBody = psStats->body;
 			break;
 		case COMP_ECM:
-			ECMStats = psStats;
+			ECMBody = psStats->body;
 			break;
 		case COMP_SENSOR:
-			sensorStats = psStats;
+			sensorBody = psStats->body;
 			break;
 		case COMP_CONSTRUCT:
-			constructStats = psStats;
+			constructBody = psStats->body;
 			break;
 		case COMP_REPAIRUNIT:
-			repairStats = psStats;
+			repairBody = psStats->body;
 			break;
 		case COMP_WEAPON:
-			weaponStats = psStats;
+			weaponBody = psStats->body;
 			break;
 		//default:
 			//don't want to draw for unknown comp
 		}
-
 	    // this code is from calcTemplateBody
 
     	//get the component power
-    	body = bodyStats->body + brainStats->body + sensorStats->body + ECMStats->body + repairStats->body + constructStats->body;
+    	body = bodyBody + brainBody + sensorBody + ECMBody + repairBody + constructBody;
 
     	/* propulsion power points are a percentage of the bodys' power points */
-    	body += (propulsionStats->body *
-    		bodyStats->body) / 100;
+    	body += (propulsionBody *
+    		bodyBody) / 100;
     		
      	//add weapon power
         // FIXME: Only takes first weapon into account
-        body += weaponStats->body;
+        body += weaponBody;
     	for(i=1; i<sCurrDesign.numWeaps; i++)
     	{
     		body += (asWeaponStats + sCurrDesign.asWeaps[i])->body;
_______________________________________________
Warzone-dev mailing list
Warzone-dev@gna.org
https://mail.gna.org/listinfo/warzone-dev

Reply via email to