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 (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 (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 (string_view path)
 Returns the file portion of a path name. More...
 
string_view getDirName (string_view path)
 Returns the directory portion of a path. More...
 
string_view getExtension (string_view path)
 Returns the extension portion of a path. More...
 
string_view stripExtension (string_view path)
 Returns the path without extension. More...
 
string join (string_view part1, 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 (string_view path)
 Returns the path in native path-delimiter. More...
 
string getConventionalPath (string_view path)
 Returns the path in conventional path-delimiter. More...
 
string getCurrentWorkingDirectory ()
 Returns the current working directory. More...
 
string getAbsolutePath (string_view path)
 Transform given path into an absolute path. More...
 
bool isAbsolutePath (string_view path)
 Checks whether it's a absolute path or not. More...
 
string getUserHomeDir (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 (string_view path)
 Get the current directory of the specified drive Linux: just return an empty string. More...
 
bool getStat (string_view filename, Stat &st)
 Call stat() and return the stat structure. More...
 
bool isRegularFile (const Stat &st)
 
bool isRegularFile (string_view filename)
 Is this a regular file (no directory, device, ..)? More...
 
bool isDirectory (const Stat &st)
 
bool isDirectory (string_view directory)
 Is this a directory? More...
 
bool exists (string_view filename)
 Does this file (directory) exists? More...
 
time_t getModificationDate (const Stat &st)
 Get the date/time of last modification. More...
 
string getNextNumberedFileName (string_view directory, string_view prefix, string_view extension)
 Gets the next numbered file name with the specified prefix in the specified directory, with the specified extension. More...
 
string parseCommandFileArgument (string_view argument, string_view directory, string_view prefix, 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...
 

Variables

const char nativePathSeparator
 

Typedef Documentation

◆ FILE_t

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

Definition at line 17 of file FileOperations.hh.

◆ Stat

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

Definition at line 213 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 330 of file FileOperations.cc.

References openmsx::ReadDir::getEntry(), isDirectory(), rmdir(), and unlink().

Referenced by rmdir().

◆ exists()

bool openmsx::FileOperations::exists ( string_view  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 601 of file FileOperations.cc.

References string_view::data(), getConventionalPath(), MAXPATHLEN, string_view::size(), string_view::str(), string_view::substr(), and utf8::utf16to8().

Referenced by openmsx::Completer::completeFileName().

◆ expandTilde()

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

◆ getAbsolutePath()

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

Transform given path into an absolute path.

Exceptions
FileException

Definition at line 483 of file FileOperations.cc.

References getCurrentWorkingDirectory(), isAbsolutePath(), join(), and string_view::str().

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

◆ getConventionalPath()

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

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 455 of file FileOperations.cc.

References begin(), end(), and string_view::str().

Referenced by openmsx::Completer::completeFileName(), expandCurrentDirFromDrive(), getUserHomeDir(), openmsx::DiskChanger::insertDisk(), mkdirp(), and openmsx::CommandLineParser::parse().

◆ getCurrentWorkingDirectory()

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

Returns the current working directory.

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

Definition at line 464 of file FileOperations.cc.

References MAXPATHLEN, and utf8::utf16to8().

Referenced by getAbsolutePath().

◆ getDirName()

string_view openmsx::FileOperations::getDirName ( 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 394 of file FileOperations.cc.

References string_view::npos, string_view::rfind(), and string_view::substr().

Referenced by openmsx::Completer::completeFileName(), and openmsx::HardwareConfig::loadConfig().

◆ getExtension()

string_view openmsx::FileOperations::getExtension ( 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 404 of file FileOperations.cc.

Referenced by openmsx::CommandLineParser::registerFileType().

◆ getFilename()

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

Returns the file portion of a path name.

Parameters
pathThe pathname
Returns
The file portion

Definition at line 384 of file FileOperations.cc.

References string_view::npos, string_view::rfind(), and string_view::substr().

Referenced by openmsx::HardwareConfig::createRomConfig(), openmsx::FileBase::getOriginalName(), openmsx::SCSIHD::SCSIHD(), and openmsx::SCSILS120::~SCSILS120().

◆ getModificationDate()

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

Get the date/time of last modification.

Definition at line 674 of file FileOperations.cc.

Referenced by openmsx::FilePool::getFile().

◆ getNativePath()

std::string openmsx::FileOperations::getNativePath ( 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 446 of file FileOperations.cc.

References begin(), end(), and string_view::str().

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

◆ getNextNumberedFileName()

std::string openmsx::FileOperations::getNextNumberedFileName ( string_view  directory,
string_view  prefix,
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 698 of file FileOperations.cc.

References openmsx::ReadDir::getEntry(), getUserOpenMSXDir(), gl::max(), mkdirp(), and strCat().

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

◆ getStat()

bool openmsx::FileOperations::getStat ( string_view  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 628 of file FileOperations.cc.

Referenced by openmsx::FilePool::getFile(), isDirectory(), openmsx::DirAsDSK::readSectorImpl(), and openmsx::DiskManipulator::unregisterDrive().

◆ 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 558 of file FileOperations.cc.

References countof, and MAXPATHLEN.

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 755 of file FileOperations.cc.

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

Referenced by openmsx::LocalFileReference::LocalFileReference().

◆ 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 551 of file FileOperations.cc.

References getUserOpenMSXDir().

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

◆ getUserHomeDir()

std::string openmsx::FileOperations::getUserHomeDir ( 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 509 of file FileOperations.cc.

References string_view::empty(), getConventionalPath(), MAXPATHLEN, string_view::str(), 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 539 of file FileOperations.cc.

References expandTilde().

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

◆ isAbsolutePath()

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

Checks whether it's a absolute path or not.

Parameters
pathThe pathname.

Definition at line 494 of file FileOperations.cc.

Referenced by openmsx::Completer::completeFileName(), getAbsolutePath(), and join().

◆ isDirectory() [1/2]

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

◆ isDirectory() [2/2]

bool openmsx::FileOperations::isDirectory ( string_view  directory)

Is this a directory?

Definition at line 662 of file FileOperations.cc.

References getStat().

Referenced by deleteRecursive(), and mkdirp().

◆ isRegularFile() [1/2]

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

◆ isRegularFile() [2/2]

bool openmsx::FileOperations::isRegularFile ( string_view  filename)

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

Definition at line 651 of file FileOperations.cc.

◆ join() [1/3]

std::string openmsx::FileOperations::join ( string_view  part1,
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 425 of file FileOperations.cc.

References string_view::back(), string_view::empty(), isAbsolutePath(), string_view::str(), and strCat().

Referenced by openmsx::Completer::completeFileName(), openmsx::configFileContext(), openmsx::GlobalCommandController::getConnection(), openmsx::Reactor::getHwConfigs(), openmsx::HardwareConfig::loadConfig(), 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 435 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 440 of file FileOperations.cc.

Referenced by getAbsolutePath(), and 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 214 of file FileOperations.cc.

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

◆ mkdirp()

void openmsx::FileOperations::mkdirp ( 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 242 of file FileOperations.cc.

References string_view::empty(), expandTilde(), getConventionalPath(), and isDirectory().

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

◆ 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 347 of file FileOperations.cc.

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

◆ 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 361 of file FileOperations.cc.

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

◆ 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 372 of file FileOperations.cc.

◆ 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 786 of file FileOperations.cc.

Referenced by openmsx::LocalFileReference::LocalFileReference().

◆ parseCommandFileArgument()

std::string openmsx::FileOperations::parseCommandFileArgument ( string_view  argument,
string_view  directory,
string_view  prefix,
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 725 of file FileOperations.cc.

References string_view::empty(), and getNextNumberedFileName().

Referenced by openmsx::CassettePlayer::generateChannels(), openmsx::AviRecorder::getFrameHeight(), openmsx::Display::removeLayer(), and openmsx::ReverseManager::~ReverseManager().

◆ rmdir()

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

Call rmdir() in a platform-independent manner.

Definition at line 285 of file FileOperations.cc.

References deleteRecursive(), and utf8::utf8to16().

Referenced by deleteRecursive(), and openmsx::LocalFileReference::~LocalFileReference().

◆ stripExtension()

string_view openmsx::FileOperations::stripExtension ( 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.

References string_view::npos, string_view::rfind(), and string_view::substr().

Referenced by openmsx::VLM5030::writeControl().

◆ unlink()

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

Variable Documentation

◆ nativePathSeparator

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

Definition at line 19 of file FileOperations.hh.

Referenced by openmsx::LocalFileReference::LocalFileReference().