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 @@
UDWORDpower, 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; ibuildPower;
@@ -3727,14 +3727,14 @@
UDWORDbody, i;
if (psStats != NULL) {
-COMP_BASE_STATS* bodyStats = asBodyStats + sCurrDesign.asParts[COMP_BODY];
-