diff options
Diffstat (limited to 'common')
| -rw-r--r-- | common/file.cpp | 29 | ||||
| -rw-r--r-- | common/file.h | 5 | ||||
| -rw-r--r-- | common/stream.h | 14 | 
3 files changed, 15 insertions, 33 deletions
diff --git a/common/file.cpp b/common/file.cpp index 4bb6e94fad..24c8907002 100644 --- a/common/file.cpp +++ b/common/file.cpp @@ -132,7 +132,6 @@ void File::setDefaultDirectory(const Common::String &directory) {  File::File() {  	_handle = NULL;  	_ioFailed = false; -	_encbyte = 0;  	_name = 0;  } @@ -141,7 +140,7 @@ File::~File() {  	delete [] _name;  } -bool File::open(const char *filename, const char *directory, AccessMode mode, byte encbyte) { +bool File::open(const char *filename, const char *directory, AccessMode mode) {  	if (_handle) {  		debug(2, "File %s already opened", filename);  		return false; @@ -174,8 +173,6 @@ bool File::open(const char *filename, const char *directory, AccessMode mode, by  		return false;  	} -	_encbyte = encbyte; -  	int len = strlen(filename);  	if (_name != 0)  		delete [] _name; @@ -263,19 +260,10 @@ uint32 File::read(void *ptr, uint32 len) {  		_ioFailed = true;  	} -	if (_encbyte != 0) { -		uint32 t_size = real_len; -		while (t_size--) { -			*ptr2++ ^= _encbyte; -		} -	} -  	return real_len;  }  uint32 File::write(const void *ptr, uint32 len) { -	byte *tmp = 0; -	  	if (_handle == NULL) {  		error("File is not open!");  		return 0; @@ -284,25 +272,10 @@ uint32 File::write(const void *ptr, uint32 len) {  	if (len == 0)  		return 0; -	if (_encbyte != 0) { -		// Maybe FIXME: while it's efficient to do the encoding here, -		// it not really nice for a write function to modify its input. -		// Maybe we should work on a copy here... -		tmp = (byte *)malloc(len); -		for (uint32 i = 0; i < len; i ++) { -			tmp[i] = ((const byte *)ptr)[i] ^ _encbyte; -		} -		ptr = tmp; -	} -  	if ((uint32)fwrite(ptr, 1, len, _handle) != len) {  		clearerr(_handle);  		_ioFailed = true;  	} -	if (_encbyte != 0) { -		free(tmp); -	} -  	return len;  } diff --git a/common/file.h b/common/file.h index 42d521495f..ba8eb469e4 100644 --- a/common/file.h +++ b/common/file.h @@ -32,7 +32,6 @@ private:  	FILE * _handle;  	bool _ioFailed; -	byte _encbyte;  	char *_name;	// For debugging  	static FILE *fopenNoCase(const char *filename, const char *directory, const char *mode); @@ -50,7 +49,7 @@ public:  	File();  	virtual ~File();  	bool open(const char *filename, const Common::String &directory) { return open(filename, directory.c_str()); } -	bool open(const char *filename, const char *directory = NULL, AccessMode mode = kFileReadMode, byte encbyte = 0); +	bool open(const char *filename, const char *directory = NULL, AccessMode mode = kFileReadMode);  	void close();  	bool isOpen() const;  	bool ioFailed() const; @@ -62,8 +61,6 @@ public:  	void seek(int32 offs, int whence = SEEK_SET);  	uint32 read(void *ptr, uint32 size);  	uint32 write(const void *ptr, uint32 size); - -	void setEnc(byte value) { _encbyte = value; }  };  #endif diff --git a/common/stream.h b/common/stream.h index bd20bdbc20..e5fdd96b09 100644 --- a/common/stream.h +++ b/common/stream.h @@ -80,16 +80,21 @@ public:   * XORReadStream is a wrapper around an arbitrary other ReadStream,   * which 'decrypts' the data being read by XORing all data bytes with the given   * encryption 'key'. + * + * Currently, this is not used anywhere, it's just a demo of how one can chain + * streams if necessary.   */  class XORReadStream : public ReadStream {  private:  	byte _encbyte;  	ReadStream *_realStream;  public: -	XORReadStream(ReadStream *in, byte enc = 0) : _realStream(in), _encbyte(enc) {} +	XORReadStream(ReadStream *in = 0, byte enc = 0) : _realStream(in), _encbyte(enc) {} +	void setStream(ReadStream *in) { _realStream = in; }  	void setEnc(byte value) { _encbyte = value; }  	uint32 read(void *ptr, uint32 size) { +		assert(_realStream);  		uint32 len = _realStream->read(ptr, size);  		if (_encbyte) {  			byte *p = (byte *)ptr; @@ -101,6 +106,13 @@ public:  	}  }; +/** + * Simple memory based 'stream', which implements the ReadStream interface for + * a plain memory block. + * + * Currently not used anywhere, just a proof of concept, and meant to give an + * idea of what streams can be used for. + */  class MemoryReadStream : public ReadStream {  private:  	const byte *_ptr;  | 
