UFO: Alien Invasion
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
filesys.h File Reference

Filesystem header file. More...

#include <stdio.h>
#include <string.h>
#include "../shared/ufotypes.h"
#include "../shared/cxx.h"

Go to the source code of this file.

Data Structures

struct  qFILE_s
 
struct  filelink_s
 Links one file onto another - like a symlink. More...
 
struct  packfile_t
 
struct  pack_s
 
struct  searchpath_s
 
class  ScopedFile
 

Macros

#define BASEDIRNAME   "base"
 
#define MAX_MAPS   400
 
#define MAX_QPATH   64
 
#define MAX_OSPATH   256
 
#define MAX_FILES   512
 
#define SFF_ARCH   0x01
 
#define SFF_HIDDEN   0x02
 
#define SFF_RDONLY   0x04
 
#define SFF_SUBDIR   0x08
 
#define SFF_SYSTEM   0x10
 

Typedefs

typedef struct qFILE_s qFILE
 
typedef struct filelink_s filelink_t
 Links one file onto another - like a symlink. More...
 
typedef struct pack_s pack_t
 
typedef struct searchpath_s searchpath_t
 

Enumerations

enum  fsMode_t { FS_READ, FS_WRITE, FS_APPEND, FS_APPEND_SYNC }
 
enum  fsOrigin_t { FS_SEEK_CUR, FS_SEEK_END, FS_SEEK_SET }
 
enum  filemode_t { FILE_READ, FILE_WRITE, FILE_APPEND }
 

Functions

int FS_FileLength (qFILE *f)
 Returns the size of a given file or -1 if no file is opened. More...
 
int FS_Seek (qFILE *f, long offset, int origin)
 Sets the file position of the given file. More...
 
int FS_WriteFile (const void *buffer, size_t len, const char *filename)
 
int FS_Write (const void *buffer, int len, qFILE *f)
 Properly handles partial writes. More...
 
