@@ -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 } ;
@@ -294,6 +294,10 @@ impl Dir {
294294 run_path_with_cstr ( path. as_ref ( ) , & |path| self . open_c ( path, opts) )
295295 }
296296
297+ pub fn create_dir < P : AsRef < Path > > ( & self , path : P ) -> io:: Result < ( ) > {
298+ run_path_with_cstr ( path. as_ref ( ) , & |path| self . create_dir_c ( path) )
299+ }
300+
297301 pub fn remove_file < P : AsRef < Path > > ( & self , path : P ) -> io:: Result < ( ) > {
298302 run_path_with_cstr ( path. as_ref ( ) , & |path| self . remove_c ( path, false ) )
299303 }
@@ -334,6 +338,10 @@ impl Dir {
334338 Ok ( Self ( unsafe { OwnedFd :: from_raw_fd ( fd) } ) )
335339 }
336340
341+ pub fn create_dir_c ( & self , path : & CStr ) -> io:: Result < ( ) > {
342+ cvt ( unsafe { mkdirat ( self . 0 . as_raw_fd ( ) , path. as_ptr ( ) , 0o777 ) } ) . map ( |_| ( ) )
343+ }
344+
337345 pub fn remove_c ( & self , path : & CStr , remove_dir : bool ) -> io:: Result < ( ) > {
338346 cvt ( unsafe {
339347 unlinkat (
0 commit comments