# HG changeset patch # User Matti Hamalainen # Date 1169676064 0 # Node ID 57836945fa715f2b97822d170da99c1c190458a4 # Parent 693baa150eeaae9f9d821398edf57d8302cec819 Use new xs_* file functions for SID-file handling. diff -r 693baa150eea -r 57836945fa71 src/xs_length.c --- 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);