Data Structures | Defines | 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...
## Defines
#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.
void | FioSeekToFile (uint8 slot, size_t pos)
| Switch to a different file and seek to a position.
size_t | FioGetPos ()
| Get position in the current file.
const char * | FioGetFilename (uint8 slot)
| Get the filename associated with a slot.
byte | FioReadByte ()
| Read a byte from the file.
uint16 | FioReadWord ()
| Read a word (16 bits) from the file (in low endian format).
uint32 | FioReadDword ()
| Read a double word (32 bits) from the file (in low endian format).
void | FioCloseAll ()
| Close all slotted open files.
void | FioOpenFile (int slot, const char *filename, Subdirectory subdir)
| Open a slotted file.
void | FioReadBlock (void *ptr, size_t size)
| Read a block.
void | FioSkipBytes (int n)
| Skip n bytes ahead in the file.
static bool | IsValidSearchPath (Searchpath sp)
| Checks whether the given search path is a valid search path.
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.
bool | FioCheckFileExists (const char *filename, Subdirectory subdir)
| Check whether the given file exists.
char * | FioGetFullPath (char *buf, size_t buflen, Searchpath sp, Subdirectory subdir, const char *filename)
char * | FioFindFullPath (char *buf, size_t buflen, Subdirectory subdir, const char *filename)
| Find a path to the filename in one of the search directories.
char * | FioAppendDirectory (char *buf, size_t buflen, Searchpath sp, Subdirectory subdir)
char * | FioGetDirectory (char *buf, size_t buflen, Subdirectory subdir)
void | SanitizeFilename (char *filename)
| Sanitizes a filename, i.e.
bool | AppendPathSeparator (char *buf, size_t buflen)
| Appends, if necessary, the path separator character to the end of the string.
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.
void * | ReadFileToMem (const char *filename, size_t *lenp, size_t maxsize)
| Load a file into memory.
bool | FileExists (const char *filename)
| Test whether the given filename exists.
const char * | FioTarFirstDir (const char *tarname, Subdirectory subdir)
| Find the first directory in a tar archive.
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.
static DIR * | ttd_opendir (const char *path)
| A wrapper around opendir() which will convert the string from OPENTTD encoding to that of the filesystem.
## Variables
const char * | _searchpaths [NUM_SEARCHPATHS]
| The search paths OpenTTD could search through.
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

bool AppendPathSeparator | ( | char * | buf,
|  | size_t | buflen |
| ) |  |  |

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:

  | buf | string to append the separator to
  | buflen | the length of buf.

Returns:
  true iff the operation succeeded

Definition at line 557 of file fileio.cpp.

Referenced by BuildWithFullPath(), DetermineBasePaths(), DoScanWorkingDirectory(), FileScanner::Scan(), and ScanPath().

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:

  | exe | the path from the current path to the executable

Definition at line 1153 of file fileio.cpp.

References _config_file, _do_scan_working_directory, _highscore_file, _log_file, BASE_DIR, DEBUG, DetermineBasePaths(), FileExists(), FioCreateDirectory(), FioFindFullPath(), FOR_ALL_SEARCHPATHS, free(), GAME_LIBRARY_DIR, IsValidSearchPath(), lengthof, SP_AUTODOWNLOAD_DIR, SP_INSTALLATION_DIR, SP_WORKING_DIR, and str_fmt().

bool ExtractTar | ( | const char * | tar_filename,
|  | Subdirectory | subdir |
| ) |  |  |

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

Parameters:

  | tar_filename | the name of the tar to extract.
  | subdir | The sub directory the tar is in.

Returns:
  false on failure.

Definition at line 927 of file fileio.cpp.

References DEBUG, FioCreateDirectory(), FioFOpenFileTar(), lastof, lengthof, min(), and strecpy().

Referenced by ClientNetworkContentSocketHandler::AfterDownload().

bool FileExists | ( | const char * | filename | ) |

Test whether the given filename exists.

Parameters:

  | filename | the file to test.

Returns:
  true if and only if the file exists.

Definition at line 316 of file fileio.cpp.

Referenced by DeterminePaths(), FioFindFullPath(), AIInstance::LoadCompatibilityScripts(), and MakeScreenshotName().

bool FioCheckFileExists | ( | const char * | filename,
|  | Subdirectory | subdir |
| ) |  |  |

Check whether the given file exists.

Parameters:

  | filename | the file to try for existence.
  | subdir | the subdirectory to look in

Returns:
  true if and only if the file can be opened

Definition at line 302 of file fileio.cpp.

References FioFCloseFile(), and FioFOpenFile().

Referenced by ScriptScanner::AddFile(), FillGRFDetails(), GetTextfile(), LoadNewGRF(), and LoadTranslations().

void FioCloseAll | ( |  | ) |

Close all slotted open files.

Definition at line 205 of file fileio.cpp.

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

Referenced by ShutdownGame().

