The following commit has been merged in the master branch:
commit 03f7d4ae59d16eae96e0d4a4217b0efdba52dec3
Author: Gerfried Fuchs <[email protected]>
Date:   Tue May 24 11:00:55 2011 +0200

    fix solution files for 64 bit archs

diff --git a/debian/changelog b/debian/changelog
index edf320e..ffa8e1a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+tworld (1.3.0-6) unstable; urgency=low
+
+  * Add patch from Drake Wilson to fix solution files for 64 bit architectures
+    (closes: #427360; LP: #307897)
+
+ -- 
+
 tworld (1.3.0-5) unstable; urgency=low
 
   * Switch doc dir from tworld to symlink as dpkg isn't able to do so.
diff --git a/debian/control b/debian/control
index 305a50e..9f0f07f 100644
--- a/debian/control
+++ b/debian/control
@@ -2,7 +2,7 @@ Source: tworld
 Section: games
 Priority: optional
 Maintainer: Debian Games Team <[email protected]>
-Uploaders: Gerfried Fuchs <[email protected]>
+Uploaders: Gerfried Fuchs <[email protected]>
 Build-Depends: libsdl1.2-dev, quilt
 Standards-Version: 3.8.0
 Vcs-Git: git://git.debian.org/git/pkg-games/tworld.git
diff --git a/debian/patches/02_integer-types b/debian/patches/02_integer-types
new file mode 100644
index 0000000..17513c8
--- /dev/null
+++ b/debian/patches/02_integer-types
@@ -0,0 +1,321 @@
+Description: Fix 32/64-bit issues.
+Forwarded: no
+Author: Drake Wilson <[email protected]>
+Bug-Debian: http://bugs.debian.org/427360
+Bug-Ubuntu: https://launchpad.net/bugs/307897
+
+--- a/defs.h
++++ b/defs.h
+@@ -8,6 +8,7 @@
+ #define       _defs_h_
+ 
+ #include      <stdio.h>
++#include      <stdint.h>
+ #include      "gen.h"
+ 
+ /*
+@@ -34,8 +35,8 @@
+ /* Pseudorandom number generators.
+  */
+ typedef       struct prng {
+-    unsigned long     initial;        /* initial seed value */
+-    unsigned long     value;          /* latest random value */
++    uint32_t          initial;        /* initial seed value */
++    uint32_t          value;          /* latest random value */
+     char              shared;         /* FALSE if independent sequence */
+ } prng;
+ 
+@@ -65,8 +66,8 @@
+  */
+ typedef       struct solutioninfo {
+     actlist           moves;          /* the actual moves of the solution */
+-    unsigned long     rndseed;        /* the PRNG's initial seed */
+-    unsigned long     flags;          /* other flags (currently unused) */
++    uint32_t          rndseed;        /* the PRNG's initial seed */
++    uint32_t          flags;          /* other flags (currently unused) */
+     unsigned char     rndslidedir;    /* random slide's initial direction */
+     signed char               stepping;       /* the timer offset */
+ } solutioninfo;
+@@ -196,7 +197,7 @@
+     int                       solutionsize;   /* size of the saved solution 
data */
+     unsigned char      *leveldata;    /* the data defining the level */
+     unsigned char      *solutiondata; /* the player's best solution so far */
+-    unsigned long     levelhash;      /* the level data's hash value */
++    uint32_t          levelhash;      /* the level data's hash value */
+     char const               *unsolvable;     /* why level is unsolvable, or 
NULL */
+     char              name[256];      /* name of the level */
+     char              passwd[256];    /* the level's password */
+--- a/fileio.c
++++ b/fileio.c
+@@ -242,7 +242,7 @@
+ 
+ /* Read one byte as an unsigned integer value.
+  */
+-int filereadint8(fileinfo *file, unsigned char *val8, char const *msg)
++int filereadint8(fileinfo *file, uint8_t *val8, char const *msg)
+ {
+     int       byte;
+ 
+@@ -255,7 +255,7 @@
+ 
+ /* Write one byte as an unsigned integer value.
+  */
+-int filewriteint8(fileinfo *file, unsigned char val8, char const *msg)
++int filewriteint8(fileinfo *file, uint8_t val8, char const *msg)
+ {
+     errno = 0;
+     if (fputc(val8, file->fp) != EOF)
+@@ -265,7 +265,7 @@
+ 
+ /* Read two bytes as an unsigned integer value stored in little-endian.
+  */
+-int filereadint16(fileinfo *file, unsigned short *val16, char const *msg)
++int filereadint16(fileinfo *file, uint16_t *val16, char const *msg)
+ {
+     int       byte;
+ 
+@@ -282,7 +282,7 @@
+ 
+ /* Write two bytes as an unsigned integer value in little-endian.
+  */
+-int filewriteint16(fileinfo *file, unsigned short val16, char const *msg)
++int filewriteint16(fileinfo *file, uint16_t val16, char const *msg)
+ {
+     errno = 0;
+     if (fputc(val16 & 0xFF, file->fp) != EOF
+@@ -293,7 +293,7 @@
+ 
+ /* Read four bytes as an unsigned integer value stored in little-endian.
+  */
+-int filereadint32(fileinfo *file, unsigned long *val32, char const *msg)
++int filereadint32(fileinfo *file, uint32_t *val32, char const *msg)
+ {
+     int       byte;
+ 
+@@ -316,7 +316,7 @@
+ 
+ /* Write four bytes as an unsigned integer value in little-endian.
+  */
+-int filewriteint32(fileinfo *file, unsigned long val32, char const *msg)
++int filewriteint32(fileinfo *file, uint32_t val32, char const *msg)
+ {
+     errno = 0;
+     if (fputc(val32 & 0xFF, file->fp) != EOF
+--- a/fileio.h
++++ b/fileio.h
+@@ -8,6 +8,7 @@
+ #define       _fileio_h_
+ 
+ #include      "defs.h"
++#include      <stdint.h>
+ 
+ /* Reset a fileinfo structure to indicate no file.
+  */
+@@ -49,17 +50,17 @@
+  * from the current position in the given file. For the multi-byte
+  * values, the value is assumed to be stored in little-endian.
+  */
+-extern int filereadint8(fileinfo *file, unsigned char *val8,
++extern int filereadint8(fileinfo *file, uint8_t *val8,
+                       char const *msg);
+-extern int filewriteint8(fileinfo *file, unsigned char val8,
++extern int filewriteint8(fileinfo *file, uint8_t val8,
+                        char const *msg);
+-extern int filereadint16(fileinfo *file, unsigned short *val16,
++extern int filereadint16(fileinfo *file, uint16_t *val16,
+                        char const *msg);
+-extern int filewriteint16(fileinfo *file, unsigned short val16,
++extern int filewriteint16(fileinfo *file, uint16_t val16,
+                         char const *msg);
+-extern int filereadint32(fileinfo *file, unsigned long *val32,
++extern int filereadint32(fileinfo *file, uint32_t *val32,
+                        char const *msg);
+-extern int filewriteint32(fileinfo *file, unsigned long val32,
++extern int filewriteint32(fileinfo *file, uint32_t val32,
+                         char const *msg);
+ 
+ /* Read size bytes from the given file and return the bytes in a
+--- a/oshw.h
++++ b/oshw.h
+@@ -131,7 +131,7 @@
+ 
+ /* The font provides special monospaced digit characters at 144-153.
+  */
+-enum { CHAR_MZERO = 144 };
++#define CHAR_MZERO ((char)144)
+ 
+ /*
+  * Video output functions.
+--- a/random.c
++++ b/random.c
+@@ -24,12 +24,12 @@
+ /* The most recently generated random number is stashed here, so that
+  * it can provide the initial seed of the next PRNG.
+  */
+-static unsigned long  lastvalue = 0x80000000UL;
++static uint32_t       lastvalue = 0x80000000UL;
+ 
+ /* The standard linear congruential random-number generator needs no
+  * introduction.
+  */
+-static unsigned long nextvalue(unsigned long value)
++static uint32_t nextvalue(uint32_t value)
+ {
+     return ((value * 1103515245UL) + 12345UL) & 0x7FFFFFFFUL;
+ }
+@@ -67,7 +67,7 @@
+ 
+ /* Reset a PRNG to an independent sequence.
+  */
+-void restartprng(prng *gen, unsigned long seed)
++void restartprng(prng *gen, uint32_t seed)
+ {
+     gen->value = gen->initial = seed & 0x7FFFFFFFUL;
+     gen->shared = FALSE;
+--- a/random.h
++++ b/random.h
+@@ -19,7 +19,7 @@
+ 
+ /* Restart an existing PRNG upon a predetermined sequence.
+  */
+-extern void restartprng(prng *gen, unsigned long initial);
++extern void restartprng(prng *gen, uint32_t initial);
+ 
+ /* Retrieve the original seed value of the current sequence.
+  */
+--- a/series.c
++++ b/series.c
+@@ -46,9 +46,9 @@
+ 
+ /* Calculate a hash value for the given block of data.
+  */
+-static unsigned long hashvalue(unsigned char const *data, unsigned int size)
++static uint32_t hashvalue(unsigned char const *data, unsigned int size)
+ {
+-    static unsigned long remainders[256] = {
++    static uint32_t remainders[256] = {
+       0x00000000, 0x04C11DB7, 0x09823B6E, 0x0D4326D9, 0x130476DC, 0x17C56B6B,
+       0x1A864DB2, 0x1E475005, 0x2608EDB8, 0x22C9F00F, 0x2F8AD6D6, 0x2B4BCB61,
+       0x350C9B64, 0x31CD86D3, 0x3C8EA00A, 0x384FBDBD, 0x4C11DB70, 0x48D0C6C7,
+@@ -94,7 +94,7 @@
+       0xBCB4666D, 0xB8757BDA, 0xB5365D03, 0xB1F740B4
+     };
+ 
+-    unsigned long     accum;
++    uint32_t          accum;
+     unsigned int      i, j;
+ 
+     for (j = 0, accum = 0xFFFFFFFFUL ; j < size ; ++j) {
+@@ -113,7 +113,7 @@
+  */
+ static int readseriesheader(gameseries *series)
+ {
+-    unsigned short    val16;
++    uint16_t          val16;
+     int                       ruleset;
+ 
+     if (!filereadint16(&series->mapfile, &val16, "not a valid data file"))
+@@ -149,7 +149,7 @@
+ {
+     unsigned char            *data;
+     unsigned char const              *dataend;
+-    unsigned short            size;
++    uint16_t                  size;
+     int                               n;
+ 
+     if (!filereadint16(file, &size, NULL))
+@@ -450,7 +450,7 @@
+     fileinfo          file;
+     seriesdata               *sdata = (seriesdata*)data;
+     gameseries               *series;
+-    unsigned long     magic;
++    uint32_t          magic;
+     char             *datfilename;
+     int                       config, f;
+ 
+--- a/solution.c
++++ b/solution.c
+@@ -8,6 +8,7 @@
+ #include      <stdlib.h>
+ #include      <string.h>
+ #include      <ctype.h>
++#include      <stdint.h>
+ #include      "defs.h"
+ #include      "err.h"
+ #include      "fileio.h"
+@@ -215,9 +216,9 @@
+ static int readsolutionheader(fileinfo *file, int ruleset, int *flags,
+                             int *extrasize, unsigned char *extra)
+ {
+-    unsigned long     sig;
+-    unsigned short    f;
+-    unsigned char     n;
++    uint32_t  sig;
++    uint16_t  f;
++    uint8_t   n;
+ 
+     if (!filereadint32(file, &sig, "not a valid solution file"))
+       return FALSE;
+@@ -475,7 +476,7 @@
+  */
+ static int readsolution(fileinfo *file, gamesetup *game)
+ {
+-    unsigned long     size;
++    uint32_t  size;
+ 
+     game->number = 0;
+     game->sgflags = 0;
+@@ -706,8 +707,8 @@
+ int loadsolutionsetname(char const *filename, char *buffer)
+ {
+     fileinfo          file;
+-    unsigned long     dwrd;
+-    unsigned short    word;
++    uint32_t          dwrd;
++    uint16_t          word;
+     int                       size;
+ 
+     clearfileinfo(&file);
+--- a/unslist.c
++++ b/unslist.c
+@@ -22,7 +22,7 @@
+     int                       setid;          /* the ID of the level set's 
name */
+     int                       levelnum;       /* the level's number */
+     int                       size;           /* the levels data's compressed 
size */
+-    unsigned long     hashval;        /* the levels data's hash value */
++    uint32_t          hashval;        /* the levels data's hash value */
+     int                       note;           /* the entry's annotation ID, 
if any */
+ } unslistentry;
+ 
+@@ -112,7 +112,7 @@
+ /* Add a new entry with the given data to the list.
+  */
+ static int addtounslist(int setid, int levelnum,
+-                      int size, unsigned long hashval, int note)
++                      int size, uint32_t hashval, int note)
+ {
+     if (listcount == listallocated) {
+       listallocated = listallocated ? listallocated * 2 : 16;
+@@ -152,8 +152,10 @@
+ {
+     char              buf[256], token[256];
+     char const               *p;
+-    unsigned long     hashval;
+-    int                       setid, size;
++    uint32_t          hashval;
++    unsigned long     hashval_long;
++    int                       setid;
++    unsigned int      size;
+     int                       lineno, levelnum, n;
+ 
+     setid = 0;
+@@ -169,7 +171,8 @@
+           continue;
+       }
+       n = sscanf(p, "%d: %04X%08lX: %[^\n\r]",
+-                    &levelnum, &size, &hashval, token);
++                    &levelnum, &size, &hashval_long, token);
++      hashval = (uint32_t)hashval_long;
+       if (n > 0 && levelnum > 0 && levelnum < 65536 && setid) {
+           if (n == 1) {
+               n = sscanf(p, "%*d: %s", token);
diff --git a/debian/patches/series b/debian/patches/series
index 6b5e0b1..0f0c77f 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,2 @@
 01_fix-manpage
+02_integer-types

-- 
Packaging for Tile World

_______________________________________________
Pkg-games-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

Reply via email to