(svn r13693) -Fix (r11106, r11117): Do not rely on .tar files always ending with a block of zeros.
authorfrosch
Sat, 12 Jul 2008 14:49:43 +0000
changeset 11135 6c703d2da75b
parent 11134 c40cabfe69a5
child 11136 4641e5d64d1f
(svn r13693) -Fix (r11106, r11117): Do not rely on .tar files always ending with a block of zeros.
src/fileio.cpp
--- a/src/fileio.cpp	Sat Jul 12 14:03:36 2008 +0000
+++ b/src/fileio.cpp	Sat Jul 12 14:49:43 2008 +0000
@@ -487,8 +487,10 @@
 	char empty[512];
 	memset(&empty[0], 0, sizeof(empty));
 
-	while (!feof(f)) {
-		pos += fread(&th, 1, 512, f);
+	for (;;) { // Note: feof() always returns 'false' after 'fseek()'. Cool, isn't it?
+		size_t num_bytes_read = fread(&th, 1, 512, f);
+		if (num_bytes_read != 512) break;
+		pos += num_bytes_read;
 
 		/* Check if we have the new tar-format (ustar) or the old one (a lot of zeros after 'link' field) */
 		if (strncmp(th.magic, "ustar", 5) != 0 && memcmp(&th.magic, &empty[0], 512 - offsetof(TarHeader, magic)) != 0) {