]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - fs.c
made darkplaces compile successfully with g++ to test for errors C doesn't care about...
[xonotic/darkplaces.git] / fs.c
diff --git a/fs.c b/fs.c
index 9b9d7c8f181d73c0aa5162ec83c093c91e9f89a8..1a071c2cc7d69d2f2122fd6f45531f0b0cad4eb1 100644 (file)
--- a/fs.c
+++ b/fs.c
@@ -2,7 +2,6 @@
        DarkPlaces file system
 
        Copyright (C) 2003-2005 Mathieu Olivier
-       Copyright (C) 1999,2000  contributors of the QuakeForge project
 
        This program is free software; you can redistribute it and/or
        modify it under the terms of the GNU General Public License
 # define O_BINARY 0
 #endif
 
+// In case the system doesn't support the O_NONBLOCK flag
+#ifndef O_NONBLOCK
+# define O_NONBLOCK 0
+#endif
+
 
 /*
 
@@ -90,7 +94,11 @@ CONSTANTS
 #define MAX_WBITS              15
 #define Z_OK                   0
 #define Z_STREAM_END   1
-#define ZLIB_VERSION   "1.1.4"
+#define ZLIB_VERSION   "1.2.3"
+
+// Uncomment the following line if the zlib DLL you have still uses
+// the 1.1.x series calling convention on Win32 (WINAPI)
+//#define ZLIB_USES_WINAPI
 
 
 /*
@@ -127,12 +135,10 @@ typedef struct
 } z_stream;
 
 
-typedef enum
-{
-       QFILE_FLAG_NONE         = 0,
-       QFILE_FLAG_PACKED       = (1 << 0),     // inside a package (PAK or PK3)
-       QFILE_FLAG_DEFLATED     = (1 << 1)      // file is compressed using the deflate algorithm (PK3 only)
-} qfile_flags_t;
+// inside a package (PAK or PK3)
+#define QFILE_FLAG_PACKED (1 << 0)
+// file is compressed using the deflate algorithm (PK3 only)
+#define QFILE_FLAG_DEFLATED (1 << 1)
 
 #define FILE_BUFF_SIZE 2048
 typedef struct
@@ -146,7 +152,7 @@ typedef struct
 
 struct qfile_s
 {
-       qfile_flags_t   flags;
+       int                             flags;
        int                             handle;                                 // file descriptor
        fs_offset_t             real_length;                    // uncompressed file size (for files opened in "read" mode)
        fs_offset_t             position;                               // current position in the file
@@ -195,17 +201,15 @@ typedef struct
 
 
 // Packages in memory
-typedef enum
-{
-       PACKFILE_FLAG_NONE              = 0,
-       PACKFILE_FLAG_TRUEOFFS  = (1 << 0),     // the offset in packfile_t is the true contents offset
-       PACKFILE_FLAG_DEFLATED  = (1 << 1)      // file compressed using the deflate algorithm
-} packfile_flags_t;
+// the offset in packfile_t is the true contents offset
+#define PACKFILE_FLAG_TRUEOFFS (1 << 0)
+// file compressed using the deflate algorithm
+#define PACKFILE_FLAG_DEFLATED (1 << 1)
 
 typedef struct
 {
        char name [MAX_QPATH];
-       packfile_flags_t flags;
+       int flags;
        fs_offset_t offset;
        fs_offset_t packsize;   // size in the package
        fs_offset_t realsize;   // real file size (uncompressed)
@@ -245,7 +249,7 @@ void FS_Ls_f(void);
 
 static packfile_t* FS_AddFileToPack (const char* name, pack_t* pack,
                                                                        fs_offset_t offset, fs_offset_t packsize,
-                                                                       fs_offset_t realsize, packfile_flags_t flags);
+                                                                       fs_offset_t realsize, int flags);
 
 
 /*
@@ -271,6 +275,8 @@ char fs_basedir[MAX_OSPATH];
 
 qboolean fs_modified;   // set true if using non-id files
 
+cvar_t scr_screenshot_name = {0, "scr_screenshot_name","dp"};
+
 
 /*
 =============================================================================
@@ -281,7 +287,7 @@ PRIVATE FUNCTIONS - PK3 HANDLING
 */
 
 // Functions exported from zlib
