11use super :: fd:: FileDesc ;
22use super :: hermit_abi:: {
33 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 ,
55} ;
66use crate :: ffi:: { CStr , OsStr , OsString } ;
77use crate :: fmt;
@@ -62,7 +62,7 @@ pub struct DirEntry {
6262 /// 64-bit inode number
6363 ino : u64 ,
6464 /// File type
65- type_ : u32 ,
65+ type_ : u8 ,
6666 /// name of the entry
6767 name : OsString ,
6868}
@@ -90,7 +90,7 @@ pub struct FilePermissions {
9090
9191#[ derive( Copy , Clone , Eq , Debug ) ]
9292pub struct FileType {
93- mode : u32 ,
93+ mode : u8 ,
9494}
9595
9696impl PartialEq for FileType {
@@ -112,31 +112,23 @@ pub struct DirBuilder {
112112
113113impl FileAttr {
114114 pub fn modified ( & self ) -> io:: Result < SystemTime > {
115- Ok ( SystemTime :: new (
116- self . stat_val . st_mtime . try_into ( ) . unwrap ( ) ,
117- self . stat_val . st_mtime_nsec . try_into ( ) . unwrap ( ) ,
118- ) )
115+ Ok ( SystemTime :: new ( self . stat_val . st_mtim . tv_sec , self . stat_val . st_mtim . tv_nsec ) )
119116 }
120117
121118 pub fn accessed ( & self ) -> io:: Result < SystemTime > {
122- Ok ( SystemTime :: new (
123- self . stat_val . st_atime . try_into ( ) . unwrap ( ) ,
124- self . stat_val . st_atime_nsec . try_into ( ) . unwrap ( ) ,
125- ) )
119+ Ok ( SystemTime :: new ( self . stat_val . st_atim . tv_sec , self . stat_val . st_atim . tv_nsec ) )
126120 }
127121
128122 pub fn created ( & self ) -> io:: Result < SystemTime > {
129- Ok ( SystemTime :: new (
130- self . stat_val . st_ctime . try_into ( ) . unwrap ( ) ,
131- self . stat_val . st_ctime_nsec . try_into ( ) . unwrap ( ) ,
132- ) )
123+ Ok ( SystemTime :: new ( self . stat_val . st_ctim . tv_sec , self . stat_val . st_ctim . tv_nsec ) )
133124 }
134125
135126 pub fn size ( & self ) -> u64 {
136127 self . stat_val . st_size as u64
137128 }
129+
138130 pub fn perm ( & self ) -> FilePermissions {
139- FilePermissions { mode : ( self . stat_val . st_mode ) }
131+ FilePermissions { mode : self . stat_val . st_mode }
140132 }
141133
142134 pub fn file_type ( & self ) -> FileType {
@@ -220,7 +212,7 @@ impl Iterator for ReadDir {
220212 let entry = DirEntry {
221213 root : self . inner . root . clone ( ) ,
222214 ino : dir. d_ino ,
223- type_ : dir. d_type as u32 ,
215+ type_ : dir. d_type ,
224216 name : OsString :: from_vec ( name_bytes. to_vec ( ) ) ,
225217 } ;
226218
@@ -251,7 +243,7 @@ impl DirEntry {
251243 }
252244
253245 pub fn file_type ( & self ) -> io:: Result < FileType > {
254- Ok ( FileType { mode : self . type_ as u32 } )
246+ Ok ( FileType { mode : self . type_ } )
255247 }
256248
257249 #[ allow( dead_code) ]
@@ -385,12 +377,12 @@ impl File {
385377 }
386378
387379 pub fn read_vectored ( & self , bufs : & mut [ IoSliceMut < ' _ > ] ) -> io:: Result < usize > {
388- crate :: io :: default_read_vectored ( |buf| self . read ( buf ) , bufs)
380+ self . 0 . read_vectored ( bufs)
389381 }
390382
391383 #[ inline]
392384 pub fn is_read_vectored ( & self ) -> bool {
393- false
385+ self . 0 . is_read_vectored ( )
394386 }
395387
396388 pub fn read_buf ( & self , cursor : BorrowedCursor < ' _ > ) -> io:: Result < ( ) > {
@@ -402,12 +394,12 @@ impl File {
402394 }
403395
404396 pub fn write_vectored ( & self , bufs : & [ IoSlice < ' _ > ] ) -> io:: Result < usize > {
405- crate :: io :: default_write_vectored ( |buf| self . write ( buf ) , bufs)
397+ self . 0 . write_vectored ( bufs)
406398 }
407399
408400 #[ inline]
409401 pub fn is_write_vectored ( & self ) -> bool {
410- false
402+ self . 0 . is_write_vectored ( )
411403 }
412404
413405 #[ inline]
@@ -439,13 +431,13 @@ impl DirBuilder {
439431
440432 pub fn mkdir ( & self , path : & Path ) -> io:: Result < ( ) > {
441433 run_path_with_cstr ( path, & |path| {
442- cvt ( unsafe { hermit_abi:: mkdir ( path. as_ptr ( ) , self . mode ) } ) . map ( |_| ( ) )
434+ cvt ( unsafe { hermit_abi:: mkdir ( path. as_ptr ( ) , self . mode . into ( ) ) } ) . map ( |_| ( ) )
443435 } )
444436 }
445437
446438 #[ allow( dead_code) ]
447439 pub fn set_mode ( & mut self , mode : u32 ) {
448- self . mode = mode as u32 ;
440+ self . mode = mode;
449441 }
450442}
451443
@@ -501,8 +493,9 @@ impl FromRawFd for File {
501493}
502494
503495pub fn readdir ( path : & Path ) -> io:: Result < ReadDir > {
504- let fd_raw =
505- run_path_with_cstr ( path, & |path| cvt ( unsafe { hermit_abi:: opendir ( path. as_ptr ( ) ) } ) ) ?;
496+ let fd_raw = run_path_with_cstr ( path, & |path| {
497+ cvt ( unsafe { hermit_abi:: open ( path. as_ptr ( ) , O_RDONLY | O_DIRECTORY , 0 ) } )
498+ } ) ?;
506499 let fd = unsafe { FileDesc :: from_raw_fd ( fd_raw as i32 ) } ;
507500 let root = path. to_path_buf ( ) ;
508501
0 commit comments