OpenTTD
Data Structures | Macros | Functions | Variables
fileio_func.h File Reference

Functions for Standard In/Out file operations. More...

#include "core/enum_type.hpp"
#include "fileio_type.h"
#include <sys/types.h>
#include <dirent.h>

Go to the source code of this file.

Data Structures

class  FileScanner
 Helper for scanning for files with a given name. More...
 
class  TarScanner
 Helper for scanning for files with tar as extension. More...
 

Macros

#define FOR_ALL_SEARCHPATHS(sp)   for (sp = SP_FIRST_DIR; sp < NUM_SEARCHPATHS; sp++) if (IsValidSearchPath(sp))
 Iterator for all the search paths.
 

Functions

void FioSeekTo (size_t pos, int mode)
 Seek in the current file. More...
 
void FioSeekToFile (uint8 slot, size_t pos)
 Switch to a different file and seek to a position. More...
 
size_t FioGetPos ()
 Get position in the current file. More...
 
const char * FioGetFilename (uint8 slot)
 Get the filename associated with a slot. More...
 
byte FioReadByte ()
 Read a byte from the file. More...
 
uint16 FioReadWord ()
 Read a word (16 bits) from the file (in low endian format). More...
 
uint32 FioReadDword ()
 Read a double word (32 bits) from the file (in low endian format). More...
 
void FioCloseAll ()
 Close all slotted open files. More...
 
void FioOpenFile (int slot, const char *filename, Subdirectory subdir)
 Open a slotted file. More...
 
void FioReadBlock (void *ptr, size_t size)
 Read a block. More...
 
void FioSkipBytes (int n)
 Skip n bytes ahead in the file. More...
 
static bool IsValidSearchPath (Searchpath sp)
 Checks whether the given search path is a valid search path. More...
 
void FioFCloseFile (FILE *f)
 Close a file in a safe way.
 
FILE * FioFOpenFile (const char *filename, const char *mode, Subdirectory subdir, size_t *filesize=NULL)
 Opens a OpenTTD file somewhere in a personal or global directory. More...
 
bool FioCheckFileExists (const char *filename, Subdirectory subdir)
 Check whether the given file exists. More...
 
char * FioGetFullPath (char *buf, const char *last, Searchpath sp, Subdirectory subdir, const char *filename)
 
char * FioFindFullPath (char *buf, const char *last, Subdirectory subdir, const char *filename)
 Find a path to the filename in one of the search directories. More...
 
char * FioAppendDirectory (char *buf, const char *last, Searchpath sp, Subdirectory subdir)
 
char * FioGetDirectory (char *buf, const char *last, Subdirectory subdir)
 
const char * FiosGetScreenshotDir ()
 Get the directory for screenshots. More...
 
void SanitizeFilename (char *filename)
 Sanitizes a filename, i.e. More...
 
bool AppendPathSeparator (char *buf, const char *last)
 Appends, if necessary, the path separator character to the end of the string. More...
 
void DeterminePaths (const char *exe)
 Acquire the base paths (personal dir and game data dir), fill all other paths (save dir, autosave dir etc) and make the save and scenario directories. More...
 
void * ReadFileToMem (const char *filename, size_t *lenp, size_t maxsize)
 Load a file into memory. More...
 
bool FileExists (const char *filename)
 Test whether the given filename exists. More...
 
const char * FioTarFirstDir (const char *tarname, Subdirectory subdir)
 Find the first directory in a tar archive. More...
 
void FioTarAddLink (const char *src, const char *dest, Subdirectory subdir)
 
bool ExtractTar (const char *tar_filename, Subdirectory subdir)
 Extract the tar with the given filename in the directory where the tar resides. More...
 
static DIRttd_opendir (const char *path)
 A wrapper around opendir() which will convert the string from OPENTTD encoding to that of the filesystem. More...
 

Variables

const char * _searchpaths [NUM_SEARCHPATHS]
 The search paths OpenTTD could search through. More...
 
const char * _personal_dir
 custom directory for personal settings, saves, newgrf, etc.
 

Detailed Description

Functions for Standard In/Out file operations.

Definition in file fileio_func.h.

Function Documentation

◆ AppendPathSeparator()

bool AppendPathSeparator ( char *  buf,
const char *  last 
)

Appends, if necessary, the path separator character to the end of the string.

It does not add the path separator to zero-sized strings.

Parameters
bufstring to append the separator to
lastthe last element of buf.
Returns
true iff the operation succeeded

