@@ -8,6 +8,48 @@ use crate::{
88 syscall_instrument,
99} ;
1010
11+ #[ cfg( target_arch = "x86_64" ) ]
12+ #[ derive( Debug , Clone , Copy , Default ) ]
13+ #[ repr( C ) ]
14+ pub struct Kstat {
15+ /// 设备
16+ pub st_dev : u64 ,
17+ /// inode 编号
18+ pub st_ino : u64 ,
19+ /// 硬链接数
20+ pub st_nlink : u64 ,
21+ /// 文件类型
22+ pub st_mode : u32 ,
23+ /// 用户id
24+ pub st_uid : u32 ,
25+ /// 用户组id
26+ pub st_gid : u32 ,
27+ /// padding
28+ pub __pad0 : u32 ,
29+ /// 设备号
30+ pub st_rdev : u64 ,
31+ /// 文件大小
32+ pub st_size : i64 ,
33+ /// 块大小
34+ pub st_blksize : i64 ,
35+ /// 块个数
36+ pub st_blocks : i64 ,
37+ /// 最后一次访问时间(秒)
38+ pub st_atime_sec : u64 ,
39+ /// 最后一次访问时间(纳秒)
40+ pub st_atime_nsec : u64 ,
41+ /// 最后一次修改时间(秒)
42+ pub st_mtime_sec : u64 ,
43+ /// 最后一次修改时间(纳秒)
44+ pub st_mtime_nsec : u64 ,
45+ /// 最后一次改变状态时间(秒)
46+ pub st_ctime_sec : u64 ,
47+ /// 最后一次改变状态时间(纳秒)
48+ pub st_ctime_nsec : u64 ,
49+ pub __unused : [ i64 ; 3 ] ,
50+ }
51+
52+ #[ cfg( not( target_arch = "x86_64" ) ) ]
1153#[ derive( Debug , Clone , Copy , Default ) ]
1254#[ repr( C ) ]
1355pub struct Kstat {
@@ -26,29 +68,58 @@ pub struct Kstat {
2668 /// 设备号
2769 pub st_rdev : u64 ,
2870 /// padding
29- pub _pad0 : u64 ,
71+ pub __pad1 : u64 ,
3072 /// 文件大小
31- pub st_size : u64 ,
73+ pub st_size : i64 ,
3274 /// 块大小
33- pub st_blksize : u32 ,
75+ pub st_blksize : i32 ,
3476 /// padding
35- pub _pad1 : u32 ,
77+ pub __pad2 : i32 ,
3678 /// 块个数
37- pub st_blocks : u64 ,
79+ pub st_blocks : i64 ,
3880 /// 最后一次访问时间(秒)
39- pub st_atime_sec : isize ,
81+ pub st_atime_sec : i64 ,
4082 /// 最后一次访问时间(纳秒)
41- pub st_atime_nsec : isize ,
83+ pub st_atime_nsec : u64 ,
4284 /// 最后一次修改时间(秒)
43- pub st_mtime_sec : isize ,
85+ pub st_mtime_sec : i64 ,
4486 /// 最后一次修改时间(纳秒)
45- pub st_mtime_nsec : isize ,
87+ pub st_mtime_nsec : u64 ,
4688 /// 最后一次改变状态时间(秒)
47- pub st_ctime_sec : isize ,
89+ pub st_ctime_sec : i64 ,
4890 /// 最后一次改变状态时间(纳秒)
49- pub st_ctime_nsec : isize ,
91+ pub st_ctime_nsec : u64 ,
92+ pub __unused4 : u32 ,
93+ pub __unused5 : u32 ,
94+ }
95+
96+ #[ cfg( target_arch = "x86_64" ) ]
97+ impl From < arceos_posix_api:: ctypes:: stat > for Kstat {
98+ fn from ( stat : arceos_posix_api:: ctypes:: stat ) -> Self {
99+ Self {
100+ st_dev : stat. st_dev ,
101+ st_ino : stat. st_ino ,
102+ st_nlink : stat. st_nlink as u64 ,
103+ st_mode : stat. st_mode ,
104+ st_uid : stat. st_uid ,
105+ st_gid : stat. st_gid ,
106+ __pad0 : 0_u32 ,
107+ st_rdev : stat. st_rdev ,
108+ st_size : stat. st_size ,
109+ st_blksize : stat. st_blksize ,
110+ st_blocks : stat. st_blocks ,
111+ st_atime_sec : stat. st_atime . tv_sec as u64 ,
112+ st_atime_nsec : stat. st_atime . tv_nsec as u64 ,
113+ st_mtime_sec : stat. st_mtime . tv_sec as u64 ,
114+ st_mtime_nsec : stat. st_mtime . tv_nsec as u64 ,
115+ st_ctime_sec : stat. st_ctime . tv_sec as u64 ,
116+ st_ctime_nsec : stat. st_ctime . tv_nsec as u64 ,
117+ __unused : [ 0_i64 ; 3 ] ,
118+ }
119+ }
50120}
51121
122+ #[ cfg( not( target_arch = "x86_64" ) ) ]
52123impl From < arceos_posix_api:: ctypes:: stat > for Kstat {
53124 fn from ( stat : arceos_posix_api:: ctypes:: stat ) -> Self {
54125 Self {
@@ -59,17 +130,19 @@ impl From<arceos_posix_api::ctypes::stat> for Kstat {
59130 st_uid : stat. st_uid ,
60131 st_gid : stat. st_gid ,
61132 st_rdev : stat. st_rdev ,
62- _pad0 : 0 ,
63- st_size : stat. st_size as u64 ,
64- st_blksize : stat. st_blksize as u32 ,
65- _pad1 : 0 ,
66- st_blocks : stat. st_blocks as u64 ,
67- st_atime_sec : stat. st_atime . tv_sec as isize ,
68- st_atime_nsec : stat. st_atime . tv_nsec as isize ,
69- st_mtime_sec : stat. st_mtime . tv_sec as isize ,
70- st_mtime_nsec : stat. st_mtime . tv_nsec as isize ,
71- st_ctime_sec : stat. st_ctime . tv_sec as isize ,
72- st_ctime_nsec : stat. st_ctime . tv_nsec as isize ,
133+ __pad1 : 0_u64 ,
134+ st_size : stat. st_size ,
135+ st_blksize : stat. st_blksize as i32 ,
136+ __pad2 : 0_i32 ,
137+ st_blocks : stat. st_blocks ,
138+ st_atime_sec : stat. st_atime . tv_sec ,
139+ st_atime_nsec : stat. st_atime . tv_nsec as u64 ,
140+ st_mtime_sec : stat. st_mtime . tv_sec ,
141+ st_mtime_nsec : stat. st_mtime . tv_nsec as u64 ,
142+ st_ctime_sec : stat. st_ctime . tv_sec ,
143+ st_ctime_nsec : stat. st_ctime . tv_nsec as u64 ,
144+ __unused4 : 0_u32 ,
145+ __unused5 : 0_u32 ,
73146 }
74147 }
75148}
0 commit comments