openMSX
Classes | Typedefs | Functions | Variables
openmsx::FileOperations Namespace Reference

Classes

struct  FClose
 

Typedefs

using FILE_t = std::unique_ptr< FILE, FClose >
 
using Stat = struct stat
 

Functions

string expandTilde (std::string_view path)
 Expand the '~' character to the users home directory. More...
 
void mkdir (const std::string &path, mode_t mode)
 Create the specified directory. More...
 
void mkdirp (std::string_view path)
 Acts like the unix command "mkdir -p". More...
 
int unlink (const std::string &path)
 Call unlink() in a platform-independent manner. More...
 
int rmdir (const std::string &path)
 Call rmdir() in a platform-independent manner. More...
 
int deleteRecursive (const std::string &path)
 Recurively delete a file or directory and (in case of a directory) all its sub-components. More...
 
FILE_t openFile (const std::string &filename, const std::string &mode)
 Call fopen() in a platform-independent manner. More...
 
void openofstream (std::ofstream &stream, const std::string &filename)
 Open an ofstream in a platform-independent manner. More...
 
void openofstream (std::ofstream &stream, const std::string &filename, std::ios_base::openmode mode)
 Open an ofstream in a platform-independent manner. More...
 
string_view getFilename (std::string_view path)
 Returns the file portion of a path name. More...
 
string_view getDirName (std::string_view path)
 Returns the directory portion of a path. More...
 
string_view getExtension (std::string_view path)
 Returns the extension portion of a path. More...
 
string_view stripExtension (std::string_view path)
 Returns the path without extension. More...
 
string join (std::string_view part1, std::string_view part2)
 Join two paths. More...
 
string join (string_view part1, string_view part2, string_view part3)
 
string join (string_view part1, string_view part2, string_view part3, string_view part4)
 
string getNativePath (std::string_view path)
 Returns the path in native path-delimiter. More...
 
string getCurrentWorkingDirectory ()
 Returns the current working directory. More...
 
string getAbsolutePath (std::string_view path)
 Transform given path into an absolute path. More...
 
bool isAbsolutePath (std::string_view path)
 Checks whether it's a absolute path or not. More...
 
string getUserHomeDir (std::string_view username)
 Get user's home directory. More...
 
const string & getUserOpenMSXDir ()
 Get the openMSX dir in the user's home directory. More...
 
string getUserDataDir ()
 Get the openMSX data dir in the user's home directory. More...
 
string getSystemDataDir ()
 Get system directory. More...
 
string expandCurrentDirFromDrive (std::string_view path)
 Get the current directory of the specified drive Linux: just return an empty string. More...
 
bool getStat (const std::string &filename, Stat &st)
 Call stat() and return the stat structure. More...
 
bool isRegularFile (const Stat &st)
 
bool isRegularFile (const std::string &filename)
 Is this a regular file (no directory, device, ..)? More...
 
bool isDirectory (const Stat &st)
 
bool isDirectory (const std::string &directory)
 Is this a directory? More...
 
bool exists (const std::string &filename)
 Does this file (directory) exists? More...
 
time_t getModificationDate (const Stat &st)
 Get the date/time of last modification. More...
 
string getNextNumberedFileName (std::string_view directory, std::string_view prefix, std::string_view extension)
 Gets the next numbered file name with the specified prefix in the specified directory, with the specified extension. More...
 
string parseCommandFileArgument (std::string_view argument, std::string_view directory, std::string_view prefix, std::string_view extension)
 Helper function for parsing filename arguments in Tcl commands. More...
 
string getTempDir ()
 Get the name of the temp directory on the system. More...
 
FILE_t openUniqueFile (const std::string &directory, std::string &filename)
 Open a new file with a unique name in the provided directory. More...
 
const std::string & getConventionalPath (const std::string &path)
 Returns the path in conventional path-delimiter. More...
 
std::string getConventionalPath (std::string &&path)
 

