[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