# HG changeset patch # User Matti Hamalainen # Date 1353340625 -7200 # Node ID 49b689449a3794f6f23bedc6e1b87be3ec1d9bf8 # Parent 7a3aefb4844c3980c065055224a953db429cd5b7 Change xs_read_configuration() to return a boolean value, TRUE if configuration was successfully read for all items, FALSE if not. Failure might be non-existent or partial configuration (old/incompatible version.) diff -r 7a3aefb4844c -r 49b689449a37 src/xs_config.c --- a/src/xs_config.c Mon Nov 19 17:42:23 2012 +0200 +++ b/src/xs_config.c Mon Nov 19 17:57:05 2012 +0200 @@ -807,23 +807,21 @@ /* Get the configuration (from file or default) */ -void xs_read_configuration(void) +gboolean xs_read_configuration(void) { XS_CONFIG_FILE *cfg; gint i; - gchar *tmpStr; + gboolean configOK = TRUE; /* Try to open the XMMS configuration file */ XS_MUTEX_LOCK(xs_cfg); XSDEBUG("loading from config-file ...\n"); cfg = XS_CONFIG_OPEN(); - if (cfg == NULL) { - XSDEBUG("Could not open configuration, trying to write defaults...\n"); - xs_write_configuration(); - return; + configOK = FALSE; + goto error; } /* Read the new settings from XMMS configuration file */ @@ -831,26 +829,34 @@ switch (xs_cfgtable[i].itemType) { case CTYPE_INT: - XS_CFG_GET_INT(xs_cfgtable[i].itemName, - (gint *) xs_cfgtable[i].itemData); + if (!XS_CFG_GET_INT(xs_cfgtable[i].itemName, + (gint *) xs_cfgtable[i].itemData)) + configOK = FALSE; break; case CTYPE_BOOL: - XS_CFG_GET_BOOL(xs_cfgtable[i].itemName, - (gboolean *) xs_cfgtable[i].itemData); + if (!XS_CFG_GET_BOOL(xs_cfgtable[i].itemName, + (gboolean *) xs_cfgtable[i].itemData)) + configOK = FALSE; break; case CTYPE_FLOAT: - XS_CFG_GET_FLOAT(xs_cfgtable[i].itemName, - (gfloat *) xs_cfgtable[i].itemData); + if (!XS_CFG_GET_FLOAT(xs_cfgtable[i].itemName, + (gfloat *) xs_cfgtable[i].itemData)) + configOK = FALSE; break; case CTYPE_STR: - if (XS_CFG_GET_STRING(xs_cfgtable[i].itemName, - (gchar **) &tmpStr)) { - xs_pstrcpy((gchar **) xs_cfgtable[i].itemData, tmpStr); - g_free(tmpStr); + gchar *tmpStr; + if (XS_CFG_GET_STRING(xs_cfgtable[i].itemName, + (gchar **) &tmpStr)) + { + xs_pstrcpy((gchar **) xs_cfgtable[i].itemData, tmpStr); + g_free(tmpStr); + } + else + configOK = FALSE; } break; } @@ -864,6 +870,7 @@ if (!xs_cfg.sid2FilterPresets) { xs_error("Allocation of sid2FilterPresets structure failed!\n"); + configOK = FALSE; } else { @@ -872,10 +879,14 @@ } } - XS_CONFIG_FREE(cfg); - +error: + if (cfg != NULL) + { + XS_CONFIG_FREE(cfg); + } XS_MUTEX_UNLOCK(xs_cfg); - XSDEBUG("OK\n"); + XSDEBUG("%s\n", configOK ? "OK" : "ERRORS!"); + return configOK; } diff -r 7a3aefb4844c -r 49b689449a37 src/xs_config.h --- a/src/xs_config.h Mon Nov 19 17:42:23 2012 +0200 +++ b/src/xs_config.h Mon Nov 19 17:57:05 2012 +0200 @@ -211,10 +211,10 @@ /* Functions */ -void xs_init_configuration(void); -void xs_configure(void); -void xs_read_configuration(void); -gint xs_write_configuration(void); +void xs_init_configuration(void); +void xs_configure(void); +gboolean xs_read_configuration(void); +gint xs_write_configuration(void); #ifdef __cplusplus