mirror of
https://github.com/apache/nuttx.git
synced 2026-09-07 09:26:38 +00:00
Add _inode_canonicalize() to remove '.' and '..' segments from the
absolute path before the inode tree traversal begins. This fixes the
case where paths containing '..' that resolve back to a mountpoint
root (e.g., /tmp/subdir/..) were not being handed to the filesystem.
Previously, _compute_path_depth() returned 0 for such paths, causing
the VFS to skip the mountpoint and attempt to find 'subdir' in the
pseudo filesystem -- which fails with ENOTDIR.
With canonicalization, /tmp/subdir/.. becomes /tmp before the search,
so the mountpoint is correctly matched. This fixes chdir('..'),
stat('../..'), opendir('../..'), and similar operations from within
mountpoint subdirectories.
The implementation uses an in-place two-pointer algorithm with no
additional stack allocation, safe for NuttX's small kernel stacks.
Signed-off-by: yukangzhi <yukangzhi@xiaomi.com>
|
||
|---|---|---|
| .. | ||
| CMakeLists.txt | ||
| fs_files.c | ||
| fs_foreachinode.c | ||
| fs_inode.c | ||
| fs_inodeaddref.c | ||
| fs_inodebasename.c | ||
| fs_inodefind.c | ||
| fs_inodefree.c | ||
| fs_inodegetpath.c | ||
| fs_inoderelease.c | ||
| fs_inoderemove.c | ||
| fs_inodereserve.c | ||
| fs_inodesearch.c | ||
| inode.h | ||
| Make.defs | ||