Variables

const char nativePathSeparator
 

Typedef Documentation

◆ FILE_t

using openmsx::FileOperations::FILE_t = typedef std::unique_ptr<FILE, FClose>

Definition at line 16 of file FileOperations.hh.

◆ Stat

using openmsx::FileOperations::Stat = typedef struct stat

Definition at line 217 of file FileOperations.hh.

Function Documentation

◆ deleteRecursive()

int openmsx::FileOperations::deleteRecursive ( const std::string &  path)

Recurively delete a file or directory and (in case of a directory) all its sub-components.

Definition at line 323 of file FileOperations.cc.

Referenced by TEST_CASE().

◆ exists()

bool openmsx::FileOperations::exists ( const std::string &  filename)

◆ expandCurrentDirFromDrive()

std::string openmsx::FileOperations::expandCurrentDirFromDrive ( string_view  path)

Get the current directory of the specified drive Linux: just return an empty string.

Definition at line 599 of file FileOperations.cc.

References getConventionalPath(), MAXPATHLEN, and utf8::utf16to8().

◆ expandTilde()

std::string openmsx::FileOperations::expandTilde ( std::string_view  path)

Expand the '~' character to the users home directory.

Parameters
pathPathname, with or without '~' character
Returns
The expanded pathname

Definition at line 195 of file FileOperations.cc.

References getUserHomeDir().

Referenced by openmsx::MSXtar::addDir(), openmsx::configFileContext(), openmsx::FilePoolCore::getFile(), getUserOpenMSXDir(), mkdirp(), parseCommandFileArgument(), openmsx::FileContext::resolve(), and openmsx::FileContext::resolveCreate().

◆ getAbsolutePath()

std::string openmsx::FileOperations::getAbsolutePath ( std::string_view  path)

Transform given path into an absolute path.

Exceptions
FileException

Definition at line 480 of file FileOperations.cc.

References getCurrentWorkingDirectory(), isAbsolutePath(), and join().

Referenced by openmsx::HardwareConfig::createRomConfig(), getSystemDataDir(), and openmsx::Filename::updateAfterLoadState().

◆ getConventionalPath() [1/2]

const std::string& openmsx::FileOperations::getConventionalPath ( const std::string &  path)
inline

Returns the path in conventional path-delimiter.

Parameters
pathThe pathname.
Returns
The path in conventional path-delimiter. On UNI*Y systems, it will have no effect indeed. Just for portability issue. (Especially for Win32)

Definition at line 147 of file FileOperations.hh.

Referenced by expandCurrentDirFromDrive(), getSystemDataDir(), getUserHomeDir(), mkdirp(), and openmsx::CommandLineParser::parse().

◆ getConventionalPath() [2/2]

std::string openmsx::FileOperations::getConventionalPath ( std::string &&  path)
inline

Definition at line 148 of file FileOperations.hh.

◆ getCurrentWorkingDirectory()

std::string openmsx::FileOperations::getCurrentWorkingDirectory ( )

Returns the current working directory.

Exceptions
FileException(for example when directory has been deleted).

Definition at line 461 of file FileOperations.cc.

References MAXPATHLEN, and utf8::utf16to8().

Referenced by getAbsolutePath().

◆ getDirName()

std::string_view openmsx::FileOperations::getDirName ( std::string_view  path)

Returns the directory portion of a path.

Parameters
pathThe pathname
Returns
The directory portion. This includes the ending '/'. If path doesn't have a directory portion the result is an empty string.

Definition at line 398 of file FileOperations.cc.

Referenced by parseCommandFileArgument().

◆ getExtension()

std::string_view openmsx::FileOperations::getExtension ( std::string_view  path)

Returns the extension portion of a path.

Parameters
pathThe pathname
Returns
The extension portion. This excludes the '.'. If path doesn't have an extension portion the result is an empty string.

Definition at line 406 of file FileOperations.cc.

