Skip to content

implement std::fs::set_permissions_nofollow on unix #142938

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

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

lolbinarycat
Copy link
Contributor

implementation of #141607

@rustbot
Copy link
Collaborator

rustbot commented Jun 24, 2025

r? @ibraheemdev

rustbot has assigned @ibraheemdev.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Jun 24, 2025
@rust-log-analyzer

This comment has been minimized.

@lolbinarycat lolbinarycat force-pushed the std-set_permissions_nofollow branch from 3ff03e0 to 4614625 Compare June 24, 2025 21:44
@rust-log-analyzer

This comment has been minimized.

@lolbinarycat lolbinarycat force-pushed the std-set_permissions_nofollow branch from 4614625 to 7d69442 Compare June 25, 2025 18:32
@rust-log-analyzer

This comment has been minimized.

@lolbinarycat lolbinarycat force-pushed the std-set_permissions_nofollow branch from 7d69442 to 949ac68 Compare June 26, 2025 17:28
@rust-log-analyzer

This comment has been minimized.

@lolbinarycat lolbinarycat force-pushed the std-set_permissions_nofollow branch from 949ac68 to 8f23f36 Compare June 26, 2025 17:57
@rust-log-analyzer

This comment has been minimized.

@lolbinarycat lolbinarycat force-pushed the std-set_permissions_nofollow branch from 8f23f36 to 369acf8 Compare June 26, 2025 19:27
@rust-log-analyzer

This comment has been minimized.

@lolbinarycat lolbinarycat force-pushed the std-set_permissions_nofollow branch from 369acf8 to 01c37a5 Compare June 27, 2025 17:55
@lolbinarycat lolbinarycat force-pushed the std-set_permissions_nofollow branch from 01c37a5 to 81cb0d8 Compare June 27, 2025 18:49
@ibraheemdev
Copy link
Member

I'm not sure we should merge this if it panics on windows.

@ibraheemdev ibraheemdev added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jul 6, 2025
@lolbinarycat
Copy link
Contributor Author

@ibraheemdev fair, my instinct was just to avoid having a cfg in the portable code layer, wasn't sure how that would look in the generated code.

can library features be marked as incomplete, or is that only for compiler features?

@ibraheemdev
Copy link
Member

fair, my instinct was just to avoid having a cfg in the portable code layer, wasn't sure how that would look in the generated code.

I'm not sure what you mean, cfg is a compile-time attribute.

can library features be marked as incomplete, or is that only for compiler features?

I think we could do that, but I'm not sure how useful it would be to have a platform-specific implementation in a cross-platform module, especially because the unix implementation is already accessible.

@lolbinarycat
Copy link
Contributor Author

lolbinarycat commented Jul 7, 2025

I'm not sure what you mean, cfg is a compile-time attribute.

Generated docs, my bad. I know rustdoc can't generate docs for all platforms at once, and the standard library does some postprocessing to make it look decent. I believe that postprocessing only happens on the std::os module, though.

I think we could do that, but I'm not sure how useful it would be to have a platform-specific implementation in a cross-platform module, especially because the unix implementation is already accessible.

I'm really not sure what you mean by that? It's not intended to stay platform-specific, i'm just personally not able to write the windows impl for various reasons.

Are you saying there's no value in this being in the standard library because it can just be implemented in user code? isn't that the case for all libc-backed i/o? regardless, the ACP has already been approved, and implementing this just for unix was discussed in this zulip thread

@ibraheemdev
Copy link
Member

I'm really not sure what you mean by that? It's not intended to stay platform-specific, i'm just personally not able to write the windows impl for various reasons.

Sorry, I just meant I don't see the value in merging the unix-only implementation, given that the unix-only implementation is already accessible, and the value of this function is in that it works cross-platform.

That said I guess it's fine to move the feature forward by landing this, I didn't realize it's already been discussed.

Copy link
Member

@ibraheemdev ibraheemdev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a couple of docs nits.

///
/// # Platform-specific behavior
///
/// Currently unimplmented on windows.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// Currently unimplmented on windows.
/// Currently unimplemented on Windows.

///
/// Currently unimplmented on windows.
///
/// On unix platforms, this results in a [`FilesystemLoop`] error if the last element is a symlink.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// On unix platforms, this results in a [`FilesystemLoop`] error if the last element is a symlink.
/// On Unix platforms, this results in a [`FilesystemLoop`] error if the last element is a symlink.


#[cfg(not(unix))]
pub fn set_permissions_nofollow(_path: &Path, _perm: crate::fs::Permissions) -> io::Result<()> {
crate::unimplemented!("set_permissions_nofollow is not implmented on non-unix platforms")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
crate::unimplemented!("set_permissions_nofollow is not implmented on non-unix platforms")
crate::unimplemented!("`set_permissions_nofollow` is currently only implemented on Unix platforms")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-libs Relevant to the library team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants