Skip to content

Rollup of 22 pull requests #63015

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

Merged
merged 52 commits into from
Jul 26, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
63f2c22
Add missing doc links in boxed module
GuillaumeGomez Jul 2, 2019
c8aa3c1
Add missing type links in Pin documentation
GuillaumeGomez Jul 4, 2019
5a4845d
Implement Unpin for all raw pointers
sfackler Jul 11, 2019
dee3d27
allow clippy::unreadable_literal in unicode tables
euclio Jun 23, 2019
8c050fc
rustc: compute `ty::layout::Niche`'s `available` on the fly.
eddyb Jul 11, 2019
dfbf464
rustc_target: move abi::Niche from rustc::ty::layout.
eddyb Jul 12, 2019
88eced5
rustc: precompute the largest Niche and store it in LayoutDetails.
eddyb Jul 15, 2019
d1aca3a
renamed `inner_deref` feature's `deref*()` methods `as_deref*()` as p…
Xandkeeper Apr 1, 2019
6a9d749
fixed breaking changes
Xandkeeper Apr 2, 2019
f2a9721
Use DerefMut
JohnTitor Jul 5, 2019
59634bc
Replace deref with as_deref
JohnTitor Jul 5, 2019
3427a14
Remove support for -Zlower-128bit-ops
bjorn3 Jul 19, 2019
e8a1e73
Update compiler_builtins to 0.1.18
bjorn3 Jul 20, 2019
93de733
Remove tests for -Zlower-128bit-ops
bjorn3 Jul 20, 2019
6fae7db
Remove vector fadd/fmul reduction workarounds
nikic Jul 20, 2019
279c399
code cleanup
bpangWR Jul 22, 2019
fe4cdd3
Disable d32 on armv6 hf targets
nikic Jul 23, 2019
71717b9
Initialize the MSP430 AsmParser if available
nikic Jul 23, 2019
70c817a
Allow lexer to recover from some homoglyphs
estebank Jul 24, 2019
b01b5b9
ci: gate toolstate repo pushes on the TOOLSTATE_PUBLISH envvar
pietroalbini Jul 25, 2019
0e022f8
Remove needless indirection through Rc
Mark-Simulacrum Jul 25, 2019
dd0f2ac
librustc_errors: Support ui-testing flag in annotate-snippet emitter
phansch Jul 25, 2019
6844976
review comments: add FIXME comments and formatting
estebank Jul 25, 2019
df4b23e
Implement slow-path for FirstSets::first
ia0 Jul 24, 2019
9d796eb
`run_quiet` outputs stdout/stderr when things go wrong.
gilescope Jul 25, 2019
0576062
clarify and unify some type test names
RalfJung Jul 24, 2019
3284472
Add test for issue-54062
JohnTitor Jul 26, 2019
4a2f9b6
Remove redundant `mut` from variable declaration.
tomasz-rozanski Jul 26, 2019
c69f367
std: Add more accessors for `Metadata` on Windows
alexcrichton Jul 25, 2019
fb9f3e6
ci: add debug checks for pypi network outages
pietroalbini Jul 26, 2019
68d94bd
Rollup merge of #62084 - euclio:unicode-table-tweak, r=kennytm
Centril Jul 26, 2019
58b53d1
Rollup merge of #62120 - GuillaumeGomez:add-missing-type-links, r=Cen…
Centril Jul 26, 2019
67009d3
Rollup merge of #62310 - GuillaumeGomez:add-missing-doc-links-boxed, …
Centril Jul 26, 2019
625aa60
Rollup merge of #62421 - JohnTitor:U007D-master, r=alexcrichton
Centril Jul 26, 2019
d1f86c1
Rollup merge of #62583 - sfackler:unpin-raw, r=cramertj
Centril Jul 26, 2019
9d12267
Rollup merge of #62692 - eddyb:precompute-niches, r=oli-obk
Centril Jul 26, 2019
632ce74
Rollup merge of #62801 - bjorn3:remove_lower_128bit_ops, r=alexcrichton
Centril Jul 26, 2019
5ffdca7
Rollup merge of #62828 - nikic:fadd-mul-reductions, r=eddyb
Centril Jul 26, 2019
ceea0be
Rollup merge of #62862 - BaoshanPang:cleanup, r=alexcrichton
Centril Jul 26, 2019
ba835df
Rollup merge of #62904 - nikic:arm-d32, r=alexcrichton
Centril Jul 26, 2019
183aab3
Rollup merge of #62907 - nikic:msp430-asmparser, r=alexcrichton
Centril Jul 26, 2019
c6c8693
Rollup merge of #62956 - ia0:fix_62831, r=petrochenkov
Centril Jul 26, 2019
1893ac6
Rollup merge of #62963 - estebank:homoglyph-recovery, r=petrochenkov
Centril Jul 26, 2019
035078f
Rollup merge of #62964 - RalfJung:ty-tests, r=Centril
Centril Jul 26, 2019
7e1ce7d
Rollup merge of #62970 - pietroalbini:fix-tools-builder, r=alexcrichton
Centril Jul 26, 2019
15398b6
Rollup merge of #62980 - alexcrichton:windows-metadata, r=sfackler
Centril Jul 26, 2019
0614a94
Rollup merge of #62983 - Mark-Simulacrum:remove-needless-rc, r=petroc…
Centril Jul 26, 2019
571a965
Rollup merge of #62985 - phansch:support_ui_testing_flag, r=estebank
Centril Jul 26, 2019
8882e42
Rollup merge of #63002 - gilescope:better-build-diagnostics, r=Mark-S…
Centril Jul 26, 2019
3a1ee9b
Rollup merge of #63004 - JohnTitor:add-tests-for-54062, r=Centril
Centril Jul 26, 2019
0222498
Rollup merge of #63007 - pietroalbini:debug-awscli-install, r=Mark-Si…
Centril Jul 26, 2019
232d27c
Rollup merge of #63009 - Rosto75:master, r=matklad
Centril Jul 26, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
std: Add more accessors for Metadata on Windows
This commit adds accessors for more fields in `fs::Metadata` on Windows
which weren't previously exposed. There's two sources of `fs::Metadata`
on Windows currently, one from `DirEntry` and one from a file itself.
These two sources of information don't actually have the same set of
fields exposed in their stat information, however. To handle this the
platform-specific accessors of Windows-specific information all return
`Option` to return `None` in the case a metadata comes from a
`DirEntry`, but they're guaranteed to return `Some` if it comes from a
file itself.

