235 Commits

Author SHA1 Message Date
Ulrich Stark
4888762816 Fix doc comment of File::try_lock and File::try_lock_shared 2025-08-07 14:13:11 +02:00
Josh Triplett
e597071cbf Reword documentation for set_times to clarify directory handling 2025-08-06 11:41:16 -07:00
Josh Triplett
a99860b13a File::set_times: Add documentation about setting directory timestamps
Inspired by https://github.com/rust-lang/rust/issues/123883 .
2025-08-05 15:10:24 -07:00
Josh Triplett
1bb14a8bb7 File::set_times: Remove write(true) from the example so it works on directories
Inspired by https://github.com/rust-lang/rust/issues/123883 .
2025-08-05 15:09:33 -07:00
Jana Dönszelmann
f6d37a25a9
Rollup merge of #134006 - klensy:typos, r=nnethercote
setup typos check in CI

This allows to check typos in CI, currently for compiler only (to reduce commit size with fixes). With current setup, exclude list is quite short, so it worth trying?

Also includes commits with actual typo fixes.

MCP: https://github.com/rust-lang/compiler-team/issues/817

typos check currently turned for:
* ./compiler
* ./library
* ./src/bootstrap
* ./src/librustdoc

After merging, PRs which enables checks for other crates (tools) can be implemented too.

Found typos will **not break** other jobs immediately: (tests, building compiler for perf run). Job will be marked as red on completion in ~ 20 secs, so you will not forget to fix it whenever you want, before merging pr.

Check typos: `python x.py test tidy --extra-checks=spellcheck`
Apply typo fixes: `python x.py test tidy --extra-checks=spellcheck:fix` (in case if there only 1 suggestion of each typo)

Current fail in this pr is expected and shows how typo errors emitted. Commit with error will be removed after r+.
2025-07-03 13:29:35 +02:00
klensy
c76d032f01 setup CI and tidy to use typos for spellchecking and fix few typos 2025-07-03 10:51:06 +03:00
Matthias Krüger
0d5af18c14
Rollup merge of #141847 - xizheyin:141837, r=jhpratt
Explain `TOCTOU` on the top of `std::fs`, and reference it in functions

Fixes rust-lang/rust#141837

r? ``````@workingjubilee``````
2025-07-02 19:28:03 +02:00
bors
f51c9870ba Auto merge of #142974 - cuviper:stage0-bump, r=Mark-Simulacrum
Update stage0 to 1.89.0-beta.1

- Update version placeholders
- Update stage0 to 1.89.0-beta.1
- Update `STAGE0_MISSING_TARGETS`
- Update `cfg(bootstrap)`

r? `@Mark-Simulacrum`

try-job: dist-i586-gnu-i586-i686-musl
2025-07-02 01:41:18 +00:00
Josh Stone
9ce8930da6 Update version placeholders 2025-07-01 10:54:33 -07:00
Ed Page
977752fb01 docs(fs): Touch up grammar on lock api 2025-06-19 20:39:54 -05:00
Christopher Berner
38712030ca Stabilize "file_lock" feature 2025-06-15 06:44:46 -07:00
Chris Denton
ae645fc0b8
Remove "intermittent" wording from ReadDir 2025-06-13 09:14:15 +00:00
Tobias Bucher
fde8a8d518 Optimize Seek::stream_len impl for File
It uses the file metadata on Unix with a fallback for files incorrectly
reported as zero-sized. It uses `GetFileSizeEx` on Windows.

This reduces the number of syscalls needed for determining the file size
of an open file from 3 to 1.
2025-06-05 16:27:27 +02:00
xizheyin
e95751a9ff Explain TOCTOU on the top of std::fs, and ref it in functions
Signed-off-by: xizheyin <xizheyin@smail.nju.edu.cn>

Signed-off-by: xizheyin <xizheyin@smail.nju.edu.cn>
2025-06-02 17:45:00 +08:00
Jubilee Young
7f7c415d03 library: explain TOCTOU races in fs::remove_dir_all
In the previous description it said there was a TOCTOU race but did not
explain exactly what the problem was. I sat down with the CVE, reviewed
its text, and created this explanation. This context should hopefully
help people understand the actual risk as-such.

Incidentally, it also fixes the capitalization on the name of Redox OS.
2025-05-31 14:05:29 -07:00
Matthias Krüger
88b12f3649
Rollup merge of #141312 - cberner:filelock_from, r=joshtriplett
Add From<TryLockError> for io::Error

Adds a `From` impl to make error propagation easier, as discussed in the tracking issue

`TryLockError` is unstable under the "file_lock" feature. The related tracking issue is https://github.com/rust-lang/rust/issues/130994

