1
1
use super :: fd:: FileDesc ;
2
2
use super :: hermit_abi:: {
3
3
self , dirent64, stat as stat_struct, DT_DIR , DT_LNK , DT_REG , DT_UNKNOWN , O_APPEND , O_CREAT ,
4
- O_EXCL , O_RDONLY , O_RDWR , O_TRUNC , O_WRONLY , S_IFDIR , S_IFLNK , S_IFMT , S_IFREG ,
4
+ O_DIRECTORY , O_EXCL , O_RDONLY , O_RDWR , O_TRUNC , O_WRONLY , S_IFDIR , S_IFLNK , S_IFMT , S_IFREG ,
5
5
} ;
6
6
use crate :: ffi:: { CStr , OsStr , OsString } ;
7
7
use crate :: fmt;
@@ -62,7 +62,7 @@ pub struct DirEntry {
62
62
/// 64-bit inode number
63
63
ino : u64 ,
64
64
/// File type
65
- type_ : u32 ,
65
+ type_ : u8 ,
66
66
/// name of the entry
67
67
name : OsString ,
68
68
}
@@ -90,7 +90,7 @@ pub struct FilePermissions {
90
90
91
91
#[ derive( Copy , Clone , Eq , Debug ) ]
92
92
pub struct FileType {
93
- mode : u32 ,
93
+ mode : u8 ,
94
94
}
95
95
96
96
impl PartialEq for FileType {
@@ -113,30 +113,31 @@ pub struct DirBuilder {
113
113
impl FileAttr {
114
114
pub fn modified ( & self ) -> io:: Result < SystemTime > {
115
115
Ok ( SystemTime :: new (
116
- self . stat_val . st_mtime . try_into ( ) . unwrap ( ) ,
117
- self . stat_val . st_mtime_nsec . try_into ( ) . unwrap ( ) ,
116
+ self . stat_val . st_mtim . tv_sec ,
117
+ self . stat_val . st_mtim . tv_nsec ,
118
118
) )
119
119
}
120
120
121
121
pub fn accessed ( & self ) -> io:: Result < SystemTime > {
122
122
Ok ( SystemTime :: new (
123
- self . stat_val . st_atime . try_into ( ) . unwrap ( ) ,
124
- self . stat_val . st_atime_nsec . try_into ( ) . unwrap ( ) ,
123
+ self . stat_val . st_atim . tv_sec ,
124
+ self . stat_val . st_atim . tv_nsec ,
125
125
) )
126
126
}
127
127
128
128
pub fn created ( & self ) -> io:: Result < SystemTime > {
129
129
Ok ( SystemTime :: new (
130
- self . stat_val . st_ctime . try_into ( ) . unwrap ( ) ,
131
- self . stat_val . st_ctime_nsec . try_into ( ) . unwrap ( ) ,
130
+ self . stat_val . st_ctim . tv_sec ,
131
+ self . stat_val . st_ctim . tv_nsec ,
132
132
) )
133
133
}
134
134
135
135
pub fn size ( & self ) -> u64 {
136
136
self . stat_val . st_size as u64
137
137
}
138
+
138
139
pub fn perm ( & self ) -> FilePermissions {
139
- FilePermissions { mode : ( self . stat_val . st_mode ) }
140
+ FilePermissions { mode : self . stat_val . st_mode }
140
141
}
141
142
142
143
pub fn file_type ( & self ) -> FileType {
@@ -220,7 +221,7 @@ impl Iterator for ReadDir {
220
221
let entry = DirEntry {
221
222
root : self . inner . root . clone ( ) ,
222
223
ino : dir. d_ino ,
223
- type_ : dir. d_type as u32 ,
224
+ type_ : dir. d_type ,
224
225
name : OsString :: from_vec ( name_bytes. to_vec ( ) ) ,
225
226
} ;
226
227
@@ -251,7 +252,7 @@ impl DirEntry {
251
252
}
252
253
253
254
pub fn file_type ( & self ) -> io:: Result < FileType > {
254
- Ok ( FileType { mode : self . type_ as u32 } )
255
+ Ok ( FileType { mode : self . type_ } )
255
256
}
256
257
257
258
#[ allow( dead_code) ]
@@ -385,12 +386,12 @@ impl File {
385
386
}
386
387
387
388
pub fn read_vectored ( & self , bufs : & mut [ IoSliceMut < ' _ > ] ) -> io:: Result < usize > {
388
- crate :: io :: default_read_vectored ( |buf| self . read ( buf ) , bufs)
389
+ self . 0 . read_vectored ( bufs)
389
390
}
390
391
391
392
#[ inline]
392
393
pub fn is_read_vectored ( & self ) -> bool {
393
- false
394
+ self . 0 . is_read_vectored ( )
394
395
}
395
396
396
397
pub fn read_buf ( & self , cursor : BorrowedCursor < ' _ > ) -> io:: Result < ( ) > {
@@ -402,12 +403,12 @@ impl File {
402
403
}
403
404
404
405
pub fn write_vectored ( & self , bufs : & [ IoSlice < ' _ > ] ) -> io:: Result < usize > {
405
- crate :: io :: default_write_vectored ( |buf| self . write ( buf ) , bufs)
406
+ self . 0 . write_vectored ( bufs)
406
407
}
407
408
408
409
#[ inline]
409
410
pub fn is_write_vectored ( & self ) -> bool {
410
- false
411
+ self . 0 . is_write_vectored ( )
411
412
}
412
413
413
414
#[ inline]
@@ -439,13 +440,13 @@ impl DirBuilder {
439
440
440
441
pub fn mkdir ( & self , path : & Path ) -> io:: Result < ( ) > {
441
442
run_path_with_cstr ( path, & |path| {
442
- cvt ( unsafe { hermit_abi:: mkdir ( path. as_ptr ( ) , self . mode ) } ) . map ( |_| ( ) )
443
+ cvt ( unsafe { hermit_abi:: mkdir ( path. as_ptr ( ) , self . mode . into ( ) ) } ) . map ( |_| ( ) )
443
444
} )
444
445
}
445
446
446
447
#[ allow( dead_code) ]
447
448
pub fn set_mode ( & mut self , mode : u32 ) {
448
- self . mode = mode as u32 ;
449
+ self . mode = mode;
449
450
}
450
451
}
451
452
@@ -502,7 +503,7 @@ impl FromRawFd for File {
502
503
503
504
pub fn readdir ( path : & Path ) -> io:: Result < ReadDir > {
504
505
let fd_raw =
505
- run_path_with_cstr ( path, & |path| cvt ( unsafe { hermit_abi:: opendir ( path. as_ptr ( ) ) } ) ) ?;
506
+ run_path_with_cstr ( path, & |path| cvt ( unsafe { hermit_abi:: open ( path. as_ptr ( ) , O_RDONLY | O_DIRECTORY , 0 ) } ) ) ?;
506
507
let fd = unsafe { FileDesc :: from_raw_fd ( fd_raw as i32 ) } ;
507
508
let root = path. to_path_buf ( ) ;
508
509
0 commit comments