Change dup2
's second operand from &OwnedFd
to &mut OwnedFd
.
#332
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.
And similar for
dup3
.The idea behind using
&OwnedFd
is thatdup2
's second operand isn't like anormal borrow. It effectively closes the old file descriptor, and creates a
new one with the same index. This could break assumptions of classes that have
an
AsFd
to allow users to do special I/O operations, but which don't expectusers can close and reopen their file descriptor as some completely unrelated
resource.
However, the existence of things like
FilelikeView
, as well as theManuallyDrop
pattern, mean that&OwnedFd
doesn't actually preventusers from using
dup2
on aBorrowedFd
.With sunfishcode/io-lifetimes#32 though,
&mut OwnedFd
would besufficient, because it removes the
DerefMut
implementation.So change
rustix
stance to be thatdup2
requires&mut OwnedFd
.This means that it's no longer possible to pass the same file descriptor
to both operands of
dup2
ordup3
with safe Rust, which means it's notpossible to observe the difference in behavior in that case, so remove
the
dup3.rs
test.