[Scummvm-cvs-logs] SF.net SVN: scummvm:[42086] tools/trunk/extract_gob_stk.cpp
drmccoy at users.sourceforge.net
drmccoy at users.sourceforge.net
Sat Jul 4 11:54:38 CEST 2009
Revision: 42086
http://scummvm.svn.sourceforge.net/scummvm/?rev=42086&view=rev
Author: drmccoy
Date: 2009-07-04 09:54:38 +0000 (Sat, 04 Jul 2009)
Log Message:
-----------
Allow extraction of empty files
Modified Paths:
--------------
tools/trunk/extract_gob_stk.cpp
Modified: tools/trunk/extract_gob_stk.cpp
===================================================================
--- tools/trunk/extract_gob_stk.cpp 2009-07-04 05:56:10 UTC (rev 42085)
+++ tools/trunk/extract_gob_stk.cpp 2009-07-04 09:54:38 UTC (rev 42086)
@@ -285,34 +285,37 @@
if (!(chunkFile = fopen(curChunk->name, "wb")))
extractError(stk, 0, chunks, "Couldn't write file");
- if (fseek(stk, curChunk->offset, SEEK_SET) == -1)
- extractError(stk, chunkFile, chunks, "Unexpected EOF");
+ if (curChunk->size > 0) {
+ if (fseek(stk, curChunk->offset, SEEK_SET) == -1)
+ extractError(stk, chunkFile, chunks, "Unexpected EOF");
- byte *data = new byte[curChunk->size];
+ byte *data = new byte[curChunk->size];
- if (fread((char *) data, curChunk->size, 1, stk) < 1)
- extractError(stk, chunkFile, chunks, "Unexpected EOF");
+ if (fread((char *) data, curChunk->size, 1, stk) < 1)
+ extractError(stk, chunkFile, chunks, "Unexpected EOF");
- if (curChunk->packed) {
- uint32 realSize;
+ if (curChunk->packed) {
+ uint32 realSize;
- if (curChunk->preGob) {
- unpackedData = unpackPreGobData(data, realSize, curChunk->size);
+ if (curChunk->preGob) {
+ unpackedData = unpackPreGobData(data, realSize, curChunk->size);
+ } else {
+ unpackedData = unpackData(data, realSize);
+ }
+
+ if (fwrite((char *) unpackedData, realSize, 1, chunkFile) < 1)
+ extractError(stk, chunkFile, chunks, "Couldn't write");
+
+ delete[] unpackedData;
+
} else {
- unpackedData = unpackData(data, realSize);
+ if (fwrite((char *) data, curChunk->size, 1, chunkFile) < 1)
+ extractError(stk, chunkFile, chunks, "Couldn't write");
}
- if (fwrite((char *) unpackedData, realSize, 1, chunkFile) < 1)
- extractError(stk, chunkFile, chunks, "Couldn't write");
-
- delete[] unpackedData;
-
- } else {
- if (fwrite((char *) data, curChunk->size, 1, chunkFile) < 1)
- extractError(stk, chunkFile, chunks, "Couldn't write");
+ delete[] data;
}
- delete[] data;
fflush(chunkFile);
fclose(chunkFile);
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