summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmenu/menu_filesel.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/libmenu/menu_filesel.c b/libmenu/menu_filesel.c
index 2a66b5d12b..ba8ceae550 100644
--- a/libmenu/menu_filesel.c
+++ b/libmenu/menu_filesel.c
@@ -31,6 +31,7 @@
int menu_keepdir = 0;
char *menu_chroot = NULL;
+extern char *filename;
struct list_entry_s {
struct list_entry p;
@@ -425,8 +426,21 @@ static int open_fs(menu_t* menu, char* args) {
}
getcwd(wd,PATH_MAX);
- if (!path || path[0] == '\0')
- path = wd;
+ if (!path || path[0] == '\0') {
+ char *slash = NULL;
+ if (filename && !strstr(filename, "://") && (path=realpath(filename, b))) {
+ slash = strrchr(path, '/');
+#if defined(__MINGW32__) || defined(__CYGWIN__)
+ // FIXME: Do we need and can convert all '\\' in path to '/' on win32?
+ if (!slash)
+ slash = strrchr(path, '\\');
+#endif
+ }
+ if (slash)
+ slash[1] = '\0';
+ else
+ path = wd;
+ }
if (path[0] != '/') {
if(path[strlen(path)-1] != '/')
snprintf(b,sizeof(b),"%s/%s/",wd,path);