#include <math.h>
#include <errno.h>
+#define VLC_MODULE_LICENSE VLC_LICENSE_GPL_2_PLUS
#include <vlc_common.h>
#include <vlc_plugin.h>
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,
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);
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;
}
}
+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
*****************************************************************************/
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;
}
{
intf_thread_t *intf = (intf_thread_t *)p_this;
intf_sys_t *sys = intf->p_sys = calloc(1, sizeof(intf_sys_t));
- playlist_t *p_playlist = pl_Get(p_this);
+ playlist_t *p_playlist = pl_Get(intf);
if (!sys)
return VLC_ENOMEM;
{
intf_sys_t *sys = ((intf_thread_t*)p_this)->p_sys;
+ vlc_cancel(sys->thread);
vlc_join(sys->thread, NULL);
PlaylistDestroy(sys);