Mercurial > mplayer.hg
changeset 6662:f8e25756a5ec
Relative filename in playlist are now relative to the playlist path
author | albeu |
---|---|
date | Sun, 07 Jul 2002 03:59:58 +0000 |
parents | dc61b6b159e4 |
children | 5790a2576505 |
files | playtreeparser.c |
diffstat | 1 files changed, 39 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/playtreeparser.c Sun Jul 07 00:00:04 2002 +0000 +++ b/playtreeparser.c Sun Jul 07 03:59:58 2002 +0000 @@ -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 @@ 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 @@ 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; }