aboutsummaryrefslogtreecommitdiffstats
path: root/src/decoder
diff options
context:
space:
mode:
Diffstat (limited to 'src/decoder')
-rw-r--r--src/decoder/sidplay_plugin.cxx65
1 files changed, 36 insertions, 29 deletions
diff --git a/src/decoder/sidplay_plugin.cxx b/src/decoder/sidplay_plugin.cxx
index 55974b428..b182a732d 100644
--- a/src/decoder/sidplay_plugin.cxx
+++ b/src/decoder/sidplay_plugin.cxx
@@ -41,41 +41,48 @@ static GKeyFile *songlength_database;
static bool all_files_are_containers;
static unsigned default_songlength;
+static GKeyFile *
+sidplay_load_songlength_db(const char *path)
+{
+ GError *error = NULL;
+ gchar *data;
+ gsize size;
+
+ if (!g_file_get_contents(path, &data, &size, &error)) {
+ g_warning("unable to read songlengths file %s: %s",
+ path, error->message);
+ g_error_free(error);
+ return NULL;
+ }
+
+ /* replace any ; comment characters with # */
+ for (gsize i = 0; i < size; i++)
+ if (data[i] == ';')
+ data[i] = '#';
+
+ GKeyFile *db = g_key_file_new();
+ if (!g_key_file_load_from_data(db, data, size,
+ G_KEY_FILE_NONE, &error)) {
+ g_warning("unable to parse songlengths file %s: %s",
+ path, error->message);
+ g_error_free(error);
+ g_key_file_free(db);
+ return NULL;
+ }
+
+ g_key_file_set_list_separator(db, ' ');
+ g_free(data);
+ return db;
+}
+
static bool
sidplay_init(const struct config_param *param)
{
- GError *err=NULL;
- gchar *songlen_data;
- gsize songlen_data_size;
-
/* read the songlengths database file */
songlength_file=config_get_block_string(param,
"songlength_database", NULL);
- if(songlength_file) {
- if (g_file_get_contents(songlength_file, &songlen_data,
- &songlen_data_size, &err)) {
- /* replace any ; comment characters with # */
- for(int i=0; i<songlen_data_size; i++)
- if(songlen_data[i]==';') songlen_data[i]='#';
-
- songlength_database=g_key_file_new();
- if(!g_key_file_load_from_data(songlength_database,
- songlen_data, songlen_data_size,
- G_KEY_FILE_NONE, &err)) {
- g_warning("unable to parse songlengths file %s: %s",
- songlength_file, err->message);
- g_error_free(err);
- g_key_file_free(songlength_database);
- songlength_database=NULL;
- }
- g_key_file_set_list_separator(songlength_database, ' ');
- g_free(songlen_data);
- } else {
- g_warning("unable to read songlengths file %s: %s",
- songlength_file, err->message);
- g_error_free(err);
- }
- }
+ if (songlength_file != NULL)
+ songlength_database = sidplay_load_songlength_db(songlength_file);
default_songlength=config_get_block_unsigned(param,
"default_songlength", 0);