summaryrefslogtreecommitdiff
path: root/playlist.c
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <waker@users.sourceforge.net>2014-01-04 13:47:12 +0100
committerGravatar Alexey Yakovenko <waker@users.sourceforge.net>2014-01-04 13:47:12 +0100
commit226f1af1a67221ca383c5ac9f8678f2e036a01ad (patch)
treee1d45b6fa11af33887429e2095c2540223382df9 /playlist.c
parent227553719dbe3aa3db7cde81e8071e7d6c4b11ee (diff)
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
Diffstat (limited to 'playlist.c')
-rw-r--r--playlist.c15
1 files changed, 13 insertions, 2 deletions
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) {