diff src/modplug/modplugbmp.cxx @ 704:94b22cc75eb8 trunk

[svn] - VFS probing support patch by Christian Birchinger (joker).
author nenolod
date Fri, 23 Feb 2007 20:30:42 -0800
parents 4095ceb0440b
children 833a7d4ea063
line wrap: on
line diff
--- a/src/modplug/modplugbmp.cxx	Fri Feb 23 20:23:34 2007 -0800
+++ b/src/modplug/modplugbmp.cxx	Fri Feb 23 20:30:42 2007 -0800
@@ -93,111 +93,65 @@
 	bmp_cfg_db_close(db);
 }
 
-bool ModplugXMMS::CanPlayFile(const string& aFilename)
+bool ModplugXMMS::CanPlayFileFromVFS(const string& aFilename, VFSFile *file)
 {
 	string lExt;
 	uint32 lPos;
 
-	VFSFile *file;
 	gchar magic[4];
 
-	if ((file = vfs_fopen(aFilename.c_str(), "rb"))) {
 	vfs_fread(magic, 1, 4, file);
-	if (!memcmp(magic, UMX_MAGIC, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, XM_MAGIC, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, M669_MAGIC, 2)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, IT_MAGIC, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, MTM_MAGIC, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, PSM_MAGIC, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
+	if (!memcmp(magic, UMX_MAGIC, 4))
+		return true;
+	if (!memcmp(magic, XM_MAGIC, 4))
+		return true;
+	if (!memcmp(magic, M669_MAGIC, 2))
+		return true;
+	if (!memcmp(magic, IT_MAGIC, 4))
+		return true;
+	if (!memcmp(magic, MTM_MAGIC, 4))
+		return true;
+	if (!memcmp(magic, PSM_MAGIC, 4))
+		return true;
+
 	vfs_fseek(file, 44, SEEK_SET);
 	vfs_fread(magic, 1, 4, file);
-	if (!memcmp(magic, S3M_MAGIC, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
+	if (!memcmp(magic, S3M_MAGIC, 4))
+		return true;
 	vfs_fseek(file, 1080, SEEK_SET);
 	vfs_fread(magic, 1, 4, file);
-	if (!memcmp(magic, MOD_MAGIC_FASTTRACKER6, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, MOD_MAGIC_FASTTRACKER8, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
+	if (!memcmp(magic, MOD_MAGIC_FASTTRACKER6, 4))
+		return true;
+	if (!memcmp(magic, MOD_MAGIC_FASTTRACKER8, 4))
+		return true;
 	if(mModProps.mGrabAmigaMOD) {
-	if (!memcmp(magic, MOD_MAGIC_PROTRACKER4, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, MOD_MAGIC_PROTRACKER4X, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, MOD_MAGIC_NOISETRACKER, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, MOD_MAGIC_STARTRACKER4, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, MOD_MAGIC_STARTRACKER8, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, MOD_MAGIC_STARTRACKER4X, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, MOD_MAGIC_STARTRACKER8X, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, MOD_MAGIC_FASTTRACKER4, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, MOD_MAGIC_OKTALYZER8, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, MOD_MAGIC_OKTALYZER8X, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, MOD_MAGIC_TAKETRACKER16, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
-	if (!memcmp(magic, MOD_MAGIC_TAKETRACKER32, 4)) {
-		vfs_fclose(file);
-		return 1;
-	}
+	if (!memcmp(magic, MOD_MAGIC_PROTRACKER4, 4))
+		return true;
+	if (!memcmp(magic, MOD_MAGIC_PROTRACKER4X, 4))
+		return true;
+	if (!memcmp(magic, MOD_MAGIC_NOISETRACKER, 4))
+		return true;
+	if (!memcmp(magic, MOD_MAGIC_STARTRACKER4, 4))
+		return true;
+	if (!memcmp(magic, MOD_MAGIC_STARTRACKER8, 4))
+		return true;
+	if (!memcmp(magic, MOD_MAGIC_STARTRACKER4X, 4))
+		return true;
+	if (!memcmp(magic, MOD_MAGIC_STARTRACKER8X, 4))
+		return true;
+	if (!memcmp(magic, MOD_MAGIC_FASTTRACKER4, 4))
+		return true;
+	if (!memcmp(magic, MOD_MAGIC_OKTALYZER8, 4))
+		return true;
+	if (!memcmp(magic, MOD_MAGIC_OKTALYZER8X, 4))
+		return true;
+	if (!memcmp(magic, MOD_MAGIC_TAKETRACKER16, 4))
+		return true;
+	if (!memcmp(magic, MOD_MAGIC_TAKETRACKER32, 4))
+		return true;
 	} /* end of if(mModProps.mGrabAmigaMOD) */
 
 	/* We didn't find the magic bytes, fall back to extension check */
-	vfs_fclose(file);
-	} /* end of vfs_open main if statement */
-
 	lPos = aFilename.find_last_of('.');
 	if((int)lPos == -1)
 		return false;