51# if defined (_RWSTD_OS_LINUX) && !defined (__USE_BSD)
57# include <sys/types.h>
63# define GETPAGESIZE() getpagesize ()
65# define GETPAGESIZE() sysconf (_SC_PAGESIZE)
68# define GETPAGESIZE() sysconf (_SC_PAGE_SIZE)
83#ifndef _RWSTD_PROT_READ
84# define _RWSTD_PROT_READ -1
87#ifndef _RWSTD_PROT_WRITE
88# define _RWSTD_PROT_WRITE 0
92#define DIST(addr1, addr2) \
93 ( _RWSTD_REINTERPRET_CAST (const char*, addr1) \
94 - _RWSTD_REINTERPRET_CAST (const char*, addr2))
100__rw_memattr (
const void *
addr, _RWSTD_SIZE_T nbytes,
int attr)
109 const int errno_save = errno;
112 static const _RWSTD_SIZE_T pgsz = size_t (
GETPAGESIZE ());
124 _RWSTD_SIZE_T npages = nbytes ? nbytes / pgsz + 1 : 0;
126 for (
size_t i = 0;
i < npages; ++
i) {
130# ifdef _RWSTD_OS_SUNOS
136 if (-1 == mincore (next, 1, &dummy)) {
138 const int err = errno;
142 return next == page ? -1 :
DIST (next,
addr);
145# elif defined (_RWSTD_OS_OSF1)
148 if (-1 == mvalid (next, 1, PROT_READ)) {
150 const int err = errno;
154 return next == page ? -1 :
DIST (next,
addr);
157# elif defined (_RWSTD_OS_IRIX64)
162 if (-1 == msync (next, 1, MS_ASYNC)) {
164 const int err = errno;
168 return next == page ? -1 :
DIST (next,
addr);
171# elif !defined (_RWSTD_NO_MADVISE)
173# ifdef _RWSTD_OS_IRIX64
175 const int advice = MADV_DONTNEED;
177 const int advice = MADV_WILLNEED;
183 if (-1 == madvise (next, 1, advice)) {
185 const int err = errno;
190# ifdef _RWSTD_OS_LINUX
202 return next == page ? -1 :
DIST (next,
addr);
209 if (_RWSTD_SIZE_MAX == nbytes) {
219 const _RWSTD_SIZE_T maxpage =
220 next == page ? pgsz -
DIST (
addr, next) : pgsz;
222 const void*
const pnul =
223 memchr (next == page ?
addr : next,
'\0', maxpage);
227 npages = nbytes / pgsz + 1;
239 if (_RWSTD_SIZE_MAX == nbytes) {
249 attr &= ~_RWSTD_PROT_READ;
const void * bad_address(size_t size)
#define _RWSTD_REINTERPRET_CAST(T, x)
#define _RWSTD_UNUSED(arg)
#define _RWSTD_STATIC_CAST(T, x)
#define _RWSTD_NAMESPACE(name)
#define _RWSTD_CONST_CAST(T, x)
#define _RWSTD_PROT_WRITE
#define DIST(addr1, addr2)