[vlc-commits] commit: ncurses: improve array cleanup ( Rafaël Carré )
git at videolan.org
git at videolan.org
Tue Oct 26 14:03:37 CEST 2010
vlc | branch: master | Rafaël Carré <rafael.carre at gmail.com> | Mon Oct 25 21:29:08 2010 +0200| [96c449015730579b1190757c3a30cf34b64f73ba] | committer: Rafaël Carré
ncurses: improve array cleanup
factorize
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=96c449015730579b1190757c3a30cf34b64f73ba
---
modules/gui/ncurses.c | 54 ++++++++++++++++++++----------------------------
1 files changed, 23 insertions(+), 31 deletions(-)
diff --git a/modules/gui/ncurses.c b/modules/gui/ncurses.c
index ed4255c..e5d2ba5 100644
--- a/modules/gui/ncurses.c
+++ b/modules/gui/ncurses.c
@@ -194,23 +194,34 @@ struct intf_sys_t
* Directories
*****************************************************************************/
-static int comp_dir_entries(const void *pp_dir_entry1,
- const void *pp_dir_entry2)
+static void DirsDestroy(intf_sys_t *p_sys)
+{
+ while (p_sys->i_dir_entries)
+ {
+ struct dir_entry_t *p_dir_entry;
+ p_dir_entry = p_sys->pp_dir_entries[--p_sys->i_dir_entries];
+ free(p_dir_entry->psz_path);
+ free(p_dir_entry);
+ }
+ free(p_sys->pp_dir_entries);
+ p_sys->pp_dir_entries = NULL;
+}
+
+static int comp_dir_entries(const void *pp_dir_entry1, const void *pp_dir_entry2)
{
struct dir_entry_t *p_dir_entry1 = *(struct dir_entry_t**)pp_dir_entry1;
struct dir_entry_t *p_dir_entry2 = *(struct dir_entry_t**)pp_dir_entry2;
if (p_dir_entry1->b_file == p_dir_entry2->b_file)
return strcasecmp(p_dir_entry1->psz_path, p_dir_entry2->psz_path);
- else
- return (p_dir_entry1->b_file ? 1 : -1);
+
+ return p_dir_entry1->b_file ? 1 : -1;
}
static void ReadDir(intf_thread_t *p_intf)
{
intf_sys_t *p_sys = p_intf->p_sys;
DIR *p_current_dir;
- int i;
if (!p_sys->psz_current_dir || !*p_sys->psz_current_dir)
{
@@ -232,15 +243,7 @@ static void ReadDir(intf_thread_t *p_intf)
}
/* Clean the old shit */
- for(i = 0; i < p_sys->i_dir_entries; i++)
- {
- struct dir_entry_t *p_dir_entry = p_sys->pp_dir_entries[i];
- free(p_dir_entry->psz_path);
- REMOVE_ELEM(p_sys->pp_dir_entries, p_sys->i_dir_entries, i);
- free(p_dir_entry);
- }
- p_sys->pp_dir_entries = NULL;
- p_sys->i_dir_entries = 0;
+ DirsDestroy(p_sys);
/* while we still have entries in the directory */
while ((psz_entry = vlc_readdir(p_current_dir)))
@@ -310,17 +313,15 @@ static void ReadDir(intf_thread_t *p_intf)
* Playlist
*****************************************************************************/
-static void PlaylistDestroy(intf_thread_t *p_intf)
+static void PlaylistDestroy(intf_sys_t *p_sys)
{
- intf_sys_t *p_sys = p_intf->p_sys;
-
while (p_sys->i_plist_entries)
{
- struct pl_item_t *p_pl_item = p_sys->pp_plist[0];
+ struct pl_item_t *p_pl_item = p_sys->pp_plist[--p_sys->i_plist_entries];
free(p_pl_item->psz_display);
- REMOVE_ELEM(p_sys->pp_plist, p_sys->i_plist_entries, 0);
free(p_pl_item);
}
+ free(p_sys->pp_plist);
p_sys->pp_plist = NULL;
}
@@ -394,7 +395,7 @@ static void PlaylistRebuild(intf_thread_t *p_intf)
PL_LOCK;
/* First clear the old one */
- PlaylistDestroy(p_intf);
+ PlaylistDestroy(p_sys);
/* Build the new one */
PlaylistAddNode(p_intf, PlaylistGetRoot(p_intf), 0, "");
@@ -1702,7 +1703,6 @@ static int HandleKey(intf_thread_t *p_intf, int i_key)
default:
p_sys->i_current_view = VIEW_CATEGORY;
}
- //p_sys->b_need_update = true;
PlaylistRebuild(p_intf);
goto end;
@@ -2468,16 +2468,8 @@ static void Close(vlc_object_t *p_this)
intf_thread_t *p_intf = (intf_thread_t *)p_this;
intf_sys_t *p_sys = p_intf->p_sys;
- PlaylistDestroy(p_intf);
-
- while (p_sys->i_dir_entries)
- {
- struct dir_entry_t *p_dir_entry = p_sys->pp_dir_entries[0];
- free(p_dir_entry->psz_path);
- REMOVE_ELEM(p_sys->pp_dir_entries, p_sys->i_dir_entries, 0);
- free(p_dir_entry);
- }
- p_sys->pp_dir_entries = NULL;
+ PlaylistDestroy(p_sys);
+ DirsDestroy(p_sys);
free(p_sys->psz_current_dir);
free(p_sys->psz_search_chain);
More information about the vlc-commits
mailing list