# HG changeset patch # User Matti Hamalainen # Date 1352426427 -7200 # Node ID 3a9bf45178ff45cfae15e9e259948987d3bfb653 # Parent 3c3569894b2342ef984131764066b2d004ebaa8f Use xs_fload_buffer() again, to support potential VFS backends. diff -r 3c3569894b23 -r 3a9bf45178ff src/xs_sidplay1.cpp --- 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; } diff -r 3c3569894b23 -r 3a9bf45178ff src/xs_sidplay2.cpp --- 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; } diff -r 3c3569894b23 -r 3a9bf45178ff src/xs_sidplayfp.cpp --- 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; }