# endif
#include <vlc_common.h>
-#include <assert.h>
#include <vlc_playlist.h>
/*****************************************************************************
* @return The media library object. NULL if the media library
* object could not be loaded
*/
-VLC_EXPORT( media_library_t*, __ml_Hold, ( vlc_object_t* p_this ) );
-#define ml_Hold( a ) __ml_Hold( VLC_OBJECT(a) )
+VLC_EXPORT( media_library_t*, ml_Hold, ( vlc_object_t* p_this ) );
+#define ml_Hold( a ) ml_Hold( VLC_OBJECT(a) )
/**
* @brief Discard your ref to media library
* @param p_this The object holding the media library
*/
-VLC_EXPORT( void, __ml_Release, ( vlc_object_t* p_this ) );
-#define ml_Release(a) __ml_Release( VLC_OBJECT(a))
+VLC_EXPORT( void, ml_Release, ( vlc_object_t* p_this ) );
+#define ml_Release(a) ml_Release( VLC_OBJECT(a) )
/**
* @brief Create a Media Library VLC object.
* @param psz_name Name for the module
* @return The ML object.
*/
-VLC_EXPORT( media_library_t*, __ml_Create, ( vlc_object_t *p_this, char* psz_name ) );
+VLC_EXPORT( media_library_t*, ml_Create, ( vlc_object_t *p_this, char* psz_name ) );
/**
* @brief Destructor for the Media library singleton
* @param p_this Parent the ML object is attached to
*/
-VLC_EXPORT( void, __ml_Destroy, ( vlc_object_t* p_this ) );
+VLC_EXPORT( void, ml_Destroy, ( vlc_object_t* p_this ) );
/**
* @brief Control the Media Library
*/
static inline void ml_gc_incref( ml_media_t* p_media )
{
- unsigned refs;
ml_gc_object_t* p_gc = &p_media->ml_gc_data;
- assert( p_gc );
+ if( p_gc == NULL )
+ return;
vlc_spin_lock (&p_gc->spin);
- refs = ++p_gc->refs;
+ ++p_gc->refs;
vlc_spin_unlock (&p_gc->spin);
- assert (refs != 1); /* there had to be a reference already */
}
/**
unsigned refs;
bool pool;
ml_gc_object_t* p_gc = &p_media->ml_gc_data;
- assert( p_gc );
+ if( p_gc == NULL )
+ return;
vlc_spin_lock (&p_gc->spin);
- assert( p_gc->refs != 0 );
refs = --p_gc->refs;
pool = p_gc->pool;
- assert( ( refs != 0 && p_gc->pool == true ) || ( refs == 0 && p_gc->pool == false ) );
vlc_spin_unlock (&p_gc->spin);
if( refs == 0 && pool == false )
static inline int ml_CopyMedia( ml_media_t *b, ml_media_t *a )
{
if( !a || !b ) return VLC_EGENERIC;
- assert( a != b );
+ if( a == b ) return VLC_SUCCESS;
ml_LockMedia( a );
ml_LockMedia( b );
b->b_sparse = a->b_sparse;
* If op = ML_OP_NONE, then you are connecting to a tree consisting of
* only SPECIAL nodes.
* If op = ML_OP_NOT, then right MUST be NULL
- * op must not be ML_OP_SPECIAL, @see __ml_FtreeSpec
+ * op must not be ML_OP_SPECIAL, @see ml_FtreeSpec
* @param left part of the tree
* @param right part of the tree
* @return Pointer to new tree
* @return Pointer to new tree
* @note Use the helpers
*/
-VLC_EXPORT( ml_ftree_t*, __ml_FtreeSpec, ( ml_ftree_t* tree,
+VLC_EXPORT( ml_ftree_t*, ml_FtreeSpec, ( ml_ftree_t* tree,
ml_select_e crit,
int limit,
char* sort ) );
#define ml_FtreeOr( left, right ) ml_OpConnectChilds( ML_OP_OR, left, right )
#define ml_FtreeNot( left ) ml_OpConnectChilds( ML_OP_NOT, left, NULL )
-#define ml_FtreeSpecAsc( tree, str ) __ml_FtreeSpec( tree, ML_SORT_ASC, 0, str )
-#define ml_FtreeSpecDesc( tree, str ) __ml_FtreeSpec( tree, ML_SORT_DESC, 0, str )
-#define ml_FtreeSpecLimit( tree, limit ) __ml_FtreeSpec( tree, ML_LIMIT, limit, NULL )
-#define ml_FtreeSpecDistinct( tree ) __ml_FtreeSpec( tree, ML_DISTINCT, 0, NULL )
+#define ml_FtreeSpecAsc( tree, str ) ml_FtreeSpec( tree, ML_SORT_ASC, 0, str )
+#define ml_FtreeSpecDesc( tree, str ) ml_FtreeSpec( tree, ML_SORT_DESC, 0, str )
+#define ml_FtreeSpecLimit( tree, limit ) ml_FtreeSpec( tree, ML_LIMIT, limit, NULL )
+#define ml_FtreeSpecDistinct( tree ) ml_FtreeSpec( tree, ML_DISTINCT, 0, NULL )
/*****************************************************************************
* @param id The id of the row to update
* @param ... The update data. [SelectType [RoleType] Value]
*/
-#define ml_UpdateSimple( ml, sel, lval, id, ... ) \
- __ml_UpdateSimple( ml, sel, lval, id, __VA_ARGS__, ML_END )
-VLC_EXPORT( int, __ml_UpdateSimple, ( media_library_t *p_media_library,
+VLC_EXPORT( int, ml_UpdateSimple, ( media_library_t *p_media_library,
ml_select_e selected_type,
const char* psz_lvalue,
int id, ... ) );
+#define ml_UpdateSimple( ml, sel, lval, id, ... ) \
+ ml_UpdateSimple( ml, sel, lval, id, __VA_ARGS__, ML_END )
/**
* @brief Generic DELETE function
static inline int ml_CreateAppendPersonAdv( ml_person_t **pp_person,
const char* psz_role, const char* psz_name, int i_id )
{
- assert( i_id || ( psz_name && *psz_name && psz_role && *psz_role ) );
+ if( i_id == 0 || !( psz_name && *psz_name && psz_role && *psz_role ) )
+ return VLC_SUCCESS;
if( !pp_person )
return VLC_EGENERIC;
if( *pp_person != NULL )