[vlc-commits] playlist: remove position parameter to playlist_Add*

Rémi Denis-Courmont git at videolan.org
Sat Nov 19 12:35:46 CET 2016


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sat Nov 19 13:26:21 2016 +0200| [b459e18dbfbe462313fc46d99b3a6a81e69a4d32] | committer: Rémi Denis-Courmont

playlist: remove position parameter to playlist_Add*

This removes the insertion offset parameter to playlist_Add(),
playlist_AddExt() and playlist_AddInput().

intf_InsertItem() was the only occurrence where the offset was zero,
a side effect of how the command line is parsed backward. This is now
done explicitly with playlist_NodeAddInput().

A non-zero positive offset made no sense, since:
 - the number of children of a node can change asynchronously while the
   playlist lock,
 - the back-end asserted or triggered undefined behaviour if the offset
   was out of range.
DBus was the only occurrence of this bug (see also #17451 comment:4),
and has been fixed in an earlier change.

In all remaining call sites, the offset was PLAYLIST_END. This removes
the parameter which would otherwise constitute a useless constant.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b459e18dbfbe462313fc46d99b3a6a81e69a4d32
---

 include/vlc_playlist.h                             |  6 +++---
 modules/control/dbus/dbus_player.c                 |  2 +-
 modules/control/oldrc.c                            |  4 ++--
 modules/control/win_msg.c                          |  1 -
 .../gui/macosx/VLCConvertAndSaveWindowController.m |  2 +-
 modules/gui/ncurses.c                              |  4 ++--
 modules/gui/qt/recents.cpp                         |  1 -
 modules/gui/skins2/commands/cmd_add_item.cpp       |  3 +--
 modules/lua/vlc.c                                  |  2 +-
 src/interface/interface.c                          | 12 +++++++----
 src/os2/specific.c                                 |  2 +-
 src/playlist/item.c                                | 24 +++++++---------------
 src/playlist/loadsave.c                            |  2 +-
 13 files changed, 28 insertions(+), 37 deletions(-)

diff --git a/include/vlc_playlist.h b/include/vlc_playlist.h
index 2ea0811..5fef490 100644
--- a/include/vlc_playlist.h
+++ b/include/vlc_playlist.h
@@ -321,9 +321,9 @@ VLC_API int playlist_ServicesDiscoveryControl( playlist_t *, const char *, int,
  ********************************************************/
 
 /******************** Item addition ********************/
-VLC_API int playlist_Add( playlist_t *, const char *, const char *, int, int, bool );
-VLC_API int playlist_AddExt( playlist_t *, const char *, const char *, int, int, int, const char *const *, unsigned, bool );
-VLC_API int playlist_AddInput( playlist_t *, input_item_t *, int, int, bool );
+VLC_API int playlist_Add( playlist_t *, const char *, const char *, int, bool );
+VLC_API int playlist_AddExt( playlist_t *, const char *, const char *, int, int, const char *const *, unsigned, bool );
+VLC_API int playlist_AddInput( playlist_t *, input_item_t *, int, bool );
 VLC_API playlist_item_t * playlist_NodeAddInput( playlist_t *, input_item_t *, playlist_item_t *, int, int );
 VLC_API int playlist_NodeAddCopy( playlist_t *, playlist_item_t *, playlist_item_t *, int );
 
diff --git a/modules/control/dbus/dbus_player.c b/modules/control/dbus/dbus_player.c
index dc7b37b..04aab4e 100644
--- a/modules/control/dbus/dbus_player.c
+++ b/modules/control/dbus/dbus_player.c
@@ -229,7 +229,7 @@ DBUS_METHOD( OpenUri )
         return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
     }
 
-    playlist_Add( PL, psz_mrl, NULL, PLAYLIST_GO, PLAYLIST_END, true );
+    playlist_Add( PL, psz_mrl, NULL, PLAYLIST_GO, true );
 
     REPLY_SEND;
 }
