5
5
use std:: io:: Error ;
6
6
use std:: { ptr, slice} ;
7
7
8
- fn test_mmap ( ) {
8
+ fn test_mmap < Offset : Default > (
9
+ mmap : unsafe extern "C" fn (
10
+ * mut libc:: c_void ,
11
+ libc:: size_t ,
12
+ libc:: c_int ,
13
+ libc:: c_int ,
14
+ libc:: c_int ,
15
+ Offset ,
16
+ ) -> * mut libc:: c_void ,
17
+ ) {
9
18
let page_size = page_size:: get ( ) ;
10
19
let ptr = unsafe {
11
- libc :: mmap (
20
+ mmap (
12
21
ptr:: null_mut ( ) ,
13
22
page_size,
14
23
libc:: PROT_READ | libc:: PROT_WRITE ,
15
24
libc:: MAP_PRIVATE | libc:: MAP_ANONYMOUS ,
16
25
-1 ,
17
- 0 ,
26
+ Default :: default ( ) ,
18
27
)
19
28
} ;
20
29
assert ! ( !ptr. is_null( ) ) ;
@@ -35,40 +44,40 @@ fn test_mmap() {
35
44
36
45
// Test all of our error conditions
37
46
let ptr = unsafe {
38
- libc :: mmap (
47
+ mmap (
39
48
ptr:: null_mut ( ) ,
40
49
page_size,
41
50
libc:: PROT_READ | libc:: PROT_WRITE ,
42
51
libc:: MAP_PRIVATE | libc:: MAP_SHARED , // Can't be both private and shared
43
52
-1 ,
44
- 0 ,
53
+ Default :: default ( ) ,
45
54
)
46
55
} ;
47
56
assert_eq ! ( ptr, libc:: MAP_FAILED ) ;
48
57
assert_eq ! ( Error :: last_os_error( ) . raw_os_error( ) . unwrap( ) , libc:: EINVAL ) ;
49
58
50
59
let ptr = unsafe {
51
- libc :: mmap (
60
+ mmap (
52
61
ptr:: null_mut ( ) ,
53
62
0 , // Can't map no memory
54
63
libc:: PROT_READ | libc:: PROT_WRITE ,
55
64
libc:: MAP_PRIVATE | libc:: MAP_ANONYMOUS ,
56
65
-1 ,
57
- 0 ,
66
+ Default :: default ( ) ,
58
67
)
59
68
} ;
60
69
assert_eq ! ( ptr, libc:: MAP_FAILED ) ;
61
70
assert_eq ! ( Error :: last_os_error( ) . raw_os_error( ) . unwrap( ) , libc:: EINVAL ) ;
62
71
63
72
let ptr = unsafe {
64
- libc :: mmap (
73
+ mmap (
65
74
ptr:: invalid_mut ( page_size * 64 ) ,
66
75
page_size,
67
76
libc:: PROT_READ | libc:: PROT_WRITE ,
68
77
// We don't support MAP_FIXED
69
78
libc:: MAP_PRIVATE | libc:: MAP_ANONYMOUS | libc:: MAP_FIXED ,
70
79
-1 ,
71
- 0 ,
80
+ Default :: default ( ) ,
72
81
)
73
82
} ;
74
83
assert_eq ! ( ptr, libc:: MAP_FAILED ) ;
@@ -77,13 +86,13 @@ fn test_mmap() {
77
86
// We don't support protections other than read+write
78
87
for prot in [ libc:: PROT_NONE , libc:: PROT_EXEC , libc:: PROT_READ , libc:: PROT_WRITE ] {
79
88
let ptr = unsafe {
80
- libc :: mmap (
89
+ mmap (
81
90
ptr:: null_mut ( ) ,
82
91
page_size,
83
92
prot,
84
93
libc:: MAP_PRIVATE | libc:: MAP_ANONYMOUS ,
85
94
-1 ,
86
- 0 ,
95
+ Default :: default ( ) ,
87
96
)
88
97
} ;
89
98
assert_eq ! ( ptr, libc:: MAP_FAILED ) ;
@@ -93,13 +102,13 @@ fn test_mmap() {
93
102
// We report an error for mappings whose length cannot be rounded up to a multiple of
94
103
// the page size.
95
104
let ptr = unsafe {
96
- libc :: mmap (
105
+ mmap (
97
106
ptr:: null_mut ( ) ,
98
107
usize:: MAX - 1 ,
99
108
libc:: PROT_READ | libc:: PROT_WRITE ,
100
109
libc:: MAP_PRIVATE | libc:: MAP_ANONYMOUS ,
101
110
-1 ,
102
- 0 ,
111
+ Default :: default ( ) ,
103
112
)
104
113
} ;
105
114
assert_eq ! ( ptr, libc:: MAP_FAILED ) ;
@@ -163,7 +172,9 @@ fn test_mremap() {
163
172
}
164
173
165
174
fn main ( ) {
166
- test_mmap ( ) ;
175
+ test_mmap ( libc:: mmap) ;
176
+ #[ cfg( target_os = "linux" ) ]
177
+ test_mmap ( libc:: mmap64) ;
167
178
#[ cfg( target_os = "linux" ) ]
168
179
test_mremap ( ) ;
169
180
}
0 commit comments