Commit graph

67 commits

Author SHA1 Message Date
Kleis Auke Wolthuizen
ef58e8b989 Avoid use of LFS64 symbols on Emscripten
Since Emscripten uses musl libc internally.

Non-functional change: all LFS64 symbols were aliased to their non-LFS64
counterparts in rust-lang/libc@7c952dceaa.
2025-01-01 13:21:19 +01:00
bors
3c1e750364 Auto merge of #134547 - SUPERCILEX:unify-copy, r=thomcc
Unify fs::copy and io::copy on Linux

Currently, `fs::copy` first tries a regular file copy (via copy_file_range) and then falls back to userspace read/write copying. We should use `io::copy` instead as it tries copy_file_range, sendfile, and splice before falling back to userspace copying. This was discovered here: https://github.com/SUPERCILEX/fuc/issues/40

Perf impact: `fs::copy` will now have two additional statx calls to decide which syscall to use. I wonder if we should get rid of the statx calls and only continue down the next fallback when the relevant syscalls say the FD isn't supported.
2024-12-28 13:49:45 +00:00
Alex Saveau
96cc078878
Fix compilation issues on other unixes
Signed-off-by: Alex Saveau <saveau.alexandre@gmail.com>
2024-12-24 10:58:31 -08:00
Alex Saveau
f19ba15a2c
Fix forgetting to save statx availability on success
Signed-off-by: Alex Saveau <saveau.alexandre@gmail.com>
2024-12-21 22:50:08 -08:00
Alex Saveau
e0a1549e44
Eliminate redundant statx syscalls
Signed-off-by: Alex Saveau <saveau.alexandre@gmail.com>
2024-12-21 15:22:28 -08:00
Alex Saveau
73b41fbcfa
Unify fs::copy and io::copy 2024-12-21 12:20:58 -08:00
joboet
c14d137bfc
std: update internal uses of io::const_error! 2024-11-26 18:38:24 +01:00
Christopher Berner
0df3ef4435 Fix compilation error on Solaris due to flock usage
PR 130999 added the file_lock feature, but libc does not define
flock() for the Solaris platform leading to a compilation error.

Additionally, I went through all the Tier 2 platforms and read through
their documentation to see whether flock was implemented. This turned up
5 more Unix platforms where flock is not supported, even though it may
exist in the libc crate.
2024-11-13 06:53:19 -08:00
Matthias Krüger
95175f851e
Rollup merge of #130999 - cberner:flock_pr, r=joboet
Implement file_lock feature

This adds lock(), lock_shared(), try_lock(), try_lock_shared(), and unlock() to File gated behind the file_lock feature flag

This is the initial implementation of https://github.com/rust-lang/rust/issues/130994 for Unix and Windows platforms. I will follow it up with an implementation for WASI preview 2
2024-11-11 15:23:33 +01:00
klensy
d84114690b replace STATX_ALL with (STATX_BASIC_STATS | STATX_BTIME) as former is deprecated 2024-10-19 13:05:42 +03:00
Matthias Krüger
55f8b9e7d8
Rollup merge of #128967 - devnexen:get_path_fbsd_upd, r=joboet
std::fs::get_path freebsd update.

what matters is we re doing the right things as doing sizeof, rather than passing KINFO_FILE_SIZE (only defined on intel architectures), the kernel
 making sure it matches the expectation in its side.
2024-10-14 06:04:26 +02:00
Christopher Berner
d2cdc76256 Implement file_lock feature
This adds lock(), lock_shared(), try_lock(), try_lock_shared(), and
unlock() to File gated behind the file_lock feature flag
2024-10-13 16:16:58 -07:00
Ralf Jung
a87f5ca917 sys/unix: add comments for some Miri fallbacks 2024-10-13 12:35:06 +02:00
David Carlier
82b4d0d8aa std::fs::get_path freebsd update.
what matters is we re doing the right things as doing sizeof, rather than
KINFO_FILE_SIZE (only defined on intel architectures), the kernel
 making sure it matches the expectation in its side.
2024-10-03 22:42:38 +01:00
Josh Stone
f4d9d1a0ea Use &raw in the standard library
Since the stabilization in #127679 has reached stage0, 1.82-beta, we can
start using `&raw` freely, and even the soft-deprecated `ptr::addr_of!`
and `ptr::addr_of_mut!` can stop allowing the unstable feature.

I intentionally did not change any documentation or tests, but the rest
of those macro uses are all now using `&raw const` or `&raw mut` in the
standard library.
2024-09-25 17:03:20 -07:00
Huang Qi
24f622cf80 Initial std library support for NuttX
Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
2024-09-24 15:35:40 +08:00
Michael Goulet
c682aa162b Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
Yuri Astrakhan
368231c995 Limit libc::link usage to nto70 target only, not NTO OS
It seems QNX 7.0 does not support `linkat` at all (most tests were failing). Limiting to QNX 7.0 only, while using `linkat` for the future versions seems like the right path forward (tested on 7.0).