diff --git a/modules/control/oldrc.c b/modules/control/oldrc.c
index 828444f..bf695e5 100644
--- a/modules/control/oldrc.c
+++ b/modules/control/oldrc.c
@@ -1297,7 +1297,7 @@ static int Playlist( vlc_object_t *p_this, char const *psz_cmd,
         {
             msg_rc( "Trying to add %s to playlist.", newval.psz_string );
             int i_ret = playlist_AddInput( p_playlist, p_item,
-                                           PLAYLIST_GO, PLAYLIST_END, true );
+                                           PLAYLIST_GO, true );
             vlc_gc_decref( p_item );
             if( i_ret != VLC_SUCCESS )
             {
@@ -1314,7 +1314,7 @@ static int Playlist( vlc_object_t *p_this, char const *psz_cmd,
         {
             msg_rc( "trying to enqueue %s to playlist", newval.psz_string );
             if( playlist_AddInput( p_playlist, p_item,
-                                   0, PLAYLIST_END, true ) != VLC_SUCCESS )
+                                   0, true ) != VLC_SUCCESS )
             {
                 return VLC_EGENERIC;
             }
diff --git a/modules/control/win_msg.c b/modules/control/win_msg.c
index 6b1dd52..12011a8 100644
--- a/modules/control/win_msg.c
+++ b/modules/control/win_msg.c
@@ -102,7 +102,6 @@ static LRESULT CALLBACK WMCOPYWNDPROC(HWND hwnd, UINT uMsg,
                         (psz_URI != NULL) ? psz_URI : ppsz_argv[i_opt],
                         NULL,
                         ( ( i_opt || p_data->enqueue ) ? 0 : PLAYLIST_GO ),
-                        PLAYLIST_END,
                         i_options,
                         (char const **)( i_options ? &ppsz_argv[i_opt+1] : NULL ),
                         VLC_INPUT_OPTION_TRUSTED,
diff --git a/modules/gui/macosx/VLCConvertAndSaveWindowController.m b/modules/gui/macosx/VLCConvertAndSaveWindowController.m
index a77d479..088e2c3 100644
--- a/modules/gui/macosx/VLCConvertAndSaveWindowController.m
+++ b/modules/gui/macosx/VLCConvertAndSaveWindowController.m
@@ -287,7 +287,7 @@
         input_item_AddOption(p_input, [[NSString stringWithFormat:@"ttl=%@", [_streamTTLField stringValue]] UTF8String], VLC_INPUT_OPTION_TRUSTED);
 
     int returnValue;
-    returnValue = playlist_AddInput(p_playlist, p_input, PLAYLIST_STOP, PLAYLIST_END, true );
+    returnValue = playlist_AddInput(p_playlist, p_input, PLAYLIST_STOP, true );
 
     if (returnValue == VLC_SUCCESS) {
         /* let's "play" */
diff --git a/modules/gui/ncurses.c b/modules/gui/ncurses.c
index 8c239a4..f429798 100644
--- a/modules/gui/ncurses.c
+++ b/modules/gui/ncurses.c
@@ -1445,7 +1445,7 @@ static bool HandleBrowseKey(intf_thread_t *intf, int key)
 
         input_item_t *p_input = p_playlist->p_playing->p_input;
         playlist_Add(p_playlist, uri, NULL, 0,
-                     PLAYLIST_END, p_parent->p_input == p_input);
+                     p_parent->p_input == p_input);
 
         BoxSwitch(sys, BOX_PLAYLIST);
         free(uri);
@@ -1480,7 +1480,7 @@ static void OpenSelection(intf_thread_t *intf)
         p_parent = p_parent->p_parent;
     PL_UNLOCK;
 
-    playlist_Add(p_playlist, uri, NULL, PLAYLIST_GO, PLAYLIST_END,
+    playlist_Add(p_playlist, uri, NULL, PLAYLIST_GO,
                  p_parent->p_input == p_playlist->p_playing->p_input);
 
     sys->plidx_follow = true;
diff --git a/modules/gui/qt/recents.cpp b/modules/gui/qt/recents.cpp
index 82dff23..cfb3d1a 100644
--- a/modules/gui/qt/recents.cpp
+++ b/modules/gui/qt/recents.cpp
@@ -236,7 +236,6 @@ int Open::openMRLwithOptions( intf_thread_t* p_intf,
     int i_ret = playlist_AddExt( THEPL,
                   qtu(mrl), title,
                   (b_start ? PLAYLIST_GO : 0),
-                  PLAYLIST_END,
                   i_options, ppsz_options, VLC_INPUT_OPTION_TRUSTED,
                   b_playlist );
 
diff --git a/modules/gui/skins2/commands/cmd_add_item.cpp b/modules/gui/skins2/commands/cmd_add_item.cpp
index 24e89c1..b39e10c 100644
--- a/modules/gui/skins2/commands/cmd_add_item.cpp
+++ b/modules/gui/skins2/commands/cmd_add_item.cpp
@@ -44,6 +44,5 @@ void CmdAddItem::execute()
         free( psz_uri );
     }
     playlist_Add( pPlaylist, m_name.c_str(), NULL,
-                  m_playNow ? PLAYLIST_GO : 0,
-                  PLAYLIST_END, true );
+                  m_playNow ? PLAYLIST_GO : 0, true );
 }
diff --git a/modules/lua/vlc.c b/modules/lua/vlc.c
index 5166941..36d92e1 100644
--- a/modules/lua/vlc.c
+++ b/modules/lua/vlc.c
@@ -579,7 +579,7 @@ int vlclua_playlist_add_internal( vlc_object_t *p_this, lua_State *L,
                         /* FIXME: playlist_AddInput() can fail */
                         playlist_AddInput( p_playlist, p_input,
                                            ( b_play ? PLAYLIST_GO : 0 ),
-                                           PLAYLIST_END, true );
+                                           true );
                     i_count ++; /* increment counter */
                     vlc_gc_decref( p_input );
                     while( i_options > 0 )
diff --git a/src/interface/interface.c b/src/interface/interface.c
index 568215f..6306c04 100644
--- a/src/interface/interface.c
+++ b/src/interface/interface.c
@@ -174,10 +174,14 @@ int intf_InsertItem(libvlc_int_t *libvlc, const char *mrl, unsigned optc,
 
     int ret = -1;
 
-    if (input_item_AddOptions(item, optc, optv, flags) == VLC_SUCCESS
-     && playlist_AddInput(playlist, item, 0, 0, true) == VLC_SUCCESS)
-        ret = 0;
-
+    if (input_item_AddOptions(item, optc, optv, flags) == VLC_SUCCESS)
+    {
+        playlist_Lock(playlist);
+        if (playlist_NodeAddInput(playlist, item, playlist->p_playing, 0,
+                                  0) != NULL)
+            ret = 0;
+        playlist_Unlock(playlist);
+    }
     input_item_Release(item);
     return ret;
 }
diff --git a/src/os2/specific.c b/src/os2/specific.c
index 530211b..743c433 100644
--- a/src/os2/specific.c
+++ b/src/os2/specific.c
@@ -100,7 +100,7 @@ static void IPCHelperThread( void *arg )
                 playlist_AddExt( p_playlist, ppsz_argv[ i_opt ], NULL,
                                  (( i_opt || ulCmd == IPC_CMD_ENQUEUE ) ?
                                      0 : PLAYLIST_GO ),
-                                 PLAYLIST_END, i_options,
+                                 i_options,
                                  ( char const ** )
                                      ( i_options ? &ppsz_argv[ i_opt + 1 ] :
                                                    NULL ),
diff --git a/src/playlist/item.c b/src/playlist/item.c
index a956f93..4fed025 100644
--- a/src/playlist/item.c
+++ b/src/playlist/item.c
@@ -448,18 +448,14 @@ void playlist_Clear( playlist_t * p_playlist, bool b_locked )
  * \param psz_uri the mrl to add to the playlist
  * \param psz_name a text giving a name or description of this item
  * \param i_mode the mode used when adding
- * \param i_pos the position in the playlist where to add. If this is
- *        PLAYLIST_END the item will be added at the end of the playlist
- *        regardless of its size
  * \param b_playlist TRUE for playlist, FALSE for media library
  * \return VLC_SUCCESS or a VLC error code
  */
 int playlist_Add( playlist_t *p_playlist, const char *psz_uri,
-                  const char *psz_name, int i_mode, int i_pos,
-                  bool b_playlist )
+                  const char *psz_name, int i_mode, bool b_playlist )
 {
     return playlist_AddExt( p_playlist, psz_uri, psz_name,
-                            i_mode, i_pos, 0, NULL, 0, b_playlist );
+                            i_mode, 0, NULL, 0, b_playlist );
 }
 
 /**
@@ -469,9 +465,6 @@ int playlist_Add( playlist_t *p_playlist, const char *psz_uri,
  * \param psz_uri the mrl to add to the playlist
  * \param psz_name a text giving a name or description of this item
  * \param i_mode the mode used when adding
- * \param i_pos the position in the playlist where to add. If this is
- *        PLAYLIST_END the item will be added at the end of the playlist
- *        regardless of its size
  * \param i_options the number of options
  * \param ppsz_options an array of options
  * \param i_option_flags options flags
@@ -479,7 +472,7 @@ int playlist_Add( playlist_t *p_playlist, const char *psz_uri,
  * \return VLC_SUCCESS or a VLC error code
 */
 int playlist_AddExt( playlist_t *p_playlist, const char * psz_uri,
-                     const char *psz_name, int i_mode, int i_pos,
+                     const char *psz_name, int i_mode,
                      int i_options, const char *const *ppsz_options,
                      unsigned i_option_flags,
                      bool b_playlist )
@@ -491,8 +484,7 @@ int playlist_AddExt( playlist_t *p_playlist, const char * psz_uri,
     if( p_input == NULL )
         return VLC_ENOMEM;
     input_item_AddOptions( p_input, i_options, ppsz_options, i_option_flags );
-    i_ret = playlist_AddInput( p_playlist, p_input, i_mode, i_pos,
-                               b_playlist );
+    i_ret = playlist_AddInput( p_playlist, p_input, i_mode, b_playlist );
     vlc_gc_decref( p_input );
     return i_ret;
 }
@@ -503,14 +495,11 @@ int playlist_AddExt( playlist_t *p_playlist, const char * psz_uri,
  * \param p_playlist the playlist to add into
  * \param p_input the input item to add
  * \param i_mode the mode used when adding
- * \param i_pos the position in the playlist where to add. If this is
- *        PLAYLIST_END the item will be added at the end of the playlist
- *        regardless of its size
  * \param b_playlist TRUE for playlist, FALSE for media library
  * \return VLC_SUCCESS or VLC_ENOMEM or VLC_EGENERIC
 */
 int playlist_AddInput( playlist_t* p_playlist, input_item_t *p_input,
-                       int i_mode, int i_pos, bool b_playlist )
+                       int i_mode, bool b_playlist )
 {
     playlist_item_t *item;
 
@@ -518,7 +507,8 @@ int playlist_AddInput( playlist_t* p_playlist, input_item_t *p_input,
     item = b_playlist ? p_playlist->p_playing
                       : p_playlist->p_media_library;
 
-    item = playlist_NodeAddInput( p_playlist, p_input, item, i_mode, i_pos );
+    item = playlist_NodeAddInput( p_playlist, p_input, item, i_mode,
+                                  PLAYLIST_END );
     PL_UNLOCK;
     return (item != NULL) ? VLC_SUCCESS : VLC_ENOMEM;
 }
diff --git a/src/playlist/loadsave.c b/src/playlist/loadsave.c
index c9a5dbc..a3bb89d 100644
--- a/src/playlist/loadsave.c
+++ b/src/playlist/loadsave.c
@@ -99,7 +99,7 @@ int playlist_Import( playlist_t *p_playlist, const char *psz_file )
     p_input = input_item_New( psz_uri, psz_file );
     free( psz_uri );
 
-    playlist_AddInput( p_playlist, p_input, 0, PLAYLIST_END, true );
+    playlist_AddInput( p_playlist, p_input, 0, true );
 
     vlc_object_t *dummy = vlc_object_create( p_playlist, sizeof (*dummy) );
     var_Create( dummy, "meta-file", VLC_VAR_VOID );



More information about the vlc-commits mailing list