changeset 869:3a9bf45178ff

Use xs_fload_buffer() again, to support potential VFS backends.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 09 Nov 2012 04:00:27 +0200
parents 3c3569894b23
children a2eb84ed5280
files src/xs_sidplay1.cpp src/xs_sidplay2.cpp src/xs_sidplayfp.cpp
diffstat 3 files changed, 106 insertions(+), 41 deletions(-) [+]
line wrap: on
line diff
--- a/src/xs_sidplay1.cpp	Fri Nov 09 03:59:19 2012 +0200
+++ b/src/xs_sidplay1.cpp	Fri Nov 09 04:00:27 2012 +0200
@@ -321,20 +321,29 @@
  */
 gboolean xs_sidplay1_load(XSEngineState * state, gchar * filename)
 {
-    XSSIDPlay1 *engine;
-    assert(state);
+    XSSIDPlay1 *engine = (XSSIDPlay1 *) state->internal;
+    gboolean res = FALSE;
+    guint8 *buf = NULL;
+    size_t bufSize;
 
-    engine = (XSSIDPlay1 *) state->internal;
     if (!engine)
         return FALSE;
 
-    if (!filename)
-        return FALSE;
-    
-    if (!engine->tune->open(filename))
-        return FALSE;
+    if (!xs_fload_buffer(filename, &buf, &bufSize, XS_SIDBUF_SIZE, TRUE))
+        goto error;
 
-    return TRUE;
+    if (!engine->tune->load(buf, bufSize))
+    {
+        xs_error("could not initialize tune from buffer, %p:%d '%s'.\n",
+            buf, bufSize, filename);
+        goto error;
+    }
+
+    res = TRUE;
+
+error:
+    g_free(buf);
+    return res;
 }
 
 
@@ -352,22 +361,29 @@
  */
 XSTuneInfo *xs_sidplay1_getinfo(const gchar *filename)
 {
-    XSTuneInfo *res;
-    sidTune *tune;
+    XSTuneInfo *res = NULL;
+    sidTune *tune = NULL;
     sidTuneInfo info;
+    guint8 *buf = NULL;
+    size_t bufSize;
 
     /* Check if the tune exists and is readable */
-    if ((tune = new sidTune(filename)) == NULL)
+    if (!xs_fload_buffer(filename, &buf, &bufSize, XS_SIDBUF_SIZE, TRUE))
+    {
+        XSDEBUG("could not load file '%s'.\n", filename);
+        goto error;
+    }
+
+    if ((tune = new sidTune(buf, bufSize)) == NULL)
     {
         XSDEBUG("could not initialize tune from '%s'.\n", filename);
-        return NULL;
+        goto error;
     }
 
     if (!tune->getStatus())
     {
         XSDEBUG("tune->getStatus() returned false for '%s'.\n", filename);
-        delete tune;
-        return NULL;
+        goto error;
     }
 
     /* Get general tune information */
@@ -382,7 +398,11 @@
         info.sidModel
         );
     
-    delete tune;
+error:
+    if (tune)
+        delete tune;
+
+    g_free(buf);
     return res;
 }
 
--- a/src/xs_sidplay2.cpp	Fri Nov 09 03:59:19 2012 +0200
+++ b/src/xs_sidplay2.cpp	Fri Nov 09 04:00:27 2012 +0200
@@ -395,19 +395,29 @@
 gboolean xs_sidplay2_load(XSEngineState * state, gchar * filename)
 {
     XSSIDPlay2 *engine = (XSSIDPlay2 *) state->internal;
+    gboolean res = FALSE;
+    guint8 *buf = NULL;
+    size_t bufSize;
 
-    if (!engine || !filename)
+    if (!engine)
         return FALSE;
-    
-    engine->tune.load(filename);
+
+    if (!xs_fload_buffer(filename, &buf, &bufSize, XS_SIDBUF_SIZE, TRUE))
+        goto error;
+
+    engine->tune.read(buf, bufSize);
     if (!engine->tune)
     {
         xs_error("Could not load file '%s': %s\n",
             filename, (engine->tune.getInfo()).statusString);
-        return FALSE;
+        goto error;
     }
-    
-    return TRUE;
+
+    res = TRUE;
+
+error:
+    g_free(buf);
+    return res;
 }
 
 