Fixes 129895
2024-09-11 17:35:14 -04:00
Jan Sommer
6f435cb07f Port std library to RTEMS 2024-09-03 09:19:29 +02:00
Yuri Astrakhan
f41e0bb41d Squashed aarch64_unknown_nto_qnx700 support 2024-08-30 01:19:55 -04:00
Matthias Krüger
370b3265ff
Rollup merge of #127623 - lolbinarycat:fix_remove_dir_all, r=Amanieu
fix: fs::remove_dir_all: treat internal ENOENT as success

fixes #127576

try-job: test-various
2024-08-23 06:26:51 +02:00
binarycat
736f773844 fix: fs::remove_dir_all: treat ENOENT as success
fixes #127576

windows implementation still needs some work
2024-08-22 14:18:42 -04:00
David Carlier
70e0f69632
trying common codepath for every unixes 2024-08-12 23:44:42 +01:00
David Carlier
a7be5bf683
std::fs: get_mode implementation for haiku. 2024-08-12 23:44:00 +01:00
Nicholas Nethercote
84ac80f192 Reformat use declarations.
The previous commit updated `rustfmt.toml` appropriately. This commit is
the outcome of running `x fmt --all` with the new formatting options.
2024-07-29 08:26:52 +10:00
Matthias Krüger
ce523d65e0
Rollup merge of #127480 - biabbas:vxworks, r=workingjubilee
Fix build failure on vxworks #127084

PR to address issue #127084 .
1. Skip `reset_segpipe` for vxworks
2. Return unimplemented error for vxworks from settimes and lchown
3. Temporarily skip dirfd for vxworks
4. Add allow unused unsafe on read_at and write_at functions in unix/fs.rs
5. Using cfg disable ON_BROKEN_PIPE_FLAG_USED and on_broken_pipe_flag_used() for vxworks
6. Remove old crate::syscommon:🧵:min_stack() reference from process_vxworks.rs and update to set stack size of rtpthread

Thank you.
2024-07-24 18:00:38 +02:00
B I Mohammed Abbas
0ea5694c7c Add chroot unsupported implementation for VxWorks 2024-07-24 09:59:04 +05:30
Taylor Foxhall
1f59a8030d
Fix return type of FileAttr methods on AIX target
At some point it seems `SystemTime::new` changed from returning `SystemTime` to `io::Result<SystemTime>`. This seems to have been addressed on other platforms, but was never changed for AIX.

This was caught by running 
```
python3 x.py build --host x86_64-unknown-linux-gnu --target powerpc64-ibm-aix
```
2024-07-23 12:36:52 -04:00
B I Mohammed Abbas
a598ca0f86 Disable dirfd for vxworks, Return unsupported error from set_times and lchown for vxworks 2024-07-23 10:52:53 +05:30
David Carlier
6cd19116bc
std::unix::fs: removing, now useless, layers predating macOs 10.10.
fdopendir, openat and unlinkat are available since yosemite but we
support sierra as minimum.
2024-07-13 13:28:55 +01:00
B I Mohammed Abbas
a6c03ae6fe Fall back on remove dir implementation for vxworks 2024-07-03 11:46:24 +05:30
Matthias Krüger
21850f5bd8
Rollup merge of #126807 - devnexen:copy_file_macos_simpl, r=Mark-Simulacrum
std::unix::fs: copy simplification for apple.

since we do support from macOs Sierra, we avoid the little runtime overhead with the fclonefileat symbol check.
2024-06-24 06:27:14 +02:00
Matthias Krüger
f3ced9d540
Rollup merge of #126140 - eduardosm:stabilize-fs_try_exists, r=Amanieu
Rename `std::fs::try_exists` to  `std::fs::exists` and stabilize fs_try_exists

FCP completed in tracking issue.

Tracking issue: https://github.com/rust-lang/rust/issues/83186

Closes https://github.com/rust-lang/rust/issues/83186

Stabilized API:

```rust
mod fs {
    pub fn exists<P: AsRef<Path>>(path: P) -> io::Result<bool>;
}
```
2024-06-22 19:33:55 +02:00
David Carlier
65530ba100
std::unix::fs: copy simplification for apple.
since we do support from macOs Sierra, we avoid the little runtime overhead
with the fclonefileat symbol check.
2024-06-21 21:22:57 +01:00
David Carlier
c81ffab3ec
std::unix::fs::link using direct linkat call for Solaris and macOs.
Since we support solaris 11 and macOs Sierra as minimum, we can get rid
of the runtime overhead.
2024-06-13 04:35:28 +01:00
Eduardo Sánchez Muñoz
6a04dfe78c Rename std::fs::try_exists to std::fs::exists and stabilize fs_try_exists 2024-06-11 18:33:40 +02:00
León Orell Valerian Liehr
ba31a0a920
Rollup merge of #125998 - devnexen:get_mode_illumos, r=Nilstrieb
std::unix::fs::get_mode implementation for illumos/solaris.

