# HG changeset patch # User albeu # Date 1026014398 0 # Node ID f8e25756a5ece37ab95ac48d04138b723a5ebf4a # Parent dc61b6b159e4e40030abdebc51ae5232bfbe3410 Relative filename in playlist are now relative to the playlist path diff -r dc61b6b159e4 -r f8e25756a5ec playtreeparser.c --- 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; }