This PR also cleanups the Windows implementation of `try_lock()` and `try_lock_shared()` as [discussed here](https://github.com/rust-lang/rust/pull/140718#discussion_r2076678485)
2025-05-27 20:57:53 +02:00
Fluid
6d47489e56 improve the std::fs::create_dir_all docs related to atomicity 2025-05-25 00:34:56 +03:00
Christopher Berner
fd260d530b Add From<TryLockError> for io::Error
This makes error propagation from try_lock() and try_lock_shared()
more convenient
2025-05-20 14:09:27 -07:00
Fluid
0dec3fee34 replace try_reserve_exact with try_with_capacity in std::fs::read 2025-05-18 09:54:57 +03:00
Matthias Krüger
2820bdb740
Rollup merge of #140595 - lolbinarycat:std-set_permissions-typo, r=cuviper
doc(std): fix typo lchown -> lchmod

chown is irrelevant here, as this function does not affect file ownership.  chmod is the correct function to reference here.
2025-05-03 12:44:36 +02:00
Matthias Krüger
69e0844a46
Rollup merge of #139343 - cberner:filelock_wouldblock, r=workingjubilee
Change signature of File::try_lock and File::try_lock_shared

These methods now return Result<(), TryLockError> instead of Result<bool, Error> to make their use less errorprone

These methods are unstable under the "file_lock" feature. The related tracking issue is https://github.com/rust-lang/rust/pull/130999 and this PR changes the signatures as discussed by libs-api: https://github.com/rust-lang/rust/issues/130994#issuecomment-2770838848
2025-05-03 08:45:01 +02:00
binarycat
b7c933a495 doc(std): fix typo lchown -> lchmod 2025-05-02 12:13:40 -05:00
Christopher Berner
1d11ee2a5b Implement error::Error for TryLockError 2025-05-01 20:39:05 -07:00
Christopher Berner
042a556d8d Change signature of File::try_lock and File::try_lock_shared
These methods now return Result<(), TryLockError> instead of
Result<bool, Error> to make their use less errorprone
2025-05-01 20:39:05 -07:00
Guillaume Gomez
5170e21cb9
Rollup merge of #140062 - xizheyin:issue-139958, r=workingjubilee
std: mention `remove_dir_all` can emit `DirectoryNotEmpty` when concurrently written into

Closes #139958

The current documentation for `std::fs::remove_dir_all` function does not explicitly mention the error types that may be returned in concurrent scenarios. Specifically, when one thread attempts to remove a directory tree while another thread simultaneously writes files to that directory, the function may return an `io::ErrorKind::DirectoryNotEmpty` error, but this behavior is not clearly mentioned in the current documentation.

r? libs
2025-05-01 22:27:22 +02:00
xizheyin
3a372e39ca
std: mention remove_dir_all can emit DirectoryNotEmpty when concurrently written into
Signed-off-by: xizheyin <xizheyin@smail.nju.edu.cn>
2025-04-20 14:32:33 +08:00
binarycat
37c4a37ca2 clarify std::fs::set_permissions symlink behavior
nest under platform-specific behavior,
factor rationale into its own section,
and tweak language.
2025-04-08 15:07:08 -05:00
binarycat
8808d5a2b2 std(docs): clarify how std::fs::set_permisions works with symlinks
fixes https://github.com/rust-lang/rust/issues/75942
fixes https://github.com/rust-lang/rust/issues/124201
2025-04-08 12:27:33 -05:00
Matthias Krüger
fb6d10e13b
Rollup merge of #138832 - ChrisDenton:with_native_path, r=joboet
Start using `with_native_path` in `std::sys::fs`

Ideally, each platform should use their own native path type internally. This will, for example, allow passing a `CStr` directly to `std::fs::File::open` and therefore avoid the need for allocating a new null-terminated C string.

However, doing that for every function and platform all at once makes for a large PR that is way too prone to breaking. So this PR does some minimal refactoring which should help progress towards that goal. The changes are Unix-only and even then I avoided functions that require more changes so that this PR is just moving things around.

r? joboet
2025-03-29 21:08:12 +01:00
Chris Denton
89c9c21b06
Start using with_native_path in std::sys::fs 2025-03-29 14:43:41 +00:00
Matthias Krüger
3f59916a30
Rollup merge of #138822 - moxian:unlock, r=joshtriplett
De-Stabilize `file_lock`

This reverts #136794

FCP on the tracking issue (#130994) passsed successfully https://github.com/rust-lang/rust/issues/130994#issuecomment-2646158607 but there are now concerns about the suitability of the proposed API (https://github.com/rust-lang/rust/issues/130994#issuecomment-2734608366)

On zullip it was [suggested](https://rust-lang.zulipchat.com/#narrow/channel/219381-t-libs/topic/File.3A.3Atry_lock.20API.3A.20Result.3Cbool.3E/near/506823067) that it would be better to temporarily(?) destabilize the feature ASAP to buy us some more time reflecting on the API.

This PR implements the revert.

The feature is not currently on beta (https://github.com/rust-lang/rust/blob/beta/library/std/src/fs.rs#L672) so a beta backport is not yet neccessary.

If this revert is accepted, the tracking issue (#130994) should be reopened
2025-03-22 21:34:40 +01:00
moxian
110f1fe17f Revert "Stabilize file_lock"
This reverts commit 82af73dd4c58cd6bec5fb44cf02f7ac96b1ed48b.
2025-03-21 20:24:31 -07:00
Tobias Bucher
bdaf23b4cd Forward stream_position in Arc<File> as well
It was missed in #137165.
2025-03-14 12:36:00 +01:00
Nicole LeGare
22fea97c9d Disable unsupported tests
Unclear why this needs to be done manually and is not done by the existing Trusty patches.
2025-03-10 10:00:25 -07:00
Chris Denton
3cb53df1fe
Return OutOfMemoryError and update docs 2025-03-07 17:51:56 +00:00
许杰友 Jieyou Xu (Joe)
4f1a0479a7
Rollup merge of #137240 - jieyouxu:remove_dir_all, r=Mark-Simulacrum
Slightly reformat `std::fs::remove_dir_all` error docs

To make the error cases easier to spot on a quick glance, as I've been bitten by this a couple of times already 💀

cc #137230.
2025-03-05 21:46:38 +08:00
Matthias Krüger
ce72b8d91e
Rollup merge of #136794 - cberner:stabilize, r=joshtriplett
Stabilize file_lock

Closes #130994
2025-02-19 18:52:06 +01:00
Matthias Krüger
e6406ad4dd
Rollup merge of #136347 - allevo:patch-1, r=Amanieu
Add a bullet point to `std::fs::copy`

I needed to copy a file but I got the following error:
```
Os { code: 2, kind: NotFound, message: "No such file or directory" }
```
After read the documentation, I though the error was generated by the `from` parameter, forgetting the `to` part. Anyway, I got the error because the parent folder of `to` didn't exist.
Even if the documentation explicitly saying `but is not limited to just these cases`, I would like to add this case because I spent 3 hours around it.

This PR just wants to put a mention about it.
2025-02-19 18:52:05 +01:00
Tommaso Allevi
3ad847779e
Update library/std/src/fs.rs
Co-authored-by: Amanieu d'Antras <amanieu@gmail.com>
2025-02-19 09:17:18 +01:00
许杰友 Jieyou Xu (Joe)
477a2eeb3d std::fs: slightly reformat remove_dir_all error docs
To make the error cases easier to spot on a quick glance.
2025-02-19 02:00:02 +08:00
Matthias Krüger
5a942d67a6
Rollup merge of #136876 - joshtriplett:locking-might-not-be-advisory, r=Amanieu
Locking documentation updates

- Reword file lock documentation to clarify advisory vs mandatory. Remove the
  word "advisory", and make it more explicit that the lock may be advisory or
  mandatory depending on platform.

- Document that locking a file fails on Windows if the file is opened only for append
2025-02-18 18:40:50 +01:00
Josh Triplett
ec2034d53d Reorder "This lock may be advisory or mandatory." earlier in the lock docs 2025-02-18 17:31:10 +01:00
Josh Triplett
35674eff6f Clarify that locking on Windows also works for files opened with .read(true) 2025-02-18 17:26:33 +01:00
Thalia Archibald
7112474134 Use tell for <File as Seek>::stream_position 2025-02-17 05:25:14 -08:00
Josh Triplett
bc59397f8f Document that locking a file fails on Windows if the file is opened only for append 2025-02-11 21:11:05 +01:00
Josh Triplett
16abb39c9d Reword file lock documentation to clarify advisory vs mandatory
Remove the word "advisory", and make it more explicit that the lock may
be advisory or mandatory depending on platform.
2025-02-11 21:11:05 +01:00
Jacob Pratt
2996cfdcc3
Rollup merge of #136704 - benschulz:patch-1, r=ibraheemdev
Improve examples for file locking

The `lock` and `try_lock` documentation states that "if the file not open for writing, it is unspecified whether this function returns an error." With this change, the examples use `File::create` instead of `File::open`, eliminating the possibility of someone blindly copying code with unspecified behavior.
2025-02-11 01:02:40 -05:00
Christopher Berner
82af73dd4c Stabilize file_lock 2025-02-09 13:55:42 -08:00
Urgau
34182470eb
Rollup merge of #134679 - ChrisDenton:rm-readonly, r=Mark-Simulacrum
Windows: remove readonly files

When calling `remove_file`, we shouldn't fail to delete readonly files. As the test makes clear, this make the Windows behaviour consistent with other platforms. This also makes us internally consistent with `remove_dir_all`.

try-job: x86_64-msvc-ext1
2025-02-09 00:37:26 +01:00
Ben Schulz
8ea20c82bb
Improve examples for file locking 2025-02-07 20:36:32 +01:00