DEADSOFTWARE

portability: avoid errors on some compilers
[flatwaifu.git] / src / common / wadres.c
index 43251c8d9d00507d5a251e24e422400bbd2c034a..6ff943ab03d876ba682ab436f22bc6af66b29567 100644 (file)
@@ -3,9 +3,9 @@
 #include <stdlib.h>
 #include <assert.h>
 
-#include "wadres.h"
-#include "streams.h"
-#include "cp866.h"
+#include "common/wadres.h"
+#include "common/streams.h"
+#include "common/cp866.h"
 
 typedef struct Entry {
   long offset, size;
@@ -28,8 +28,8 @@ static Block *blocks[MAX_RESOURCES];
 static int s_start, s_end;
 
 static int check_header (Stream *r) {
-  assert(r != NULL);
   char ident[4];
+  assert(r != NULL);
   stream_setpos(r, 0); // !!!
   stream_read(ident, 4, 1, r);
   return (memcmp(ident, "IWAD", 4) == 0) || (memcmp(ident, "PWAD", 4) == 0);
@@ -47,8 +47,9 @@ int WADRES_addwad (Stream *r) {
 }
 
 static int WADRES_addresource (const Entry *e) {
+  int i;
   assert(e != NULL);
-  for (int i = 0; i < n_resources; ++i) {
+  for (i = 0; i < n_resources; ++i) {
     if (cp866_strncasecmp(resources[i].name, e->name, 8) == 0) {
       memcpy(&resources[i], e, sizeof(Entry));
       return i;
@@ -63,13 +64,14 @@ static int WADRES_addresource (const Entry *e) {
 }
 
 static int WADRES_read (int f) {
+  int ok = 1;
+  int32_t n, dir, i;
   Stream *r = wads[f];
   stream_setpos(r, 4); // skip magic
-  int32_t n = stream_read32(r);
-  int32_t dir = stream_read32(r);
+  n = stream_read32(r);
+  dir = stream_read32(r);
   stream_setpos(r, dir);
-  int ok = 1;
-  for (int32_t i = 0; ok && i < n; ++i) {
+  for (i = 0; ok && i < n; ++i) {
     Entry e;
     e.offset = stream_read32(r);
     e.size = stream_read32(r);
@@ -81,8 +83,9 @@ static int WADRES_read (int f) {
 }
 
 int WADRES_rehash (void) {
+  int i;
   int ok = 1;
-  for (int i = 0; i < n_wads; ++i) {
+  for (i = 0; i < n_wads; ++i) {
     if (!WADRES_read(i)) {
       ok = 0;
     }
@@ -105,9 +108,10 @@ int WADRES_maxids (void) {
 }
 
 int WADRES_findsprite (const char n[4], int s, int d, char *dir) {
+  int i;
   s += 'A';
   d += '0';
-  for (int i = s_start + 1; i < s_end; i++) {
+  for (i = s_start + 1; i < s_end; i++) {
     char a, b;
     char *wn = resources[i].name;
     if (cp866_strncasecmp(wn, n, 4) == 0 && (wn[4] == s || wn[6] == s)) {
@@ -145,9 +149,11 @@ void WADRES_getname (int id, char *name) {
 }
 
 void WADRES_getdata (int id, void *data) {
+  long pos;
+  Stream *r;
   assert(id >= 0 && id < n_resources);
-  Stream *r = wads[resources[id].f];
-  long pos = stream_getpos(r);
+  r = wads[resources[id].f];
+  pos = stream_getpos(r);
   stream_setpos(r, resources[id].offset);
   stream_read(data, resources[id].size, 1, r);
   stream_setpos(r, pos);
@@ -175,9 +181,11 @@ void *WADRES_lock (int id) {
 }
 
 void WADRES_unlock (void *data) {
+  int id;
+  Block *x;
   if (data) {
-    Block *x = data - sizeof(Block);
-    int id = x->id;
+    x = (Block*)((uintptr_t)data - sizeof(Block));
+    id = x->id;
     assert(id >= 0 && id < MAX_RESOURCES);
     x->ref -= 1;
     assert(x->ref >= 0);