Definition at line 573 of file fileio.cpp.

◆ DeterminePaths()

void DeterminePaths ( const char *  exe)

Acquire the base paths (personal dir and game data dir), fill all other paths (save dir, autosave dir etc) and make the save and scenario directories.

Parameters
exethe path from the current path to the executable

Definition at line 1171 of file fileio.cpp.

References DetermineBasePaths().

◆ ExtractTar()

bool ExtractTar ( const char *  tar_filename,
Subdirectory  subdir 
)

Extract the tar with the given filename in the directory where the tar resides.

Parameters
tar_filenamethe name of the tar to extract.
subdirThe sub directory the tar is in.
Returns
false on failure.

Definition at line 924 of file fileio.cpp.

◆ FileExists()

bool FileExists ( const char *  filename)

Test whether the given filename exists.

Parameters
filenamethe file to test.
Returns
true if and only if the file exists.

Definition at line 326 of file fileio.cpp.

References OTTD2FS().

◆ FioCheckFileExists()

bool FioCheckFileExists ( const char *  filename,
Subdirectory  subdir 
)

Check whether the given file exists.

Parameters
filenamethe file to try for existence.
subdirthe subdirectory to look in
Returns
true if and only if the file can be opened

Definition at line 312 of file fileio.cpp.

References FioFCloseFile(), and FioFOpenFile().

Referenced by FillGRFDetails(), and GRFLoadConfig().

◆ FioCloseAll()

void FioCloseAll ( )

Close all slotted open files.

Definition at line 213 of file fileio.cpp.

References FioCloseFile(), Fio::handles, and lengthof.

◆ FioFindFullPath()

char* FioFindFullPath ( char *  buf,
const char *  last,
Subdirectory  subdir,
const char *  filename 
)

Find a path to the filename in one of the search directories.

Parameters
buf[out] Destination buffer for the path.
lastEnd of the destination buffer.
subdirSubdirectory to try.
filenameFilename to look for.
Returns
buf containing the path if the path was found, else NULL.

Definition at line 364 of file fileio.cpp.

◆ FioFOpenFile()

FILE* FioFOpenFile ( const char *  filename,
const char *  mode,
Subdirectory  subdir,
size_t *  filesize 
)

Opens a OpenTTD file somewhere in a personal or global directory.

Parameters
filenameName of the file to open.
subdirSubdirectory to open.
filenameName of the file to open.
Returns
File handle of the opened file, or NULL if the file is not available.

Definition at line 474 of file fileio.cpp.

Referenced by ScriptFileChecksumCreator::AddFile(), ScenarioScanner::AddFile(), CalcGRFMD5Sum(), MD5File::CheckMD5(), GraphicsSet::CheckMD5(), DisplaySplashImage(), FioCheckFileExists(), FioOpenFile(), Squirrel::LoadFile(), TextfileWindow::LoadTextfile(), IniFile::OpenFile(), ReadRawLanguageStrings(), and CrashLog::WriteCrashLog().

◆ FioGetFilename()

const char* FioGetFilename ( uint8  slot)

Get the filename associated with a slot.

Parameters
slotIndex of queried file.
Returns
Name of the file.

Definition at line 78 of file fileio.cpp.

References Fio::shortnames.

Referenced by WarnCorruptSprite().

◆ FioGetPos()

size_t FioGetPos ( )

Get position in the current file.

Returns
Position in the file.

Definition at line 68 of file fileio.cpp.

References Fio::buffer_end, and Fio::pos.

Referenced by DefineGotoLabel(), FioReadBlock(), FioSeekTo(), GetGRFContainerVersion(), LoadNextSprite(), and ReadGRFSpriteOffsets().

◆ FioOpenFile()

void FioOpenFile ( int  slot,
const char *  filename,
Subdirectory  subdir 
)

Open a slotted file.

Parameters
slotIndex to assign.
filenameName of the file at the disk.
subdirThe sub directory to search this file in.

Definition at line 250 of file fileio.cpp.

References Fio::filename, Fio::filenames, FioCloseFile(), FioFOpenFile(), Fio::handles, Fio::pos, and usererror().

Referenced by FioSeekTo(), LoadGrfFile(), and LoadGrfFileIndexed().

◆ FioReadBlock()

void FioReadBlock ( void *  ptr,
size_t  size 
)

Read a block.

Parameters
ptrDestination buffer.
sizeNumber of bytes to read.

