]> git.sesse.net Git - vlc/blobdiff - src/playlist/search.c
Input access locking. Part one
[vlc] / src / playlist / search.c
index e7e691675438ffa24b7c200763ccf011361ce09f..15c29f603965255e48959aefbbd17f054bfcc7f5 100644 (file)
@@ -120,12 +120,29 @@ int playlist_LiveSearchUpdate( playlist_t *p_playlist, playlist_item_t *p_root,
         {
             playlist_LiveSearchUpdate( p_playlist, p_item, psz_string );
         }
-#define META_MATCHES( field ) ( input_item_GetMeta( p_item->p_input, vlc_meta_##field ) && \
-                                strcasestr( input_item_GetMeta( p_item->p_input, vlc_meta_##field ), psz_string ) )
         else
         {
-            if( strcasestr( p_item->p_input->psz_name, psz_string ) ||
-                META_MATCHES( Artist ) || META_MATCHES( Album ) )
+            char *psz_name_matches, *psz_artist_matches, *psz_album_matches;
+            char *psz_field, *psz_field_case;
+
+            psz_field = input_item_GetName( p_i );
+            psz_name_matches = strcasestr( psz_field, psz_string );
+            free( psz_field );
+
+            psz_field = input_item_GetMeta( p_item->p_input, vlc_meta_Artist );
+            psz_field_case = strcasestr( input_item_GetMeta( p_item->p_input, vlc_meta_Artist ), psz_string );
+            psz_artist_matches = ( psz_field && psz_field_case );
+            free( psz_field );
+            free( psz_field_case );
+
+
+            psz_field = input_item_GetMeta( p_item->p_input, vlc_meta_Album );
+            psz_field_case = strcasestr( input_item_GetMeta( p_item->p_input, vlc_meta_Album ), psz_string );
+            psz_album_matches = ( psz_field && psz_field_case );
+            free( psz_field );
+            free( psz_field_case );
+
+            if( psz_name_matches || psz_artist_matches || psz_album_matches )
                 p_item->i_flags &= ~PLAYLIST_DBL_FLAG;
             else
                 p_item->i_flags |= PLAYLIST_DBL_FLAG;