aboutsummaryrefslogtreecommitdiff
path: root/backends/fs/posix
diff options
context:
space:
mode:
Diffstat (limited to 'backends/fs/posix')
-rw-r--r--backends/fs/posix/posix-fs.cpp24
-rw-r--r--backends/fs/posix/posix-fs.h1
2 files changed, 25 insertions, 0 deletions
diff --git a/backends/fs/posix/posix-fs.cpp b/backends/fs/posix/posix-fs.cpp
index 1a6c4e40a5..d388f306fd 100644
--- a/backends/fs/posix/posix-fs.cpp
+++ b/backends/fs/posix/posix-fs.cpp
@@ -252,6 +252,30 @@ Common::WriteStream *POSIXFilesystemNode::createWriteStream() {
return StdioStream::makeFromPath(getPath(), true);
}
+bool POSIXFilesystemNode::create(bool isDirectory) {
+ bool success;
+
+ if (isDirectory) {
+ success = mkdir(_path.c_str(), 0755) == 0;
+ } else {
+ success = creat(_path.c_str(), 0755) != -1;
+ }
+
+ if (success) {
+ setFlags();
+ if (_isValid) {
+ if (_isDirectory != isDirectory) warning("failed to create %s: got %s", isDirectory ? "directory" : "file", _isDirectory ? "directory" : "file");
+ return _isDirectory == isDirectory;
+ }
+
+ warning("POSIXFilesystemNode: %s() was a success, but stat indicates there is no such %s",
+ isDirectory ? "mkdir" : "creat", isDirectory ? "directory" : "file");
+ return false;
+ }
+
+ return false;
+}
+
namespace Posix {
bool assureDirectoryExists(const Common::String &dir, const char *prefix) {
diff --git a/backends/fs/posix/posix-fs.h b/backends/fs/posix/posix-fs.h
index 0703ac5bf5..4ebce7e9d9 100644
--- a/backends/fs/posix/posix-fs.h
+++ b/backends/fs/posix/posix-fs.h
@@ -73,6 +73,7 @@ public:
virtual Common::SeekableReadStream *createReadStream();
virtual Common::WriteStream *createWriteStream();
+ virtual bool create(bool isDirectory);
private:
/**