+#define ITEM_TYPE_UNKNOWN 0
+#define ITEM_TYPE_AFILE 1
+#define ITEM_TYPE_VFILE 2
+#define ITEM_TYPE_DIRECTORY 3
+#define ITEM_TYPE_DISC 4
+#define ITEM_TYPE_CDDA 5
+#define ITEM_TYPE_CARD 6
+#define ITEM_TYPE_NET 7
+#define ITEM_TYPE_PLAYLIST 8
+#define ITEM_TYPE_NODE 9
+
+static inline void vlc_input_item_Init( vlc_object_t *p_o, input_item_t *p_i )
+{
+ memset( p_i, 0, sizeof(input_item_t) );
+ p_i->i_options = 0;
+ p_i->i_es = 0;
+ p_i->i_categories = 0 ;
+ p_i->psz_name = 0;
+ p_i->psz_uri = 0;
+ p_i->ppsz_options = 0;
+ p_i->pp_categories = 0;
+ p_i->es = 0;
+ p_i->i_type = ITEM_TYPE_UNKNOWN;
+ p_i->b_fixed_name = VLC_TRUE;
+ vlc_mutex_init( p_o, &p_i->lock );
+}
+
+static inline void vlc_input_item_CopyOptions( input_item_t *p_parent,
+ input_item_t *p_child )
+{
+ int i;
+ for( i = 0 ; i< p_parent->i_options; i++ )
+ {
+ char *psz_option= strdup( p_parent->ppsz_options[i] );
+ p_child->i_options++;
+ p_child->ppsz_options = (char **)realloc( p_child->ppsz_options,
+ p_child->i_options *
+ sizeof( char * ) );
+ p_child->ppsz_options[p_child->i_options-1] = psz_option;
+ }
+}
+
+static inline void vlc_input_item_Clean( input_item_t *p_i )
+{
+ if( p_i->psz_name ) free( p_i->psz_name );
+ if( p_i->psz_uri ) free( p_i->psz_uri );
+ p_i->psz_name = 0;
+ p_i->psz_uri = 0;
+
+ while( p_i->i_options )
+ {
+ p_i->i_options--;
+ if( p_i->ppsz_options[p_i->i_options] )
+ free( p_i->ppsz_options[p_i->i_options] );
+ if( !p_i->i_options ) free( p_i->ppsz_options );
+ }
+
+ while( p_i->i_es )
+ {
+ p_i->i_es--;
+ es_format_Clean( p_i->es[p_i->i_es] );
+ if( !p_i->i_es ) free( p_i->es );
+ }
+
+ while( p_i->i_categories )
+ {
+ info_category_t *p_category =
+ p_i->pp_categories[--(p_i->i_categories)];
+
+ while( p_category->i_infos )
+ {
+ p_category->i_infos--;
+
+ if( p_category->pp_infos[p_category->i_infos]->psz_name )
+ free( p_category->pp_infos[p_category->i_infos]->psz_name);
+ if( p_category->pp_infos[p_category->i_infos]->psz_value )
+ free( p_category->pp_infos[p_category->i_infos]->psz_value );
+ free( p_category->pp_infos[p_category->i_infos] );
+
+ if( !p_category->i_infos ) free( p_category->pp_infos );
+ }
+
+ if( p_category->psz_name ) free( p_category->psz_name );
+ free( p_category );
+
+ if( !p_i->i_categories ) free( p_i->pp_categories );
+ }
+
+ vlc_mutex_destroy( &p_i->lock );
+}
+
+VLC_EXPORT( char *, vlc_input_item_GetInfo, ( input_item_t *p_i, const char *psz_cat,const char *psz_name ) );
+VLC_EXPORT(int, vlc_input_item_AddInfo, ( input_item_t *p_i, const char *psz_cat, const char *psz_name, const char *psz_format, ... ) );