@@ -8,7 +8,7 @@ use crate::Result;
8
8
#[ cfg( feature = "fs" ) ]
9
9
use crate :: { fcntl:: OFlag , sys:: stat:: Mode } ;
10
10
use libc:: { self , c_int, c_void, off_t, size_t} ;
11
- use std:: os:: unix:: io:: RawFd ;
11
+ use std:: { os:: unix:: io:: RawFd , num :: NonZeroUsize } ;
12
12
13
13
libc_bitflags ! {
14
14
/// Desired memory protection of a memory mapping.
@@ -417,14 +417,19 @@ pub fn munlockall() -> Result<()> {
417
417
///
418
418
/// [`mmap(2)`]: https://man7.org/linux/man-pages/man2/mmap.2.html
419
419
pub unsafe fn mmap (
420
- addr : * mut c_void ,
420
+ addr : Option < NonZeroUsize > ,
421
421
length : size_t ,
422
422
prot : ProtFlags ,
423
423
flags : MapFlags ,
424
424
fd : RawFd ,
425
425
offset : off_t ,
426
426
) -> Result < * mut c_void > {
427
- let ret = libc:: mmap ( addr, length, prot. bits ( ) , flags. bits ( ) , fd, offset) ;
427
+ let ptr = addr. map_or (
428
+ std:: ptr:: null_mut ( ) ,
429
+ |a| usize:: from ( a) as * mut c_void
430
+ ) ;
431
+
432
+ let ret = libc:: mmap ( ptr, length, prot. bits ( ) , flags. bits ( ) , fd, offset) ;
428
433
429
434
if ret == libc:: MAP_FAILED {
430
435
Err ( Errno :: last ( ) )
@@ -516,7 +521,7 @@ pub unsafe fn madvise(
516
521
/// # use std::ptr;
517
522
/// const ONE_K: size_t = 1024;
518
523
/// let mut slice: &mut [u8] = unsafe {
519
- /// let mem = mmap(ptr::null_mut() , ONE_K, ProtFlags::PROT_NONE,
524
+ /// let mem = mmap(None , ONE_K, ProtFlags::PROT_NONE,
520
525
/// MapFlags::MAP_ANON | MapFlags::MAP_PRIVATE, -1, 0).unwrap();
521
526
/// mprotect(mem, ONE_K, ProtFlags::PROT_READ | ProtFlags::PROT_WRITE).unwrap();
522
527
/// std::slice::from_raw_parts_mut(mem as *mut u8, ONE_K)
0 commit comments