@@ -10,7 +10,7 @@ use log::{info, warn};
10
10
use nix:: errno:: Errno ;
11
11
use nix:: fcntl:: { self , OFlag } ;
12
12
use nix:: sys:: stat:: Mode ;
13
- use nix:: sys:: uio:: { pread, pwrite, pwritev , IoVec as NixIoVec } ;
13
+ use nix:: sys:: uio:: { pread, pwrite, IoVec as NixIoVec } ;
14
14
use nix:: unistd:: { close, fsync, ftruncate, lseek, Whence } ;
15
15
use nix:: NixPath ;
16
16
use protobuf:: Message ;
@@ -691,6 +691,7 @@ fn pwrite_exact(fd: RawFd, mut offset: u64, content: &[u8]) -> Result<()> {
691
691
Ok ( ( ) )
692
692
}
693
693
694
+ #[ cfg( not( target_os="macos" ) ) ]
694
695
fn pwritev_exact < ' a > (
695
696
fd : RawFd ,
696
697
mut offset : u64 ,
@@ -719,7 +720,7 @@ fn pwritev_exact<'a>(
719
720
}
720
721
721
722
while !vecs. is_empty ( ) {
722
- let bytes = match pwritev ( fd, vecs, offset as _ ) {
723
+ let bytes = match nix :: sys :: uio :: pwritev ( fd, vecs, offset as _ ) {
723
724
Ok ( bytes) => bytes,
724
725
Err ( e) if e. as_errno ( ) == Some ( Errno :: EAGAIN ) => continue ,
725
726
Err ( e) => return Err ( parse_nix_error ( e, "pwrite" ) ) ,
@@ -730,6 +731,17 @@ fn pwritev_exact<'a>(
730
731
Ok ( ( ) )
731
732
}
732
733
734
+ #[ cfg( target_os="macos" ) ]
735
+ fn pwritev_exact < ' a > ( fd : RawFd , mut offset : u64 , vecs : & ' a [ NixIoVec < & ' a [ u8 ] > ] ) -> Result < ( ) > {
736
+ for vec in vecs {
737
+ let content = vec. as_slice ( ) ;
738
+ let len = content. len ( ) ;
739
+ pwrite_exact ( fd, offset, content) ?;
740
+ offset += len as u64 ;
741
+ }
742
+ Ok ( ( ) )
743
+ }
744
+
733
745
fn write_file_header ( fd : RawFd ) -> Result < usize > {
734
746
let len = FILE_MAGIC_HEADER . len ( ) + VERSION . len ( ) ;
735
747
let mut header = Vec :: with_capacity ( len) ;
0 commit comments