Dear all,

I think we have to fix all the warnings.

C assumes all functions not defined the type of return values as integers.
So a void function call without definition might get a stack pop by the caller 
which mess up the stack.
However, normally it won't be that stupid, but
it could be a compiler optimizer bug. So with -O0 or -O3, I don't get a crash.

I've made a stupid patch which solves the crash at loading scenarios compiled 
by -O2. It just modify
"return;" to "return 0;" around DoZone() and the function calls inside DoZone();

Please try the attachment (quilt patch, last one in series).
My arch is i386, not amd64.

Yours Sincerely,
Paul.

-- 
                                                PaulLiu(劉穎駿)
E-mail address: grandp...@gmail.com
Index: micropolis-activity-0.0.20071228/src/sim/s_sim.c
===================================================================
--- micropolis-activity-0.0.20071228.orig/src/sim/s_sim.c	2009-06-25 01:41:18.396541888 +0800
+++ micropolis-activity-0.0.20071228/src/sim/s_sim.c	2009-06-25 01:43:23.328537760 +0800
@@ -1024,18 +1024,18 @@
       RepairZone(POWERPLANT, 4); /* post */
     PushPowerStack();
     CoalSmoke(SMapX, SMapY);
-    return;
+    return 0;
 
   case NUCLEAR:
     if (!NoDisasters && !Rand(MltdwnTab[GameLevel])) {
       DoMeltdown(SMapX, SMapY);
-      return;
+      return 0;
     }
     NuclearPop++;
     if (!(CityTime & 7))
       RepairZone(NUCLEAR, 4); /* post */
     PushPowerStack();
-    return;
+    return 0;
 
   case FIRESTATION:
     FireStPop++;
@@ -1051,7 +1051,7 @@
       z = z >>1;			/* post FD's need roads  */
 
     FireStMap[SMapX >>3][SMapY >>3] += z;
-    return;
+    return 0;
 
   case POLICESTATION:
     PolicePop++;
@@ -1067,7 +1067,7 @@
       z = z >>1; /* post PD's need roads */
 
     PoliceMap[SMapX >>3][SMapY >>3] += z;
-    return;
+    return 0;
 
   case STADIUM:
     StadiumPop++;
@@ -1079,13 +1079,13 @@
 	Map[SMapX + 1][SMapY] = FOOTBALLGAME1 + ANIMBIT;
 	Map[SMapX + 1][SMapY + 1] = FOOTBALLGAME2 + ANIMBIT;
       }
-    return;
+    return 0;
 
  case FULLSTADIUM:
     StadiumPop++;
     if (!((CityTime + SMapX + SMapY) & 7))	/* post release */
       DrawStadium(STADIUM);
-    return;
+    return 0;
 
  case AIRPORT:
     APortPop++;
@@ -1100,7 +1100,7 @@
 
     if (PwrOn)
       DoAirport();
-    return;
+    return 0;
 
  case PORT:
     PortPop++;
@@ -1111,8 +1111,9 @@
 	(GetSprite(SHI) == NULL)) {
       GenerateShip();
     }
-    return;
+    return 0;
   }
+  return 0;
 }
 
 
Index: micropolis-activity-0.0.20071228/src/sim/s_zone.c
===================================================================
--- micropolis-activity-0.0.20071228.orig/src/sim/s_zone.c	2009-06-25 01:41:15.496540968 +0800
+++ micropolis-activity-0.0.20071228/src/sim/s_zone.c	2009-06-25 01:42:55.080538167 +0800
@@ -75,22 +75,22 @@
 
   if (CChr9 > PORTBASE) {	/* do Special Zones  */
     DoSPZone(ZonePwrFlg);
-    return;
+    return 0;
   }
   if (CChr9 < HOSPITAL) {	
     DoResidential(ZonePwrFlg);
-    return;
+    return 0;
   }
   if (CChr9 < COMBASE) {
     DoHospChur();
-    return;
+    return 0;
   }
   if (CChr9 < INDBASE)  {
     DoCommercial(ZonePwrFlg);
-    return;
+    return 0;
   }
   DoIndustrial(ZonePwrFlg);
-  return;
+  return 0;
 }
 
 
@@ -110,6 +110,7 @@
       if (!Rand(20))
 	ZonePlop(RESBASE);
   }
+  return 0;
 }
 
 
@@ -171,7 +172,7 @@
 
   if (TrfGood == -1) {
     DoIndOut(tpop, Rand16() & 1);
-    return;
+    return 0;
   }
 
   if (!(Rand16() & 7)) {
@@ -180,12 +181,13 @@
     if ((zscore > -350) &&
 	(((short)(zscore - 26380)) > ((short)Rand16Signed()))) {
       DoIndIn(tpop, Rand16() & 1);
-      return;
+      return 0;
     }
     if ((zscore < 350) &&
 	(((short)(zscore + 26380)) < ((short)Rand16Signed())))
       DoIndOut(tpop, Rand16() & 1);
   }
+  return 0;
 }
 
 
@@ -203,7 +205,7 @@
   if (TrfGood == -1) {
     value = GetCRVal();
     DoComOut(tpop, value);
-    return;
+    return 0;
   }
 
   if (!(Rand16() & 7)) {
@@ -216,7 +218,7 @@
 	(((short)(zscore - 26380)) > ((short)Rand16Signed()))) {
       value = GetCRVal();
       DoComIn(tpop, value);
-      return;
+      return 0;
     }
     if ((zscore < 350) &&
 	(((short)(zscore + 26380)) < ((short)Rand16Signed()))) {
@@ -224,6 +226,7 @@
       DoComOut(tpop, value);
     }
   }
+  return 0;
 }
 
 
@@ -242,7 +245,7 @@
   if (TrfGood == -1) {
     value = GetCRVal();
     DoResOut(tpop, value);
-    return;
+    return 0;
   }
 
   if ((CChr9 == FREEZ) || (!(Rand16() & 7))) {
@@ -254,11 +257,11 @@
 	(((short)(zscore - 26380)) > ((short)Rand16Signed()))) {
       if ((!tpop) && (!(Rand16() & 3))) {
 	MakeHosp();
-	return;
+	return 0;
       }
       value = GetCRVal();
       DoResIn(tpop, value);
-      return;
+      return 0;
     }
     if ((zscore < 350) &&
 	(((short)(zscore + 26380)) < ((short)Rand16Signed()))) {
@@ -266,6 +269,7 @@
 	    DoResOut(tpop, value);
     }
   }
+  return 0;
 }
 
 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to