Don't use char * to point to const char *, fix a memleak, and cleanups
authorRémi Denis-Courmont <rem@videolan.org>
Thu, 21 Feb 2008 20:11:32 +0000 (20:11 +0000)
committerRémi Denis-Courmont <rem@videolan.org>
Thu, 21 Feb 2008 20:11:32 +0000 (20:11 +0000)
src/misc/variables.c

index ca16e57..15d29c1 100644 (file)
@@ -1045,27 +1045,28 @@ int __var_TriggerCallback( vlc_object_t *p_this, const char *psz_name )
  */
 void var_OptionParse( vlc_object_t *p_obj, const char *psz_option )
 {
-    char *psz_name, *psz_value = strchr( psz_option, '=' );
-    int  i_name_len, i_type;
+    char *psz_name, *psz_value;
+    int  i_type;
     vlc_bool_t b_isno = VLC_FALSE;
     vlc_value_t val;
-    val.psz_string = NULL;
 
-    if( psz_value ) i_name_len = psz_value - psz_option;
-    else i_name_len = strlen( psz_option );
+    val.psz_string = NULL;
 
     /* It's too much of a hassle to remove the ':' when we parse
      * the cmd line :) */
     if( psz_option[0] == ':' )
-    {
         psz_option++;
-        i_name_len--;
-    }
 
-    if( i_name_len == 0 ) return;
+    if( !psz_option[0] )
+        return;
 
-    psz_name = strndup( psz_option, i_name_len );
-    if( psz_value ) psz_value++;
+    psz_name = strdup( psz_option );
+    if( psz_name == NULL )
+        return;
+
+    psz_value = strchr( psz_name, '=' );
+    if( psz_value != NULL )
+        *psz_value++ = '\0';
 
     /* FIXME: :programs should be handled generically */
     if( !strcmp( psz_name, "programs" ) )
@@ -1088,10 +1089,8 @@ void var_OptionParse( vlc_object_t *p_obj, const char *psz_option )
 
         b_isno = VLC_TRUE;
         i_type = config_GetType( p_obj, psz_name );
-
-        if( !i_type ) goto cleanup;  /* Option doesn't exist */
     }
-    else if( !i_type ) goto cleanup; /* Option doesn't exist */
+    if( !i_type ) goto cleanup; /* Option doesn't exist */
 
     if( ( i_type != VLC_VAR_BOOL ) &&
         ( !psz_value || !*psz_value ) ) goto cleanup; /* Invalid value */
@@ -1116,7 +1115,7 @@ void var_OptionParse( vlc_object_t *p_obj, const char *psz_option )
                     if( DIALOG_OK_YES != intf_UserYesNo( p_obj, _("WARNING: Unsafe Playlist"), description, _("Yes"), _("No"), NULL) )
                     {
                         msg_Err( p_obj, "option %s is unsafe and is blocked by security policy", psz_name );
-                        return;
+                        goto cleanup;
                     }
                 }
                 default:
@@ -1183,12 +1182,11 @@ void var_OptionParse( vlc_object_t *p_obj, const char *psz_option )
 
     default:
         goto cleanup;
-        break;
     }
 
     var_Set( p_obj, psz_name, val );
 
-  cleanup:
+cleanup:
     free( psz_name );
 }