* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
+
/**
* \file
* This file is a collection of common definitions and types
typedef struct variable_t variable_t;
typedef struct date_t date_t;
typedef struct hashtable_entry_t hashtable_entry_t;
+typedef struct gc_object_t gc_object_t ;
/* Messages */
typedef struct msg_bank_t msg_bank_t;
typedef enum {
PLAYLIST_PLAY, /**< No arg. res=can fail*/
PLAYLIST_AUTOPLAY, /**< No arg. res=cant fail*/
- PLAYLIST_VIEWPLAY, /**< arg1= int, arg2= playlist_item_t*,*/
- /** arg3 = playlist_item_t* , res=can fail */
- PLAYLIST_ITEMPLAY, /** <arg1 = playlist_item_t * , res=can fail */
+ PLAYLIST_VIEWPLAY, /**< arg1= playlist_item_t*,*/
+ /** arg2 = playlist_item_t* , res=can fail */
PLAYLIST_PAUSE, /**< No arg res=can fail*/
PLAYLIST_STOP, /**< No arg res=can fail*/
PLAYLIST_SKIP, /**< arg1=int, res=can fail*/
- PLAYLIST_GOTO, /**< arg1=int res=can fail */
- PLAYLIST_VIEWGOTO /**< arg1=int res=can fail */
} playlist_command_t;
#define VLC_OBJECT( x ) \
((vlc_object_t *)(x))+0*(x)->be_sure_to_add_VLC_COMMON_MEMBERS_to_struct
+#define VLC_GC_MEMBERS \
+/** \name VLC_GC_MEMBERS \
+ * these members are common to all objects that wish to be garbage-collected \
+ */ \
+/**@{*/ \
+ int i_gc_refcount; \
+ void (*pf_destructor) ( gc_object_t * ); \
+ void *p_destructor_arg; \
+/**@}*/
+
+struct gc_object_t
+{
+ VLC_GC_MEMBERS
+};
+
+static inline void __vlc_gc_incref( gc_object_t * p_gc )
+{
+ p_gc->i_gc_refcount ++;
+};
+
+static inline void __vlc_gc_decref( gc_object_t *p_gc )
+{
+ p_gc->i_gc_refcount -- ;
+
+ if( p_gc->i_gc_refcount == 0 )
+ {
+ p_gc->pf_destructor( p_gc );
+ /* Do not use the p_gc pointer from now on ! */
+ }
+}
+
+#define vlc_gc_incref( a ) __vlc_gc_incref( (gc_object_t *)a )
+#define vlc_gc_decref( a ) __vlc_gc_decref( (gc_object_t *)a )
+#define vlc_gc_init( a,b,c ) { ((gc_object_t *)a)->i_gc_refcount = 0; \
+ ((gc_object_t *)a)->pf_destructor = b; \
+ ((gc_object_t *)a)->p_destructor_arg = c; }
+
+
/*****************************************************************************
* Macros and inline functions
*****************************************************************************/
# define vlc_strndup NULL
#endif
+#ifndef HAVE_STRLCPY
+# define strlcpy vlc_strlcpy
+ VLC_EXPORT( size_t, vlc_strlcpy, ( char *, const char *, size_t ) );
+#elif !defined(__PLUGIN__)
+# define vlc_strlcpy NULL
+#endif
+
#ifndef HAVE_ATOF
# define atof vlc_atof
VLC_EXPORT( double, vlc_atof, ( const char *nptr ) );
/* iconv wrappers (defined in src/extras/libc.c) */
typedef void *vlc_iconv_t;
VLC_EXPORT( vlc_iconv_t, vlc_iconv_open, ( const char *, const char * ) );
-VLC_EXPORT( size_t, vlc_iconv, ( vlc_iconv_t, char **, size_t *, char **, size_t * ) );
+VLC_EXPORT( size_t, vlc_iconv, ( vlc_iconv_t, const char **, size_t *, char **, size_t * ) );
VLC_EXPORT( int, vlc_iconv_close, ( vlc_iconv_t ) );
/* execve wrapper (defined in src/extras/libc.c) */