]> git.sesse.net Git - vlc/commitdiff
Complain in case of error when parsing the config file
authorRémi Denis-Courmont <rem@videolan.org>
Sun, 15 Apr 2007 11:25:39 +0000 (11:25 +0000)
committerRémi Denis-Courmont <rem@videolan.org>
Sun, 15 Apr 2007 11:25:39 +0000 (11:25 +0000)
src/modules/configuration.c

index 06fd8c0f7d08a9102b4cd18112c2a444cd1b2c3e..3d8e178197af3350a665bd169e50fbca48591498 100644 (file)
@@ -824,6 +824,25 @@ static FILE *config_OpenConfigFile( vlc_object_t *p_obj, const char *mode )
 }
 
 
+static int strtoi (const char *str)
+{
+    char *end;
+    long l;
+
+    errno = 0;
+    l = strtol (str, &end, 0);
+
+    if (!errno)
+    {
+        if ((l > INT_MAX) || (l < INT_MIN))
+            errno = ERANGE;
+        if (*end)
+            errno = EINVAL;
+    }
+    return (int)l;
+}
+
+
 /*****************************************************************************
  * config_LoadConfigFile: loads the configuration file.
  *****************************************************************************
@@ -932,27 +951,28 @@ int __config_LoadConfigFile( vlc_object_t *p_this, const char *psz_module_name )
                 continue;
 
             /* We found it */
+            errno = 0;
+
             switch( p_item->i_type )
             {
                 case CONFIG_ITEM_BOOL:
                 case CONFIG_ITEM_INTEGER:
-                    if( !*psz_option_value )
-                        break;                    /* ignore empty option */
-                    p_item->value.i = strtol( psz_option_value, 0, 0 );
-                    p_item->saved.i = p_item->value.i;
-
-                    /*msg_Dbg (p_this, "option \"%s\", value %i",
-                             psz_option_name, p_item->value.i);*/
+                {
+                    long l = strtoi (psz_option_value);
+                    if (errno)
+                        msg_Warn (p_this, "Integer value (%s) for %s: %s",
+                                  psz_option_value, psz_option_name,
+                                  strerror (errno));
+                    else
+                        p_item->saved.i = p_item->value.i = (int)l;
                     break;
+                }
 
                 case CONFIG_ITEM_FLOAT:
                     if( !*psz_option_value )
                         break;                    /* ignore empty option */
                     p_item->value.f = (float)i18n_atof( psz_option_value);
                     p_item->saved.f = p_item->value.f;
-
-                    /*msg_Dbg (p_this, "option \"%s\", value %f",
-                             psz_option_name, (double)p_item->value.f);*/
                     break;
 
                 case CONFIG_ITEM_KEY:
@@ -973,9 +993,6 @@ int __config_LoadConfigFile( vlc_object_t *p_this, const char *psz_module_name )
                     p_item->saved.psz = strdupnull (p_item->value.psz);
 
                     vlc_mutex_unlock( p_item->p_lock );
-
-                    /*msg_Dbg (p_this, "option \"%s\", value \"%s\"",
-                             psz_option_name, psz_option_value ?: "");*/
                     break;
             }
 
@@ -983,9 +1000,14 @@ int __config_LoadConfigFile( vlc_object_t *p_this, const char *psz_module_name )
         }
     }
 
-    vlc_list_release( p_list );
+    if (ferror (file))
+    {
+        msg_Err (p_this, "error reading configuration: %s", strerror (errno));
+        clearerr (file);
+    }
+    fclose (file);
 
-    fclose( file );
+    vlc_list_release( p_list );
 
     vlc_mutex_unlock( &p_this->p_libvlc->config_lock );
     return 0;