Definition at line 187 of file fileio.cpp.

References Fio::cur_fh, FioGetPos(), FioSeekTo(), and Fio::pos.

◆ FioReadByte()

byte FioReadByte ( )

◆ FioReadDword()

uint32 FioReadDword ( )

Read a double word (32 bits) from the file (in low endian format).

Returns
Read word.

Definition at line 176 of file fileio.cpp.

References FioReadWord().

Referenced by ImportGRFSound(), LoadNextSprite(), and ReadGRFSpriteOffsets().

◆ FioReadWord()

uint16 FioReadWord ( )

Read a word (16 bits) from the file (in low endian format).

Returns
Read word.

Definition at line 166 of file fileio.cpp.

References FioReadByte().

Referenced by FioReadDword(), GetGRFContainerVersion(), ImportGRFSound(), and LoadNextSprite().

◆ FioSeekTo()

void FioSeekTo ( size_t  pos,
int  mode 
)

Seek in the current file.

Parameters
posNew position.
modeType of seek (SEEK_CUR means pos is relative to current position, SEEK_SET means pos is absolute).

Definition at line 88 of file fileio.cpp.

References Fio::buffer_end, Fio::buffer_start, Fio::cur_fh, DEBUG, Fio::filename, Fio::filenames, FIO_BUFFER_SIZE, FioGetPos(), FioOpenFile(), Fio::handles, and Fio::pos.

Referenced by FioReadBlock(), GetGRFContainerVersion(), and ReadGRFSpriteOffsets().

◆ FioSeekToFile()

void FioSeekToFile ( uint8  slot,
size_t  pos 
)

Switch to a different file and seek to a position.

Parameters
slotSlot number of the new file.
posNew absolute position in the new file.

Definition at line 115 of file fileio.cpp.

References Fio::handles.

◆ FiosGetScreenshotDir()

const char* FiosGetScreenshotDir ( )

Get the directory for screenshots.

Returns
path to screenshots

Definition at line 644 of file fios.cpp.

◆ FioSkipBytes()

void FioSkipBytes ( int  n)

Skip n bytes ahead in the file.

Parameters
nNumber of bytes to skip reading.

Definition at line 150 of file fileio.cpp.

References Fio::buffer_end, FioReadByte(), and min().

Referenced by LoadNextSprite(), ReadGRFSpriteOffsets(), and SkipSpriteData().

◆ FioTarFirstDir()

const char* FioTarFirstDir ( const char *  tarname,
Subdirectory  subdir 
)

Find the first directory in a tar archive.

Parameters
tarnamethe name of the tar archive to look in.
subdirthe subdirectory to look in.

Definition at line 592 of file fileio.cpp.

◆ IsValidSearchPath()

static bool IsValidSearchPath ( Searchpath  sp)
inlinestatic

Checks whether the given search path is a valid search path.

Parameters
spthe search path to check
Returns
true if the search path is valid

Definition at line 43 of file fileio_func.h.

◆ ReadFileToMem()

void* ReadFileToMem ( const char *  filename,
size_t *  lenp,
size_t  maxsize 
)

Load a file into memory.

Parameters
filenameName of the file to load.
lenp[out] Length of loaded data.
maxsizeMaximum size to load.
Returns
Pointer to new memory containing the loaded data, or NULL if loading failed.
Note
If maxsize less than the length of the file, loading fails.

Definition at line 1319 of file fileio.cpp.

Referenced by ReadLanguagePack().

◆ SanitizeFilename()

void SanitizeFilename ( char *  filename)

Sanitizes a filename, i.e.

removes all illegal characters from it.

Parameters
filenamethe "\0" terminated filename

Definition at line 1297 of file fileio.cpp.

◆ ttd_opendir()

static DIR* ttd_opendir ( const char *  path)
inlinestatic

A wrapper around opendir() which will convert the string from OPENTTD encoding to that of the filesystem.

For all purposes this function behaves the same as the original opendir function

Parameters
pathstring to open directory of
Returns
DIR pointer

Definition at line 147 of file fileio_func.h.

Referenced by GetLanguageList().

Variable Documentation

◆ _searchpaths

const char* _searchpaths[NUM_SEARCHPATHS]

The search paths OpenTTD could search through.

At least one of the slots has to be filled with a path. NULL paths tell that there is no such path for the current operating system.

Definition at line 299 of file fileio.cpp.

Referenced by DoScanWorkingDirectory().