mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-29 14:42:26 +00:00
Added new AbstractFilesystemNode::openForReading & ::openForWriting method, based on StdioStream; changed FilesystemNode to use them
svn-id: r34301
This commit is contained in:
parent
8246582f5e
commit
c350ffabf3
@ -23,6 +23,7 @@
|
||||
*/
|
||||
|
||||
#include "backends/fs/abstract-fs.h"
|
||||
#include "common/file.h"
|
||||
|
||||
const char *AbstractFilesystemNode::lastPathComponent(const Common::String &str, const char sep) {
|
||||
if(str.empty())
|
||||
@ -37,3 +38,21 @@ const char *AbstractFilesystemNode::lastPathComponent(const Common::String &str,
|
||||
|
||||
return cur + 1;
|
||||
}
|
||||
|
||||
Common::SeekableReadStream *AbstractFilesystemNode::openForReading() {
|
||||
// FIXME: Until openForReading is supported by all AbstractFilesystemNode
|
||||
// implementations, we provide this "generic" one, using Common::File.
|
||||
FILE *handle = fopen(getPath().c_str(), "rb");
|
||||
if (handle)
|
||||
return new Common::StdioStream(handle);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Common::WriteStream *AbstractFilesystemNode::openForWriting() {
|
||||
// FIXME: Until openForWriting is supported by all AbstractFilesystemNode
|
||||
// implementations, we provide this "generic" one.
|
||||
FILE *handle = fopen(getPath().c_str(), "wb");
|
||||
if (handle)
|
||||
return new Common::StdioStream(handle);
|
||||
return 0;
|
||||
}
|
||||
|
@ -162,9 +162,24 @@ public:
|
||||
*/
|
||||
virtual bool isWritable() const = 0;
|
||||
|
||||
/* TODO:
|
||||
bool isFile();
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a SeekableReadStream instance corresponding to the file
|
||||
* referred by this node. This assumes that the node actually refers
|
||||
* to a readable file. If this is not the case, 0 is returned.
|
||||
*
|
||||
* @return pointer to the stream object, 0 in case of a failure
|
||||
*/
|
||||
virtual Common::SeekableReadStream *openForReading();
|
||||
|
||||
/**
|
||||
* Creates a WriteStream instance corresponding to the file
|
||||
* referred by this node. This assumes that the node actually refers
|
||||
* to a readable file. If this is not the case, 0 is returned.
|
||||
*
|
||||
* @return pointer to the stream object, 0 in case of a failure
|
||||
*/
|
||||
virtual Common::WriteStream *openForWriting();
|
||||
};
|
||||
|
||||
|
||||
|
@ -23,7 +23,6 @@
|
||||
*/
|
||||
|
||||
#include "common/util.h"
|
||||
#include "common/file.h"
|
||||
#include "common/system.h"
|
||||
#include "backends/fs/abstract-fs.h"
|
||||
#include "backends/fs/fs-factory.h"
|
||||
@ -177,37 +176,28 @@ bool FilesystemNode::lookupFile(FSList &results, const Common::String &p, bool h
|
||||
Common::SeekableReadStream *FilesystemNode::openForReading() {
|
||||
if (_realNode == 0)
|
||||
return 0;
|
||||
#if 0
|
||||
return _realNode->openForReading();
|
||||
#else
|
||||
// FIXME: Until we support openForReading in AbstractFilesystemNode,
|
||||
// we just use Common::File.
|
||||
Common::File *confFile = new Common::File();
|
||||
assert(confFile);
|
||||
if (!confFile->open(*this)) {
|
||||
delete confFile;
|
||||
confFile = 0;
|
||||
|
||||
if (!_realNode->exists()) {
|
||||
warning("File::open: Trying to open a FilesystemNode which does not exist");
|
||||
return false;
|
||||
} else if (_realNode->isDirectory()) {
|
||||
warning("File::open: Trying to open a FilesystemNode which is a directory");
|
||||
return false;
|
||||
}
|
||||
return confFile;
|
||||
#endif
|
||||
|
||||
return _realNode->openForReading();
|
||||
}
|
||||
|
||||
Common::WriteStream *FilesystemNode::openForWriting() {
|
||||
if (_realNode == 0)
|
||||
return 0;
|
||||
#if 0
|
||||
return _realNode->openForWriting();
|
||||
#else
|
||||
// FIXME: Until we support openForWriting in AbstractFilesystemNode,
|
||||
// we just use Common::DumpFile.
|
||||
Common::DumpFile *confFile = new Common::DumpFile();
|
||||
assert(confFile);
|
||||
if (!confFile->open(*this)) {
|
||||
delete confFile;
|
||||
confFile = 0;
|
||||
|
||||
if (_realNode->isDirectory()) {
|
||||
warning("File::open: Trying to open a FilesystemNode which is a directory");
|
||||
return 0;
|
||||
}
|
||||
return confFile;
|
||||
#endif
|
||||
|
||||
return _realNode->openForWriting();
|
||||
}
|
||||
|
||||
//} // End of namespace Common
|
||||
|
Loading…
x
Reference in New Issue
Block a user