DarkPlaces
Game engine based on the Quake 1 engine by id Software, developed by LadyHavoc
 
fs.h
Go to the documentation of this file.
1/*
2 DarkPlaces file system
3
4 Copyright (C) 2003-2005 Mathieu Olivier
5
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 2
9 of the License, or (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14
15 See the GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to:
19
20 Free Software Foundation, Inc.
21 59 Temple Place - Suite 330
22 Boston, MA 02111-1307, USA
23*/
24
25#ifndef FS_H
26#define FS_H
27
28#include <stddef.h>
29#include <stdarg.h>
30#include "qtypes.h"
31#include "qdefs.h"
32#include "zone.h"
33
34// ------ Types ------ //
35
36typedef struct qfile_s qfile_t;
37typedef int64_t fs_offset_t;
38
39// ------ Variables ------ //
40
41extern char fs_gamedir [MAX_OSPATH];
42extern char fs_basedir [MAX_OSPATH];
43extern char fs_userdir [MAX_OSPATH];
44
45// list of active game directories (empty if not running a mod)
46#define MAX_GAMEDIRS 17 // 16 + gamedirname1
47extern int fs_numgamedirs;
49
50typedef struct vfs_s
51{
52 char gamedir[MAX_OSPATH];
53 char basedir[MAX_OSPATH];
54 char userdir[MAX_OSPATH];
56 char gamedirs[MAX_GAMEDIRS][MAX_QPATH];
57} vfs_t;
58
59// ------ Main functions ------ //
60
61// IMPORTANT: the file path is automatically prefixed by the current game directory for
62// each file created by FS_WriteFile, or opened in "write" or "append" mode by FS_OpenRealFile
63
64qbool FS_AddPack(const char *pakfile, qbool *already_loaded, qbool keep_plain_dirs, qbool dlcache); // already_loaded may be NULL if caller does not care
65const char *FS_WhichPack(const char *filename);
66void FS_CreatePath (char *path);
67int FS_SysOpenFD(const char *filepath, const char *mode, qbool nonblocking); // uses absolute path
68qfile_t* FS_SysOpen (const char* filepath, const char* mode, qbool nonblocking); // uses absolute path
69qfile_t* FS_OpenRealFile (const char* filepath, const char* mode, qbool quiet);
70qfile_t* FS_OpenVirtualFile (const char* filepath, qbool quiet);
71qfile_t* FS_FileFromData (const unsigned char *data, const size_t size, qbool quiet);
72int FS_Close (qfile_t* file);
73void FS_RemoveOnClose(qfile_t* file);
74fs_offset_t FS_Write (qfile_t* file, const void* data, size_t datasize);
75fs_offset_t FS_Read (qfile_t* file, void* buffer, size_t buffersize);
76int FS_Print(qfile_t* file, const char *msg);
77int FS_Printf(qfile_t* file, const char* format, ...) DP_FUNC_PRINTF(2);
78int FS_VPrintf(qfile_t* file, const char* format, va_list ap);
79int FS_Getc (qfile_t* file);
80int FS_UnGetc (qfile_t* file, unsigned char c);
81int FS_Seek (qfile_t* file, fs_offset_t offset, int whence);
82fs_offset_t FS_Tell (qfile_t* file);
83fs_offset_t FS_FileSize (qfile_t* file);
84void FS_Purge (qfile_t* file);
85const char *FS_FileWithoutPath (const char *in);
86const char *FS_FileExtension (const char *in);
87int FS_CheckNastyPath (const char *path, qbool isgamedir);
88void FS_SanitizePath (char *path);
89
90extern const char *const fs_checkgamedir_missing; // "(missing)"
91const char *FS_CheckGameDir(const char *gamedir); // returns NULL if nasty, fs_checkgamedir_missing (exact pointer) if missing
92
93typedef struct
94{
96 char description[8192];
97}
99extern gamedir_t *fs_all_gamedirs; // terminated by entry with empty name
100extern int fs_all_gamedirs_count;
101
102typedef enum addgamedirs_e {
107addgamedirs_t FS_SetGameDirs(int numgamedirs, const char *gamedirs[], qbool failmissing, qbool abortonfail);
108qbool FS_ChangeGameDirs(int numgamedirs, const char *gamedirs[], qbool failmissing);
110int FS_CRCFile(const char *filename, size_t *filesizepointer);
111void FS_UnloadPacks_dlcache(void);
112void FS_Rescan(void);
113
114typedef struct fssearch_s
115{
117 char **filenames;
118 // array of filenames
120}
122
123fssearch_t *FS_Search(const char *pattern, int caseinsensitive, int quiet, const char *packfile);
124void FS_FreeSearch(fssearch_t *search);
125
126unsigned char *FS_LoadFile (const char *path, mempool_t *pool, qbool quiet, fs_offset_t *filesizepointer);
127unsigned char *FS_SysLoadFile (const char *path, mempool_t *pool, qbool quiet, fs_offset_t *filesizepointer);
128qbool FS_WriteFileInBlocks (const char *filename, const void *const *data, const fs_offset_t *len, size_t count);
129qbool FS_WriteFile (const char *filename, const void *data, fs_offset_t len);
130
131
132// ------ Other functions ------ //
133
134void FS_StripExtension (const char *in, char *out, size_t size_out);
135void FS_DefaultExtension (char *path, const char *extension, size_t size_path);
136
137#define FS_FILETYPE_NONE 0
138#define FS_FILETYPE_FILE 1
139#define FS_FILETYPE_DIRECTORY 2
141int FS_FileType (const char *filename);
143int FS_SysFileType (const char *filename);
144
148const char *FS_FileExists (const char *filename);
150qbool FS_SysFileExists (const char *filename);
151
152unsigned char *FS_Deflate(const unsigned char *data, size_t size, size_t *deflated_size, int level, mempool_t *mempool);
153unsigned char *FS_Inflate(const unsigned char *data, size_t size, size_t *inflated_size, mempool_t *mempool);
154
155qbool FS_HasZlib(void);
156
157void FS_Init_SelfPack(void);
158void FS_Init(void);
159void FS_Shutdown(void);
160void FS_Init_Commands(void);
161
162#endif
vector size
static int level
Definition fs.c:481
const char * FS_FileExtension(const char *in)
Definition fs.c:1403
addgamedirs_t FS_SetGameDirs(int numgamedirs, const char *gamedirs[], qbool failmissing, qbool abortonfail)
Definition fs.c:1633
fs_offset_t FS_Read(qfile_t *file, void *buffer, size_t buffersize)
Definition fs.c:3066
char fs_gamedir[MAX_OSPATH]
Definition fs.c:443
gamedir_t * fs_all_gamedirs
Definition fs.c:452
unsigned char * FS_Inflate(const unsigned char *data, size_t size, size_t *inflated_size, mempool_t *mempool)
Definition fs.c:4273
int FS_Printf(qfile_t *file, const char *format,...) DP_FUNC_PRINTF(2)
Definition fs.c:3273
qfile_t * FS_OpenVirtualFile(const char *filepath, qbool quiet)
Definition fs.c:2928
char fs_gamedirs[MAX_GAMEDIRS][MAX_QPATH]
Definition fs.c:449
addgamedirs_t
Definition fs.h:102
@ GAMEDIRS_SUCCESS
Definition fs.h:105
@ GAMEDIRS_ALLGOOD
Definition fs.h:103
@ GAMEDIRS_FAILURE
Definition fs.h:104
void FS_Rescan(void)
Definition fs.c:1538
#define MAX_GAMEDIRS
Definition fs.h:46
qbool FS_WriteFile(const char *filename, const void *data, fs_offset_t len)
Definition fs.c:3592
int FS_SysOpenFD(const char *filepath, const char *mode, qbool nonblocking)
Definition fs.c:2468
fs_offset_t FS_Write(qfile_t *file, const void *data, size_t datasize)
Definition fs.c:3019
const char * FS_CheckGameDir(const char *gamedir)
Definition fs.c:1824
void FS_DefaultExtension(char *path, const char *extension, size_t size_path)
Definition fs.c:3641
qbool FS_ChangeGameDirs(int numgamedirs, const char *gamedirs[], qbool failmissing)
Definition fs.c:1719
qbool FS_SysFileExists(const char *filename)
Look for a file in the filesystem only.
Definition fs.c:3744
qbool FS_HasZlib(void)
Definition fs.c:620
unsigned char * FS_LoadFile(const char *path, mempool_t *pool, qbool quiet, fs_offset_t *filesizepointer)
Definition fs.c:3540
void FS_FreeSearch(fssearch_t *search)
Definition fs.c:3963
qfile_t * FS_SysOpen(const char *filepath, const char *mode, qbool nonblocking)
Definition fs.c:2484
int64_t fs_offset_t
Definition fs.h:37
fssearch_t * FS_Search(const char *pattern, int caseinsensitive, int quiet, const char *packfile)
Definition fs.c:3756
fs_offset_t FS_Tell(qfile_t *file)
Definition fs.c:3461
int FS_VPrintf(qfile_t *file, const char *format, va_list ap)
Definition fs.c:3293
void FS_Purge(qfile_t *file)
Definition fs.c:3487
int FS_Seek(qfile_t *file, fs_offset_t offset, int whence)
Definition fs.c:3359
void FS_Init_Commands(void)
Definition fs.c:2117
const char * FS_FileWithoutPath(const char *in)
Definition fs.c:1431
qfile_t * FS_OpenRealFile(const char *filepath, const char *mode, qbool quiet)
Definition fs.c:2901
int FS_FileType(const char *filename)
Look for a file in the packages and in the filesystem.
Definition fs.c:3667
void FS_UnloadPacks_dlcache(void)
Definition fs.c:1485
qbool FS_AddPack(const char *pakfile, qbool *already_loaded, qbool keep_plain_dirs, qbool dlcache)
Definition fs.c:1309
int FS_UnGetc(qfile_t *file, unsigned char c)
Definition fs.c:3341
void FS_StripExtension(const char *in, char *out, size_t size_out)
Definition fs.c:3611
void FS_Init(void)
Definition fs.c:2342
int FS_SysFileType(const char *filename)
Look for a file in the filesystem only.
Definition fs.c:3708
unsigned char * FS_SysLoadFile(const char *path, mempool_t *pool, qbool quiet, fs_offset_t *filesizepointer)
Definition fs.c:3555
void FS_SanitizePath(char *path)
Definition fs.c:2673
void FS_RemoveOnClose(qfile_t *file)
Definition fs.c:3007
fs_offset_t FS_FileSize(qfile_t *file)
Definition fs.c:3474
int FS_Close(qfile_t *file)
Definition fs.c:2970
const char * FS_WhichPack(const char *filename)
Definition fs.c:4091
void FS_Shutdown(void)
Definition fs.c:2364
unsigned char * FS_Deflate(const unsigned char *data, size_t size, size_t *deflated_size, int level, mempool_t *mempool)
Definition fs.c:4178
const char *const fs_checkgamedir_missing
Definition fs.c:438
void FS_CreatePath(char *path)
Definition fs.c:1028
char fs_basedir[MAX_OSPATH]
Definition fs.c:444
int FS_CRCFile(const char *filename, size_t *filesizepointer)
Definition fs.c:4158
int FS_Getc(qfile_t *file)
Definition fs.c:3323
int fs_all_gamedirs_count
Definition fs.c:453
int fs_numgamedirs
Definition fs.c:448
int FS_CheckNastyPath(const char *path, qbool isgamedir)
Definition fs.c:2618
int FS_Print(qfile_t *file, const char *msg)
Definition fs.c:3261
qbool FS_WriteFileInBlocks(const char *filename, const void *const *data, const fs_offset_t *len, size_t count)
Definition fs.c:3569
const char * FS_FileExists(const char *filename)
Look for a file in the packages and in the filesystem Returns its canonical name (same case as used i...
Definition fs.c:3693
qfile_t * FS_FileFromData(const unsigned char *data, const size_t size, qbool quiet)
Definition fs.c:2951
void FS_Init_SelfPack(void)
Definition fs.c:2299
qbool FS_IsRegisteredQuakePack(const char *name)
Definition fs.c:4112
char fs_userdir[MAX_OSPATH]
Definition fs.c:442
GLenum mode
Definition glquake.h:718
GLuint buffer
Definition glquake.h:630
GLenum GLenum GLsizei count
Definition glquake.h:656
GLint GLint GLint GLsizei GLsizei GLenum format
Definition glquake.h:649
GLsizeiptr const GLvoid * data
Definition glquake.h:639
GLuint GLuint GLintptr offset
Definition glquake.h:632
const GLchar * name
Definition glquake.h:601
#define MAX_OSPATH
max length of a filesystem pathname
Definition qdefs.h:175
#define DP_FUNC_PRINTF(n)
Definition qdefs.h:14
#define MAX_QPATH
max length of a quake game pathname
Definition qdefs.h:169
bool qbool
Definition qtypes.h:9
char ** filenames
Definition fs.h:117
int numfilenames
Definition fs.h:116
char * filenamesbuffer
Definition fs.h:119
Definition fs.h:94
Definition fs.c:313
Definition fs.h:51
int numgamedirs
Definition fs.h:55