Mercurial > mplayer.hg
changeset 25134:dcf1bfb29dc8
Fix code to make sure the browse starting path within the menu-chroot path.
author | ulion |
---|---|
date | Mon, 26 Nov 2007 00:28:05 +0000 |
parents | e57745db7ab2 |
children | 66f628d13442 |
files | libmenu/menu_filesel.c |
diffstat | 1 files changed, 26 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/libmenu/menu_filesel.c Sun Nov 25 21:45:35 2007 +0000 +++ b/libmenu/menu_filesel.c Mon Nov 26 00:28:05 2007 +0000 @@ -393,7 +393,7 @@ static int open_fs(menu_t* menu, char* args) { char *path = mpriv->path, *freepath = NULL; int r = 0; - char wd[PATH_MAX+1]; + char wd[PATH_MAX+1], b[PATH_MAX+1]; args = NULL; // Warning kill menu->draw = menu_list_draw; @@ -425,22 +425,32 @@ } getcwd(wd,PATH_MAX); - if(!path || path[0] == '\0') { - int l = strlen(wd) + 2; - char b[l]; - sprintf(b,"%s/",wd); - r = open_dir(menu,b); - } else if(path[0] != '/') { - int al = strlen(path); - int l = strlen(wd) + al + 3; - char b[l]; - if(b[al-1] != '/') - sprintf(b,"%s/%s/",wd,path); + if (!path || path[0] == '\0') + path = wd; + if (path[0] != '/') { + if(path[strlen(path)-1] != '/') + snprintf(b,sizeof(b),"%s/%s/",wd,path); else - sprintf(b,"%s/%s",wd,path); - r = open_dir(menu,b); - } else - r = open_dir(menu,path); + snprintf(b,sizeof(b),"%s/%s",wd,path); + path = b; + } else if (path[strlen(path)-1]!='/') { + sprintf(b,"%s/",path); + path = b; + } + if (menu_chroot && menu_chroot[0] == '/') { + int l = strlen(menu_chroot); + if (l > 0 && menu_chroot[l-1] == '/') + --l; + if (strncmp(menu_chroot, path, l) || (path[l] != '\0' && path[l] != '/')) { + if (menu_chroot[l] == '/') + path = menu_chroot; + else { + sprintf(b,"%s/",menu_chroot); + path = b; + } + } + } + r = open_dir(menu,path); if (freepath) free(freepath);