diff options
Diffstat (limited to 'backends/fs/riscos')
| -rw-r--r-- | backends/fs/riscos/riscos-fs.cpp | 58 | ||||
| -rw-r--r-- | backends/fs/riscos/riscos-fs.h | 7 | 
2 files changed, 26 insertions, 39 deletions
diff --git a/backends/fs/riscos/riscos-fs.cpp b/backends/fs/riscos/riscos-fs.cpp index 6f195691a0..810be2b417 100644 --- a/backends/fs/riscos/riscos-fs.cpp +++ b/backends/fs/riscos/riscos-fs.cpp @@ -52,23 +52,27 @@ bool RISCOSFilesystemNode::isWritable() const {  	return access(_path.c_str(), W_OK) == 0;  } +void RISCOSFilesystemNode::setFlags() { +	int type = _swi(OS_File, _INR(0,1)|_RETURN(0), 20, RISCOS_Utils::toRISCOS(_path).c_str()); +	if (type == 0) { +		_isDirectory = false; +		_isValid = false; +	} else if (type == 2) { +		_isDirectory = true; +		_isValid = true; +	} else { +		_isDirectory = false; +		_isValid = true; +	} +} +  RISCOSFilesystemNode::RISCOSFilesystemNode(const Common::String &p) {  	_path = p;  	if (p == "/") {  		_isDirectory = true;  		_isValid = true;  	} else { -		int type = _swi(OS_File, _INR(0,1)|_RETURN(0), 20, RISCOS_Utils::toRISCOS(_path).c_str()); -		if (type == 0) { -			_isDirectory = false; -			_isValid = false; -		} else if (type == 2) { -			_isDirectory = true; -			_isValid = true; -		} else { -			_isDirectory = false; -			_isValid = true; -		} +		setFlags();  	}  } @@ -198,33 +202,11 @@ Common::WriteStream *RISCOSFilesystemNode::createWriteStream() {  	return StdioStream::makeFromPath(getPath(), true);  } -bool RISCOSFilesystemNode::create(bool isDirectoryFlag) { -	bool success; - -	if (isDirectoryFlag) { -		success = _swix(OS_File, _INR(0,1), 8, RISCOS_Utils::toRISCOS(_path).c_str()) == NULL; -	} else { -		int fd = open(_path.c_str(), O_WRONLY | O_CREAT | O_TRUNC, 0755); -		success = fd >= 0; - -		if (fd >= 0) { -			close(fd); -		} -	} - -	if (success) { -		if (exists()) { -			_isDirectory = _swi(OS_File, _INR(0,1)|_RETURN(0), 20, RISCOS_Utils::toRISCOS(_path).c_str()) == 2; -			if (_isDirectory != isDirectoryFlag) warning("failed to create %s: got %s", isDirectoryFlag ? "directory" : "file", _isDirectory ? "directory" : "file"); -			return _isDirectory == isDirectoryFlag; -		} - -		warning("RISCOSFilesystemNode: Attempting to create a %s was a success, but access indicates there is no such %s", -			isDirectoryFlag ? "directory" : "file", isDirectoryFlag ? "directory" : "file"); -		return false; -	} +bool RISCOSFilesystemNode::createDirectory() { +	if (_swix(OS_File, _INR(0,1), 8, RISCOS_Utils::toRISCOS(_path).c_str()) == NULL) +		setFlags(); -	return false; +	return _isValid && _isDirectory;  }  namespace Riscos { @@ -270,7 +252,7 @@ bool assureDirectoryExists(const Common::String &dir, const char *prefix) {  		}  		node = new RISCOSFilesystemNode(path); -		if (!node->create(true)) { +		if (!node->createDirectory()) {  			if (node->exists()) {  				if (!node->isDirectory()) {  					return false; diff --git a/backends/fs/riscos/riscos-fs.h b/backends/fs/riscos/riscos-fs.h index 99fa1d59be..f068022a9e 100644 --- a/backends/fs/riscos/riscos-fs.h +++ b/backends/fs/riscos/riscos-fs.h @@ -67,7 +67,12 @@ public:  	virtual Common::SeekableReadStream *createReadStream();  	virtual Common::WriteStream *createWriteStream(); -	virtual bool create(bool isDirectoryFlag); +	virtual bool createDirectory(); +private: +	/** +	 * Tests and sets the _isValid and _isDirectory flags, using OS_File 20. +	 */ +	virtual void setFlags();  };  namespace Riscos {  | 
