[Scummvm-cvs-logs] SF.net SVN: scummvm:[34630] scummvm/trunk/common

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Tue Sep 23 11:39:38 CEST 2008


Revision: 34630
          http://scummvm.svn.sourceforge.net/scummvm/?rev=34630&view=rev
Author:   fingolfin
Date:     2008-09-23 09:39:37 +0000 (Tue, 23 Sep 2008)

Log Message:
-----------
Moved ZipArchive implementation into unzip.cpp, added new ZipArchive::isOpen method

Modified Paths:
--------------
    scummvm/trunk/common/unzip.cpp
    scummvm/trunk/common/unzip.h

Modified: scummvm/trunk/common/unzip.cpp
===================================================================
--- scummvm/trunk/common/unzip.cpp	2008-09-23 09:25:11 UTC (rev 34629)
+++ scummvm/trunk/common/unzip.cpp	2008-09-23 09:39:37 UTC (rev 34630)
@@ -1213,4 +1213,81 @@
 	return (int)uReadThis;
 }
 
+/*
+class ZipArchiveMember : public ArchiveMember {
+	unzFile _zipFile;
+
+public:
+	ZipArchiveMember(FilesystemNode &node) : _node(node) {
+	}
+
+	String getName() const {
+		...
+	}
+
+	SeekableReadStream *open() {
+		...
+	}
+};
+*/
+
+ZipArchive::ZipArchive(const Common::String &name) {
+	_zipFile = unzOpen(name.c_str());
+}
+
+ZipArchive::~ZipArchive() {
+	unzClose(_zipFile);
+}
+
+bool ZipArchive::hasFile(const Common::String &name) {
+	return (_zipFile && unzLocateFile(_zipFile, name.c_str(), 2) == UNZ_OK);
+}
+
+int ZipArchive::getAllNames(Common::StringList &list) {
+	return 0;
+}
+
+/*
+int ZipArchive::listMembers(Common::ArchiveMemberList &list) {
+	if (!_zipFile)
+		return 0;
+
+	int matches = 0;
+	int err = unzGoToFirstFile(_zipFile);
+
+	while (err == UNZ_OK) {
+		char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1];
+		unzGetCurrentFileInfo(_zipFile, NULL,
+								szCurrentFileName, sizeof(szCurrentFileName)-1,
+								NULL, 0, NULL, 0);
+		
+		szCurrentFileName
+		matches++;
+		err = unzGoToNextFile(file);
+	}
+	return 0;
+}
+*/
+
+Common::SeekableReadStream *ZipArchive::openFile(const Common::String &name) {
+	if (!_zipFile)
+		return 0;
+
+	unzLocateFile(_zipFile, name.c_str(), 2);
+
+	unz_file_info fileInfo;
+	unzOpenCurrentFile(_zipFile);
+	unzGetCurrentFileInfo(_zipFile, &fileInfo, NULL, 0, NULL, 0, NULL, 0);
+	byte *buffer = (byte *)calloc(fileInfo.uncompressed_size+1, 1);
+	assert(buffer);
+	unzReadCurrentFile(_zipFile, buffer, fileInfo.uncompressed_size);
+	unzCloseCurrentFile(_zipFile);
+	return new Common::MemoryReadStream(buffer, fileInfo.uncompressed_size+1, true);
+	
+	// FIXME: instead of reading all into a memory stream, we could
+	// instead create a new ZipStream class. But then we have to be
+	// careful to handle the case where the client code opens multiple
+	// files in the archive and tries to use them indepenendtly.
+}
+
 #endif

Modified: scummvm/trunk/common/unzip.h
===================================================================
--- scummvm/trunk/common/unzip.h	2008-09-23 09:25:11 UTC (rev 34629)
+++ scummvm/trunk/common/unzip.h	2008-09-23 09:39:37 UTC (rev 34630)
@@ -306,46 +306,18 @@
 #endif
 
 
-class ZipArchive : Common::Archive {
+class ZipArchive : public Common::Archive {
 	unzFile _zipFile;
 
 public:
-	ZipArchive(const Common::String &name) {
-		_zipFile = unzOpen(name.c_str());
-	}
-	~ZipArchive() {
-		unzClose(_zipFile);
-	}
-
-	virtual bool hasFile(const Common::String &name) {
-		return (_zipFile && unzLocateFile(_zipFile, name.c_str(), 2) == UNZ_OK);
-	}
-
-	virtual int getAllNames(Common::StringList &list) {
-		// TODO
-		return 0;
-	}
-
-	virtual Common::SeekableReadStream *openFile(const Common::String &name) {
-		if (!_zipFile)
-			return 0;
+	ZipArchive(const Common::String &name);
+	~ZipArchive();
 	
-		unzLocateFile(_zipFile, name.c_str(), 2);
+	bool isOpen() const { return _zipFile != 0; }
 
-		unz_file_info fileInfo;
-		unzOpenCurrentFile(_zipFile);
-		unzGetCurrentFileInfo(_zipFile, &fileInfo, NULL, 0, NULL, 0, NULL, 0);
-		byte *buffer = (byte *)calloc(fileInfo.uncompressed_size+1, 1);
-		assert(buffer);
-		unzReadCurrentFile(_zipFile, buffer, fileInfo.uncompressed_size);
-		unzCloseCurrentFile(_zipFile);
-		return new Common::MemoryReadStream(buffer, fileInfo.uncompressed_size+1, true);
-		
-		// FIXME: instead of reading all into a memory stream, we could
-		// instead create a new ZipStream class. But then we have to be
-		// careful to handle the case where the client code opens multiple
-		// files in the archive and tries to use them indepenendtly.
-	}
+	virtual bool hasFile(const Common::String &name);
+	virtual int getAllNames(Common::StringList &list);	// FIXME: This one is not (yet?) implemented
+	virtual Common::SeekableReadStream *openFile(const Common::String &name);
 };
 
 #endif // USE_ZLIB


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list