X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fncurses.c;h=a5e786c33e4df856fc4d695b9df2b9eadda5edde;hb=1995e5d4538a48bfe2e0cc9afa5f625a99f901e4;hp=444cdb338c910b03044dfe12f522b7cc6541dea8;hpb=8c17cf44c589221323fb2b449ff042ee807e79fe;p=vlc diff --git a/modules/gui/ncurses.c b/modules/gui/ncurses.c index 444cdb338c..a5e786c33e 100644 --- a/modules/gui/ncurses.c +++ b/modules/gui/ncurses.c @@ -287,23 +287,20 @@ static void ReadDir(intf_thread_t *intf) DirsDestroy(sys); - char *entry; + const char *entry; while ((entry = vlc_readdir(current_dir))) { if (!sys->show_hidden_files && *entry == '.' && strcmp(entry, "..")) - goto next; + continue; struct dir_entry_t *dir_entry = malloc(sizeof *dir_entry); - if (!dir_entry) - goto next; + if (unlikely(dir_entry == NULL)) + continue; dir_entry->file = IsFile(sys->current_dir, entry); - dir_entry->path = entry; + dir_entry->path = xstrdup(entry); INSERT_ELEM(sys->dir_entries, sys->n_dir_entries, sys->n_dir_entries, dir_entry); continue; - -next: - free(entry); } qsort(sys->dir_entries, sys->n_dir_entries, @@ -721,7 +718,7 @@ static int SubDrawObject(intf_sys_t *sys, int l, vlc_object_t *p_obj, int i_leve vlc_list_t *list = vlc_list_children(p_obj); for (int i = 0; i < list->i_count ; i++) { - l = SubDrawObject(sys, l, list->p_values[i].p_object, i_level, + l = SubDrawObject(sys, l, list->p_values[i].p_address, i_level, (i == list->i_count - 1) ? "`-" : "|-" ); } vlc_list_release(list); @@ -1570,7 +1567,7 @@ static void CycleESTrack(intf_sys_t *sys, const char *var) return; vlc_value_t val; - if (var_Change(input, var, VLC_VAR_GETLIST, &val, NULL) < 0) + if (var_Change(input, var, VLC_VAR_GETCHOICES, &val, NULL) < 0) return; vlc_list_t *list = val.p_list; @@ -1798,6 +1795,15 @@ static inline void UpdateInput(intf_sys_t *sys, playlist_t *p_playlist) } } +static void cleanup_run(void *data) +{ + intf_thread_t *intf = data; + playlist_t *p_playlist = pl_Get(intf); + var_DelCallback(p_playlist, "intf-change", PlaylistChanged, intf); + var_DelCallback(p_playlist, "item-change", ItemChanged, intf); + var_DelCallback(p_playlist, "playlist-item-append", PlaylistChanged, intf); +} + /***************************************************************************** * Run: ncurses thread *****************************************************************************/ @@ -1811,15 +1817,14 @@ static void *Run(void *data) var_AddCallback(p_playlist, "item-change", ItemChanged, intf); var_AddCallback(p_playlist, "playlist-item-append", PlaylistChanged, intf); + vlc_cleanup_push(cleanup_run, data); while (!sys->exit) { UpdateInput(sys, p_playlist); Redraw(intf); HandleKey(intf); } + vlc_cleanup_pop(); - var_DelCallback(p_playlist, "intf-change", PlaylistChanged, intf); - var_DelCallback(p_playlist, "item-change", ItemChanged, intf); - var_DelCallback(p_playlist, "playlist-item-append", PlaylistChanged, intf); return NULL; } @@ -1884,6 +1889,7 @@ static void Close(vlc_object_t *p_this) { intf_sys_t *sys = ((intf_thread_t*)p_this)->p_sys; + vlc_cancel(sys->thread); vlc_join(sys->thread, NULL); PlaylistDestroy(sys);