int FS_Printf (qFILE *f, const char *msg,...) __attribute__((format(__printf__
 
int void FS_InitFilesystem (bool writeToHomeDir)
 
void FS_AddGameDirectory (const char *dir, bool write)
 Adds the directory to the head of the search path. More...
 
void FS_AddHomeAsGameDirectory (const char *dir, bool write)
 
void FS_RestartFilesystem (const char *gamedir)
 Restart the filesystem (reload all pk3 files) More...
 
const char * FS_Gamedir (void)
 Called to find where to write a file (savegames, etc) More...
 
void FS_CreateOpenPipeFile (const char *filename, qFILE *f)
 
const char * FS_NextPath (const char *prevpath)
 Allows enumerating all of the directories in the search path. More...
 
void FS_ExecAutoexec (void)
 
int FS_GetModList (struct linkedList_t **mods)
 Searches and builds a list of mod directories. More...
 
const char * FS_GetCwd (void)
 Return current working dir. More...
 
void FS_NormPath (char *path)
 Convert operating systems path separators to ufo virtual filesystem separators (/) More...
 
bool FS_FileExists (const char *filename,...) __attribute__((format(__printf__
 
bool void FS_GetMaps (bool reset)
 File the fs_maps array with valid maps. More...
 
int FS_OpenFile (const char *filename, qFILE *file, filemode_t mode)
 Finds and opens the file in the search path. More...
 
void FS_CloseFile (qFILE *f)
 Closes a file handle. More...
 
bool FS_RenameFile (const char *from, const char *to, bool relative)
 Renames a file. More...
 
void FS_RemoveFile (const char *osPath)
 
void FS_CopyFile (const char *fromOSPath, const char *toOSPath)
 Copy a fully specified file from one place to another. More...
 
int FS_LoadFile (const char *path, byte **buffer)
 Filenames are relative to the quake search path. More...
 
int FS_Read2 (void *buffer, int len, qFILE *f, bool failOnEmptyRead)
 Read a file into a given buffer in memory. More...
 
int FS_Read (void *buffer, int len, qFILE *f)
 
void FS_FreeFile (void *buffer)
 
int FS_CheckFile (const char *fmt,...) __attribute__((format(__printf__
 
int int FS_BuildFileList (const char *files)
 Build a filelist. More...
 
const char * FS_NextFileFromFileList (const char *files)
 Returns the next file that is found in the virtual filesystem identified by the given file pattern. More...
 
char * FS_NextScriptHeader (const char *files, const char **name, const char **text)
 
void FS_CreatePath (const char *path)
 Creates any directories needed to store the given filename. More...
 
char ** FS_ListFiles (const char *findname, int *numfiles, unsigned musthave, unsigned canthave)
 Builds a qsorted filelist. More...
 
const char * FS_GetFileData (const char *files)
 Returns the buffer of a file. More...
 
void FS_Shutdown (void)
 cleanup function More...
 

Variables

char * fs_maps [MAX_MAPS]
 
int fs_numInstalledMaps
 

Detailed Description

Filesystem header file.

Definition in file filesys.h.

Macro Definition Documentation

#define BASEDIRNAME   "base"
#define MAX_FILES   512

Definition at line 47 of file filesys.h.

Referenced by FS_ListFiles().

#define MAX_MAPS   400

Definition at line 37 of file filesys.h.

Referenced by FS_GetMaps().

#define SFF_ARCH   0x01

Definition at line 123 of file filesys.h.

Referenced by CompareAttributes().

#define SFF_HIDDEN   0x02
#define SFF_RDONLY   0x04

Definition at line 125 of file filesys.h.

Referenced by CompareAttributes().

#define SFF_SUBDIR   0x08

Definition at line 126 of file filesys.h.

Referenced by CompareAttributes(), FS_AddGameDirectory(), and FS_GetModList().

#define SFF_SYSTEM   0x10

Typedef Documentation

typedef struct filelink_s filelink_t

Links one file onto another - like a symlink.

typedef struct pack_s pack_t
typedef struct qFILE_s qFILE
typedef struct searchpath_s searchpath_t

Enumeration Type Documentation

enum filemode_t

file opening modes

Enumerator
FILE_READ 
FILE_WRITE 
FILE_APPEND 

Definition at line 110 of file filesys.h.

enum fsMode_t
Enumerator
FS_READ 
FS_WRITE 
FS_APPEND 
FS_APPEND_SYNC 

Definition at line 67 of file filesys.h.

enum fsOrigin_t
Enumerator
FS_SEEK_CUR 
FS_SEEK_END 
FS_SEEK_SET 

Definition at line 74 of file filesys.h.

Function Documentation

void FS_AddGameDirectory ( const char *  dir,
bool  write 
)

Adds the directory to the head of the search path.

Note
No ending slash here
Parameters
[in]dirThe directory name relative to the game dir
[in]writeAdd this directory as writable (config files, save games)

Definition at line 495 of file files.cpp.

References com_fileSysPool, Com_Printf(), Com_sprintf(), searchpath_s::filename, FS_ListFiles(), FS_LoadPackFile(), fs_searchpaths, i, MAX_OSPATH, MAX_PACKFILES, Mem_Free, Mem_PoolAllocType, searchpath_s::next, searchpath_s::pack, pakFileExt, Q_streq, Q_StringSort(), Q_strncpyz(), SFF_HIDDEN, SFF_SUBDIR, SFF_SYSTEM, and searchpath_s::write.

Referenced by FS_AddHomeAsGameDirectory(), FS_InitFilesystem(), main(), and TEST_Init().

void FS_AddHomeAsGameDirectory ( const char *  dir,
bool  write 
)
Note
e.g. *nix: Use ~/.ufoai/dir as gamedir
Parameters
[in]dirThe directory name relative to the game dir
[in]writeAdd this directory as writable (config files, save games)
See also
Sys_GetHomeDirectory

Definition at line 655 of file files.cpp.

References FS_AddGameDirectory(), FS_CreatePath(), FS_GetHomeDirectory(), MAX_OSPATH, Q_strcat(), and va().

Referenced by FS_InitFilesystem(), and TEST_Init().

int FS_CheckFile ( const char *  fmt,
  ... 
)
void FS_CopyFile ( const char *  fromOSPath,
const char *  toOSPath 
)

Copy a fully specified file from one place to another.

Todo:
Allow copy of pk3 file content

Definition at line 1652 of file files.cpp.

References com_fileSysPool, Com_Printf(), f, FILE, FS_CreatePath(), len, Mem_Free, Mem_PoolAllocTypeN, SEEK_END, SEEK_SET, Sys_Error(), and Sys_Fopen().

void FS_CreateOpenPipeFile ( const char *  filename,
qFILE f 
)
void FS_CreatePath ( const char *  path)

Creates any directories needed to store the given filename.

See also
Sys_Mkdir
Note
Paths should already be normalized
See also
FS_NormPath

Definition at line 117 of file files.cpp.

References MAX_OSPATH, Q_strncpyz(), and Sys_Mkdir().

Referenced by CL_StartHTTPDownload(), FS_AddHomeAsGameDirectory(), FS_CopyFile(), and FS_OpenFile().

void FS_ExecAutoexec ( void  )

Referenced by Qcommon_Init(), and TEST_Init().

bool FS_FileExists ( const char *  filename,
  ... 
)
int FS_FileLength ( qFILE f)

Returns the size of a given file or -1 if no file is opened.

Definition at line 91 of file files.cpp.

References qFILE_s::f, qFILE_s::name, SEEK_END, SEEK_SET, Sys_Error(), unz_file_info_s::uncompressed_size, UNZ_OK, unzGetCurrentFileInfo(), and qFILE_s::z.

Referenced by ASE_Load(), FS_OpenFile(), FS_WriteFile(), and GAME_LoadTeam().

const char* FS_Gamedir ( void  )
const char* FS_GetCwd ( void  )

Return current working dir.

Definition at line 1568 of file files.cpp.

References FS_NormPath(), MAX_OSPATH, Q_strncpyz(), and Sys_Cwd().

Referenced by CL_Init(), and CL_LanguageTest().

const char* FS_GetFileData ( const char *  files)

Returns the buffer of a file.

Parameters
[in]filesIf nullptr, reset the filelist If not nullptr it may be something like *.cfg to get a list of all config files in base/. Calling FS_GetFileData("*.cfg"); until it returns nullptr is sufficient to get one buffer after another.
Note
You don't have to free the file buffer on the calling side. This is done in this function, too

Definition at line 1135 of file files.cpp.

References Com_Printf(), linkedList_t::data, listBlock_s::files, FS_BuildFileList(), FS_FreeFile(), FS_LoadFile(), MAX_QPATH, linkedList_t::next, listBlock_s::next, listBlock_s::path, Q_streq, and Q_strncpyz().

Referenced by Com_GetScriptChecksum().

bool void FS_GetMaps ( bool  reset)

File the fs_maps array with valid maps.

Parameters
[in]resetIf true the directory is scanned every time for new maps (useful for dedicated servers). If false we only use the maps array (for clients e.g.)
Todo:
paths are normalized here?

Definition at line 1373 of file files.cpp.

References CheckBSPFile(), com_fileSysPool, Com_Printf(), Com_SkipPath(), Com_sprintf(), Com_StripExtension(), pack_s::files, FS_ListFiles(), FS_MapDefSort(), FS_NormPath(), fs_numInstalledMaps, i, MAX_MAPS, MAX_OSPATH, MAX_QPATH, Mem_Free, Mem_PoolAllocTypeN, packfile_t::name, searchpath_s::next, pack_s::numfiles, Q_strncpyz(), SFF_HIDDEN, and SFF_SYSTEM.

Referenced by SV_CompleteMapCommand(), and SV_ListMaps_f().

int FS_GetModList ( struct linkedList_t **  mods)

Searches and builds a list of mod directories.

Definition at line 669 of file files.cpp.

References BASEDIRNAME, FS_GetHomeDirectory(), FS_ListFiles(), i, LIST_AddString(), MAX_OSPATH, Mem_Free, MODS_DIR, PKGDATADIR, Q_strcat(), SFF_HIDDEN, SFF_SUBDIR, SFF_SYSTEM, and va().

Referenced by CLMN_Mods_f().

char** FS_ListFiles ( const char *  findname,
int numfiles,
unsigned  musthave,
unsigned  canthave 
)

Builds a qsorted filelist.

See also
Sys_FindFirst
Sys_FindNext
Sys_FindClose
Note
Don't forget to free the filelist array and the file itself

Definition at line 562 of file files.cpp.

References com_fileSysPool, i, MAX_FILES, MAX_OSPATH, Mem_PoolAllocTypeN, Mem_PoolStrDup, OBJZERO, Q_StringSort(), Q_strlwr(), Q_strncpyz(), Sys_FindClose(), Sys_FindFirst(), and Sys_FindNext().

Referenced by FS_AddGameDirectory(), FS_BuildFileList(), FS_GetMaps(), and FS_GetModList().

const char* FS_NextFileFromFileList ( const char *  files)

Returns the next file that is found in the virtual filesystem identified by the given file pattern.

Parameters
[in]filesThe file pattern to search for. This can e.g. be "*.ogg" or "**.ufo" to also include subdirectories.
Returns
The next found filename or NULL if the end of the list was reached.
Note
Keep in mind that the list is cached and also the position in the list is not reset until you explicitly want this by calling this function with a NULL parameter for the pattern.
If you have to rebuild a file list, use FS_BuildFileList manually. Following calls will then use the new file list.

Definition at line 1079 of file files.cpp.

References Com_Printf(), linkedList_t::data, listBlock_s::files, FS_BuildFileList(), MAX_QPATH, linkedList_t::next, listBlock_s::next, and listBlock_s::path.

Referenced by Cmd_CompleteExecCommand(), GAME_GetImportData(), GAME_GetTeamFileName(), GAME_TeamSlotComments_f(), M_CompleteMusic(), M_RandomTrack_f(), MD2Visitor(), PrecalcNormalsAndTangentsBatch(), S_CompleteSounds(), and TEST_F().

const char* FS_NextPath ( const char *  prevpath)

Allows enumerating all of the directories in the search path.

Note
ignore pk3 here

Definition at line 614 of file files.cpp.

References FS_Gamedir(), searchpath_s::next, and Q_streq.

Referenced by GAME_GetCGameAPI(), and SV_GetGameAPI().

char* FS_NextScriptHeader ( const char *  files,
const char **  name,
const char **  text 
)
void FS_NormPath ( char *  path)

Convert operating systems path separators to ufo virtual filesystem separators (/)

See also
Sys_NormPath

Definition at line 83 of file files.cpp.

References Sys_NormPath().

Referenced by FS_BuildFileList(), FS_GetCwd(), FS_GetMaps(), main(), and U2M_Parameter().

int FS_OpenFile ( const char *  filename,
qFILE file,
filemode_t  mode 
)

Finds and opens the file in the search path.

Parameters
[in]filename
[out]fileThe file pointer
[in]moderead, write, append as an enum
Returns
the filesize or -1 in case of an error
Note
Used for streaming data out of either a pak file or a separate file.

Definition at line 162 of file files.cpp.

References Com_Printf(), Com_sprintf(), qFILE_s::f, FILE_APPEND, FILE_WRITE, packfile_t::filelen, pack_s::filename, qFILE_s::filepos, pack_s::files, FS_CreatePath(), FS_FileLength(), FS_Gamedir(), fs_openedFiles, FS_OpenFile(), pack_s::handle, i, length, MAX_OSPATH, qFILE_s::name, packfile_t::name, filelink_s::next, searchpath_s::next, pack_s::numfiles, Q_strcasecmp, Q_strncpyz(), Sys_Error(), Sys_Fopen(), unz_file_info_s::uncompressed_size, UNZ_OK, unzGetCurrentFileInfo(), unzGetCurrentFileInfoPosition(), unzLocateFile(), unzOpenCurrentFile(), and qFILE_s::z.

Referenced by ASE_Load(), CheckBSPFile(), CIN_OGM_OpenCinematic(), CIN_ROQ_OpenCinematic(), CL_LogEvent(), Com_MD5File(), Com_SHA1File(), Com_SHA2File(), Com_vPrintf(), Com_WriteConfigToFile(), Con_LoadConsoleHistory(), Con_SaveConsoleHistory(), FS_CheckFile(), FS_LoadFile(), FS_OpenFile(), FS_WriteFile(), GAME_GetImportData(), GAME_LoadTeam(), GAME_TeamSlotComments_f(), GenerateFootstepList(), GenerateMaterialFile(), Key_WriteBindings(), MD2SkinEdit(), MD2SkinNum(), R_ScreenShot(), RT_WriteCSVFiles(), SL_CreatePNGFile(), UI_EditorNodeExtract_f(), WEB_CGameDownloadFromUser(), WriteBSPFile(), WriteMapFile(), WriteTGA24(), and WriteToFile().

int FS_Printf ( qFILE f,
const char *  msg,
  ... 
)
int FS_Read2 ( void buffer,
int  len,
qFILE f,
bool  failOnEmptyRead 
)

Read a file into a given buffer in memory.

Parameters
[out]bufferPointer to memory where file contents are written to.
[in]lenThe length of the supplied memory area.
[in]fThe file which is to be read into the memory area.
[in]failOnEmptyReadidk Must have something to with certain readstates that can happen with removable media ?
Returns
The length of the file contents successfully read and written to memory.
Note
buffer is not null-terminated at the end of file reading
This function properly handles partial reads so check that the returned length matches len.
Reads in blocks of 64k.
See also
FS_LoadFile
FS_OpenFile

Definition at line 327 of file files.cpp.

References qFILE_s::f, len, MAX_READ, Sys_Error(), unzReadCurrentFile(), and qFILE_s::z.

Referenced by Com_ReadFromPipe(), and FS_Read().

void FS_RemoveFile ( const char *  osPath)
bool FS_RenameFile ( const char *  from,
const char *  to,
bool  relative 
)

Renames a file.

See also
FS_RemoveFile
FS_CopyFile
Parameters
[in]fromThe source filename
[in]toThe filename we want after the rename
[in]relativeIf relative is true we have to add the FS_Gamedir path for writing

Definition at line 1707 of file files.cpp.

References Com_sprintf(), FS_Gamedir(), MAX_OSPATH, Sys_Error(), and Sys_Rename().

Referenced by CL_FinishHTTPDownload().

void FS_RestartFilesystem ( const char *  gamedir)

Restart the filesystem (reload all pk3 files)

Note
Call this after you finished a download
See also
FS_Shutdown
FS_InitFilesystem

Definition at line 1641 of file files.cpp.

References Com_Printf().

Referenced by CL_FinishHTTPDownload().

int FS_Seek ( qFILE f,
long  offset,
int  origin 
)

Sets the file position of the given file.

Parameters
[in]fThe opened file handle
[in]originfsOrigin_t
[in]offsetThe offset you want to do the
See also
FS_Read

Definition at line 246 of file files.cpp.

References qFILE_s::f, qFILE_s::filepos, FS_Read(), FS_SEEK_CUR, FS_SEEK_END, FS_SEEK_SET, PK3_SEEK_BUFFER_SIZE, SEEK_CUR, SEEK_END, SEEK_SET, Sys_Error(), unzOpenCurrentFile(), unzSetCurrentFileInfoPosition(), and qFILE_s::z.

void FS_Shutdown ( void  )

cleanup function

cleanup function

See also
FS_InitFilesystem
FS_RestartFilesystem

Definition at line 1602 of file files.cpp.

References com_fileSysPool, Com_Printf(), fs_openedFiles, Mem_Free, Mem_FreePool, searchpath_s::next, listBlock_s::next, and unzClose().

Referenced by Qcommon_Shutdown(), and TEST_Shutdown().

int FS_Write ( const void buffer,
int  len,
qFILE f 
)

Properly handles partial writes.

Definition at line 1511 of file files.cpp.

References Com_Printf(), qFILE_s::f, and len.

Referenced by AddLump(), Com_vPrintf(), Con_SaveConsoleHistory(), FS_WriteFile(), MD2SkinEdit(), MD2SkinNum(), R_WriteCompressedTGA(), WriteBSPFile(), WriteTGA24(), and WriteToFile().

int FS_WriteFile ( const void buffer,
size_t  len,
const char *  filename 
)

Variable Documentation

char* fs_maps[MAX_MAPS]

Definition at line 1311 of file files.cpp.

Referenced by SV_CompleteMapCommand(), and SV_ListMaps_f().

int fs_numInstalledMaps

Definition at line 1312 of file files.cpp.

Referenced by FS_GetMaps(), SV_CompleteMapCommand(), and SV_ListMaps_f().