@@ -441,22 +451,29 @@
  */
 XSTuneInfo *xs_sidplay2_getinfo(const gchar *filename)
 {
-    XSTuneInfo *res;
-    SidTune *tune;
+    XSTuneInfo *res = NULL;
+    SidTune *tune = NULL;
     SidTuneInfo info;
+    guint8 *buf = NULL;
+    size_t bufSize;
 
     /* Check if the tune exists and is readable */
-    if ((tune = new SidTune(filename)) == NULL)
+    if (!xs_fload_buffer(filename, &buf, &bufSize, XS_SIDBUF_SIZE, TRUE))
+    {
+        XSDEBUG("could not load file '%s'.\n", filename);
+        goto error;
+    }
+
+    if ((tune = new SidTune(buf, bufSize)) == NULL)
     {
         XSDEBUG("could not initialize tune from '%s'.\n", filename);
-        return NULL;
+        goto error;
     }
 
     if (!tune->getStatus())
     {
         XSDEBUG("tune->getStatus() returned false for '%s'.\n", filename);
-        delete tune;
-        return NULL;
+        goto error;
     }
 
     /* Get general tune information */
@@ -470,8 +487,12 @@
         info.dataFileLen, info.formatString,
         info.sidModel
         );
-    
-    delete tune;
+
+error:
+    if (tune)
+        delete tune;
+
+    g_free(buf);
     return res;
 }
 
--- a/src/xs_sidplayfp.cpp	Fri Nov 09 03:59:19 2012 +0200
+++ b/src/xs_sidplayfp.cpp	Fri Nov 09 04:00:27 2012 +0200
@@ -364,11 +364,18 @@
 gboolean xs_sidplayfp_load(XSEngineState * state, gchar * filename)
 {
     XSSIDPlayFP *engine = (XSSIDPlayFP *) state->internal;
+    gboolean res = FALSE;
+    guint8 *buf = NULL;
+    size_t bufSize;
 
-    if (!engine || !filename)
+    if (!engine)
         return FALSE;
+
+    if (!xs_fload_buffer(filename, &buf, &bufSize, XS_SIDBUF_SIZE, TRUE))
+        goto error;
+
+    engine->tune.read(buf, bufSize);
     
-    engine->tune.load(filename);
 #ifdef HAVE_SIDPLAYFP_V1
     if (!engine->tune.getStatus())
 #else
@@ -376,10 +383,14 @@
 #endif
     {
         xs_error("Could not load file '%s'\n", filename);
-        return FALSE;
+        goto error;
     }
 
-    return TRUE;
+    res = TRUE;
+
+error:
+    g_free(buf);
+    return res;
 }
 
 
@@ -413,24 +424,32 @@
  */
 XSTuneInfo *xs_sidplayfp_getinfo(const gchar *filename)
 {
-    XSTuneInfo *res;
-    SidTune *tune;
+    XSTuneInfo *res = NULL;
+    SidTune *tune = NULL;
+    guint8 *buf = NULL;
+    size_t bufSize;
 
     /* Check if the tune exists and is readable */
-    if ((tune = new SidTune(filename)) == NULL)
+    if (!xs_fload_buffer(filename, &buf, &bufSize, XS_SIDBUF_SIZE, TRUE))
+    {
+        XSDEBUG("could not load file '%s'.\n", filename);
+        goto error;
+    }
+
+    if ((tune = new SidTune(buf, bufSize)) == NULL)
     {
         XSDEBUG("could not initialize tune from '%s'.\n", filename);
-        return NULL;
+        goto error;
     }
 
     if (!tune->getStatus())
     {
         XSDEBUG("tune->getStatus() returned false for '%s'.\n", filename);
-        delete tune;
-        return NULL;
+        goto error;
     }
 
     /* Get general tune information */
+    {
 #ifdef HAVE_SIDPLAYFP_V1
     const SidTuneInfo *info = tune->getInfo();
 
@@ -452,8 +471,13 @@
         info.sidModel1
         );
 #endif
+    }
 
-    delete tune;
+error:
+    if (tune)
+        delete tune;
+
+    g_free(buf);
     return res;
 }