From 226f1af1a67221ca383c5ac9f8678f2e036a01ad Mon Sep 17 00:00:00 2001 From: Alexey Yakovenko Date: Sat, 4 Jan 2014 13:47:12 +0100 Subject: new API and vfs_zip patch, fixing bug #986, vfs.scandir not being able to handle pathes longer than 256 bytes because of dirent misuse --- playlist.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'playlist.c') diff --git a/playlist.c b/playlist.c index 33a059cd..983f49f6 100644 --- a/playlist.c +++ b/playlist.c @@ -1481,10 +1481,21 @@ plt_insert_dir_int (int visibility, playlist_t *playlist, DB_vfs_t *vfs, playIte } } else { - inserted = plt_insert_file_int (visibility, playlist, after, namelist[i]->d_name, pabort, cb, user_data); + char fullname[PATH_MAX]; + const char *sch = NULL; + if (vfs->plugin.api_vminor >= 6 && vfs->get_scheme_for_name) { + sch = vfs->get_scheme_for_name (dirname); + } + if (sch && strncmp (sch, namelist[i]->d_name, strlen (sch))) { + snprintf (fullname, sizeof (fullname), "%s%s:%s", sch, dirname, namelist[i]->d_name); + } + else { + strcpy (fullname, namelist[i]->d_name); + } + inserted = plt_insert_file_int (visibility, playlist, after, fullname, pabort, cb, user_data); if (!inserted) { // special case for loading playlists in zip files - inserted = plt_load_int (visibility, playlist, after, namelist[i]->d_name, pabort, cb, user_data); + inserted = plt_load_int (visibility, playlist, after, fullname, pabort, cb, user_data); } } if (inserted) { -- cgit v1.2.3