- info_category_t *p_cat;
- info_t *p_info;
- int i;
-
- vlc_mutex_lock( &p_input->p->input.p_item->lock );
- for( i = 0; i < p_input->p->input.p_item->i_categories; i++ )
- {
- if( !strcmp( p_input->p->input.p_item->pp_categories[i]->psz_name,
- psz_cat ) ) break;
- }
-
- if( i == p_input->p->input.p_item->i_categories )
- {
- p_cat = malloc( sizeof( info_category_t ) );
- if( !p_cat )
- {
- vlc_mutex_unlock( &p_input->p->input.p_item->lock );
- return VLC_EGENERIC;
- }
- p_cat->psz_name = strdup( psz_cat );
- p_cat->i_infos = 0;
- p_cat->pp_infos = NULL;
- INSERT_ELEM( p_input->p->input.p_item->pp_categories,
- p_input->p->input.p_item->i_categories,
- p_input->p->input.p_item->i_categories, p_cat );
- }
-
- p_cat = p_input->p->input.p_item->pp_categories[i];
-
- for( i = 0; i < p_cat->i_infos; i++ )
- {
- if( !strcmp( p_cat->pp_infos[i]->psz_name, psz_name ) )
- {
- if( p_cat->pp_infos[i]->psz_value )
- free( p_cat->pp_infos[i]->psz_value );
- break;
- }
- }
-
- if( i == p_cat->i_infos )
- {
- p_info = malloc( sizeof( info_t ) );
- if( !p_info )
- {
- vlc_mutex_unlock( &p_input->p->input.p_item->lock );
- return VLC_EGENERIC;
- }
-
- INSERT_ELEM( p_cat->pp_infos, p_cat->i_infos,
- p_cat->i_infos, p_info );
- p_info->psz_name = strdup( psz_name );
- }
-
- p_info = p_cat->pp_infos[i];
- vasprintf( &p_info->psz_value, psz_format, args );