changeset 15:feec43a3497c

Fix input file reading of mod2wav utility.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 28 Sep 2012 11:11:15 +0300
parents a40c266a71a2
children d9251dd496ce
files mod2wav.c
diffstat 1 files changed, 26 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/mod2wav.c	Fri Sep 28 10:48:57 2012 +0300
+++ b/mod2wav.c	Fri Sep 28 11:11:15 2012 +0300
@@ -210,7 +210,8 @@
 
 int main(int argc, char *argv[])
 {
-    FILE *inFile = NULL, *outFile = NULL;
+    DMResource *inFile = NULL;
+    FILE *outFile = NULL;
     JSSModule *m = NULL;
     JSSMixer *d = NULL;
     JSSPlayer *p = NULL;
@@ -236,33 +237,41 @@
     jssInit();
     
     // Open the source file
-    if ((inFile = fopen(srcFilename, "rb")) == NULL) {
-        dmError("Error opening input file '%s'. (%s)\n", srcFilename, strerror(errno));
-        return 2;
+    if ((inFile = dmf_create_stdio(srcFilename)) == NULL)
+    {
+        fprintf(stderr, "Error opening input file '%s'. (%s)\n", srcFilename, strerror(errno));
+        return 1;
     }
 
     // Read module file
+    fprintf(stderr, "Reading file: %s\n", srcFilename);
 #ifdef JSS_SUP_XM
+    fprintf(stderr, "* Trying XM...\n");
     result = jssLoadXM(inFile, &m);
 #endif
-    if (result != 0) {
 #ifdef JSS_SUP_JSSMOD
-        Uint8 *buf;
-        size_t bufsize;
-        fseek(inFile, 0L, SEEK_END);
-        bufsize = ftell(inFile);
-        fseek(inFile, 0L, SEEK_SET);
-        buf = dmMalloc(bufsize);
-        if (fread(buf, 1, bufsize, inFile) != bufsize) {
-            dmError("Error reading file!\n");
+    if (result != 0)
+    {
+        size_t bufgot, bufsize = dmfsize(inFile);
+        Uint8 *buf = dmMalloc(bufsize);
+        dmfseek(inFile, 0L, SEEK_SET);
+        fprintf(stderr, "* Trying JSSMOD (%d bytes, %p)...\n", bufsize, buf);
+        if ((bufgot = dmfread(buf, 1, bufsize, inFile)) != bufsize)
+        {
+            fprintf(stderr, "Error reading file (not enough data %d), #%d: %s\n",
+                bufgot, dmferror(inFile), dmErrorStr(dmferror(inFile)));
             return 2;
         }
         result = jssLoadJSSMOD(buf, bufsize, &m);
+        dmFree(buf);
+    }
 #endif
-        if (result != 0) {
-            dmError("Error loading module file: %d\n", result);
-            return 3;
-        }
+    dmf_close(inFile);
+    if (result != DMERR_OK)
+    {
+        fprintf(stderr, "Error loading module file, %d: %s\n",
+            result, dmErrorStr(result));
+        return 3;
     }
 
     // Open mixer