/** * Finds the value of a variable. If the specified object does not hold a * variable with the specified name, try the parent object, and iterate until * the top of the tree. If no match is found, the value is read from the * configuration. */ int var_Inherit( vlc_object_t *p_this, const char *psz_name, int i_type, vlc_value_t *p_val ) { i_type &= VLC_VAR_CLASS; for( vlc_object_t *obj = p_this; obj != NULL; obj = obj->obj.parent ) { if( var_GetChecked( obj, psz_name, i_type, p_val ) == VLC_SUCCESS ) return VLC_SUCCESS; } /* else take value from config */ switch( i_type & VLC_VAR_CLASS ) { case VLC_VAR_STRING: p_val->psz_string = config_GetPsz( p_this, psz_name ); if( !p_val->psz_string ) p_val->psz_string = strdup(""); break; case VLC_VAR_FLOAT: p_val->f_float = config_GetFloat( p_this, psz_name ); break; case VLC_VAR_INTEGER: p_val->i_int = config_GetInt( p_this, psz_name ); break; case VLC_VAR_BOOL: p_val->b_bool = config_GetInt( p_this, psz_name ); break; default: vlc_assert_unreachable(); case VLC_VAR_ADDRESS: return VLC_ENOOBJ; } return VLC_SUCCESS; }
/** * Finds the value of a variable. If the specified object does not hold a * variable with the specified name, try the parent object, and iterate until * the top of the tree. If no match is found, the value is read from the * configuration. */ int var_Inherit( vlc_object_t *p_this, const char *psz_name, int i_type, vlc_value_t *p_val ) { #ifndef NDEBUG if (p_this != VLC_OBJECT(p_this->p_libvlc) && unlikely(p_this->p_parent == NULL)) { msg_Info (p_this, "%s(%s) on detached object", __func__, psz_name); //vlc_backtrace (); } #endif i_type &= VLC_VAR_CLASS; for( vlc_object_t *obj = p_this; obj != NULL; obj = obj->p_parent ) { if( var_GetChecked( obj, psz_name, i_type, p_val ) == VLC_SUCCESS ) return VLC_SUCCESS; #ifndef NDEBUG if (obj != p_this && obj != VLC_OBJECT(p_this->p_libvlc) && unlikely(obj->p_parent == NULL)) { msg_Info (p_this, "%s(%s) on detached tree [%p] %s", __func__, psz_name, obj, obj->psz_object_type); //vlc_backtrace (); } #endif } /* else take value from config */ switch( i_type & VLC_VAR_CLASS ) { case VLC_VAR_STRING: p_val->psz_string = config_GetPsz( p_this, psz_name ); if( !p_val->psz_string ) p_val->psz_string = strdup(""); break; case VLC_VAR_FLOAT: p_val->f_float = config_GetFloat( p_this, psz_name ); break; case VLC_VAR_INTEGER: p_val->i_int = config_GetInt( p_this, psz_name ); break; case VLC_VAR_BOOL: p_val->b_bool = config_GetInt( p_this, psz_name ); break; case VLC_VAR_ADDRESS: return VLC_ENOOBJ; default: msg_Warn( p_this, "Could not inherit value for var %s " "from config. Invalid Type", psz_name ); return VLC_ENOOBJ; } /*msg_Dbg( p_this, "Inherited value for var %s from config", psz_name );*/ return VLC_SUCCESS; }
/** * Get a variable's value * * \param p_this The object that holds the variable * \param psz_name The name of the variable * \param p_val Pointer to a vlc_value_t that will hold the variable's value * after the function is finished */ int var_Get( vlc_object_t *p_this, const char *psz_name, vlc_value_t *p_val ) { return var_GetChecked( p_this, psz_name, 0, p_val ); }