This is motivated by some changes in CraneStation/wasi-common#42, and
I'm curious how others feel about this platform-specific functionality!
  • Loading branch information
alexcrichton committed Jul 26, 2019
commit c69f367bafb3a2f90d44fe54fc20d57996fa294a
30 changes: 30 additions & 0 deletions src/libstd/sys/windows/ext/fs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,33 @@ pub trait MetadataExt {
/// ```
#[stable(feature = "metadata_ext", since = "1.1.0")]
fn file_size(&self) -> u64;

/// Returns the value of the `dwVolumeSerialNumber` field of this
/// metadata.
///
/// This will return `None` if the `Metadata` instance was created from a
/// call to `DirEntry::metadata`. If this `Metadata` was created by using
/// `fs::metadata` or `File::metadata`, then this will return `Some`.
#[unstable(feature = "windows_by_handle", issue = "63010")]
fn volume_serial_number(&self) -> Option<u32>;

/// Returns the value of the `nNumberOfLinks` field of this
/// metadata.
///
/// This will return `None` if the `Metadata` instance was created from a
/// call to `DirEntry::metadata`. If this `Metadata` was created by using
/// `fs::metadata` or `File::metadata`, then this will return `Some`.
#[unstable(feature = "windows_by_handle", issue = "63010")]
fn number_of_links(&self) -> Option<u32>;

/// Returns the value of the `nFileIndex{Low,High}` fields of this
/// metadata.
///
/// This will return `None` if the `Metadata` instance was created from a
/// call to `DirEntry::metadata`. If this `Metadata` was created by using
/// `fs::metadata` or `File::metadata`, then this will return `Some`.
#[unstable(feature = "windows_by_handle", issue = "63010")]
fn file_index(&self) -> Option<u64>;
}

#[stable(feature = "metadata_ext", since = "1.1.0")]
Expand All @@ -446,6 +473,9 @@ impl MetadataExt for Metadata {
fn last_access_time(&self) -> u64 { self.as_inner().accessed_u64() }
fn last_write_time(&self) -> u64 { self.as_inner().modified_u64() }
fn file_size(&self) -> u64 { self.as_inner().size() }
fn volume_serial_number(&self) -> Option<u32> { self.as_inner().volume_serial_number() }
fn number_of_links(&self) -> Option<u32> { self.as_inner().number_of_links() }
fn file_index(&self) -> Option<u64> { self.as_inner().file_index() }
}

