aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/bada/fs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform/bada/fs.cpp')
-rw-r--r--backends/platform/bada/fs.cpp435
1 files changed, 0 insertions, 435 deletions
diff --git a/backends/platform/bada/fs.cpp b/backends/platform/bada/fs.cpp
deleted file mode 100644
index 37ca496d18..0000000000
--- a/backends/platform/bada/fs.cpp
+++ /dev/null
@@ -1,435 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-#include "backends/platform/bada/system.h"
-#include "backends/platform/bada/fs.h"
-
-#define BUFFER_SIZE 1024
-
-// internal BADA paths
-#define PATH_ROOT "/"
-#define PATH_HOME "/Home"
-#define PATH_HOME_SHARE "/Home/Share"
-#define PATH_HOME_SHARE2 "/Home/Share2"
-#define PATH_HOME_X "/Home/"
-#define PATH_HOME_EXT "/HomeExt"
-#define PATH_MEDIA "/Media"
-#define PATH_CARD "/Storagecard"
-#define PATH_CARD_MEDIA "/Storagecard/Media"
-
-//
-// BadaFileStream
-//
-class BadaFileStream : public Common::SeekableReadStream,
- public Common::WriteStream,
- public Common::NonCopyable {
-public:
- static BadaFileStream *makeFromPath(const String &path, bool writeMode);
-
- BadaFileStream(File *file, bool writeMode);
- ~BadaFileStream();
-
- bool err() const;
- void clearErr();
- bool eos() const;
-
- uint32 write(const void *dataPtr, uint32 dataSize);
- bool flush();
-
- int32 pos() const;
- int32 size() const;
- bool seek(int32 offs, int whence = SEEK_SET);
- uint32 read(void *dataPtr, uint32 dataSize);
-
-private:
- byte buffer[BUFFER_SIZE];
- uint32 bufferIndex;
- uint32 bufferLength;
- bool writeMode;
- File *file;
-};
-
-BadaFileStream::BadaFileStream(File *ioFile, bool writeMode) :
- bufferIndex(0),
- bufferLength(0),
- writeMode(writeMode),
- file(ioFile) {
- AppAssert(ioFile != 0);
-}
-
-BadaFileStream::~BadaFileStream() {
- if (file) {
- if (writeMode) {
- flush();
- }
- delete file;
- }
-}
-
-bool BadaFileStream::err() const {
- result r = GetLastResult();
- return (r != E_SUCCESS && r != E_END_OF_FILE);
-}
-
-void BadaFileStream::clearErr() {
- SetLastResult(E_SUCCESS);
-}
-
-bool BadaFileStream::eos() const {
- return (bufferLength - bufferIndex == 0) && (GetLastResult() == E_END_OF_FILE);
-}
-
-int32 BadaFileStream::pos() const {
- return file->Tell() - (bufferLength - bufferIndex);
-}
-
-int32 BadaFileStream::size() const {
- int32 oldPos = file->Tell();
- file->Seek(FILESEEKPOSITION_END, 0);
-
- int32 length = file->Tell();
- SetLastResult(file->Seek(FILESEEKPOSITION_BEGIN, oldPos));
-
- return length;
-}
-
-bool BadaFileStream::seek(int32 offs, int whence) {
- bool result = false;
- switch (whence) {
- case SEEK_SET:
- // set from start of file
- SetLastResult(file->Seek(FILESEEKPOSITION_BEGIN, offs));
- result = (E_SUCCESS == GetLastResult());
- break;
-
- case SEEK_CUR:
- // set relative to offs
- if (bufferIndex < bufferLength && bufferIndex > (uint32)-offs) {
- // re-position within the buffer
- SetLastResult(E_SUCCESS);
- bufferIndex += offs;
- return true;
- } else {
- offs -= (bufferLength - bufferIndex);
- if (offs < 0 && file->Tell() + offs < 0) {
- // avoid negative positioning
- offs = 0;
- }
- if (offs != 0) {
- SetLastResult(file->Seek(FILESEEKPOSITION_CURRENT, offs));
- result = (E_SUCCESS == GetLastResult());
- } else {
- result = true;
- }
- }
- break;
-
- case SEEK_END:
- // set relative to end - positive will increase the file size
- SetLastResult(file->Seek(FILESEEKPOSITION_END, offs));
- result = (E_SUCCESS == GetLastResult());
- break;
-
- default:
- AppLog("Invalid whence %d", whence);
- return false;
- }
-
- if (!result) {
- AppLog("seek failed");
- }
-
- bufferIndex = bufferLength = 0;
- return result;
-}
-
-uint32 BadaFileStream::read(void *ptr, uint32 len) {
- uint32 result = 0;
- if (!eos()) {
- if (bufferIndex < bufferLength) {
- // use existing buffer
- uint32 available = bufferLength - bufferIndex;
- if (len <= available) {
- // use allocation
- memcpy((byte *)ptr, &buffer[bufferIndex], len);
- bufferIndex += len;
- result = len;
- } else {
- // use remaining allocation
- memcpy((byte *)ptr, &buffer[bufferIndex], available);
- uint32 remaining = len - available;
- result = available;
-
- if (remaining) {
- result += file->Read(((byte *)ptr) + available, remaining);
- }
- bufferIndex = bufferLength = 0;
- }
- } else if (len < BUFFER_SIZE) {
- // allocate and use buffer
- bufferIndex = 0;
- bufferLength = file->Read(buffer, BUFFER_SIZE);
- if (bufferLength) {
- if (bufferLength < len) {
- len = bufferLength;
- }
- memcpy((byte *)ptr, buffer, len);
- result = bufferIndex = len;
- }
- } else {
- result = file->Read((byte *)ptr, len);
- bufferIndex = bufferLength = 0;
- }
- } else {
- AppLog("Attempted to read past EOS");
- }
- return result;
-}
-
-uint32 BadaFileStream::write(const void *ptr, uint32 len) {
- result r = file->Write(ptr, len);
- SetLastResult(r);
- return (r == E_SUCCESS ? len : 0);
-}
-
-bool BadaFileStream::flush() {
- logEntered();
- SetLastResult(file->Flush());
- return (E_SUCCESS == GetLastResult());
-}
-
-BadaFileStream *BadaFileStream::makeFromPath(const String &path, bool writeMode) {
- File *ioFile = new File();
-
- String filePath = path;
- if (writeMode && (path[0] != '.' && path[0] != '/')) {
- filePath.Insert(PATH_HOME_X, 0);
- }
-
- AppLog("Open file %S", filePath.GetPointer());
-
- result r = ioFile->Construct(filePath, writeMode ? L"w" : L"r", writeMode);
- if (r == E_SUCCESS) {
- return new BadaFileStream(ioFile, writeMode);
- }
-
- AppLog("Failed to open file");
- delete ioFile;
- return 0;
-}
-
-//
-// converts a bada (wchar) String into a scummVM (char) string
-//
-Common::String fromString(const Osp::Base::String &in) {
- ByteBuffer *buf = StringUtil::StringToUtf8N(in);
- Common::String result((const char*)buf->GetPointer());
- delete buf;
-
- return result;
-}
-
-//
-// BadaFilesystemNode
-//
-BadaFilesystemNode::BadaFilesystemNode(const Common::String &nodePath) {
- AppAssert(nodePath.size() > 0);
- init(nodePath);
-}
-
-BadaFilesystemNode::BadaFilesystemNode(const Common::String &root,
- const Common::String &nodePath) {
- // Make sure the string contains no slashes
- AppAssert(!nodePath.contains('/'));
-
- // We assume here that path is already normalized (hence don't bother to
- // call Common::normalizePath on the final path).
- Common::String newPath(root);
- if (root.lastChar() != '/') {
- newPath += '/';
- }
- newPath += nodePath;
-
- init(newPath);
-}
-
-void BadaFilesystemNode::init(const Common::String &nodePath) {
- // Normalize the path (that is, remove unneeded slashes etc.)
- _path = Common::normalizePath(nodePath, '/');
- _displayName = Common::lastPathComponent(_path, '/');
-
- StringUtil::Utf8ToString(_path.c_str(), _unicodePath);
- _isVirtualDir = (_path == PATH_ROOT ||
- _path == PATH_HOME ||
- _path == PATH_HOME_SHARE ||
- _path == PATH_HOME_SHARE2 ||
- _path == PATH_CARD);
- _isValid = _isVirtualDir || !IsFailed(File::GetAttributes(_unicodePath, _attr));
-}
-
-bool BadaFilesystemNode::exists() const {
- return _isValid;
-}
-
-bool BadaFilesystemNode::isReadable() const {
- return _isVirtualDir || _isValid;
-}
-
-bool BadaFilesystemNode::isDirectory() const {
- return _isVirtualDir || (_isValid && _attr.IsDirectory());
-}
-
-bool BadaFilesystemNode::isWritable() const {
- bool result = (_isValid && !_isVirtualDir && !_attr.IsDirectory() && !_attr.IsReadOnly());
- if (_path == PATH_HOME ||
- _path == PATH_HOME_EXT ||
- _path == PATH_HOME_SHARE ||
- _path == PATH_HOME_SHARE2) {
- result = true;
- }
- return result;
-}
-
-AbstractFSNode *BadaFilesystemNode::getChild(const Common::String &n) const {
- AppAssert(!_path.empty());
- AppAssert(isDirectory());
- return new BadaFilesystemNode(_path, n);
-}
-
-bool BadaFilesystemNode::getChildren(AbstractFSList &myList,
- ListMode mode, bool hidden) const {
- AppAssert(isDirectory());
-
- bool result = false;
-
- if (_isVirtualDir && mode != Common::FSNode::kListFilesOnly) {
- // present well known BADA file system areas
- if (_path == PATH_ROOT) {
- myList.push_back(new BadaFilesystemNode(PATH_HOME));
- myList.push_back(new BadaFilesystemNode(PATH_HOME_EXT));
- myList.push_back(new BadaFilesystemNode(PATH_MEDIA));
- myList.push_back(new BadaFilesystemNode(PATH_CARD));
- result = true; // no more entries
- } else if (_path == PATH_CARD) {
- myList.push_back(new BadaFilesystemNode(PATH_CARD_MEDIA));
- result = true; // no more entries
- } else if (_path == PATH_HOME) {
- // ensure share path is always included
- myList.push_back(new BadaFilesystemNode(PATH_HOME_SHARE));
- myList.push_back(new BadaFilesystemNode(PATH_HOME_SHARE2));
- }
- }
-
- if (!result) {
- DirEnumerator *pDirEnum = 0;
- Directory *pDir = new Directory();
-
- // open directory
- if (IsFailed(pDir->Construct(_unicodePath))) {
- AppLog("Failed to open directory: %S", _unicodePath.GetPointer());
- } else {
- // read all directory entries
- pDirEnum = pDir->ReadN();
- if (pDirEnum) {
- result = true;
- }
-
- // loop through all directory entries
- while (pDirEnum && pDirEnum->MoveNext() == E_SUCCESS) {
- DirEntry dirEntry = pDirEnum->GetCurrentDirEntry();
-
- // skip 'invisible' files if necessary
- Osp::Base::String fileName = dirEntry.GetName();
-
- if (fileName[0] == '.' && !hidden) {
- continue;
- }
-
- // skip '.' and '..' to avoid cycles
- if (fileName == L"." || fileName == L"..") {
- continue;
- }
-
- // Honor the chosen mode
- if ((mode == Common::FSNode::kListFilesOnly && dirEntry.IsDirectory()) ||
- (mode == Common::FSNode::kListDirectoriesOnly && !dirEntry.IsDirectory())) {
- continue;
- }
- myList.push_back(new BadaFilesystemNode(_path, fromString(fileName)));
- }
- }
-
- // cleanup
- if (pDirEnum) {
- delete pDirEnum;
- }
-
- // close the opened directory
- if (pDir) {
- delete pDir;
- }
- }
-
- return result;
-}
-
-AbstractFSNode *BadaFilesystemNode::getParent() const {
- logEntered();
- if (_path == PATH_ROOT) {
- return 0; // The filesystem root has no parent
- }
-
- const char *start = _path.c_str();
- const char *end = start + _path.size();
-
- // Strip of the last component. We make use of the fact that at this
- // point, path is guaranteed to be normalized
- while (end > start && *(end-1) != '/') {
- end--;
- }
-
- if (end == start) {
- // This only happens if we were called with a relative path, for which
- // there simply is no parent.
- // TODO: We could also resolve this by assuming that the parent is the
- // current working directory, and returning a node referring to that.
- return 0;
- }
-
- return new BadaFilesystemNode(Common::String(start, end));
-}
-
-Common::SeekableReadStream *BadaFilesystemNode::createReadStream() {
- Common::SeekableReadStream *result = BadaFileStream::makeFromPath(_unicodePath, false);
- if (result != NULL) {
- _isValid = !IsFailed(File::GetAttributes(_unicodePath, _attr));
- }
- return result;
-}
-
-Common::WriteStream *BadaFilesystemNode::createWriteStream() {
- Common::WriteStream *result = BadaFileStream::makeFromPath(_unicodePath, true);
- if (result != NULL) {
- _isValid = !IsFailed(File::GetAttributes(_unicodePath, _attr));
- }
- return result;
-}