-   Notifications  You must be signed in to change notification settings 
- Fork 13.9k
minimal dirfd implementation (1/4) #146341
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
c3278f6 to 6982a46   Compare      This comment has been minimized. 
   
 This comment has been minimized.
6982a46 to 313c731   Compare      This comment has been minimized. 
   
 This comment has been minimized.
313c731 to 1b3d7d6   Compare      This comment has been minimized. 
   
 This comment has been minimized.
1b3d7d6 to be0d761   Compare   | @ChrisDenton I'll need your help for the Windows review | 
be0d761 to 3083d58   Compare   | @rustbot ready | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks pretty good to me, just a few mechanical things here. There are a couple left over from the previous review, #146341 (comment), #146341 (comment), and (newly) #146341 (comment).
| let mut handle = ptr::null_mut(); | ||
| let mut io_status = c::IO_STATUS_BLOCK::PENDING; | ||
| let access = opts.get_access_mode()? | c::SYNCHRONIZE; | ||
| let options = create_options | c::FILE_SYNCHRONOUS_IO_NONALERT; | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you add a note about why this flag is set?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I no longer remember why I chose this one, and looking at it now, I'm not sure whether we should set this one, FILE_SYNCHRONOUS_IO_ALERT, or neither. Maybe @ChrisDenton has thoughts?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Update, using neither causes an error, so I've added back FILE_SYNCHRONOUS_IO_NONALERT
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, passing this flag is equivalent to not passing FILE_FLAG_OVERLAPPED to CreateFile. So if you don't pass this flag, other APIs using the handle need to follow the usual overlapped rules, otherwise they may behave improperly.
| From the top post: 
 I think it would be fine to include the  
 That is quite alright, there is no hurry :) For reference, the  | 
   This comment was marked as outdated. 
   
 This comment was marked as outdated.
minimal dirfd implementation (1/4) try-job: aarch64-apple try-job: dist-various* try-job: test-various* try-job: x86_64-msvc* try-job: x86_64-mingw
   This comment has been minimized. 
   
 This comment has been minimized.
   This comment was marked as outdated. 
   
 This comment was marked as outdated.
   This comment was marked as outdated. 
   
 This comment was marked as outdated.
   This comment was marked as outdated. 
   
 This comment was marked as outdated.
minimal dirfd implementation (1/4) try-job: aarch64-apple try-job: dist-various* try-job: test-various* try-job: x86_64-msvc* try-job: x86_64-mingw*
| For the suggestion above and a rebase, @rustbot author | 
| Reminder, once the PR becomes ready for a review, use  | 
18a93b3 to 70ea0df   Compare      This comment has been minimized. 
   
 This comment has been minimized.
70ea0df to fedd376   Compare   | This PR was rebased onto a different master commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. | 
fedd376 to 1624481   Compare   | @rustbot ready | 
| @bors2 try | 
minimal dirfd implementation (1/4) try-job: aarch64-apple try-job: dist-various* try-job: test-various* try-job: x86_64-msvc-1 try-job: x86_64-mingw*
   This comment has been minimized. 
   
 This comment has been minimized.
   This comment has been minimized. 
   
 This comment has been minimized.
| 💔 Test for 7d804a8 failed: CI. Failed jobs: 
 | 
| I'm not quite sure what's failing here unfortunately. @neerajsi-msft do you have any ideas? The failure was in the  @rustbot author | 
| 
 I'll try to repro locally and take a look. | 
| if path.is_absolute() { | ||
| return File::open(path, opts); | ||
| } | ||
| let path = to_u16s(path)?; | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
to_u16s produces a null-terminated path whereas kernel paths treat nulls literally rather than as a terminator (much like rust strings). I believe this is what's causing the test to fail.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I debugged this locally and Chris Denton is right. The NULL terminator is causing a problem.
1624481 to 1479928   Compare   | Looks like I need a try job to see if the error still exists. | 
| @Qelxiros: 🔑 Insufficient privileges: not in try users | 
| @bors2 try | 
   This comment has been minimized. 
   
 This comment has been minimized.
minimal dirfd implementation (1/4) try-job: aarch64-apple try-job: dist-various* try-job: test-various* try-job: x86_64-msvc-1 try-job: x86_64-mingw*
This is the first of four smaller PRs that will eventually be equivalent to #139514.
A few notes:
newtoopenbecauseopen_dirtakes&selfand opens a subdirectory.opentoopen_file.impl AsRawFdand friends because thecommonimplementation usesPathBufs. How should I proceed here?The other PRs will be based on this one, so I'll make drafts and mark them ready as their predecessors get merged. They might take a bit though; I've never done this particular thing with git before.
Tracking issue: #120426
r? @tgross35
try-job: aarch64-apple
try-job: dist-various*
try-job: test-various*
try-job: x86_64-msvc-1
try-job: x86_64-mingw*