summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Howard2005-07-23 18:50:34 +0000
committerSimon Howard2005-07-23 18:50:34 +0000
commitcce6e2644265e45ba140b5a2c5d8cbeccf093874 (patch)
treedae491a9ed0b743b595fb289bb59c2ae93cb2abb
parent02c50cf81858d900e8f30299eb24d9aa04eb3f71 (diff)
downloadchocolate-doom-cce6e2644265e45ba140b5a2c5d8cbeccf093874.tar.gz
chocolate-doom-cce6e2644265e45ba140b5a2c5d8cbeccf093874.tar.bz2
chocolate-doom-cce6e2644265e45ba140b5a2c5d8cbeccf093874.zip
Use standard C file functions for WAD code
Subversion-branch: /trunk/chocolate-doom Subversion-revision: 15
-rw-r--r--src/w_wad.c82
1 files changed, 40 insertions, 42 deletions
diff --git a/src/w_wad.c b/src/w_wad.c
index 98fae854..18f8fedf 100644
--- a/src/w_wad.c
+++ b/src/w_wad.c
@@ -1,7 +1,7 @@
// Emacs style mode select -*- C++ -*-
//-----------------------------------------------------------------------------
//
-// $Id: w_wad.c 8 2005-07-23 16:44:57Z fraggle $
+// $Id: w_wad.c 15 2005-07-23 18:50:34Z fraggle $
//
// Copyright(C) 1993-1996 Id Software, Inc.
// Copyright(C) 2005 Simon Howard
@@ -22,6 +22,9 @@
// 02111-1307, USA.
//
// $Log$
+// Revision 1.3 2005/07/23 18:50:34 fraggle
+// Use standard C file functions for WAD code
+//
// Revision 1.2 2005/07/23 16:44:57 fraggle
// Update copyright to GNU GPL
//
@@ -36,29 +39,17 @@
static const char
-rcsid[] = "$Id: w_wad.c 8 2005-07-23 16:44:57Z fraggle $";
+rcsid[] = "$Id: w_wad.c 15 2005-07-23 18:50:34Z fraggle $";
-#ifdef NORMALUNIX
-#include <ctype.h>
-#include <sys/types.h>
-#include <string.h>
-#include <unistd.h>
-#include <malloc.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <alloca.h>
-#define O_BINARY 0
-#endif
+#include <stdio.h>
+#include <stdlib.h>
#include "doomtype.h"
#include "m_swap.h"
#include "i_system.h"
#include "z_zone.h"
-#ifdef __GNUG__
-#pragma implementation "w_wad.h"
-#endif
#include "w_wad.h"
@@ -84,14 +75,21 @@ void strupr (char* s)
while (*s) { *s = toupper(*s); s++; }
}
-int filelength (int handle)
+int filelength (FILE *handle)
{
- struct stat fileinfo;
+ long savedpos;
+ long length;
+ // save the current position in the file
+ savedpos = ftell(handle);
- if (fstat (handle,&fileinfo) == -1)
- I_Error ("Error fstating");
+ // jump to the end and find the length
+ fseek(handle, 0, SEEK_END);
+ length = ftell(handle);
+
+ // go back to the old location
+ fseek(handle, savedpos, SEEK_SET);
- return fileinfo.st_size;
+ return length;
}
@@ -156,12 +154,12 @@ void W_AddFile (char *filename)
wadinfo_t header;
lumpinfo_t* lump_p;
unsigned i;
- int handle;
+ FILE *handle;
int length;
int startlump;
filelump_t* fileinfo;
filelump_t singleinfo;
- int storehandle;
+ FILE *storehandle;
// open the file and add to directory
@@ -173,7 +171,7 @@ void W_AddFile (char *filename)
reloadlump = numlumps;
}
- if ( (handle = open (filename,O_RDONLY | O_BINARY)) == -1)
+ if ( (handle = fopen(filename,"rb")) == NULL)
{
printf (" couldn't open %s\n",filename);
return;
@@ -194,7 +192,7 @@ void W_AddFile (char *filename)
else
{
// WAD file
- read (handle, &header, sizeof(header));
+ fread (&header, sizeof(header), 1, handle);
if (strncmp(header.identification,"IWAD",4))
{
// Homebrew levels?
@@ -210,8 +208,8 @@ void W_AddFile (char *filename)
header.infotableofs = LONG(header.infotableofs);
length = header.numlumps*sizeof(filelump_t);
fileinfo = alloca (length);
- lseek (handle, header.infotableofs, SEEK_SET);
- read (handle, fileinfo, length);
+ fseek(handle, header.infotableofs, SEEK_SET);
+ fread(fileinfo, length, 1, handle);
numlumps += header.numlumps;
}
@@ -224,7 +222,7 @@ void W_AddFile (char *filename)
lump_p = &lumpinfo[startlump];
- storehandle = reloadname ? -1 : handle;
+ storehandle = reloadname ? NULL : handle;
for (i=startlump ; i<numlumps ; i++,lump_p++, fileinfo++)
{
@@ -235,7 +233,7 @@ void W_AddFile (char *filename)
}
if (reloadname)
- close (handle);
+ fclose (handle);
}
@@ -252,23 +250,23 @@ void W_Reload (void)
int lumpcount;
lumpinfo_t* lump_p;
unsigned i;
- int handle;
+ FILE *handle;
int length;
filelump_t* fileinfo;
if (!reloadname)
return;
- if ( (handle = open (reloadname,O_RDONLY | O_BINARY)) == -1)
+ if ( (handle = fopen(reloadname,"rb")) == NULL)
I_Error ("W_Reload: couldn't open %s",reloadname);
- read (handle, &header, sizeof(header));
+ fread(&header, sizeof(header), 1, handle);
lumpcount = LONG(header.numlumps);
header.infotableofs = LONG(header.infotableofs);
length = lumpcount*sizeof(filelump_t);
fileinfo = alloca (length);
- lseek (handle, header.infotableofs, SEEK_SET);
- read (handle, fileinfo, length);
+ fseek(handle, header.infotableofs, SEEK_SET);
+ fread(fileinfo, length, 1, handle);
// Fill in lumpinfo
lump_p = &lumpinfo[reloadlump];
@@ -284,7 +282,7 @@ void W_Reload (void)
lump_p->size = LONG(fileinfo->size);
}
- close (handle);
+ fclose(handle);
}
@@ -448,7 +446,7 @@ W_ReadLump
{
int c;
lumpinfo_t* l;
- int handle;
+ FILE *handle;
if (lump >= numlumps)
I_Error ("W_ReadLump: %i >= numlumps",lump);
@@ -457,24 +455,24 @@ W_ReadLump
// ??? I_BeginRead ();
- if (l->handle == -1)
+ if (l->handle == NULL)
{
// reloadable file, so use open / read / close
- if ( (handle = open (reloadname,O_RDONLY | O_BINARY)) == -1)
+ if ( (handle = fopen(reloadname,"rb")) == NULL)
I_Error ("W_ReadLump: couldn't open %s",reloadname);
}
else
handle = l->handle;
- lseek (handle, l->position, SEEK_SET);
- c = read (handle, dest, l->size);
+ fseek(handle, l->position, SEEK_SET);
+ c = fread (dest, 1, l->size, handle);
if (c < l->size)
I_Error ("W_ReadLump: only read %i of %i on lump %i",
c,l->size,lump);
- if (l->handle == -1)
- close (handle);
+ if (l->handle == NULL)
+ fclose (handle);
// ??? I_EndRead ();
}