char* FioFindFullPath | ( | char * | buf,
|  | size_t | buflen,
|  | 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.
  | buflen | Length of the destination buffer.
  | subdir | Subdirectory to try.
  | filename | Filename to look for.

Returns:
  buf containing the path if the path was found, else `NULL`.

Definition at line 354 of file fileio.cpp.

References FileExists(), FOR_ALL_SEARCHPATHS, NUM_SUBDIRS, and strtolower().

Referenced by DeterminePaths().

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:

  | filename | Name of the file to open.
  | subdir | Subdirectory to open.
  | filename | Name of the file to open.

Returns:
  File handle of the opened file, or `NULL` if the file is not available.

Definition at line 460 of file fileio.cpp.

References BASESET_DIR, FioFOpenFile(), FioFOpenFileTar(), FOR_ALL_SEARCHPATHS, lastof, NEWGRF_DIR, NO_DIRECTORY, NUM_SUBDIRS, OLD_DATA_DIR, OLD_GM_DIR, strecpy(), and strtolower().

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

const char* FioGetFilename | ( | uint8 | slot | ) |

Get the filename associated with a slot.

Parameters:

  | slot | Index of queried file.

Returns:
  Name of the file.

Definition at line 72 of file fileio.cpp.

References Fio::shortnames.

Referenced by DecodeSingleSprite(), LoadNewGRFSound(), SpriteAlignerWindow::SetStringParameters(), and WarnCorruptSprite().

size_t FioGetPos | ( |  | ) |

Get position in the current file.

Returns:
  Position in the file.

Definition at line 62 of file fileio.cpp.

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

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

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

Open a slotted file.

Parameters:

  | slot | Index to assign.
  | filename | Name of the file at the disk.
  | subdir | The sub directory to search this file in.

Definition at line 242 of file fileio.cpp.

References Fio::filenames, FioCloseFile(), FioFOpenFile(), FioSeekToFile(), Fio::handles, Fio::shortnames, strtolower(), and usererror().

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

void FioReadBlock | ( | void * | ptr,
|  | size_t | size |
| ) |  |  |

Read a block.

Parameters:

  | ptr | Destination buffer.
  | size | Number of bytes to read.

Definition at line 179 of file fileio.cpp.

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

Referenced by LoadNewGRFSound(), and ReadRecolourSprite().

byte FioReadByte | ( |  | ) |

Read a byte from the file.

Returns:
  Read byte.

Definition at line 125 of file fileio.cpp.

References Fio::buffer_end, Fio::buffer_start, Fio::cur_fh, FIO_BUFFER_SIZE, and Fio::pos.

Referenced by DecodeSingleSprite(), FioReadWord(), FioSkipBytes(), GetGRFContainerVersion(), LoadGrfFile(), LoadGrfFileIndexed(), LoadNewGRFFile(), LoadNewGRFSound(), LoadNextSprite(), and SkipSpriteData().

uint32 FioReadDword | ( |  | ) |

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

Returns:
  Read word.

Definition at line 168 of file fileio.cpp.

References FioReadWord().

Referenced by LoadNewGRFFile(), LoadNewGRFSound(), LoadNextSprite(), and ReadGRFSpriteOffsets().

uint16 FioReadWord | ( |  | ) |

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

Returns:
  Read word.

Definition at line 158 of file fileio.cpp.

References FioReadByte().

Referenced by FioReadDword(), GetGRFContainerVersion(), LoadNewGRFFile(), LoadNewGRFSound(), and LoadNextSprite().

void FioSeekTo | ( | size_t | pos,
|  | int | mode |
| ) |  |  |

Seek in the current file.

Parameters:

  | pos | New position.
  | mode | Type of seek (`SEEK_CUR` means pos is relative to current position, `SEEK_SET` means pos is absolute).

Definition at line 82 of file fileio.cpp.

References Fio::buffer_end, Fio::buffer_start, Fio::cur_fh, FioGetPos(), and Fio::pos.

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

void FioSeekToFile | ( | uint8 | slot,
|  | size_t | pos |
| ) |  |  |

Switch to a different file and seek to a position.

Parameters:

  | slot | Slot number of the new file.
  | pos | New absolute position in the new file.

Definition at line 107 of file fileio.cpp.

References Fio::cur_fh, Fio::filename, Fio::filenames, FioSeekTo(), and Fio::handles.

Referenced by FioOpenFile(), and LoadNewGRFSound().

void FioSkipBytes | ( | int | n | ) |

Skip n bytes ahead in the file.

Parameters:

  | n | Number of bytes to skip reading.

Definition at line 142 of file fileio.cpp.

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

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

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

Find the first directory in a tar archive.

Parameters:

  | tarname | the name of the tar archive to look in.
  | subdir | the subdirectory to look in.

Definition at line 602 of file fileio.cpp.

static bool IsValidSearchPath | ( | Searchpath | sp | ) | `[inline, static]`

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

Parameters:

  | sp | the search path to check

Returns:
  true if the search path is valid

Definition at line 43 of file fileio_func.h.

References _searchpaths.

Referenced by DeterminePaths().

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

Load a file into memory.

Parameters:

  | filename | Name of the file to load.
  | lenp | [out] Length of loaded data.
  | maxsize | Maximum 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 1265 of file fileio.cpp.

References free().

Referenced by ReadLanguagePack().

void SanitizeFilename | ( | char * | filename | ) |

Sanitizes a filename, i.e.

removes all illegal characters from it.

Parameters:

  | filename | the "\0" terminated filename

Definition at line 1243 of file fileio.cpp.

Referenced by GenerateDefaultSaveName().

static DIR* ttd_opendir | ( | const char * | path | ) | `[inline, static]`

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:

  | path | string to open directory of

Returns:
  DIR pointer

Definition at line 159 of file fileio_func.h.

Referenced by FiosGetFileList(), GetLanguageList(), and ScanPath().

## Variable Documentation

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 289 of file fileio.cpp.

Referenced by IsValidSearchPath().