changeset 458:57836945fa71

Use new xs_* file functions for SID-file handling.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 24 Jan 2007 22:01:04 +0000
parents 693baa150eea
children 023fed5602f3
files src/xs_length.c
diffstat 1 files changed, 33 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/src/xs_length.c	Wed Jan 24 22:01:02 2007 +0000
+++ b/src/xs_length.c	Wed Jan 24 22:01:04 2007 +0000
@@ -191,7 +191,7 @@
 {
 	FILE *inFile;
 	gchar inLine[XS_BUF_SIZE];
-	gint lineNum;
+	size_t lineNum;
 	t_xs_sldb_node *tmpNode;
 	assert(db);
 
@@ -204,9 +204,8 @@
 	/* Read and parse the data */
 	lineNum = 0;
 
-	while (!feof(inFile)) {
+	while (!feof(inFile) && fgets(inLine, XS_BUF_SIZE, inFile)) {
 		size_t linePos;
-		fgets(inLine, XS_BUF_SIZE, inFile);
 		inLine[XS_BUF_SIZE - 1] = 0;
 		linePos = 0;
 		lineNum++;
@@ -436,7 +435,7 @@
 
 static gint xs_get_sid_hash(const gchar *pcFilename, t_xs_md5hash hash)
 {
-	FILE *inFile;
+	t_xs_file *inFile;
 	t_xs_md5state inState;
 	t_xs_psidv1_header psidH;
 	t_xs_psidv2_header psidH2;
@@ -445,49 +444,57 @@
 	gint iIndex, iRes;
 
 	/* Try to open the file */
-	if ((inFile = fopen(pcFilename, "rb")) == NULL)
+	if ((inFile = xs_fopen(pcFilename, "rb")) == NULL)
 		return -1;
 
 	/* Read PSID header in */
-	xs_rd_str(inFile, psidH.magicID, sizeof(psidH.magicID));
+	xs_fgets(psidH.magicID, sizeof(psidH.magicID), inFile);
 	if ((psidH.magicID[0] != 'P' && psidH.magicID[0] != 'R') ||
 	    (psidH.magicID[1] != 'S') || (psidH.magicID[2] != 'I') || (psidH.magicID[3] != 'D')) {
-		fclose(inFile);
+		xs_fclose(inFile);
+		xs_error(_("Not a PSID or RSID file '%s'\n"), pcFilename);
 		return -2;
 	}
 
-	psidH.version = xs_rd_be16(inFile);
-	psidH.dataOffset = xs_rd_be16(inFile);
-	psidH.loadAddress = xs_rd_be16(inFile);
-	psidH.initAddress = xs_rd_be16(inFile);
-	psidH.playAddress = xs_rd_be16(inFile);
-	psidH.nSongs = xs_rd_be16(inFile);
-	psidH.startSong = xs_rd_be16(inFile);
-	psidH.speed = xs_rd_be32(inFile);
+	psidH.version = xs_fread_be16(inFile);
+	psidH.dataOffset = xs_fread_be16(inFile);
+	psidH.loadAddress = xs_fread_be16(inFile);
+	psidH.initAddress = xs_fread_be16(inFile);
+	psidH.playAddress = xs_fread_be16(inFile);
+	psidH.nSongs = xs_fread_be16(inFile);
+	psidH.startSong = xs_fread_be16(inFile);
+	psidH.speed = xs_fread_be32(inFile);
 
-	xs_rd_str(inFile, psidH.sidName, sizeof(psidH.sidName));
-	xs_rd_str(inFile, psidH.sidAuthor, sizeof(psidH.sidAuthor));
-	xs_rd_str(inFile, psidH.sidCopyright, sizeof(psidH.sidCopyright));
-
+	xs_fgets(psidH.sidName, sizeof(psidH.sidName), inFile);
+	xs_fgets(psidH.sidAuthor, sizeof(psidH.sidAuthor), inFile);
+	xs_fgets(psidH.sidCopyright, sizeof(psidH.sidCopyright), inFile);
+	
+	if (xs_feof(inFile) || xs_ferror(inFile)) {
+		xs_fclose(inFile);
+		xs_error(_("Error reading SID file header from '%s'\n"), pcFilename);
+		return -4;
+	}
+	
 	/* Check if we need to load PSIDv2NG header ... */
 	if (psidH.version == 2) {
 		/* Yes, we need to */
-		psidH2.flags = xs_rd_be16(inFile);
-		psidH2.startPage = fgetc(inFile);
-		psidH2.pageLength = fgetc(inFile);
-		psidH2.reserved = xs_rd_be16(inFile);
+		psidH2.flags = xs_fread_be16(inFile);
+		psidH2.startPage = xs_fgetc(inFile);
+		psidH2.pageLength = xs_fgetc(inFile);
+		psidH2.reserved = xs_fread_be16(inFile);
 	}
 
 	/* Allocate buffer */
 	songData = (guint8 *) g_malloc(XS_SIDBUF_SIZE * sizeof(guint8));
 	if (!songData) {
-		fclose(inFile);
+		xs_fclose(inFile);
+		xs_error(_("Error allocating temp data buffer for file '%s'\n"), pcFilename);
 		return -3;
 	}
 
 	/* Read data to buffer */
-	iRes = fread(songData, sizeof(guint8), XS_SIDBUF_SIZE, inFile);
-	fclose(inFile);
+	iRes = xs_fread(songData, sizeof(guint8), XS_SIDBUF_SIZE, inFile);
+	xs_fclose(inFile);
 
 	/* Initialize and start MD5-hash calculation */
 	xs_md5_init(&inState);