References openmsx::filename, and getFilename().

◆ getFilename()

std::string_view openmsx::FileOperations::getFilename ( std::string_view  path)

Returns the file portion of a path name.

Parameters
pathThe pathname
Returns
The file portion

Definition at line 390 of file FileOperations.cc.

Referenced by openmsx::HardwareConfig::createRomConfig(), getExtension(), and openmsx::FileBase::getOriginalName().

◆ getModificationDate()

time_t openmsx::FileOperations::getModificationDate ( const Stat st)

Get the date/time of last modification.

Definition at line 671 of file FileOperations.cc.

◆ getNativePath()

std::string openmsx::FileOperations::getNativePath ( std::string_view  path)

Returns the path in native path-delimiter.

Parameters
pathThe pathname.
Returns
The path in native path-delimiter. On UNI*Y systems, it will have no effect indeed. Just for portability issue. (Especially for Win32)

Definition at line 444 of file FileOperations.cc.

References ranges::replace().

Referenced by openmsx::LocalFile::LocalFile(), mkdir(), and openmsx::LocalFile::preCacheFile().

◆ getNextNumberedFileName()

std::string openmsx::FileOperations::getNextNumberedFileName ( std::string_view  directory,
std::string_view  prefix,
std::string_view  extension 
)

Gets the next numbered file name with the specified prefix in the specified directory, with the specified extension.

Examples: automatic numbering of filenames for new screenshots or sound logs.

Parameters
directoryName of the directory in the openMSX user dir in which should be searched for the next filename
prefixPrefix of the filename with numbers
extensionExtension of the filename with numbers

Definition at line 695 of file FileOperations.cc.

References getUserOpenMSXDir(), mkdirp(), and strCat().

Referenced by openmsx::StoreMachineCommand::execute(), parseCommandFileArgument(), and openmsx::Paper::save().

◆ getStat()

bool openmsx::FileOperations::getStat ( const std::string &  filename,
Stat st 
)

Call stat() and return the stat structure.

Parameters
filenamethe file path (will be tilde expanded)
stThe stat structute that will be filled in
Returns
true iff success

Definition at line 626 of file FileOperations.cc.

References openmsx::filename, and utf8::utf8to16().

Referenced by exists(), openmsx::detail::foreach_dirent(), isDirectory(), and isRegularFile().

◆ getSystemDataDir()

std::string openmsx::FileOperations::getSystemDataDir ( )

Get system directory.

UNI*Y: statically defined as "/opt/openMSX/share". Win32: use "same directory as .exe" + "/share".

Definition at line 556 of file FileOperations.cc.

References ad_printf, openmsx::filename, getAbsolutePath(), getConventionalPath(), MAXPATHLEN, utf8::unchecked::size(), and utf8::utf16to8().

Referenced by getTempDir(), and openmsx::Interpreter::Interpreter().

◆ getTempDir()

std::string openmsx::FileOperations::getTempDir ( )

Get the name of the temp directory on the system.

Typically /tmp on *nix and C:/WINDOWS/TEMP on windows

Definition at line 752 of file FileOperations.cc.

References getSystemDataDir(), openmsx::L, utf8::utf16to8(), and VLA.

Referenced by TEST_CASE().

◆ getUserDataDir()

std::string openmsx::FileOperations::getUserDataDir ( )

Get the openMSX data dir in the user's home directory.

Default value is "~/.openMSX/share" (UNIX) or "~/openMSX/share" (win)

Definition at line 549 of file FileOperations.cc.

References getUserOpenMSXDir().

Referenced by openmsx::Interpreter::Interpreter().

◆ getUserHomeDir()

std::string openmsx::FileOperations::getUserHomeDir ( std::string_view  username)

Get user's home directory.

Parameters
usernameThe name of the user
Returns
Home directory of the user or empty string in case of error UNI*Y: get from env var "HOME" or from /etc/passwd empty string means current user Win32: Currently use "My Documents" as home directory. Not "Documents and Settings". This is because to support Win9x. Ignores the username parameter

