#if !defined ISO && !defined ISO99 && !defined ISO11
constant PROT_READ
constant PROT_WRITE
constant PROT_EXEC
constant PROT_NONE

constant MAP_SHARED
constant MAP_PRIVATE
constant MAP_FIXED

constant MS_ASYNC
constant MS_SYNC
constant MS_INVALIDATE

constant MCL_CURRENT
constant MCL_FUTURE

constant MAP_FAILED

# if !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
constant POSIX_MADV_NORMAL
constant POSIX_MADV_SEQUENTIAL
constant POSIX_MADV_RANDOM
constant POSIX_MADV_WILLNEED
constant POSIX_MADV_DONTNEED

optional-constant POSIX_TYPED_MEM_ALLOCATE
optional-constant POSIX_TYPED_MEM_ALLOCATE_CONTIG
optional-constant POSIX_TYPED_MEM_MAP_ALLOCATABLE

type mode_t

optional-type {struct posix_typedmem_info}
optional-element {struct posix_typedmem_info} size_t posix_tmi_length

function int posix_madvise (void*, size_t, int)
optional-function int posix_mem_offset (const void*, size_t, off_t*, size_t*, int*)
optional-function int posix_typed_mem_get_info (int, struct posix_typed_mem_info*)
optional-function int posix_typed_mem_open (const char*, int, int)
# endif

type size_t
type off_t

function int mlock (const void*, size_t)
function int mlockall (int)
function {void*} mmap (void*, size_t, int, int, int, off_t)
function int mprotect (void*, size_t, int)
function int msync (void*, size_t, int)
function int munlock (const void*, size_t)
function int munlockall (void)
function int munmap (void*, size_t)
function int shm_open (const char*, int, mode_t)
function int shm_unlink (const char*)

allow shm_*
allow MAP_*
allow MCL_*
allow MS_*
allow PROT_*
allow *_t
#endif
