55use std:: io:: Error ;
66use std:: { ptr, slice} ;
77
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+ ) {
918 let page_size = page_size:: get ( ) ;
1019 let ptr = unsafe {
11- libc :: mmap (
20+ mmap (
1221 ptr:: null_mut ( ) ,
1322 page_size,
1423 libc:: PROT_READ | libc:: PROT_WRITE ,
1524 libc:: MAP_PRIVATE | libc:: MAP_ANONYMOUS ,
1625 -1 ,
17- 0 ,
26+ Default :: default ( ) ,
1827 )
1928 } ;
2029 assert ! ( !ptr. is_null( ) ) ;
@@ -35,40 +44,40 @@ fn test_mmap() {
3544
3645 // Test all of our error conditions
3746 let ptr = unsafe {
38- libc :: mmap (
47+ mmap (
3948 ptr:: null_mut ( ) ,
4049 page_size,
4150 libc:: PROT_READ | libc:: PROT_WRITE ,
4251 libc:: MAP_PRIVATE | libc:: MAP_SHARED , // Can't be both private and shared
4352 -1 ,
44- 0 ,
53+ Default :: default ( ) ,
4554 )
4655 } ;
4756 assert_eq ! ( ptr, libc:: MAP_FAILED ) ;
4857 assert_eq ! ( Error :: last_os_error( ) . raw_os_error( ) . unwrap( ) , libc:: EINVAL ) ;
4958
5059 let ptr = unsafe {
51- libc :: mmap (
60+ mmap (
5261 ptr:: null_mut ( ) ,
5362 0 , // Can't map no memory
5463 libc:: PROT_READ | libc:: PROT_WRITE ,
5564 libc:: MAP_PRIVATE | libc:: MAP_ANONYMOUS ,
5665 -1 ,
57- 0 ,
66+ Default :: default ( ) ,
5867 )
5968 } ;
6069 assert_eq ! ( ptr, libc:: MAP_FAILED ) ;
6170 assert_eq ! ( Error :: last_os_error( ) . raw_os_error( ) . unwrap( ) , libc:: EINVAL ) ;
6271
6372 let ptr = unsafe {
64- libc :: mmap (
73+ mmap (
6574 ptr:: invalid_mut ( page_size * 64 ) ,
6675 page_size,
6776 libc:: PROT_READ | libc:: PROT_WRITE ,
6877 // We don't support MAP_FIXED
6978 libc:: MAP_PRIVATE | libc:: MAP_ANONYMOUS | libc:: MAP_FIXED ,
7079 -1 ,
71- 0 ,
80+ Default :: default ( ) ,
7281 )
7382 } ;
7483 assert_eq ! ( ptr, libc:: MAP_FAILED ) ;
@@ -77,13 +86,13 @@ fn test_mmap() {
7786 // We don't support protections other than read+write
7887 for prot in [ libc:: PROT_NONE , libc:: PROT_EXEC , libc:: PROT_READ , libc:: PROT_WRITE ] {
7988 let ptr = unsafe {
80- libc :: mmap (
89+ mmap (
8190 ptr:: null_mut ( ) ,
8291 page_size,
8392 prot,
8493 libc:: MAP_PRIVATE | libc:: MAP_ANONYMOUS ,
8594 -1 ,
86- 0 ,
95+ Default :: default ( ) ,
8796 )
8897 } ;
8998 assert_eq ! ( ptr, libc:: MAP_FAILED ) ;
@@ -93,13 +102,13 @@ fn test_mmap() {
93102 // We report an error for mappings whose length cannot be rounded up to a multiple of
94103 // the page size.
95104 let ptr = unsafe {
96- libc :: mmap (
105+ mmap (
97106 ptr:: null_mut ( ) ,
98107 usize:: MAX - 1 ,
99108 libc:: PROT_READ | libc:: PROT_WRITE ,
100109 libc:: MAP_PRIVATE | libc:: MAP_ANONYMOUS ,
101110 -1 ,
102- 0 ,
111+ Default :: default ( ) ,
103112 )
104113 } ;
105114 assert_eq ! ( ptr, libc:: MAP_FAILED ) ;
@@ -163,7 +172,9 @@ fn test_mremap() {
163172}
164173
165174fn main ( ) {
166- test_mmap ( ) ;
175+ test_mmap ( libc:: mmap) ;
176+ #[ cfg( target_os = "linux" ) ]
177+ test_mmap ( libc:: mmap64) ;
167178 #[ cfg( target_os = "linux" ) ]
168179 test_mremap ( ) ;
169180}
0 commit comments