# include "config.h"
#endif
-#include <vlc/vlc.h>
+#include <vlc_common.h>
#include "variables.h"
#include "libvlc.h"
{
return v.i_time == w.i_time ? 0 : v.i_time > w.i_time ? 1 : -1;
}
-static int CmpString( vlc_value_t v, vlc_value_t w ) { return strcmp( v.psz_string, w.psz_string ); }
+static int CmpString( vlc_value_t v, vlc_value_t w )
+{
+ if( !v.psz_string )
+ return !w.psz_string ? 0 : -1;
+ else
+ return !w.psz_string ? 1 : strcmp( v.psz_string, w.psz_string );
+}
static int CmpFloat( vlc_value_t v, vlc_value_t w ) { return v.f_float == w.f_float ? 0 : v.f_float > w.f_float ? 1 : -1; }
static int CmpAddress( vlc_value_t v, vlc_value_t w ) { return v.p_address == w.p_address ? 0 : v.p_address > w.p_address ? 1 : -1; }
* Local duplication functions, and local deallocation functions
*****************************************************************************/
static void DupDummy( vlc_value_t *p_val ) { (void)p_val; /* unused */ }
-static void DupString( vlc_value_t *p_val ) { p_val->psz_string = strdup( p_val->psz_string ); }
+static void DupString( vlc_value_t *p_val ) { if( p_val->psz_string ) p_val->psz_string = strdup( p_val->psz_string ); }
static void DupList( vlc_value_t *p_val )
{
int i_new;
variable_t *p_var;
static vlc_list_t dummy_null_list = {0, NULL, NULL};
- vlc_object_internals_t *p_priv = p_this->p_internals;
+ vlc_object_internals_t *p_priv = vlc_internals( p_this );
+ vlc_refcheck( p_this );
vlc_mutex_lock( &p_priv->var_lock );
/* FIXME: if the variable already exists, we don't duplicate it. But we
p_var->choices_text.i_count = 0;
p_var->choices_text.p_values = NULL;
- p_var->b_incallback = VLC_FALSE;
+ p_var->b_incallback = false;
p_var->i_entries = 0;
p_var->p_entries = NULL;
{
case VLC_VAR_BOOL:
p_var->pf_cmp = CmpBool;
- p_var->val.b_bool = VLC_FALSE;
+ p_var->val.b_bool = false;
break;
case VLC_VAR_INTEGER:
case VLC_VAR_HOTKEY:
p_var->pf_cmp = CmpString;
p_var->pf_dup = DupString;
p_var->pf_free = FreeString;
- p_var->val.psz_string = strdup( "" );
+ p_var->val.psz_string = NULL;
break;
case VLC_VAR_FLOAT:
p_var->pf_cmp = CmpFloat;
p_var->pf_cmp = CmpAddress;
p_var->pf_free = FreeMutex;
p_var->val.p_address = malloc( sizeof(vlc_mutex_t) );
- vlc_mutex_init( p_this, (vlc_mutex_t*)p_var->val.p_address );
+ vlc_mutex_init( (vlc_mutex_t*)p_var->val.p_address );
break;
case VLC_VAR_LIST:
p_var->pf_cmp = CmpAddress;
{
int i_var, i;
variable_t *p_var;
- vlc_object_internals_t *p_priv = p_this->p_internals;
+ vlc_object_internals_t *p_priv = vlc_internals( p_this );
+ vlc_refcheck( p_this );
vlc_mutex_lock( &p_priv->var_lock );
i_var = GetUnused( p_this, psz_name );
int i_var, i;
variable_t *p_var;
vlc_value_t oldval;
- vlc_object_internals_t *p_priv = p_this->p_internals;
+ vlc_object_internals_t *p_priv = vlc_internals( p_this );
+ vlc_refcheck( p_this );
vlc_mutex_lock( &p_priv->var_lock );
i_var = Lookup( p_priv->p_vars, p_priv->i_vars, psz_name );
}
break;
case VLC_VAR_ADDCHOICE:
- /* FIXME: the list is sorted, dude. Use something cleverer. */
- for( i = p_var->choices.i_count ; i-- ; )
- {
- if( p_var->pf_cmp( p_var->choices.p_values[i], *p_val ) < 0 )
- {
- break;
- }
- }
-
- /* The new place is i+1 */
- i++;
-
- if( p_var->i_default >= i )
- {
- p_var->i_default++;
- }
+ i = p_var->choices.i_count;
INSERT_ELEM( p_var->choices.p_values, p_var->choices.i_count,
i, *p_val );
CheckValue( p_var, &p_var->val );
break;
case VLC_VAR_DELCHOICE:
- /* FIXME: the list is sorted, dude. Use something cleverer. */
for( i = 0 ; i < p_var->choices.i_count ; i++ )
{
if( p_var->pf_cmp( p_var->choices.p_values[i], *p_val ) == 0 )
int i_entries = p_var->i_entries;
callback_entry_t *p_entries = p_var->p_entries;
- p_var->b_incallback = VLC_TRUE;
+ p_var->b_incallback = true;
vlc_mutex_unlock( &p_priv->var_lock );
/* The real calls */
}
p_var = &p_priv->p_vars[i_var];
- p_var->b_incallback = VLC_FALSE;
+ p_var->b_incallback = false;
}
}
break;
+ case VLC_VAR_SETISCOMMAND:
+ p_var->i_type |= VLC_VAR_ISCOMMAND;
+ break;
+
default:
break;
}
int __var_Type( vlc_object_t *p_this, const char *psz_name )
{
int i_var, i_type;
- vlc_object_internals_t *p_priv = p_this->p_internals;
+ vlc_object_internals_t *p_priv = vlc_internals( p_this );
vlc_mutex_lock( &p_priv->var_lock );
int i_var;
variable_t *p_var;
vlc_value_t oldval;
- vlc_object_internals_t *p_priv = p_this->p_internals;
+ vlc_object_internals_t *p_priv = vlc_internals( p_this );
+ vlc_refcheck( p_this );
vlc_mutex_lock( &p_priv->var_lock );
i_var = GetUnused( p_this, psz_name );
int i_entries = p_var->i_entries;
callback_entry_t *p_entries = p_var->p_entries;
- p_var->b_incallback = VLC_TRUE;
+ p_var->b_incallback = true;
vlc_mutex_unlock( &p_priv->var_lock );
/* The real calls */
}
p_var = &p_priv->p_vars[i_var];
- p_var->b_incallback = VLC_FALSE;
+ p_var->b_incallback = false;
}
/* Free data if needed */
{
int i_var;
variable_t *p_var;
- vlc_object_internals_t *p_priv = p_this->p_internals;
+ vlc_object_internals_t *p_priv = vlc_internals( p_this );
+ vlc_refcheck( p_this );
vlc_mutex_lock( &p_priv->var_lock );
i_var = Lookup( p_priv->p_vars, p_priv->i_vars, psz_name );
int i_var;
variable_t *p_var;
callback_entry_t entry;
- vlc_object_internals_t *p_priv = p_this->p_internals;
+ vlc_object_internals_t *p_priv = vlc_internals( p_this );
+ vlc_refcheck( p_this );
entry.pf_callback = pf_callback;
entry.p_data = p_data;
{
int i_entry, i_var;
variable_t *p_var;
- vlc_object_internals_t *p_priv = p_this->p_internals;
+ vlc_object_internals_t *p_priv = vlc_internals( p_this );
+ vlc_refcheck( p_this );
vlc_mutex_lock( &p_priv->var_lock );
i_var = GetUnused( p_this, psz_name );
int i_var;
variable_t *p_var;
vlc_value_t oldval;
- vlc_object_internals_t *p_priv = p_this->p_internals;
+ vlc_object_internals_t *p_priv = vlc_internals( p_this );
vlc_mutex_lock( &p_priv->var_lock );
int i_entries = p_var->i_entries;
callback_entry_t *p_entries = p_var->p_entries;
- p_var->b_incallback = VLC_TRUE;
+ p_var->b_incallback = true;
vlc_mutex_unlock( &p_priv->var_lock );
/* The real calls */
}
p_var = &p_priv->p_vars[i_var];
- p_var->b_incallback = VLC_FALSE;
+ p_var->b_incallback = false;
}
vlc_mutex_unlock( &p_priv->var_lock );
{
char *psz_name, *psz_value;
int i_type;
- vlc_bool_t b_isno = VLC_FALSE;
+ bool b_isno = false;
vlc_value_t val;
val.psz_string = NULL;
}
else goto cleanup; /* Option doesn't exist */
- b_isno = VLC_TRUE;
+ b_isno = true;
i_type = config_GetType( p_obj, psz_name );
}
if( !i_type ) goto cleanup; /* Option doesn't exist */
module_config_t *p_config = config_FindConfig( p_obj, psz_name );
if( !p_config->b_safe )
{
- int policy = config_GetInt( p_obj, "security-policy" );
- switch( policy )
- {
- case 0: /* block */
- msg_Err( p_obj, "option %s is unsafe and is blocked by security policy", psz_name );
- return;
- case 1: /* allow */
- break;
- case 2: /* prompt */
- {
- char description[256];
- snprintf(description, sizeof(description), _("playlist item is making use of the following unsafe option '%s', which may be harmful if used in a malicious way, authorize it ?"), psz_name);
- 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 );
- goto cleanup;
- }
- }
- default:
- ;
- }
+ msg_Err( p_obj, "unsafe option \"%s\" has been ignored for "
+ "security reasons", psz_name );
+ return;
}
}
static int GetUnused( vlc_object_t *p_this, const char *psz_name )
{
int i_var, i_tries = 0;
- vlc_object_internals_t *p_priv = p_this->p_internals;
+ vlc_object_internals_t *p_priv = vlc_internals( p_this );
- while( VLC_TRUE )
+ while( true )
{
i_var = Lookup( p_priv->p_vars, p_priv->i_vars, psz_name );
if( i_var < 0 )
return VLC_SUCCESS;
}
- vlc_object_internals_t *p_priv = p_this->p_parent->p_internals;
+ vlc_object_internals_t *p_priv = vlc_internals( p_this->p_parent );
/* Look for the variable */
vlc_mutex_lock( &p_priv->var_lock );
return VLC_ENOOBJ;
}
+ vlc_refcheck( p_this );
i_type = var_Type( p_obj, psz_cmd );
if( !( i_type&VLC_VAR_ISCOMMAND ) )
{