Definition at line 505 of file FileOperations.cc.

References getConventionalPath(), MAXPATHLEN, and utf8::utf16to8().

Referenced by expandTilde().

◆ getUserOpenMSXDir()

const std::string & openmsx::FileOperations::getUserOpenMSXDir ( )

Get the openMSX dir in the user's home directory.

Default value is "~/.openMSX" (UNIX) or "~/openMSX" (win)

Definition at line 535 of file FileOperations.cc.

References expandTilde(), and strCat().

Referenced by openmsx::RestoreMachineCommand::execute(), getNextNumberedFileName(), getUserDataDir(), and parseCommandFileArgument().

◆ isAbsolutePath()

bool openmsx::FileOperations::isAbsolutePath ( std::string_view  path)

Checks whether it's a absolute path or not.

Parameters
pathThe pathname.

Definition at line 491 of file FileOperations.cc.

Referenced by getAbsolutePath(), and join().

◆ isDirectory() [1/2]

bool openmsx::FileOperations::isDirectory ( const Stat st)

◆ isDirectory() [2/2]

bool openmsx::FileOperations::isDirectory ( const std::string &  directory)

Is this a directory?

Definition at line 659 of file FileOperations.cc.

References getStat().

Referenced by mkdirp().

◆ isRegularFile() [1/2]

bool openmsx::FileOperations::isRegularFile ( const Stat st)

◆ isRegularFile() [2/2]

bool openmsx::FileOperations::isRegularFile ( const std::string &  filename)

Is this a regular file (no directory, device, ..)?

Definition at line 648 of file FileOperations.cc.

References openmsx::filename, and getStat().

◆ join() [1/3]

std::string openmsx::FileOperations::join ( std::string_view  part1,
std::string_view  part2 
)

Join two paths.

Returns the equivalent of 'path1 + '/' + path2'. If 'part2' is an absolute path, that path is returned ('part1' is ignored). If 'part1' is empty or if it already ends with '/', there will be no extra '/' added inbetween 'part1' and 'part2'.

Definition at line 423 of file FileOperations.cc.

References isAbsolutePath(), and strCat().

Referenced by openmsx::configFileContext(), openmsx::Reactor::getHwConfigs(), openmsx::FileContext::resolveCreate(), openmsx::RomDatabase::RomDatabase(), and openmsx::userFileContext().

◆ join() [2/3]

std::string openmsx::FileOperations::join ( string_view  part1,
string_view  part2,
string_view  part3 
)

Definition at line 433 of file FileOperations.cc.

References join().

◆ join() [3/3]

std::string openmsx::FileOperations::join ( string_view  part1,
string_view  part2,
string_view  part3,
string_view  part4 
)

Definition at line 438 of file FileOperations.cc.

References join().

◆ mkdir()

void openmsx::FileOperations::mkdir ( const std::string &  path,
mode_t  mode 
)

Create the specified directory.

Does some sanity checks so that it bahaves the same on all platforms. The mode parameter is ignored on windows. For compatibility with *nix creating the root dir (or a drivename) is not an error instead the operation is silently ignored. This function can only create one dircetory at-a-time. You probably want to use the mkdirp function (see below).

Parameters
pathThe path of the directory to create
modeThe permission bits (*nix only)
Exceptions
FileException

Definition at line 220 of file FileOperations.cc.

References StringOp::endsWith(), getNativePath(), and utf8::utf8to16().

◆ mkdirp()

void openmsx::FileOperations::mkdirp ( std::string_view  path)

Acts like the unix command "mkdir -p".

Creates the specified directory, including the parent directories.

Parameters
pathThe path of the directory to create
Exceptions
FileException

Definition at line 248 of file FileOperations.cc.

References expandTilde(), getConventionalPath(), and isDirectory().

