mirror of
https://github.com/denoland/deno.git
synced 2025-02-08 07:16:56 -05:00
fix(node): add nul byte to statfs path on windows (#22905)
This commit is contained in:
parent
66b68d7520
commit
2b0726e9bc
1 changed files with 18 additions and 11 deletions
|
@ -180,21 +180,28 @@ where
|
||||||
.ancestors()
|
.ancestors()
|
||||||
.last()
|
.last()
|
||||||
.ok_or(anyhow!("Path has no root."))?;
|
.ok_or(anyhow!("Path has no root."))?;
|
||||||
let root = OsStr::new(root).encode_wide().collect::<Vec<_>>();
|
let mut root = OsStr::new(root).encode_wide().collect::<Vec<_>>();
|
||||||
|
root.push(0);
|
||||||
let mut sectors_per_cluster = 0;
|
let mut sectors_per_cluster = 0;
|
||||||
let mut bytes_per_sector = 0;
|
let mut bytes_per_sector = 0;
|
||||||
let mut available_clusters = 0;
|
let mut available_clusters = 0;
|
||||||
let mut total_clusters = 0;
|
let mut total_clusters = 0;
|
||||||
// SAFETY: Normal GetDiskFreeSpaceW usage.
|
let mut code = 0;
|
||||||
let code = unsafe {
|
let mut retries = 0;
|
||||||
GetDiskFreeSpaceW(
|
// We retry here because libuv does: https://github.com/libuv/libuv/blob/fa6745b4f26470dae5ee4fcbb1ee082f780277e0/src/win/fs.c#L2705
|
||||||
root.as_ptr(),
|
while code == 0 && retries < 2 {
|
||||||
&mut sectors_per_cluster,
|
// SAFETY: Normal GetDiskFreeSpaceW usage.
|
||||||
&mut bytes_per_sector,
|
code = unsafe {
|
||||||
&mut available_clusters,
|
GetDiskFreeSpaceW(
|
||||||
&mut total_clusters,
|
root.as_ptr(),
|
||||||
)
|
&mut sectors_per_cluster,
|
||||||
};
|
&mut bytes_per_sector,
|
||||||
|
&mut available_clusters,
|
||||||
|
&mut total_clusters,
|
||||||
|
)
|
||||||
|
};
|
||||||
|
retries += 1;
|
||||||
|
}
|
||||||
if code == 0 {
|
if code == 0 {
|
||||||
return Err(std::io::Error::last_os_error().into());
|
return Err(std::io::Error::last_os_error().into());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue