From 4d996f37463fd6dc88a75ffe6111482e82460923 Mon Sep 17 00:00:00 2001 From: albeu Date: Sun, 7 Jul 2002 03:59:58 +0000 Subject: [PATCH] Relative filename in playlist are now relative to the playlist path git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6663 b3059339-0415-0410-9bf9-f77b7e298cf2 --- playtreeparser.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/playtreeparser.c b/playtreeparser.c index 903a141dc2..02848f15e2 100644 --- a/playtreeparser.c +++ b/playtreeparser.c @@ -16,6 +16,13 @@ #include "libmpdemux/stream.h" #include "mp_msg.h" + +#if defined(__CYGWIN__) || defined(__OS2__) +#define PATH_SEP '\\' +#else +#define PATH_SEP '/' +#endif + extern play_tree_t* asx_parser_build_tree(char* buffer, int ref); @@ -412,6 +419,30 @@ parse_playtree(stream_t *stream) { return ret; } +static void +play_tree_add_basepath(play_tree_t* pt, char* bp) { + int i,bl = strlen(bp),fl; + + if(pt->child) { + play_tree_t* i; + for(i = pt->child ; i != NULL ; i = i->next) + play_tree_add_basepath(i,bp); + return; + } + + if(!pt->files) + return; + + for(i = 0 ; pt->files[i] != NULL ; i++) { + fl = strlen(pt->files[i]); + if(fl <= 0 || pt->files[i][0] == PATH_SEP) + continue; + pt->files[i] = (char*)realloc(pt->files[i],bl+fl+1); + memmove(pt->files[i] + bl,pt->files[i],fl+1); + memcpy(pt->files[i],bp,bl); + } +} + play_tree_t* parse_playlist_file(char* file) { stream_t *stream; @@ -436,6 +467,14 @@ parse_playlist_file(char* file) { mp_msg(MSGT_PLAYTREE,MSGL_ERR,"Warning error while closing playlist file %s : %s\n",file,strerror(errno)); free_stream(stream); + if(ret) { + char* ls = strrchr(file,PATH_SEP); + if(ls) { + ls[1] = '\0'; + play_tree_add_basepath(ret,file); + } + } + return ret; }