changeset 939:49b689449a37

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.)
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 19 Nov 2012 17:57:05 +0200
parents 7a3aefb4844c
children d624258d7800
files src/xs_config.c src/xs_config.h
diffstat 2 files changed, 34 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- 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;
 }
 
 
--- 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