@@ -54,8 +54,8 @@ use libc::{c_int, mode_t};
5454#[ cfg( target_os = "android" ) ]
5555use libc:: {
5656 dirent as dirent64, fstat as fstat64, fstatat as fstatat64, ftruncate64, lseek64,
57- lstat as lstat64, off64_t, open as open64, openat as openat64, renameat, stat as stat64 ,
58- unlinkat,
57+ lstat as lstat64, mkdirat , off64_t, open as open64, openat as openat64, renameat,
58+ stat as stat64 , unlinkat,
5959} ;
6060#[ cfg( not( any(
6161 all( target_os = "linux" , not( target_env = "musl" ) ) ,
@@ -65,7 +65,7 @@ use libc::{
6565) ) ) ]
6666use libc:: {
6767 dirent as dirent64, fstat as fstat64, ftruncate as ftruncate64, lseek as lseek64,
68- lstat as lstat64, off_t as off64_t, open as open64, openat as openat64, renameat,
68+ lstat as lstat64, mkdirat , off_t as off64_t, open as open64, openat as openat64, renameat,
6969 stat as stat64, unlinkat,
7070} ;
7171#[ cfg( any(
@@ -74,8 +74,8 @@ use libc::{
7474 target_os = "hurd"
7575) ) ]
7676use libc:: {
77- dirent64, fstat64, ftruncate64, lseek64, lstat64, off64_t, open64, openat64, renameat, stat64 ,
78- unlinkat,
77+ dirent64, fstat64, ftruncate64, lseek64, lstat64, mkdirat , off64_t, open64, openat64, renameat,
78+ stat64 , unlinkat,
7979} ;
8080
8181use crate :: ffi:: { CStr , OsStr , OsString } ;
@@ -295,6 +295,10 @@ impl Dir {
295295 run_path_with_cstr ( path. as_ref ( ) , & |path| self . open_c ( path, opts) )
296296 }
297297
298+ pub fn create_dir < P : AsRef < Path > > ( & self , path : P ) -> io:: Result < ( ) > {
299+ run_path_with_cstr ( path. as_ref ( ) , & |path| self . create_dir_c ( path) )
300+ }
301+
298302 pub fn remove_file < P : AsRef < Path > > ( & self , path : P ) -> io:: Result < ( ) > {
299303 run_path_with_cstr ( path. as_ref ( ) , & |path| self . remove_c ( path, false ) )
300304 }
@@ -335,6 +339,10 @@ impl Dir {
335339 Ok ( Self ( unsafe { OwnedFd :: from_raw_fd ( fd) } ) )
336340 }
337341
342+ pub fn create_dir_c ( & self , path : & CStr ) -> io:: Result < ( ) > {
343+ cvt ( unsafe { mkdirat ( self . 0 . as_raw_fd ( ) , path. as_ptr ( ) , 0o777 ) } ) . map ( |_| ( ) )
344+ }
345+
338346 pub fn remove_c ( & self , path : & CStr , remove_dir : bool ) -> io:: Result < ( ) > {
339347 cvt ( unsafe {
340348 unlinkat (
0 commit comments