1
1
use { Errno , Result , NixPath } ;
2
- use libc:: { c_int, c_uint} ;
2
+ use libc:: { self , c_int, c_uint} ;
3
3
use sys:: stat:: Mode ;
4
4
use std:: os:: unix:: io:: RawFd ;
5
5
6
6
#[ cfg( any( target_os = "linux" , target_os = "android" ) ) ]
7
7
use sys:: uio:: IoVec ; // For vmsplice
8
- #[ cfg( any( target_os = "linux" , target_os = "android" ) ) ]
9
- use libc;
10
8
11
9
pub use self :: consts:: * ;
12
- pub use self :: ffi:: flock;
13
10
11
+ // TODO: The remainder of the ffi module should be removed afer work on
12
+ // https://github.com/rust-lang/libc/issues/235 is resolved.
14
13
#[ allow( dead_code) ]
15
14
mod ffi {
16
- pub use libc:: { open, fcntl} ;
17
- pub use self :: os:: * ;
18
- pub use libc:: flock as libc_flock;
19
- pub use libc:: { LOCK_SH , LOCK_EX , LOCK_NB , LOCK_UN } ;
20
-
21
- #[ cfg( any( target_os = "linux" , target_os = "android" ) ) ]
22
- mod os {
23
- use libc:: { c_int, c_short, off_t, pid_t} ;
24
-
25
- #[ repr( C ) ]
26
- #[ derive( Clone , Copy , Default , Debug ) ]
27
- pub struct flock {
28
- pub l_type : c_short ,
29
- pub l_whence : c_short ,
30
- pub l_start : off_t ,
31
- pub l_len : off_t ,
32
- pub l_pid : pid_t ,
33
-
34
- // not actually here, but brings in line with freebsd
35
- pub l_sysid : c_int ,
36
- }
37
-
38
- pub const F_DUPFD : c_int = 0 ;
39
- pub const F_DUPFD_CLOEXEC : c_int = 1030 ;
40
- pub const F_GETFD : c_int = 1 ;
41
- pub const F_SETFD : c_int = 2 ;
42
- pub const F_GETFL : c_int = 3 ;
43
- pub const F_SETFL : c_int = 4 ;
44
- pub const F_SETLK : c_int = 6 ;
45
- pub const F_SETLKW : c_int = 7 ;
46
- pub const F_GETLK : c_int = 5 ;
47
-
48
- pub const F_ADD_SEALS : c_int = 1033 ;
49
- pub const F_GET_SEALS : c_int = 1034 ;
50
-
51
- pub const F_SEAL_SEAL : c_int = 1 ;
52
- pub const F_SEAL_SHRINK : c_int = 2 ;
53
- pub const F_SEAL_GROW : c_int = 4 ;
54
- pub const F_SEAL_WRITE : c_int = 8 ;
55
- }
56
-
57
- #[ cfg( any( target_os = "macos" , target_os = "freebsd" , target_os = "dragonfly" , target_os = "ios" , target_os = "openbsd" , target_os = "netbsd" ) ) ]
58
- mod os {
59
- use libc:: { c_int, c_short, off_t, pid_t} ;
60
-
61
- #[ repr( C ) ]
62
- #[ derive( Clone , Copy , Default , Debug ) ]
63
- pub struct flock {
64
- pub l_start : off_t ,
65
- pub l_len : off_t ,
66
- pub l_pid : pid_t ,
67
- pub l_type : c_short ,
68
- pub l_whence : c_short ,
69
-
70
- // not actually here, but brings in line with freebsd
71
- pub l_sysid : c_int ,
72
- }
15
+ use libc:: c_int;
73
16
74
- pub const F_DUPFD : c_int = 0 ;
75
- #[ cfg( not( any( target_os = "dragonfly" , target_os = "netbsd" ) ) ) ]
76
- pub const F_DUPFD_CLOEXEC : c_int = 67 ;
77
- #[ cfg( target_os = "dragonfly" ) ]
78
- pub const F_DUPFD_CLOEXEC : c_int = 17 ;
79
- #[ cfg( target_os = "netbsd" ) ]
80
- pub const F_DUPFD_CLOEXEC : c_int = 12 ;
81
- pub const F_GETFD : c_int = 1 ;
82
- pub const F_SETFD : c_int = 2 ;
83
- pub const F_GETFL : c_int = 3 ;
84
- pub const F_SETFL : c_int = 4 ;
85
- #[ cfg( target_os = "netbsd" ) ]
86
- pub const F_GETOWN : c_int = 5 ;
87
- #[ cfg( target_os = "netbsd" ) ]
88
- pub const F_SETOWN : c_int = 6 ;
89
- pub const F_GETLK : c_int = 7 ;
90
- pub const F_SETLK : c_int = 8 ;
91
- pub const F_SETLKW : c_int = 9 ;
92
-
93
- #[ cfg( target_os = "netbsd" ) ]
94
- pub const F_CLOSEM : c_int = 10 ;
95
- #[ cfg( target_os = "netbsd" ) ]
96
- pub const F_MAXFD : c_int = 11 ;
97
- #[ cfg( target_os = "netbsd" ) ]
98
- pub const F_GETNOSIGPIPE : c_int = 13 ;
99
- #[ cfg( target_os = "netbsd" ) ]
100
- pub const F_SETNOSIGPIPE : c_int = 14 ;
101
- }
17
+ pub const F_ADD_SEALS : c_int = 1033 ;
18
+ pub const F_GET_SEALS : c_int = 1034 ;
102
19
}
103
20
104
21
pub fn open < P : ?Sized + NixPath > ( path : & P , oflag : OFlag , mode : Mode ) -> Result < RawFd > {
105
22
let fd = try!( path. with_nix_path ( |cstr| {
106
- unsafe { ffi :: open ( cstr. as_ptr ( ) , oflag. bits ( ) , mode. bits ( ) as c_uint ) }
23
+ unsafe { libc :: open ( cstr. as_ptr ( ) , oflag. bits ( ) , mode. bits ( ) as c_uint ) }
107
24
} ) ) ;
108
25
109
26
Errno :: result ( fd)
@@ -116,15 +33,15 @@ pub enum FcntlArg<'a> {
116
33
F_SETFD ( FdFlag ) , // FD_FLAGS
117
34
F_GETFL ,
118
35
F_SETFL ( OFlag ) , // O_NONBLOCK
119
- F_SETLK ( & ' a flock ) ,
120
- F_SETLKW ( & ' a flock ) ,
121
- F_GETLK ( & ' a mut flock ) ,
36
+ F_SETLK ( & ' a libc :: flock ) ,
37
+ F_SETLKW ( & ' a libc :: flock ) ,
38
+ F_GETLK ( & ' a mut libc :: flock ) ,
122
39
#[ cfg( any( target_os = "linux" , target_os = "android" ) ) ]
123
- F_OFD_SETLK ( & ' a flock ) ,
40
+ F_OFD_SETLK ( & ' a libc :: flock ) ,
124
41
#[ cfg( any( target_os = "linux" , target_os = "android" ) ) ]
125
- F_OFD_SETLKW ( & ' a flock ) ,
42
+ F_OFD_SETLKW ( & ' a libc :: flock ) ,
126
43
#[ cfg( any( target_os = "linux" , target_os = "android" ) ) ]
127
- F_OFD_GETLK ( & ' a mut flock ) ,
44
+ F_OFD_GETLK ( & ' a mut libc :: flock ) ,
128
45
#[ cfg( target_os = "linux" ) ]
129
46
F_ADD_SEALS ( SealFlag ) ,
130
47
#[ cfg( target_os = "linux" ) ]
@@ -139,19 +56,19 @@ pub fn fcntl(fd: RawFd, arg: FcntlArg) -> Result<c_int> {
139
56
140
57
let res = unsafe {
141
58
match arg {
142
- F_DUPFD ( rawfd) => ffi :: fcntl ( fd, ffi :: F_DUPFD , rawfd) ,
143
- F_DUPFD_CLOEXEC ( rawfd) => ffi :: fcntl ( fd, ffi :: F_DUPFD_CLOEXEC , rawfd) ,
144
- F_GETFD => ffi :: fcntl ( fd, ffi :: F_GETFD ) ,
145
- F_SETFD ( flag) => ffi :: fcntl ( fd, ffi :: F_SETFD , flag. bits ( ) ) ,
146
- F_GETFL => ffi :: fcntl ( fd, ffi :: F_GETFL ) ,
147
- F_SETFL ( flag) => ffi :: fcntl ( fd, ffi :: F_SETFL , flag. bits ( ) ) ,
148
- F_SETLK ( flock) => ffi :: fcntl ( fd, ffi :: F_SETLK , flock) ,
149
- F_SETLKW ( flock) => ffi :: fcntl ( fd, ffi :: F_SETLKW , flock) ,
150
- F_GETLK ( flock) => ffi :: fcntl ( fd, ffi :: F_GETLK , flock) ,
59
+ F_DUPFD ( rawfd) => libc :: fcntl ( fd, libc :: F_DUPFD , rawfd) ,
60
+ F_DUPFD_CLOEXEC ( rawfd) => libc :: fcntl ( fd, libc :: F_DUPFD_CLOEXEC , rawfd) ,
61
+ F_GETFD => libc :: fcntl ( fd, libc :: F_GETFD ) ,
62
+ F_SETFD ( flag) => libc :: fcntl ( fd, libc :: F_SETFD , flag. bits ( ) ) ,
63
+ F_GETFL => libc :: fcntl ( fd, libc :: F_GETFL ) ,
64
+ F_SETFL ( flag) => libc :: fcntl ( fd, libc :: F_SETFL , flag. bits ( ) ) ,
65
+ F_SETLK ( flock) => libc :: fcntl ( fd, libc :: F_SETLK , flock) ,
66
+ F_SETLKW ( flock) => libc :: fcntl ( fd, libc :: F_SETLKW , flock) ,
67
+ F_GETLK ( flock) => libc :: fcntl ( fd, libc :: F_GETLK , flock) ,
151
68
#[ cfg( target_os = "linux" ) ]
152
- F_ADD_SEALS ( flag) => ffi :: fcntl ( fd, ffi:: F_ADD_SEALS , flag. bits ( ) ) ,
69
+ F_ADD_SEALS ( flag) => libc :: fcntl ( fd, ffi:: F_ADD_SEALS , flag. bits ( ) ) ,
153
70
#[ cfg( target_os = "linux" ) ]
154
- F_GET_SEALS => ffi :: fcntl ( fd, ffi:: F_GET_SEALS ) ,
71
+ F_GET_SEALS => libc :: fcntl ( fd, ffi:: F_GET_SEALS ) ,
155
72
#[ cfg( any( target_os = "linux" , target_os = "android" ) ) ]
156
73
_ => unimplemented ! ( )
157
74
}
@@ -174,12 +91,12 @@ pub fn flock(fd: RawFd, arg: FlockArg) -> Result<()> {
174
91
175
92
let res = unsafe {
176
93
match arg {
177
- LockShared => ffi :: libc_flock ( fd, ffi :: LOCK_SH ) ,
178
- LockExclusive => ffi :: libc_flock ( fd, ffi :: LOCK_EX ) ,
179
- Unlock => ffi :: libc_flock ( fd, ffi :: LOCK_UN ) ,
180
- LockSharedNonblock => ffi :: libc_flock ( fd, ffi :: LOCK_SH | ffi :: LOCK_NB ) ,
181
- LockExclusiveNonblock => ffi :: libc_flock ( fd, ffi :: LOCK_EX | ffi :: LOCK_NB ) ,
182
- UnlockNonblock => ffi :: libc_flock ( fd, ffi :: LOCK_UN | ffi :: LOCK_NB ) ,
94
+ LockShared => libc :: flock ( fd, libc :: LOCK_SH ) ,
95
+ LockExclusive => libc :: flock ( fd, libc :: LOCK_EX ) ,
96
+ Unlock => libc :: flock ( fd, libc :: LOCK_UN ) ,
97
+ LockSharedNonblock => libc :: flock ( fd, libc :: LOCK_SH | libc :: LOCK_NB ) ,
98
+ LockExclusiveNonblock => libc :: flock ( fd, libc :: LOCK_EX | libc :: LOCK_NB ) ,
99
+ UnlockNonblock => libc :: flock ( fd, libc :: LOCK_UN | libc :: LOCK_NB ) ,
183
100
}
184
101
} ;
185
102
0 commit comments