[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