-#ifdef WIN32
+#if defined(WIN32) && defined(ZLIB_USES_WINAPI)
 # define ZEXPORT WINAPI
 #else
 # define ZEXPORT
@@ -332,8 +338,15 @@ qboolean PK3_OpenLibrary (void)
 {
        const char* dllnames [] =
        {
-#ifdef WIN32
+#if defined(WIN64)
+               "zlib64.dll",
+#elif defined(WIN32)
+# ifdef ZLIB_USES_WINAPI
+               "zlibwapi.dll",
                "zlib.dll",
+# else
+               "zlib1.dll",
+# endif
 #elif defined(MACOSX)
                "libz.dylib",
 #else
@@ -382,7 +395,7 @@ qboolean PK3_GetEndOfCentralDir (const char *packfile, int packhandle, pk3_endOf
                maxsize = filesize;
        else
                maxsize = ZIP_MAX_COMMENTS_SIZE + ZIP_END_CDIR_SIZE;
-       buffer = Mem_Alloc (tempmempool, maxsize);
+       buffer = (qbyte *)Mem_Alloc (tempmempool, maxsize);
        lseek (packhandle, filesize - maxsize, SEEK_SET);
        if (read (packhandle, buffer, maxsize) != (fs_offset_t) maxsize)
        {
@@ -436,7 +449,7 @@ int PK3_BuildFileList (pack_t *pack, const pk3_endOfCentralDir_t *eocd)
        fs_offset_t remaining;
 
        // Load the central directory in memory
-       central_dir = Mem_Alloc (tempmempool, eocd->cdir_size);
+       central_dir = (qbyte *)Mem_Alloc (tempmempool, eocd->cdir_size);
        lseek (pack->handle, eocd->cdir_offset, SEEK_SET);
        read (pack->handle, central_dir, eocd->cdir_size);
 
@@ -486,7 +499,7 @@ int PK3_BuildFileList (pack_t *pack, const pk3_endOfCentralDir_t *eocd)
                        {
                                char filename [sizeof (pack->files[0].name)];
                                fs_offset_t offset, packsize, realsize;
-                               packfile_flags_t flags;
+                               int flags;
 
                                // Extract the name (strip it if necessary)
                                namesize = min(namesize, (int)sizeof (filename) - 1);
@@ -564,12 +577,12 @@ pack_t *FS_LoadPackPK3 (const char *packfile)
 #endif
 
        // Create a package structure in memory
-       pack = Mem_Alloc(fs_mempool, sizeof (pack_t));
+       pack = (pack_t *)Mem_Alloc(fs_mempool, sizeof (pack_t));
        pack->ignorecase = true; // PK3 ignores case
        strlcpy (pack->filename, packfile, sizeof (pack->filename));
        pack->handle = packhandle;
        pack->numfiles = eocd.nbentries;
-       pack->files = Mem_Alloc(fs_mempool, eocd.nbentries * sizeof(packfile_t));
+       pack->files = (packfile_t *)Mem_Alloc(fs_mempool, eocd.nbentries * sizeof(packfile_t));
        pack->next = packlist;
        packlist = pack;
 
@@ -638,7 +651,7 @@ Add a file to the list of files contained into a package
 */
 static packfile_t* FS_AddFileToPack (const char* name, pack_t* pack,
                                                                         fs_offset_t offset, fs_offset_t packsize,
-                                                                        fs_offset_t realsize, packfile_flags_t flags)
+                                                                        fs_offset_t realsize, int flags)
 {
        int (*strcmp_funct) (const char* str1, const char* str2);
        int left, right, middle;
@@ -775,16 +788,16 @@ pack_t *FS_LoadPackPAK (const char *packfile)
                return NULL;
        }
 
-       pack = Mem_Alloc(fs_mempool, sizeof (pack_t));
+       pack = (pack_t *)Mem_Alloc(fs_mempool, sizeof (pack_t));
        pack->ignorecase = false; // PAK is case sensitive
        strlcpy (pack->filename, packfile, sizeof (pack->filename));
        pack->handle = packhandle;
        pack->numfiles = 0;
-       pack->files = Mem_Alloc(fs_mempool, numpackfiles * sizeof(packfile_t));
+       pack->files = (packfile_t *)Mem_Alloc(fs_mempool, numpackfiles * sizeof(packfile_t));
        pack->next = packlist;
        packlist = pack;
 
-       info = Mem_Alloc(tempmempool, sizeof(*info) * numpackfiles);
+       info = (dpackfile_t *)Mem_Alloc(tempmempool, sizeof(*info) * numpackfiles);
        lseek (packhandle, header.dirofs, SEEK_SET);
        read (packhandle, (void *)info, header.dirlen);
 
@@ -832,7 +845,7 @@ void FS_AddGameDirectory (const char *dir)
                        pak = FS_LoadPackPAK (pakfile);
                        if (pak)
                        {
-                               search = Mem_Alloc(fs_mempool, sizeof(searchpath_t));
+                               search = (searchpath_t *)Mem_Alloc(fs_mempool, sizeof(searchpath_t));
                                search->pack = pak;
                                search->next = fs_searchpaths;
                                fs_searchpaths = search;
@@ -851,7 +864,7 @@ void FS_AddGameDirectory (const char *dir)
                        pak = FS_LoadPackPK3 (pakfile);
                        if (pak)
                        {
-                               search = Mem_Alloc(fs_mempool, sizeof(searchpath_t));
+                               search = (searchpath_t *)Mem_Alloc(fs_mempool, sizeof(searchpath_t));
                                search->pack = pak;
                                search->next = fs_searchpaths;
                                fs_searchpaths = search;
@@ -864,7 +877,7 @@ void FS_AddGameDirectory (const char *dir)
 
        // Add the directory to the search path
        // (unpacked files have the priority over packed files)
-       search = Mem_Alloc(fs_mempool, sizeof(searchpath_t));
+       search = (searchpath_t *)Mem_Alloc(fs_mempool, sizeof(searchpath_t));
        strlcpy (search->filename, dir, sizeof (search->filename));
        search->next = fs_searchpaths;
        fs_searchpaths = search;
@@ -939,7 +952,7 @@ void FS_Init (void)
        if (strstr(com_argv[0], ".app/"))
        {
                char *split;
-               char temp[4096];
+
                split = strstr(com_argv[0], ".app/");
                while (split > com_argv[0] && *split != '/')
                        split--;
@@ -974,7 +987,7 @@ void FS_Init (void)
                        if (!com_argv[i] || com_argv[i][0] == '+' || com_argv[i][0] == '-')
                                break;
 
-                       search = Mem_Alloc(fs_mempool, sizeof(searchpath_t));
+                       search = (searchpath_t *)Mem_Alloc(fs_mempool, sizeof(searchpath_t));
                        if (!strcasecmp (FS_FileExtension(com_argv[i]), "pak"))
                        {
                                search->pack = FS_LoadPackPAK (com_argv[i]);
@@ -1113,12 +1126,10 @@ static qfile_t* FS_SysOpen (const char* filepath, const char* mode, qboolean non
                }
        }
 
-#ifndef WIN32
        if (nonblocking)
                opt |= O_NONBLOCK;
-#endif
 
-       file = Mem_Alloc (fs_mempool, sizeof (*file));
+       file = (qfile_t *)Mem_Alloc (fs_mempool, sizeof (*file));
        memset (file, 0, sizeof (*file));
        file->ungetc = EOF;
 
@@ -1188,7 +1199,7 @@ qfile_t *FS_OpenPackedFile (pack_t* pack, int pack_ind)
                return NULL;
        }
 
-       file = Mem_Alloc (fs_mempool, sizeof (*file));
+       file = (qfile_t *)Mem_Alloc (fs_mempool, sizeof (*file));
        memset (file, 0, sizeof (*file));
        file->handle = dup_handle;
        file->flags = QFILE_FLAG_PACKED;
@@ -1204,7 +1215,7 @@ qfile_t *FS_OpenPackedFile (pack_t* pack, int pack_ind)
                file->flags |= QFILE_FLAG_DEFLATED;
 
                // We need some more variables
-               ztk = Mem_Alloc (fs_mempool, sizeof (*ztk));
+               ztk = (ztoolkit_t *)Mem_Alloc (fs_mempool, sizeof (*ztk));
 
                ztk->comp_length = pfile->packsize;
 
@@ -1722,13 +1733,13 @@ int FS_VPrintf (qfile_t* file, const char* format, va_list ap)
        char *tempbuff = NULL;
 
        buff_size = 1024;
-       tempbuff = Mem_Alloc (tempmempool, buff_size);
+       tempbuff = (char *)Mem_Alloc (tempmempool, buff_size);
        len = dpvsnprintf (tempbuff, buff_size, format, ap);
        while (len < 0)
        {
                Mem_Free (tempbuff);
                buff_size *= 2;
-               tempbuff = Mem_Alloc (tempmempool, buff_size);
+               tempbuff = (char *)Mem_Alloc (tempmempool, buff_size);
                len = dpvsnprintf (tempbuff, buff_size, format, ap);
        }
 
@@ -1848,7 +1859,7 @@ int FS_Seek (qfile_t* file, fs_offset_t offset, int whence)
 
        // We need a big buffer to force inflating into it directly
        buffersize = 2 * sizeof (file->buff);
-       buffer = Mem_Alloc (tempmempool, buffersize);
+       buffer = (qbyte *)Mem_Alloc (tempmempool, buffersize);
 
        // Skip all data until we reach the requested offset
        while (offset > file->position)
@@ -1915,7 +1926,7 @@ qbyte *FS_LoadFile (const char *path, mempool_t *pool, qboolean quiet)
        if (!file)
                return NULL;
 
-       buf = Mem_Alloc (pool, fs_filesize + 1);
+       buf = (qbyte *)Mem_Alloc (pool, fs_filesize + 1);
        buf[fs_filesize] = '\0';
 
        FS_Read (file, buf, fs_filesize);
@@ -2099,7 +2110,7 @@ fssearch_t *FS_Search(const char *pattern, int caseinsensitive, int quiet)
        separator = max(slash, backslash);
        separator = max(separator, colon);
        basepathlength = separator ? (separator + 1 - pattern) : 0;
-       basepath = Mem_Alloc (tempmempool, basepathlength + 1);
+       basepath = (char *)Mem_Alloc (tempmempool, basepathlength + 1);
        if (basepathlength)
                memcpy(basepath, pattern, basepathlength);
        basepath[basepathlength] = 0;
@@ -2186,7 +2197,7 @@ fssearch_t *FS_Search(const char *pattern, int caseinsensitive, int quiet)
                        numfiles++;
                        numchars += (int)strlen(listtemp->text) + 1;
                }
-               search = Z_Malloc(sizeof(fssearch_t) + numchars + numfiles * sizeof(char *));
+               search = (fssearch_t *)Z_Malloc(sizeof(fssearch_t) + numchars + numfiles * sizeof(char *));
                search->filenames = (char **)((char *)search + sizeof(fssearch_t));
                search->filenamesbuffer = (char *)((char *)search + sizeof(fssearch_t) + numfiles * sizeof(char *));
                search->numfilenames = (int)numfiles;