# HG changeset patch # User Matti Hamalainen # Date 1353449692 -7200 # Node ID 5e0a05c846948367d5e91fdc9634061f20054ed1 # Parent 0233c5fd7d5e418b20cc5f68ce18162b3883a6c3 Fix RSID MD5 hash calculation. diff -r 0233c5fd7d5e -r 5e0a05c84694 src/xs_length.c --- a/src/xs_length.c Wed Nov 21 00:11:00 2012 +0200 +++ b/src/xs_length.c Wed Nov 21 00:14:52 2012 +0200 @@ -345,7 +345,7 @@ */ typedef struct { - gchar magicID[4]; /* "PSID" / "RSID" magic identifier */ + gchar magic[4]; /* "PSID" / "RSID" magic identifier */ guint16 version, /* Version number */ dataOffset, /* Start of actual c64 data in file */ loadAddress, /* Loading address */ @@ -377,13 +377,14 @@ guint8 *songData = NULL; guint8 ib8[2], i8; gint index, result; + gboolean isRSID; /* Try to open the file */ if ((inFile = xs_fopen(filename, "rb")) == NULL) goto error; /* Read PSID header in */ - if (!xs_fread_str(inFile, psidH.magicID, sizeof(psidH.magicID)) || + if (!xs_fread_str(inFile, psidH.magic, sizeof(psidH.magic)) || !xs_fread_be16(inFile, &psidH.version) || !xs_fread_be16(inFile, &psidH.dataOffset) || !xs_fread_be16(inFile, &psidH.loadAddress) || @@ -404,7 +405,9 @@ xs_error("Not a supported PSID or RSID file '%s'\n", filename); goto error; } - + + isRSID = psidH.magic[0] == 'R'; + if (!xs_fread_str(inFile, psidH.sidName, sizeof(psidH.sidName)) || !xs_fread_str(inFile, psidH.sidAuthor, sizeof(psidH.sidAuthor)) || !xs_fread_str(inFile, psidH.sidCopyright, sizeof(psidH.sidCopyright))) @@ -471,10 +474,14 @@ #undef XSADDHASH /* Append song speed data to hash */ - i8 = 0; + i8 = isRSID ? 60 : 0; for (index = 0; index < psidH.nSongs && index < 32; index++) { - i8 = (psidH.speed & (1 << index)) ? 60 : 0; + if (isRSID) + i8 = 60; + else + i8 = (psidH.speed & (1 << index)) ? 60 : 0; + xs_md5_append(&inState, &i8, sizeof(i8)); }