Skip to content

std: correctly report file size on UWP#158132

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
joboet:windows-uwp-filesize
Jun 19, 2026
Merged

std: correctly report file size on UWP#158132
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
joboet:windows-uwp-filesize

Conversation

@joboet

@joboet joboet commented Jun 19, 2026

Copy link
Copy Markdown
Member

UWP uses GetFileInformationByHandleEx instead of GetFileInformationByHandle, but uses the wrong field to determine file size – EndOfFile is a different field than AllocationSize. file_size should report the length of the file, not its size on disk, and only EndOfFile reports the former (c.f. https://learn.microsoft.com/en-us/windows/win32/api/FileAPI/nf-fileapi-setendoffile#remarks):

Each file stream has the following:

  • File size: the size of the data in a file, to the byte.
  • Allocation size: the size of the space that is allocated for a file on a disk, which is always an even multiple of the cluster size.
  • Valid data length: the length of the data in a file that is actually written, to the byte. This value is always less than or equal to the file size.

r? @ChrisDenton

@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 19, 2026
@rustbot

rustbot commented Jun 19, 2026

Copy link
Copy Markdown
Collaborator

ChrisDenton is not on the review rotation at the moment.
They may take a while to respond.

@rust-log-analyzer

Copy link
Copy Markdown
Collaborator

A job failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)
  IMAGE: x86_64-gnu-tools
##[endgroup]
    Updating crates.io index
error: failed to get `simd-adler32` as a dependency of package `miniz_oxide v0.8.8`
    ... which satisfies dependency `miniz_oxide = "^0.8.5"` of package `flate2 v1.1.9`
    ... which satisfies dependency `flate2 = "^1.1.9"` of package `citool v0.1.0 (/home/runner/work/rust/rust/src/ci/citool)`

Caused by:
  failed to load source for dependency `simd-adler32`

Caused by:

@ChrisDenton

Copy link
Copy Markdown
Member

I'm not sure if the UWP branch is still needed nowadays since the reunification project (and in general I'd be in favour of reducing the difference between UWP targets and normal targets since UWP isn't actively maintained).

But this is fine in the meantime.

@bors r+ rollup

@rust-bors

rust-bors Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 2203dd7 has been approved by ChrisDenton

It is now in the queue for this repository.

🌲 The tree is currently closed for pull requests below priority 5. This pull request will be tested once the tree is reopened.

@rust-bors rust-bors Bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 19, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Jun 19, 2026
…isDenton

std: correctly report file size on UWP

Found by an LLM in SebTardif#397.

UWP uses [`GetFileInformationByHandleEx`](https://learn.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex) instead of [GetFileInformationByHandle](https://learn.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle), but uses the wrong field to determine file size – `EndOfFile` is a different field than `AllocationSize`. [`file_size`](https://doc.rust-lang.org/nightly/std/os/windows/fs/trait.MetadataExt.html#tymethod.file_size) should report the length of the file, not its size on disk, and only `EndOfFile` reports the former (c.f. https://learn.microsoft.com/en-us/windows/win32/api/FileAPI/nf-fileapi-setendoffile#remarks):

> Each file stream has the following:
> * File size: the size of the data in a file, to the byte.
> * Allocation size: the size of the space that is allocated for a file on a disk, which is always an even multiple of the cluster size.
> * Valid data length: the length of the data in a file that is actually written, to the byte. This value is always less than or equal to the file size.

r? @ChrisDenton
rust-bors Bot pushed a commit that referenced this pull request Jun 19, 2026
…uwer

Rollup of 4 pull requests

Successful merges:

 - #157926 (Implement `#[diagnostic::on_unknown]` for modules.)
 - #158084 (`-Znext-solver` Emit error instead of ICE when combining {int, float} var with alias)
 - #158128 (std: use correct low surrogate range in Windows standard I/O code)
 - #158132 (std: correctly report file size on UWP)
jhpratt added a commit to jhpratt/rust that referenced this pull request Jun 19, 2026
…isDenton

std: correctly report file size on UWP

Found by an LLM in SebTardif#397.

UWP uses [`GetFileInformationByHandleEx`](https://learn.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex) instead of [GetFileInformationByHandle](https://learn.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle), but uses the wrong field to determine file size – `EndOfFile` is a different field than `AllocationSize`. [`file_size`](https://doc.rust-lang.org/nightly/std/os/windows/fs/trait.MetadataExt.html#tymethod.file_size) should report the length of the file, not its size on disk, and only `EndOfFile` reports the former (c.f. https://learn.microsoft.com/en-us/windows/win32/api/FileAPI/nf-fileapi-setendoffile#remarks):

> Each file stream has the following:
> * File size: the size of the data in a file, to the byte.
> * Allocation size: the size of the space that is allocated for a file on a disk, which is always an even multiple of the cluster size.
> * Valid data length: the length of the data in a file that is actually written, to the byte. This value is always less than or equal to the file size.

r? @ChrisDenton
rust-bors Bot pushed a commit that referenced this pull request Jun 19, 2026
…uwer

Rollup of 8 pull requests

Successful merges:

 - #158129 (ensure the new solver bootstraps on CI)
 - #158134 (Rename `lint-rust-version` to `hint-msrv`)
 - #157926 (Implement `#[diagnostic::on_unknown]` for modules.)
 - #158075 (Point to the unstable segment of an import path instead of to the whole path)
 - #158084 (`-Znext-solver` Emit error instead of ICE when combining {int, float} var with alias)
 - #158128 (std: use correct low surrogate range in Windows standard I/O code)
 - #158132 (std: correctly report file size on UWP)
 - #158138 (Remove redundant check for `#[loop_match]` and `#[const_continue]`)
@rust-bors rust-bors Bot merged commit 0c1cae8 into rust-lang:main Jun 19, 2026
4 of 26 checks passed
@rustbot rustbot added this to the 1.98.0 milestone Jun 19, 2026
rust-timer added a commit that referenced this pull request Jun 19, 2026
Rollup merge of #158132 - joboet:windows-uwp-filesize, r=ChrisDenton

std: correctly report file size on UWP

Found by an LLM in SebTardif#397.

UWP uses [`GetFileInformationByHandleEx`](https://learn.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex) instead of [GetFileInformationByHandle](https://learn.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle), but uses the wrong field to determine file size – `EndOfFile` is a different field than `AllocationSize`. [`file_size`](https://doc.rust-lang.org/nightly/std/os/windows/fs/trait.MetadataExt.html#tymethod.file_size) should report the length of the file, not its size on disk, and only `EndOfFile` reports the former (c.f. https://learn.microsoft.com/en-us/windows/win32/api/FileAPI/nf-fileapi-setendoffile#remarks):

> Each file stream has the following:
> * File size: the size of the data in a file, to the byte.
> * Allocation size: the size of the space that is allocated for a file on a disk, which is always an even multiple of the cluster size.
> * Valid data length: the length of the data in a file that is actually written, to the byte. This value is always less than or equal to the file size.

r? @ChrisDenton
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. 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