they both support the F_GETFL fctnl flag/O_ACCMODE mask to get the file descriptor access modes.
2024-06-08 04:25:44 +02:00
Matthias Krüger
808ad606f1
Rollup merge of #125940 - devnexen:unix_fs_netbsd_get_path, r=cuviper
std::unix::fs::get_path: using fcntl codepath for netbsd instead.

on netbsd, procfs is not as central as on linux/solaris thus can be perfectly not mounted.
Thus using fcntl with F_GETPATH, the kernel deals with MAXPATHLEN internally too.
2024-06-05 18:21:12 +02:00
David Carlier
c6073174ab std::unix::fs::get_mode implementation for illumos/solaris.
they both support the F_GETFL fctnl flag/O_ACCMODE mask to get the file
descriptor access modes.
2024-06-04 23:33:35 +00:00
David Carlier
fd648a3c76 std::unix::fs::get_path: using fcntl codepath for netbsd instead.
on netbsd, procfs is not as central as on linux/solaris thus
can be perfectly not mounted.
Thus using fcntl with F_GETPATH, the kernel deals with MAXPATHLEN
internally too.
2024-06-04 04:36:48 +00:00
Tobias Bucher
45760276fd Remove stray "this" 2024-06-03 12:20:19 +02:00
Mads Marquart
ff41c99bb8 iOS/tvOS/watchOS/visionOS: Improve File Debug impl
This uses `libc::fcntl`, which, while not explicitly marked as available
in the headers, is already used by `File::sync_all` and `File::sync_data`
on these platforms, so should be fine to use here as well.
2024-05-06 09:14:38 +02:00
Andrea Ciliberti
bdf1eae360 Horizon OS: dirfd unavailable 2024-05-03 10:09:28 +02:00
bors
2e88e9e7d0 Auto merge of #124491 - madsmtm:target_vendor-apple, r=workingjubilee
Use `target_vendor = "apple"` instead of `target_os = "..."`

Use `target_vendor = "apple"` instead of `all(target_os = "macos", target_os = "ios", target_os = "tvos", target_os = "watchos", target_os = "visionos")`.

The apple targets are quite close to being identical, with iOS, tvOS, watchOS and visionOS being even closer, so using `target_vendor` when possible makes it clearer when something is actually OS-specific, or just Apple-specific.
Note that `target_vendor` will [be deprecated in the future](https://github.com/rust-lang/rust/issues/100343), but not before an alternative (like `target_family = "apple"`) is available.

While doing this, I found various inconsistencies and small mistakes in the standard library, see the commits for details. Will follow-up with an extra PR for a similar issue that need a bit more discussion. EDIT: https://github.com/rust-lang/rust/pull/124494

Since you've talked about using `target_vendor = "apple"` in the past:
r? workingjubilee

CC `@simlay,` `@thomcc`
`@rustbot` label O-macos O-ios O-tvos O-watchos O-visionos
2024-05-01 02:11:29 +00:00
David Koloski
982a58e900 Fix Fuchsia build broken by #124210
Fuchsia doesn't support dirfd although we have a symbol stubbed for it.
2024-04-29 17:00:03 +00:00
ivmarkov
fa6db4c428 Fix ESP IDF build broken by #124210 2024-04-29 06:17:02 +00:00
Mads Marquart
d9c0eb8084 Use target_vendor = "apple" instead of target_os = "..." 2024-04-28 18:22:37 +02:00
bors
cb49406457 Auto merge of #124210 - the8472:consign-ebadf-to-the-fire, r=Mark-Simulacrum
Abort a process when FD ownership is violated

When an owned FD has already been closed before it's dropped that means something else touched an FD in ways it is not allowed to. At that point things can already be arbitrarily bad, e.g. clobbered mmaps. Recovery is not possible.
All we can do is hasten the fire.

Unlike the previous attempt in #124130 this shouldn't suffer from the possibility that FUSE filesystems can return arbitrary errors.
2024-04-28 06:20:28 +00:00
The 8472
1ba00d9cb2 put FD validity behind late debug_asserts checking
uses the same machinery as assert_unsafe_precondition
2024-04-28 01:44:25 +02:00
Tobias Bucher
adebad1dce Elaborate in comment about statx probe
As requested by @workingjubilee in
https://github.com/rust-lang/rust/pull/123928#discussion_r1564916743.
2024-04-27 18:36:29 +02:00