diff options
Diffstat (limited to 'backends/platform/bada/fs.cpp')
| -rw-r--r-- | backends/platform/bada/fs.cpp | 435 | 
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; -}  | 