/// Windows-specific extensions to [`FileType`].
Expand Down
55 changes: 39 additions & 16 deletions src/libstd/sys/windows/fs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ pub struct FileAttr {
last_write_time: c::FILETIME,
file_size: u64,
reparse_tag: c::DWORD,
volume_serial_number: Option<u32>,
number_of_links: Option<u32>,
file_index: Option<u64>,
}

#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
Expand Down Expand Up @@ -156,6 +159,9 @@ impl DirEntry {
} else {
0
},
volume_serial_number: None,
number_of_links: None,
file_index: None,
})
}
}
Expand Down Expand Up @@ -291,23 +297,26 @@ impl File {
pub fn file_attr(&self) -> io::Result<FileAttr> {
unsafe {
let mut info: c::BY_HANDLE_FILE_INFORMATION = mem::zeroed();
cvt(c::GetFileInformationByHandle(self.handle.raw(),
&mut info))?;
let mut attr = FileAttr {
attributes: info.dwFileAttributes,
creation_time: info.ftCreationTime,
last_access_time: info.ftLastAccessTime,
last_write_time: info.ftLastWriteTime,
file_size: ((info.nFileSizeHigh as u64) << 32) | (info.nFileSizeLow as u64),
reparse_tag: 0,
};
if attr.is_reparse_point() {
cvt(c::GetFileInformationByHandle(self.handle.raw(), &mut info))?;
let mut reparse_tag = 0;
if info.dwFileAttributes & c::FILE_ATTRIBUTE_REPARSE_POINT != 0 {
let mut b = [0; c::MAXIMUM_REPARSE_DATA_BUFFER_SIZE];
if let Ok((_, buf)) = self.reparse_point(&mut b) {
attr.reparse_tag = buf.ReparseTag;
reparse_tag = buf.ReparseTag;
}
}
Ok(attr)
Ok(FileAttr {
attributes: info.dwFileAttributes,
creation_time: info.ftCreationTime,
last_access_time: info.ftLastAccessTime,
last_write_time: info.ftLastWriteTime,
file_size: (info.nFileSizeLow as u64) | ((info.nFileSizeHigh as u64) << 32),
reparse_tag,
volume_serial_number: Some(info.dwVolumeSerialNumber),
number_of_links: Some(info.nNumberOfLinks),
file_index: Some((info.nFileIndexLow as u64) |
((info.nFileIndexHigh as u64) << 32)),
})
}
}

Expand Down Expand Up @@ -336,6 +345,9 @@ impl File {
},
file_size: 0,
reparse_tag: 0,
volume_serial_number: None,
number_of_links: None,
file_index: None,
};
let mut info: c::FILE_STANDARD_INFO = mem::zeroed();
let size = mem::size_of_val(&info);
Expand All @@ -344,6 +356,7 @@ impl File {
&mut info as *mut _ as *mut libc::c_void,
size as c::DWORD))?;
attr.file_size = info.AllocationSize as u64;
attr.number_of_links = Some(info.NumberOfLinks);
if attr.is_reparse_point() {
let mut b = [0; c::MAXIMUM_REPARSE_DATA_BUFFER_SIZE];
if let Ok((_, buf)) = self.reparse_point(&mut b) {
Expand Down Expand Up @@ -507,7 +520,9 @@ impl FileAttr {
FilePermissions { attrs: self.attributes }
}

pub fn attrs(&self) -> u32 { self.attributes as u32 }
pub fn attrs(&self) -> u32 {
self.attributes
}

pub fn file_type(&self) -> FileType {
FileType::new(self.attributes, self.reparse_tag)
Expand Down Expand Up @@ -537,8 +552,16 @@ impl FileAttr {
to_u64(&self.creation_time)
}

fn is_reparse_point(&self) -> bool {
self.attributes & c::FILE_ATTRIBUTE_REPARSE_POINT != 0
pub fn volume_serial_number(&self) -> Option<u32> {
self.volume_serial_number
}

pub fn number_of_links(&self) -> Option<u32> {
self.number_of_links
}

pub fn file_index(&self) -> Option<u64> {
self.file_index
}
}

Expand Down