Skip to content
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

Change `std::fs::copy` to use `copyfile` on MacOS and iOS #58901

Merged
merged 3 commits into from Mar 16, 2019

Conversation

Projects
None yet
8 participants
@ebarnard
Copy link
Contributor

ebarnard commented Mar 3, 2019

copyfile on MacOS is similar to CopyFileEx on Windows. It supports copying resource forks, extended attributes, and file ACLs, none of which are copied by the current generic unix implementation.

The API is available from MacOS 10.7 and iOS 4.3 (and possibly earlier but I haven't checked).

Closes #58895.

@rust-highfive

This comment has been minimized.

Copy link
Collaborator

rust-highfive commented Mar 3, 2019

Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @Mark-Simulacrum (or someone else) soon.

If any changes to this PR are deemed necessary, please add them as extra commits. This ensures that the reviewer can see what has changed since they last reviewed the code. Due to the way GitHub handles out-of-date commits, this should also make it reasonably obvious what issues have or haven't been addressed. Large or tricky changes may require several passes of review and changes.

Please see the contribution instructions for more information.

Show resolved Hide resolved src/libstd/sys/unix/fs.rs Outdated
@Mark-Simulacrum

This comment has been minimized.

Copy link
Member

Mark-Simulacrum commented Mar 3, 2019

Show resolved Hide resolved src/libstd/sys/unix/fs.rs Outdated

@ebarnard ebarnard force-pushed the ebarnard:just-copying branch from aeca5b8 to 0a991e4 Mar 4, 2019

@sfackler

This comment has been minimized.

Copy link
Member

sfackler commented Mar 6, 2019

I can't remember if we support 10.6 or not - @alexcrichton do you know? If so, we'll need to look up the symbols dynamically.

@alexcrichton

This comment has been minimized.

Copy link
Member

alexcrichton commented Mar 6, 2019

Officially, no, we only support 10.7+.

Anecdotally though we support 10.6 with some build tweaks to libstd which have historically been used a bit. I think though that users of the 10.6 support have all moved beyond 10.6 themselves, so landing this should be fine in that regard.

@ebarnard

This comment has been minimized.

Copy link
Contributor Author

ebarnard commented Mar 6, 2019

It looks like the copyfile.h header is included in the MacOS 10.5 SDK - so this PR shouldn't break anything.

@sfackler

This comment has been minimized.

Copy link
Member

sfackler commented Mar 8, 2019

@bors r+

@bors

This comment has been minimized.

Copy link
Contributor

bors commented Mar 8, 2019

📌 Commit 124ab2a has been approved by sfackler

@bors

This comment has been minimized.

Copy link
Contributor

bors commented Mar 8, 2019

🌲 The tree is currently closed for pull requests below priority 500, this pull request will be tested once the tree is reopened

Centril added a commit to Centril/rust that referenced this pull request Mar 10, 2019

Rollup merge of rust-lang#58901 - ebarnard:just-copying, r=sfackler
Change `std::fs::copy` to use `copyfile` on MacOS and iOS

`copyfile` on MacOS is similar to `CopyFileEx` on Windows. It supports copying resource forks, extended attributes, and file ACLs, none of which are copied by the current generic unix implementation.

The API is available from MacOS 10.7 and iOS 4.3 (and possibly earlier but I haven't checked).

Closes rust-lang#58895.

Centril added a commit to Centril/rust that referenced this pull request Mar 10, 2019

Rollup merge of rust-lang#58901 - ebarnard:just-copying, r=sfackler
Change `std::fs::copy` to use `copyfile` on MacOS and iOS

`copyfile` on MacOS is similar to `CopyFileEx` on Windows. It supports copying resource forks, extended attributes, and file ACLs, none of which are copied by the current generic unix implementation.

The API is available from MacOS 10.7 and iOS 4.3 (and possibly earlier but I haven't checked).

Closes rust-lang#58895.

bors added a commit that referenced this pull request Mar 10, 2019

Auto merge of #59067 - Centril:rollup, r=Centril
Rollup of 17 pull requests

Successful merges:

 - #58021 (Fix fallout from #57667)
 - #58330 (Add rustdoc JS non-std tests)
 - #58788 (Make migrate mode work at item level granularity)
 - #58789 (Update compiler_builtins to 0.1.7 to get windows/arm fix)
 - #58803 (fs::copy() linux: set file mode early)
 - #58829 (librustc_interface: Update scoped-tls to 1.0)
 - #58848 (Prevent cache issues on version updates)
 - #58855 (std: Spin for a global malloc lock on wasm32)
 - #58872 (Adds help message in error for invalid `impl for T` syntax)
 - #58876 (Parse lifetimes that start with a number and give specific error)
 - #58901 (Change `std::fs::copy` to use `copyfile` on MacOS and iOS)
 - #58938 (core: ensure VaList passes improper_ctypes lint)
 - #58941 (MIPS: add r6 support)
 - #59035 (When encountetring `||{}()`, suggest the likely intended `(||{})()`)
 - #59036 (Fix ICE in MIR pretty printing)
 - #59047 (resolve: Account for new importable entities)
 - #59056 (Use lifetime contravariance to elide more lifetimes in core+alloc+std)

Failed merges:

r? @ghost

Centril added a commit to Centril/rust that referenced this pull request Mar 10, 2019

Rollup merge of rust-lang#58901 - ebarnard:just-copying, r=sfackler
Change `std::fs::copy` to use `copyfile` on MacOS and iOS

`copyfile` on MacOS is similar to `CopyFileEx` on Windows. It supports copying resource forks, extended attributes, and file ACLs, none of which are copied by the current generic unix implementation.

The API is available from MacOS 10.7 and iOS 4.3 (and possibly earlier but I haven't checked).

Closes rust-lang#58895.

bors added a commit that referenced this pull request Mar 10, 2019

Auto merge of #59069 - Centril:rollup, r=Centril
Rollup of 16 pull requests

Successful merges:

 - #58021 (Fix fallout from #57667)
 - #58330 (Add rustdoc JS non-std tests)
 - #58789 (Update compiler_builtins to 0.1.7 to get windows/arm fix)
 - #58803 (fs::copy() linux: set file mode early)
 - #58829 (librustc_interface: Update scoped-tls to 1.0)
 - #58848 (Prevent cache issues on version updates)
 - #58855 (std: Spin for a global malloc lock on wasm32)
 - #58872 (Adds help message in error for invalid `impl for T` syntax)
 - #58876 (Parse lifetimes that start with a number and give specific error)
 - #58901 (Change `std::fs::copy` to use `copyfile` on MacOS and iOS)
 - #58938 (core: ensure VaList passes improper_ctypes lint)
 - #58941 (MIPS: add r6 support)
 - #59035 (When encountetring `||{}()`, suggest the likely intended `(||{})()`)
 - #59036 (Fix ICE in MIR pretty printing)
 - #59047 (resolve: Account for new importable entities)
 - #59056 (Use lifetime contravariance to elide more lifetimes in core+alloc+std)

Failed merges:

r? @ghost

Centril added a commit to Centril/rust that referenced this pull request Mar 10, 2019

Rollup merge of rust-lang#58901 - ebarnard:just-copying, r=sfackler
Change `std::fs::copy` to use `copyfile` on MacOS and iOS

`copyfile` on MacOS is similar to `CopyFileEx` on Windows. It supports copying resource forks, extended attributes, and file ACLs, none of which are copied by the current generic unix implementation.

The API is available from MacOS 10.7 and iOS 4.3 (and possibly earlier but I haven't checked).

Closes rust-lang#58895.

bors added a commit that referenced this pull request Mar 10, 2019

Auto merge of #59075 - Centril:rollup, r=Centril
Rollup of 17 pull requests

Successful merges:

 - #58021 (Fix fallout from #57667)
 - #58788 (Make migrate mode work at item level granularity)
 - #58789 (Update compiler_builtins to 0.1.7 to get windows/arm fix)
 - #58803 (fs::copy() linux: set file mode early)
 - #58829 (librustc_interface: Update scoped-tls to 1.0)
 - #58848 (Prevent cache issues on version updates)
 - #58855 (std: Spin for a global malloc lock on wasm32)
 - #58872 (Adds help message in error for invalid `impl for T` syntax)
 - #58876 (Parse lifetimes that start with a number and give specific error)
 - #58901 (Change `std::fs::copy` to use `copyfile` on MacOS and iOS)
 - #58938 (core: ensure VaList passes improper_ctypes lint)
 - #58941 (MIPS: add r6 support)
 - #59035 (When encountetring `||{}()`, suggest the likely intended `(||{})()`)
 - #59036 (Fix ICE in MIR pretty printing)
 - #59047 (resolve: Account for new importable entities)
 - #59056 (Use lifetime contravariance to elide more lifetimes in core+alloc+std)
 - #59072 (we can now skip should_panic tests with the libtest harness)

Failed merges:

r? @ghost

kennytm added a commit to kennytm/rust that referenced this pull request Mar 11, 2019

Rollup merge of rust-lang#58901 - ebarnard:just-copying, r=sfackler
Change `std::fs::copy` to use `copyfile` on MacOS and iOS

`copyfile` on MacOS is similar to `CopyFileEx` on Windows. It supports copying resource forks, extended attributes, and file ACLs, none of which are copied by the current generic unix implementation.

The API is available from MacOS 10.7 and iOS 4.3 (and possibly earlier but I haven't checked).

Closes rust-lang#58895.

bors added a commit that referenced this pull request Mar 15, 2019

Auto merge of #59207 - kennytm:rollup, r=kennytm
Rollup of 31 pull requests

Successful merges:

 - #58803 (fs::copy() unix: set file mode early)
 - #58854 (appveyor: Use VS2017 for all our images)
 - #58855 (std: Spin for a global malloc lock on wasm32)
 - #58873 (Fix "Auto-hide item methods documentation" setting)
 - #58933 (Move alloc::prelude::* to alloc::prelude::v1, make alloc a subset of std)
 - #58938 (core: ensure VaList passes improper_ctypes lint)
 - #58941 (MIPS: add r6 support)
 - #58949 (SGX target: Expose thread id function in os module)
 - #58976 (Default to integrated `rust-lld` linker for UEFI targets)
 - #58986 ([CI] Update binutils for powerpc64 and powerpc64le)
 - #59009 (Fix SGX implementations of read/write_vectored.)
 - #59025 (Fix generic argument lookup for Self)
 - #59036 (Fix ICE in MIR pretty printing)
 - #59037 (Avoid some common false positives in intra doc link checking)
 - #59038 (Track embedded-book in the toolstate)
 - #59072 (we can now skip should_panic tests with the libtest harness)
 - #59079 (add suggestions to invalid macro item error)
 - #59082 (A few improvements to comments in user-facing crates)
 - #59102 (Consistent naming for duration_float methods and additional f32 methods)
 - #59106 (Add peer_addr function to UdpSocket)
 - #59118 (rustc: fix ICE when trait alias has bare Self)
 - #59139 (Unregress using scalar unions in constants.)
 - #59146 (Suggest return lifetime when there's only one named lifetime)
 - #59147 (Make std time tests more robust for platform differences)
 - #59152 (Stabilize Range*::contains.)
 - #59156 ([wg-async-await] Add regression test for #55809.)
 - #59158 (Revert "Don't generate minification variable if minification disabled")
 - #59169 (Add `-Z allow_features=...` flag)
 - #59175 (Don't run test launching `echo` since that doesn't exist on Windows)
 - #59180 (Use try blocks in rustc_codegen_ssa)
 - #59185 (No old chestnuts in iter::repeat docs)

Failed merges:

 - #58901 (Change `std::fs::copy` to use `copyfile` on MacOS and iOS)
 - #59055 (CI: Set job names.)

r? @ghost

kennytm added a commit to kennytm/rust that referenced this pull request Mar 16, 2019

Rollup merge of rust-lang#58901 - ebarnard:just-copying, r=sfackler
Change `std::fs::copy` to use `copyfile` on MacOS and iOS

`copyfile` on MacOS is similar to `CopyFileEx` on Windows. It supports copying resource forks, extended attributes, and file ACLs, none of which are copied by the current generic unix implementation.

The API is available from MacOS 10.7 and iOS 4.3 (and possibly earlier but I haven't checked).

Closes rust-lang#58895.

bors added a commit that referenced this pull request Mar 16, 2019

Auto merge of #59226 - kennytm:rollup, r=kennytm
Rollup of 37 pull requests

Successful merges:

 - #58854 (appveyor: Use VS2017 for all our images)
 - #58855 (std: Spin for a global malloc lock on wasm32)
 - #58873 (Fix "Auto-hide item methods documentation" setting)
 - #58901 (Change `std::fs::copy` to use `copyfile` on MacOS and iOS)
 - #58933 (Move alloc::prelude::* to alloc::prelude::v1, make alloc a subset of std)
 - #58938 (core: ensure VaList passes improper_ctypes lint)
 - #58941 (MIPS: add r6 support)
 - #58949 (SGX target: Expose thread id function in os module)
 - #58976 (Default to integrated `rust-lld` linker for UEFI targets)
 - #58986 ([CI] Update binutils for powerpc64 and powerpc64le)
 - #59009 (Fix SGX implementations of read/write_vectored.)
 - #59025 (Fix generic argument lookup for Self)
 - #59036 (Fix ICE in MIR pretty printing)
 - #59037 (Avoid some common false positives in intra doc link checking)
 - #59038 (Track embedded-book in the toolstate)
 - #59072 (we can now skip should_panic tests with the libtest harness)
 - #59079 (add suggestions to invalid macro item error)
 - #59082 (A few improvements to comments in user-facing crates)
 - #59102 (Consistent naming for duration_float methods and additional f32 methods)
 - #59118 (rustc: fix ICE when trait alias has bare Self)
 - #59139 (Unregress using scalar unions in constants.)
 - #59146 (Suggest return lifetime when there's only one named lifetime)
 - #59147 (Make std time tests more robust for platform differences)
 - #59152 (Stabilize Range*::contains.)
 - #59156 ([wg-async-await] Add regression test for #55809.)
 - #59158 (Revert "Don't generate minification variable if minification disabled")
 - #59169 (Add `-Z allow_features=...` flag)
 - #59173 (bootstrap: Default to a sensible llvm-suffix.)
 - #59175 (Don't run test launching `echo` since that doesn't exist on Windows)
 - #59180 (Use try blocks in rustc_codegen_ssa)
 - #59185 (No old chestnuts in iter::repeat docs)
 - #59201 (Remove restriction on isize/usize in repr(simd))
 - #59204 (Output diagnostic information for rustdoc)
 - #59206 (Improved test output)
 - #59208 (Reduce a Code Repetition Related to Bit Operation)
 - #59212 (Add x86_64 musl host to the manifest)
 - #59221 (Option and Result: Add references to documentation of as_ref and as_mut)

Failed merges:

 - #59055 (CI: Set job names.)

r? @ghost

bors added a commit that referenced this pull request Mar 16, 2019

Auto merge of #59226 - kennytm:rollup, r=kennytm
Rollup of 37 pull requests

Successful merges:

 - #58854 (appveyor: Use VS2017 for all our images)
 - #58855 (std: Spin for a global malloc lock on wasm32)
 - #58873 (Fix "Auto-hide item methods documentation" setting)
 - #58901 (Change `std::fs::copy` to use `copyfile` on MacOS and iOS)
 - #58933 (Move alloc::prelude::* to alloc::prelude::v1, make alloc a subset of std)
 - #58938 (core: ensure VaList passes improper_ctypes lint)
 - #58941 (MIPS: add r6 support)
 - #58949 (SGX target: Expose thread id function in os module)
 - #58976 (Default to integrated `rust-lld` linker for UEFI targets)
 - #58986 ([CI] Update binutils for powerpc64 and powerpc64le)
 - #59009 (Fix SGX implementations of read/write_vectored.)
 - #59025 (Fix generic argument lookup for Self)
 - #59036 (Fix ICE in MIR pretty printing)
 - #59037 (Avoid some common false positives in intra doc link checking)
 - #59038 (Track embedded-book in the toolstate)
 - #59072 (we can now skip should_panic tests with the libtest harness)
 - #59079 (add suggestions to invalid macro item error)
 - #59082 (A few improvements to comments in user-facing crates)
 - #59102 (Consistent naming for duration_float methods and additional f32 methods)
 - #59118 (rustc: fix ICE when trait alias has bare Self)
 - #59139 (Unregress using scalar unions in constants.)
 - #59146 (Suggest return lifetime when there's only one named lifetime)
 - #59147 (Make std time tests more robust for platform differences)
 - #59152 (Stabilize Range*::contains.)
 - #59156 ([wg-async-await] Add regression test for #55809.)
 - #59158 (Revert "Don't generate minification variable if minification disabled")
 - #59169 (Add `-Z allow_features=...` flag)
 - #59173 (bootstrap: Default to a sensible llvm-suffix.)
 - #59175 (Don't run test launching `echo` since that doesn't exist on Windows)
 - #59180 (Use try blocks in rustc_codegen_ssa)
 - #59185 (No old chestnuts in iter::repeat docs)
 - #59201 (Remove restriction on isize/usize in repr(simd))
 - #59204 (Output diagnostic information for rustdoc)
 - #59206 (Improved test output)
 - #59208 (Reduce a Code Repetition Related to Bit Operation)
 - #59212 (Add x86_64 musl host to the manifest)
 - #59221 (Option and Result: Add references to documentation of as_ref and as_mut)

Failed merges:

 - #59055 (CI: Set job names.)

r? @ghost

bors added a commit that referenced this pull request Mar 16, 2019

Auto merge of #59226 - kennytm:rollup, r=kennytm
Rollup of 37 pull requests

Successful merges:

 - #58854 (appveyor: Use VS2017 for all our images)
 - #58855 (std: Spin for a global malloc lock on wasm32)
 - #58873 (Fix "Auto-hide item methods documentation" setting)
 - #58901 (Change `std::fs::copy` to use `copyfile` on MacOS and iOS)
 - #58933 (Move alloc::prelude::* to alloc::prelude::v1, make alloc a subset of std)
 - #58938 (core: ensure VaList passes improper_ctypes lint)
 - #58941 (MIPS: add r6 support)
 - #58949 (SGX target: Expose thread id function in os module)
 - #58959 (Add release notes for PR #56243)
 - #58976 (Default to integrated `rust-lld` linker for UEFI targets)
 - #59009 (Fix SGX implementations of read/write_vectored.)
 - #59025 (Fix generic argument lookup for Self)
 - #59036 (Fix ICE in MIR pretty printing)
 - #59037 (Avoid some common false positives in intra doc link checking)
 - #59072 (we can now skip should_panic tests with the libtest harness)
 - #59079 (add suggestions to invalid macro item error)
 - #59082 (A few improvements to comments in user-facing crates)
 - #59102 (Consistent naming for duration_float methods and additional f32 methods)
 - #59118 (rustc: fix ICE when trait alias has bare Self)
 - #59139 (Unregress using scalar unions in constants.)
 - #59146 (Suggest return lifetime when there's only one named lifetime)
 - #59147 (Make std time tests more robust for platform differences)
 - #59152 (Stabilize Range*::contains.)
 - #59156 ([wg-async-await] Add regression test for #55809.)
 - #59158 (Revert "Don't generate minification variable if minification disabled")
 - #59169 (Add `-Z allow_features=...` flag)
 - #59173 (bootstrap: Default to a sensible llvm-suffix.)
 - #59175 (Don't run test launching `echo` since that doesn't exist on Windows)
 - #59180 (Use try blocks in rustc_codegen_ssa)
 - #59185 (No old chestnuts in iter::repeat docs)
 - #59201 (Remove restriction on isize/usize in repr(simd))
 - #59204 (Output diagnostic information for rustdoc)
 - #59206 (Improved test output)
 - #59208 (Reduce a Code Repetition Related to Bit Operation)
 - #59212 (Add x86_64 musl host to the manifest)
 - #59221 (Option and Result: Add references to documentation of as_ref and as_mut)
 - #59231 (Stabilize Option::copied)

@bors bors merged commit 124ab2a into rust-lang:master Mar 16, 2019

@ebarnard ebarnard deleted the ebarnard:just-copying branch Apr 11, 2019

Centril added a commit to Centril/rust that referenced this pull request Apr 12, 2019

Rollup merge of rust-lang#59879 - ebarnard:patch-1, r=alexcrichton
Use SecRandomCopyBytes instead of /dev/urandom on MacOS

SecRandomCopyBytes is [available since MacOS 10.7](https://developer.apple.com/documentation/security/1399291-secrandomcopybytes?language=objc) which is the minimum supported version and which was suggested in rust-lang#58901 (comment) is the earliest version currently in use.

This matches the behaviour of other platforms which have a random number generator syscall available.

Centril added a commit to Centril/rust that referenced this pull request Apr 13, 2019

Rollup merge of rust-lang#59879 - ebarnard:patch-1, r=alexcrichton
Use SecRandomCopyBytes instead of /dev/urandom on MacOS

SecRandomCopyBytes is [available since MacOS 10.7](https://developer.apple.com/documentation/security/1399291-secrandomcopybytes?language=objc) which is the minimum supported version and which was suggested in rust-lang#58901 (comment) is the earliest version currently in use.

This matches the behaviour of other platforms which have a random number generator syscall available.

Centril added a commit to Centril/rust that referenced this pull request Apr 13, 2019

Rollup merge of rust-lang#59879 - ebarnard:patch-1, r=alexcrichton
Use SecRandomCopyBytes instead of /dev/urandom on MacOS

SecRandomCopyBytes is [available since MacOS 10.7](https://developer.apple.com/documentation/security/1399291-secrandomcopybytes?language=objc) which is the minimum supported version and which was suggested in rust-lang#58901 (comment) is the earliest version currently in use.

This matches the behaviour of other platforms which have a random number generator syscall available.

bors added a commit that referenced this pull request Apr 16, 2019

Auto merge of #59879 - ebarnard:patch-1, r=alexcrichton
Add a comment explaining why SecRandomCopyBytes is not used on MacOS

SecRandomCopyBytes is [available since MacOS 10.7](https://developer.apple.com/documentation/security/1399291-secrandomcopybytes?language=objc) which is the minimum supported version and which was suggested in #58901 (comment) is the earliest version currently in use.

This matches the behaviour of other platforms which have a random number generator syscall available.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.