Referenced by getNextNumberedFileName(), openmsx::LocalFile::LocalFile(), parseCommandFileArgument(), openmsx::FileContext::resolveCreate(), and TEST_CASE().

◆ openFile()

FILE_t openmsx::FileOperations::openFile ( const std::string &  filename,
const std::string &  mode 
)

Call fopen() in a platform-independent manner.

Parameters
filenamethe file path
modethe mode parameter, same as fopen
Returns
A pointer to the opened file, or nullptr on error On error the global variable 'errno' is filled in (see man fopen for details).

Definition at line 353 of file FileOperations.cc.

References openmsx::filename, and utf8::utf8to16().

Referenced by openmsx::LocalFile::LocalFile(), openmsx::MidiInReader::plugHelper(), openmsx::RS232Tester::plugHelper(), and openmsx::XmlOutputArchive::XmlOutputArchive().

◆ openofstream() [1/2]

void openmsx::FileOperations::openofstream ( std::ofstream &  stream,
const std::string &  filename 
)

Open an ofstream in a platform-independent manner.

Parameters
streaman ofstream
filenamethe file path

Definition at line 367 of file FileOperations.cc.

References openmsx::filename, and utf8::utf8to16().

Referenced by openmsx::MidiOutLogger::plugHelper(), and openmsx::RS232Tester::plugHelper().

◆ openofstream() [2/2]

void openmsx::FileOperations::openofstream ( std::ofstream &  stream,
const std::string &  filename,
std::ios_base::openmode  mode 
)

Open an ofstream in a platform-independent manner.

Parameters
streaman ofstream
filenamethe file path
modethe open mode

Definition at line 378 of file FileOperations.cc.

References openmsx::filename, and utf8::utf8to16().

◆ openUniqueFile()

FILE_t openmsx::FileOperations::openUniqueFile ( const std::string &  directory,
std::string &  filename 
)

Open a new file with a unique name in the provided directory.

Parameters
directorydirectory in which to open the temp file
filename[output param] the name of the resulting file
Returns
pointer to the opened file

Definition at line 783 of file FileOperations.cc.

References openmsx::filename, openmsx::L, utf8::utf16to8(), and utf8::utf8to16().

◆ parseCommandFileArgument()

std::string openmsx::FileOperations::parseCommandFileArgument ( std::string_view  argument,
std::string_view  directory,
std::string_view  prefix,
std::string_view  extension 
)

Helper function for parsing filename arguments in Tcl commands.

  • If argument is empty then getNextNumberedFileName() is used with given directory, prefix and extension.
  • If argument doesn't already end with the given extension that extension is appended.
  • If argument doesn't already include a directory, the given directory is used (and created if required).

Definition at line 722 of file FileOperations.cc.

References StringOp::endsWith(), exists(), expandTilde(), openmsx::filename, getDirName(), getNextNumberedFileName(), getUserOpenMSXDir(), mkdirp(), and strCat().

◆ rmdir()

int openmsx::FileOperations::rmdir ( const std::string &  path)

Call rmdir() in a platform-independent manner.

Definition at line 291 of file FileOperations.cc.

References utf8::utf8to16().

◆ stripExtension()

std::string_view openmsx::FileOperations::stripExtension ( std::string_view  path)

Returns the path without extension.

Parameters
pathThe pathname
Returns
The path without extension. This excludes the '.'. If path doesn't have an extension portion the result remains unchanged.

Definition at line 415 of file FileOperations.cc.

◆ unlink()

int openmsx::FileOperations::unlink ( const std::string &  path)

Call unlink() in a platform-independent manner.

Definition at line 282 of file FileOperations.cc.

References utf8::utf8to16().

Referenced by openmsx::AviWriter::~AviWriter().

Variable Documentation

◆ nativePathSeparator

const char openmsx::FileOperations::nativePathSeparator
Initial value:
=
'/'

Definition at line 18 of file FileOperations.hh.