Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
60245b92
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
60245b92
编写于
10月 22, 2013
作者:
Z
Ziad Hatahet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove thread-blocking call to `libc::stat` in `Path::stat`
Fixes #9958
上级
b477f7a7
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
65 addition
and
318 deletion
+65
-318
src/librustpkg/conditions.rs
src/librustpkg/conditions.rs
+2
-3
src/librustpkg/util.rs
src/librustpkg/util.rs
+2
-2
src/librustpkg/workcache_support.rs
src/librustpkg/workcache_support.rs
+7
-7
src/libstd/path/mod.rs
src/libstd/path/mod.rs
+1
-223
src/libstd/path/posix.rs
src/libstd/path/posix.rs
+19
-49
src/libstd/path/windows.rs
src/libstd/path/windows.rs
+19
-28
src/libstd/rt/io/file.rs
src/libstd/rt/io/file.rs
+2
-2
src/libstd/rt/io/mod.rs
src/libstd/rt/io/mod.rs
+6
-0
src/libstd/rt/uv/uvio.rs
src/libstd/rt/uv/uvio.rs
+3
-0
src/libstd/run.rs
src/libstd/run.rs
+4
-4
未找到文件。
src/librustpkg/conditions.rs
浏览文件 @
60245b92
...
...
@@ -12,15 +12,14 @@
pub
use
std
::
path
::
Path
;
pub
use
package_id
::
PkgId
;
pub
use
std
::
libc
;
pub
use
std
::
libc
::
stat
;
pub
use
std
::
rt
::
io
::
FileStat
;
condition!
{
pub
bad_path
:
(
Path
,
~
str
)
->
Path
;
}
condition!
{
pub
bad_stat
:
(
Path
,
~
str
)
->
s
tat
;
pub
bad_stat
:
(
Path
,
~
str
)
->
FileS
tat
;
}
condition!
{
...
...
src/librustpkg/util.rs
浏览文件 @
60245b92
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
// Copyright 2012
-2013
The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
...
...
@@ -609,7 +609,7 @@ fn debug_flags() -> ~[~str] { ~[] }
/// Returns the last-modified date as an Option
pub
fn
datestamp
(
p
:
&
Path
)
->
Option
<
libc
::
time_t
>
{
debug!
(
"Scrutinizing datestamp for {} - does it exist? {:?}"
,
p
.display
(),
os
::
path_exists
(
p
));
let
out
=
p
.stat
()
.map
(|
stat
|
stat
.
st_mtime
);
let
out
=
p
.stat
()
.map
(|
stat
|
stat
.
modified
);
debug!
(
"Date = {:?}"
,
out
);
out
.map
(|
t
|
{
t
as
libc
::
time_t
})
}
...
...
src/librustpkg/workcache_support.rs
浏览文件 @
60245b92
...
...
@@ -18,17 +18,17 @@ pub fn digest_file_with_date(path: &Path) -> ~str {
use
conditions
::
bad_path
::
cond
;
use
cond1
=
conditions
::
bad_stat
::
cond
;
let
mut
sha
=
~
Sha1
::
new
();
let
s
=
io
::
read_whole_file_str
(
path
);
match
s
{
Ok
(
s
)
=>
{
(
*
sha
)
.input_str
(
s
);
let
mut
sha
=
Sha1
::
new
();
sha
.input_str
(
s
);
let
st
=
match
path
.stat
()
{
Some
(
st
)
=>
st
,
None
=>
cond1
.raise
((
path
.clone
(),
format!
(
"Couldn't get file access time"
)))
};
(
*
sha
)
.input_str
(
st
.st_mtime
.to_str
());
(
*
sha
)
.result_str
()
sha
.input_str
(
st
.modified
.to_str
());
sha
.result_str
()
}
Err
(
e
)
=>
{
let
path
=
cond
.raise
((
path
.clone
(),
format!
(
"Couldn't read file: {}"
,
e
)));
...
...
@@ -43,13 +43,13 @@ pub fn digest_file_with_date(path: &Path) -> ~str {
pub
fn
digest_only_date
(
path
:
&
Path
)
->
~
str
{
use
cond
=
conditions
::
bad_stat
::
cond
;
let
mut
sha
=
~
Sha1
::
new
();
let
mut
sha
=
Sha1
::
new
();
let
st
=
match
path
.stat
()
{
Some
(
st
)
=>
st
,
None
=>
cond
.raise
((
path
.clone
(),
format!
(
"Couldn't get file access time"
)))
};
(
*
sha
)
.input_str
(
st
.st_mtime
.to_str
());
(
*
sha
)
.result_str
()
sha
.input_str
(
st
.modified
.to_str
());
sha
.result_str
()
}
/// Adds multiple discovered outputs
...
...
src/libstd/path/mod.rs
浏览文件 @
60245b92
...
...
@@ -688,228 +688,6 @@ fn from_utf8_with_replacement(mut v: &[u8]) -> ~str {
}
s
}
// FIXME (#9537): libc::stat should derive Default
#[cfg(target_os
=
"linux"
)]
#[cfg(target_os
=
"android"
)]
mod
stat
{
#[allow(missing_doc)]
;
#[cfg(target_arch
=
"x86"
)]
pub
mod
arch
{
use
libc
;
pub
fn
default_stat
()
->
libc
::
stat
{
libc
::
stat
{
st_dev
:
0
,
__
pad1
:
0
,
st_ino
:
0
,
st_mode
:
0
,
st_nlink
:
0
,
st_uid
:
0
,
st_gid
:
0
,
st_rdev
:
0
,
__
pad2
:
0
,
st_size
:
0
,
st_blksize
:
0
,
st_blocks
:
0
,
st_atime
:
0
,
st_atime_nsec
:
0
,
st_mtime
:
0
,
st_mtime_nsec
:
0
,
st_ctime
:
0
,
st_ctime_nsec
:
0
,
__u
nused4
:
0
,
__u
nused5
:
0
,
}
}
}
#[cfg(target_arch
=
"arm"
)]
pub
mod
arch
{
use
libc
;
pub
fn
default_stat
()
->
libc
::
stat
{
libc
::
stat
{
st_dev
:
0
,
__
pad0
:
[
0
,
..
4
],
__
st_ino
:
0
,
st_mode
:
0
,
st_nlink
:
0
,
st_uid
:
0
,
st_gid
:
0
,
st_rdev
:
0
,
__
pad3
:
[
0
,
..
4
],
st_size
:
0
,
st_blksize
:
0
,
st_blocks
:
0
,
st_atime
:
0
,
st_atime_nsec
:
0
,
st_mtime
:
0
,
st_mtime_nsec
:
0
,
st_ctime
:
0
,
st_ctime_nsec
:
0
,
st_ino
:
0
}
}
}
#[cfg(target_arch
=
"mips"
)]
pub
mod
arch
{
use
libc
;
pub
fn
default_stat
()
->
libc
::
stat
{
libc
::
stat
{
st_dev
:
0
,
st_pad1
:
[
0
,
..
3
],
st_ino
:
0
,
st_mode
:
0
,
st_nlink
:
0
,
st_uid
:
0
,
st_gid
:
0
,
st_rdev
:
0
,
st_pad2
:
[
0
,
..
2
],
st_size
:
0
,
st_pad3
:
0
,
st_atime
:
0
,
st_atime_nsec
:
0
,
st_mtime
:
0
,
st_mtime_nsec
:
0
,
st_ctime
:
0
,
st_ctime_nsec
:
0
,
st_blksize
:
0
,
st_blocks
:
0
,
st_pad5
:
[
0
,
..
14
],
}
}
}
#[cfg(target_arch
=
"x86_64"
)]
pub
mod
arch
{
use
libc
;
pub
fn
default_stat
()
->
libc
::
stat
{
libc
::
stat
{
st_dev
:
0
,
st_ino
:
0
,
st_nlink
:
0
,
st_mode
:
0
,
st_uid
:
0
,
st_gid
:
0
,
__
pad0
:
0
,
st_rdev
:
0
,
st_size
:
0
,
st_blksize
:
0
,
st_blocks
:
0
,
st_atime
:
0
,
st_atime_nsec
:
0
,
st_mtime
:
0
,
st_mtime_nsec
:
0
,
st_ctime
:
0
,
st_ctime_nsec
:
0
,
__u
nused
:
[
0
,
0
,
0
],
}
}
}
}
#[cfg(target_os
=
"freebsd"
)]
mod
stat
{
#[allow(missing_doc)]
;
#[cfg(target_arch
=
"x86_64"
)]
pub
mod
arch
{
use
libc
;
pub
fn
default_stat
()
->
libc
::
stat
{
libc
::
stat
{
st_dev
:
0
,
st_ino
:
0
,
st_mode
:
0
,
st_nlink
:
0
,
st_uid
:
0
,
st_gid
:
0
,
st_rdev
:
0
,
st_atime
:
0
,
st_atime_nsec
:
0
,
st_mtime
:
0
,
st_mtime_nsec
:
0
,
st_ctime
:
0
,
st_ctime_nsec
:
0
,
st_size
:
0
,
st_blocks
:
0
,
st_blksize
:
0
,
st_flags
:
0
,
st_gen
:
0
,
st_lspare
:
0
,
st_birthtime
:
0
,
st_birthtime_nsec
:
0
,
__u
nused
:
[
0
,
0
],
}
}
}
}
#[cfg(target_os
=
"macos"
)]
mod
stat
{
#[allow(missing_doc)]
;
pub
mod
arch
{
use
libc
;
pub
fn
default_stat
()
->
libc
::
stat
{
libc
::
stat
{
st_dev
:
0
,
st_mode
:
0
,
st_nlink
:
0
,
st_ino
:
0
,
st_uid
:
0
,
st_gid
:
0
,
st_rdev
:
0
,
st_atime
:
0
,
st_atime_nsec
:
0
,
st_mtime
:
0
,
st_mtime_nsec
:
0
,
st_ctime
:
0
,
st_ctime_nsec
:
0
,
st_birthtime
:
0
,
st_birthtime_nsec
:
0
,
st_size
:
0
,
st_blocks
:
0
,
st_blksize
:
0
,
st_flags
:
0
,
st_gen
:
0
,
st_lspare
:
0
,
st_qspare
:
[
0
,
0
],
}
}
}
}
#[cfg(target_os
=
"win32"
)]
mod
stat
{
#[allow(missing_doc)]
;
pub
mod
arch
{
use
libc
;
pub
fn
default_stat
()
->
libc
::
stat
{
libc
::
stat
{
st_dev
:
0
,
st_ino
:
0
,
st_mode
:
0
,
st_nlink
:
0
,
st_uid
:
0
,
st_gid
:
0
,
st_rdev
:
0
,
st_size
:
0
,
st_atime
:
0
,
st_mtime
:
0
,
st_ctime
:
0
,
}
}
}
}
#[cfg(test)]
mod
tests
{
use
super
::{
GenericPath
,
PosixPath
,
WindowsPath
};
...
...
@@ -921,7 +699,7 @@ fn test_cstring() {
let
path
:
PosixPath
=
PosixPath
::
new
(
input
.to_c_str
());
assert_eq!
(
path
.as_vec
(),
input
.as_bytes
());
let
input
=
"
\\
foo
\\
bar
\
\
baz"
;
let
input
=
r"\foo\bar
\baz"
;
let
path
:
WindowsPath
=
WindowsPath
::
new
(
input
.to_c_str
());
assert_eq!
(
path
.as_str
()
.unwrap
(),
input
.as_slice
());
}
...
...
src/libstd/path/posix.rs
浏览文件 @
60245b92
...
...
@@ -25,7 +25,7 @@
use
super
::{
BytesContainer
,
GenericPath
,
GenericPathUnsafe
};
#[cfg(not(target_os
=
"win32"
))]
use
libc
;
use
rt
::
io
::{
FileStat
,
file
,
io_error
}
;
/// Iterator that yields successive components of a Path as &[u8]
pub
type
ComponentIter
<
'self
>
=
SplitIterator
<
'self
,
u8
>
;
...
...
@@ -445,16 +445,13 @@ fn normalize_helper<'a>(v: &'a [u8], is_abs: bool) -> Option<~[&'a [u8]]> {
// Stat support
#[cfg(not(target_os
=
"win32"
))]
impl
Path
{
/// Calls stat() on the represented file and returns the resulting libc::stat
pub
fn
stat
(
&
self
)
->
Option
<
libc
::
stat
>
{
#[fixed_stack_segment]
;
#[inline(never)]
;
do
self
.with_c_str
|
buf
|
{
let
mut
st
=
super
::
stat
::
arch
::
default_stat
();
match
unsafe
{
libc
::
stat
(
buf
as
*
libc
::
c_char
,
&
mut
st
)
}
{
0
=>
Some
(
st
),
_
=>
None
}
/// Calls stat() on the represented file and returns the resulting rt::io::FileStat
pub
fn
stat
(
&
self
)
->
Option
<
FileStat
>
{
let
mut
file_stat
:
Option
<
FileStat
>
=
None
;
do
io_error
::
cond
.trap
(|
_
|
{
/* Ignore error, will return None */
})
.inside
{
file_stat
=
file
::
stat
(
self
);
}
file_stat
}
/// Returns whether the represented file exists
...
...
@@ -466,10 +463,10 @@ pub fn exists(&self) -> bool {
}
/// Returns the filesize of the represented file
pub
fn
get_size
(
&
self
)
->
Option
<
i
64
>
{
pub
fn
get_size
(
&
self
)
->
Option
<
u
64
>
{
match
self
.stat
()
{
None
=>
None
,
Some
(
st
)
=>
Some
(
st
.s
t_size
as
i64
)
Some
(
st
)
=>
Some
(
st
.s
ize
)
}
}
...
...
@@ -477,7 +474,7 @@ pub fn get_size(&self) -> Option<i64> {
pub
fn
get_mode
(
&
self
)
->
Option
<
uint
>
{
match
self
.stat
()
{
None
=>
None
,
Some
(
st
)
=>
Some
(
st
.
st_
mode
as
uint
)
Some
(
st
)
=>
Some
(
st
.mode
as
uint
)
}
}
}
...
...
@@ -486,54 +483,27 @@ pub fn get_mode(&self) -> Option<uint> {
#[cfg(target_os
=
"linux"
)]
#[cfg(target_os
=
"macos"
)]
impl
Path
{
/// Returns the atime of the represented file, as (secs, nsecs)
pub
fn
get_atime
(
&
self
)
->
Option
<
(
i64
,
int
)
>
{
match
self
.stat
()
{
None
=>
None
,
Some
(
st
)
=>
Some
((
st
.st_atime
as
i64
,
st
.st_atime_nsec
as
int
))
}
}
/// Returns the mtime of the represented file, as (secs, nsecs)
pub
fn
get_mtime
(
&
self
)
->
Option
<
(
i64
,
int
)
>
{
/// Returns the atime of the represented file, as msecs
pub
fn
get_atime
(
&
self
)
->
Option
<
u64
>
{
match
self
.stat
()
{
None
=>
None
,
Some
(
st
)
=>
Some
(
(
st
.st_mtime
as
i64
,
st
.st_mtime_nsec
as
int
)
)
Some
(
st
)
=>
Some
(
st
.accessed
)
}
}
/// Returns the
ctime of the represented file, as (secs, nsecs)
pub
fn
get_
ctime
(
&
self
)
->
Option
<
(
i64
,
int
)
>
{
/// Returns the
mtime of the represented file, as msecs
pub
fn
get_
mtime
(
&
self
)
->
Option
<
u64
>
{
match
self
.stat
()
{
None
=>
None
,
Some
(
st
)
=>
Some
((
st
.st_ctime
as
i64
,
st
.st_ctime_nsec
as
int
))
}
}
}
#[cfg(unix)]
impl
Path
{
/// Calls lstat() on the represented file and returns the resulting libc::stat
pub
fn
lstat
(
&
self
)
->
Option
<
libc
::
stat
>
{
#[fixed_stack_segment]
;
#[inline(never)]
;
do
self
.with_c_str
|
buf
|
{
let
mut
st
=
super
::
stat
::
arch
::
default_stat
();
match
unsafe
{
libc
::
lstat
(
buf
,
&
mut
st
)
}
{
0
=>
Some
(
st
),
_
=>
None
}
Some
(
st
)
=>
Some
(
st
.modified
)
}
}
}
#[cfg(target_os
=
"freebsd"
)]
#[cfg(target_os
=
"macos"
)]
impl
Path
{
/// Returns the birthtime of the represented file
pub
fn
get_birthtime
(
&
self
)
->
Option
<
(
i64
,
int
)
>
{
/// Returns the ctime of the represented file, as msecs
pub
fn
get_ctime
(
&
self
)
->
Option
<
u64
>
{
match
self
.stat
()
{
None
=>
None
,
Some
(
st
)
=>
Some
(
(
st
.st_birthtime
as
i64
,
st
.st_birthtime_nsec
as
int
)
)
Some
(
st
)
=>
Some
(
st
.created
)
}
}
}
...
...
src/libstd/path/windows.rs
浏览文件 @
60245b92
...
...
@@ -24,7 +24,7 @@
use
super
::{
contains_nul
,
BytesContainer
,
GenericPath
,
GenericPathUnsafe
};
#[cfg(target_os
=
"win32"
)]
use
libc
;
use
rt
::
io
::{
FileStat
,
file
,
io_error
}
;
/// Iterator that yields successive components of a Path as &str
///
...
...
@@ -1059,16 +1059,13 @@ fn prefix_is_sep(p: Option<PathPrefix>, c: u8) -> bool {
// Stat support
#[cfg(target_os
=
"win32"
)]
impl
Path
{
/// Calls stat() on the represented file and returns the resulting libc::stat
pub
fn
stat
(
&
self
)
->
Option
<
libc
::
stat
>
{
#[fixed_stack_segment]
;
#[inline(never)]
;
do
self
.with_c_str
|
buf
|
{
let
mut
st
=
super
::
stat
::
arch
::
default_stat
();
match
unsafe
{
libc
::
stat
(
buf
,
&
mut
st
)
}
{
0
=>
Some
(
st
),
_
=>
None
}
/// Calls stat() on the represented file and returns the resulting rt::io::FileStat
pub
fn
stat
(
&
self
)
->
Option
<
FileStat
>
{
let
mut
file_stat
:
Option
<
FileStat
>
=
None
;
do
io_error
::
cond
.trap
(|
_
|
{
/* Ignore error, will return None */
})
.inside
{
file_stat
=
file
::
stat
(
self
);
}
file_stat
}
/// Returns whether the represented file exists
...
...
@@ -1080,10 +1077,10 @@ pub fn exists(&self) -> bool {
}
/// Returns the filesize of the represented file
pub
fn
get_size
(
&
self
)
->
Option
<
i
64
>
{
pub
fn
get_size
(
&
self
)
->
Option
<
u
64
>
{
match
self
.stat
()
{
None
=>
None
,
Some
(
st
)
=>
Some
(
st
.s
t_size
as
i64
)
Some
(
st
)
=>
Some
(
st
.s
ize
)
}
}
...
...
@@ -1091,37 +1088,31 @@ pub fn get_size(&self) -> Option<i64> {
pub
fn
get_mode
(
&
self
)
->
Option
<
uint
>
{
match
self
.stat
()
{
None
=>
None
,
Some
(
st
)
=>
Some
(
st
.
st_
mode
as
uint
)
Some
(
st
)
=>
Some
(
st
.mode
as
uint
)
}
}
/// Returns the atime of the represented file, as (secs, nsecs)
///
/// nsecs is always 0
pub
fn
get_atime
(
&
self
)
->
Option
<
(
i64
,
int
)
>
{
/// Returns the atime of the represented file, as msecs
pub
fn
get_atime
(
&
self
)
->
Option
<
u64
>
{
match
self
.stat
()
{
None
=>
None
,
Some
(
st
)
=>
Some
(
(
st
.st_atime
as
i64
,
0
)
)
Some
(
st
)
=>
Some
(
st
.accessed
)
}
}
/// Returns the mtime of the represented file, as (secs, nsecs)
///
/// nsecs is always 0
pub
fn
get_mtime
(
&
self
)
->
Option
<
(
i64
,
int
)
>
{
/// Returns the mtime of the represented file, as msecs
pub
fn
get_mtime
(
&
self
)
->
Option
<
u64
>
{
match
self
.stat
()
{
None
=>
None
,
Some
(
st
)
=>
Some
(
(
st
.st_mtime
as
i64
,
0
)
)
Some
(
st
)
=>
Some
(
st
.modified
)
}
}
/// Returns the ctime of the represented file, as (secs, nsecs)
///
/// nsecs is always 0
pub
fn
get_ctime
(
&
self
)
->
Option
<
(
i64
,
int
)
>
{
/// Returns the ctime of the represented file, as msecs
pub
fn
get_ctime
(
&
self
)
->
Option
<
u64
>
{
match
self
.stat
()
{
None
=>
None
,
Some
(
st
)
=>
Some
(
(
st
.st_ctime
as
i64
,
0
)
)
Some
(
st
)
=>
Some
(
st
.created
)
}
}
}
...
...
src/libstd/rt/io/file.rs
浏览文件 @
60245b92
...
...
@@ -59,8 +59,8 @@
/// }).inside {
/// let stream = match open(p, Create, ReadWrite) {
/// Some(s) => s,
/// None => fail!("whoops! I'm sure this raised, anyways..")
;
/// }
/// None => fail!("whoops! I'm sure this raised, anyways..")
/// }
;
/// // do some stuff with that stream
///
/// // the file stream will be closed at the end of this block
...
...
src/libstd/rt/io/mod.rs
浏览文件 @
60245b92
...
...
@@ -654,6 +654,12 @@ pub struct FileStat {
is_file
:
bool
,
/// `true` if the file pointed at by the `PathInfo` is a directory
is_dir
:
bool
,
/// The file pointed at by the `PathInfo`'s device
device
:
u64
,
/// The file pointed at by the `PathInfo`'s mode
mode
:
u64
,
/// The file pointed at by the `PathInfo`'s inode
inode
:
u64
,
/// The file pointed at by the `PathInfo`'s size in bytes
size
:
u64
,
/// The file pointed at by the `PathInfo`'s creation time
...
...
src/libstd/rt/uv/uvio.rs
浏览文件 @
60245b92
...
...
@@ -635,6 +635,9 @@ fn fs_stat<P: PathLike>(&mut self, path: &P) -> Result<FileStat, IoError> {
path
:
Path
::
new
(
path_str
.as_slice
()),
is_file
:
stat
.is_file
(),
is_dir
:
stat
.is_dir
(),
device
:
stat
.st_dev
,
mode
:
stat
.st_mode
,
inode
:
stat
.st_ino
,
size
:
stat
.st_size
,
created
:
stat
.st_ctim.tv_sec
as
u64
,
modified
:
stat
.st_mtim.tv_sec
as
u64
,
...
...
src/libstd/run.rs
浏览文件 @
60245b92
...
...
@@ -584,8 +584,8 @@ fn test_keep_current_working_dir() {
let
parent_stat
=
parent_dir
.stat
()
.unwrap
();
let
child_stat
=
child_dir
.stat
()
.unwrap
();
assert_eq!
(
parent_stat
.
st_dev
,
child_stat
.st_dev
);
assert_eq!
(
parent_stat
.
st_ino
,
child_stat
.st_ino
);
assert_eq!
(
parent_stat
.
device
,
child_stat
.device
);
assert_eq!
(
parent_stat
.
inode
,
child_stat
.inode
);
}
#[test]
...
...
@@ -601,8 +601,8 @@ fn test_change_working_directory() {
let
parent_stat
=
parent_dir
.stat
()
.unwrap
();
let
child_stat
=
child_dir
.stat
()
.unwrap
();
assert_eq!
(
parent_stat
.
st_dev
,
child_stat
.st_dev
);
assert_eq!
(
parent_stat
.
st_ino
,
child_stat
.st_ino
);
assert_eq!
(
parent_stat
.
device
,
child_stat
.device
);
assert_eq!
(
parent_stat
.
inode
,
child_stat
.inode
);
}
#[cfg(unix,not(target_os=
"android"
))]
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录