Blame abuse_sdl-0.7.0-fixes.patch

eca1ab0
diff -ur abuse_sdl-0.7.0.orig/src/include/stack.hpp abuse_sdl-0.7.0/src/include/stack.hpp
eca1ab0
--- abuse_sdl-0.7.0.orig/src/include/stack.hpp	2002-12-15 06:00:32.000000000 +0100
eca1ab0
+++ abuse_sdl-0.7.0/src/include/stack.hpp	2006-08-16 16:54:58.000000000 +0200
eca1ab0
@@ -13,20 +13,38 @@
eca1ab0
 { 
eca1ab0
   public :
eca1ab0
   T **sdata;
eca1ab0
-  long son;
eca1ab0
-
eca1ab0
-  grow_stack(int max_size) { sdata=(T **)jmalloc(max_size,"pointer stack");  son=0; }
eca1ab0
+  unsigned int son, _max_size;
eca1ab0
+  /* <sigh> the max_size parameter is the number of bytes of the pointerstack
eca1ab0
+     instead of the number of entries which it ofcourse should have been.
eca1ab0
+     This breaks on 64 bit since the caller assumes 4 bytes per pointer and
eca1ab0
+     thus on 64 bit allocates not enough memory. Instead of fixing all callers
eca1ab0
+     we work around this by multiplying maxsize by 2 on 64 bit. */
eca1ab0
+  grow_stack(unsigned int max_size)
eca1ab0
+  { 
eca1ab0
+    max_size *= sizeof(void*)/sizeof(int);
eca1ab0
+    sdata = (T **)jmalloc(max_size, "pointer stack");
eca1ab0
+    son=0;
eca1ab0
+    _max_size=max_size;
eca1ab0
+  }
eca1ab0
+  
eca1ab0
   void push(T *data) 
eca1ab0
   {
eca1ab0
     sdata[son]=data;
eca1ab0
     son++;
eca1ab0
+    if (son >= (_max_size/sizeof(int)))
eca1ab0
+    {
eca1ab0
+      lbreak("stack overflow\n");
eca1ab0
+      exit(0);
eca1ab0
+    }
eca1ab0
   }
eca1ab0
    
eca1ab0
-  T *pop(long total) 
eca1ab0
-  { if (total>son) { lbreak("stack underflow\n"); exit(0); }
eca1ab0
+  T *pop(unsigned int total) 
eca1ab0
+  {
eca1ab0
+    if (total>son) { lbreak("stack underflow\n"); exit(0); }
eca1ab0
     son-=total;
eca1ab0
     return sdata[son];
eca1ab0
   }
eca1ab0
+
eca1ab0
   void clean_up() 
eca1ab0
   { 
eca1ab0
     if (son!=0) fprintf(stderr,"Warning cleaning up stack and not empty\n");
eca1ab0
diff -ur abuse_sdl-0.7.0.orig/src/light.cpp abuse_sdl-0.7.0/src/light.cpp
eca1ab0
--- abuse_sdl-0.7.0.orig/src/light.cpp	2006-08-16 16:56:33.000000000 +0200
eca1ab0
+++ abuse_sdl-0.7.0/src/light.cpp	2006-08-16 16:36:07.000000000 +0200
eca1ab0
@@ -348,7 +348,7 @@
eca1ab0
 //      f->write(green_light,256*64);
eca1ab0
 			for (int i=0;i
eca1ab0
 				f->write(tints[i],256);
eca1ab0
-			fp->write(bright_tint,256);
eca1ab0
+			f->write(bright_tint,256);
eca1ab0
 //    f.write(trans_table,256*256);
eca1ab0
 		}
eca1ab0
 		delete f;