diff options
Diffstat (limited to 'libdiskfs')
-rw-r--r-- | libdiskfs/dir-lookup.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/libdiskfs/dir-lookup.c b/libdiskfs/dir-lookup.c index 63bba78e..a0c368b1 100644 --- a/libdiskfs/dir-lookup.c +++ b/libdiskfs/dir-lookup.c @@ -286,6 +286,7 @@ diskfs_S_dir_lookup (struct protid *dircred, { char *translator_path = strdupa (relpath); + char *end; char *complete_path; if (nextname != NULL) { @@ -293,12 +294,17 @@ diskfs_S_dir_lookup (struct protid *dircred, NEXTNAME points to the next component, locate the end of the current component and use it to trim TRANSLATOR_PATH. */ - char *end = nextname; + end = nextname; while (*end != 0) end--; translator_path[end - filename_start] = '\0'; } + /* Trim trailing slashes. */ + end = &translator_path[strlen (translator_path) - 1]; + while (*end == '/' && end >= translator_path) + *end = '\0', end--; + if (dircred->po->path == NULL || !strcmp (dircred->po->path,".")) /* dircred is the root directory. */ |