fix from_process_at return error in old kernel #241
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In the function "FDInfo::from_process_at" it use "rustix::fs::openat" to open file like "/proc/{pid}/fd/x"
which will encounter the 'Os { code: 40, kind: FilesystemLoop, message: "Symbolic link loop" }' error in old version kernel
(test in 2.6.32-696.16.1.el6.x86_64, i guess the some flag not handle correct or not support in old kernel version, espcially SYMLINK_NOFOLLOW)
when i remove SYMLINK_NOFOLLOW flag in openat , "rustix::fs::openat" raise 'Os { code: 6, kind: Uncategorized, message: "No such device or address" }' error
it also encounter 'Os { code: 22, kind: InvalidInput, message: "Invalid argument" }' when get metadata use
rustix::fs::statat
with flags.so i remove the "rustix::fs::openat" and remove all AtFlags in "rustix::fs::statat". only use "rustix::fs::readlinkat" and "rustix::fs::statat" to get the fd type and metadata
also remove the unused field "root" in struct FDsIter
it work in old kernel (i only test in 2.6.32-696.16.1.el6.x86_64) and new kernel