52#if defined (_RWSTD_NO_MKSTEMP) || !defined (_RWSTD_NO_PURE_C_HEADERS)
53# ifndef _RWSTD_NO_MKSTEMP_IN_LIBC
57# undef _RWSTD_NO_MKSTEMP
64# define P_tmpdir "/tmp/"
66# define P_tmpdir _P_tmpdir
71#if defined (_RWSTD_EDG_ECCP) && !defined (_WIN32)
82static int page_size ()
92 GetSystemInfo (&info);
98 size = getpagesize ();
121 char*
const fname = tempnam (
P_tmpdir,
".rwmemchk.tmp");
128 fd =
open (fname, O_RDWR | O_CREAT | _O_TEMPORARY, 0666);
140# define TMP_TEMPLATE P_tmpdir "/rwmemchk-XXXXXX"
159 size_t size = size_t (-1);
161 const int errno_save = errno;
165 if (
size_t (-1) == nbytes) {
171 static const size_t pgsz = page_size ();
174 const size_t pgoff = size_t (
addr) % pgsz;
177 nbytes = pgsz - pgoff;
181 for (
const char *pc =
static_cast<const char*
>(
addr); ; ) {
184 const size_t nwrote = write (fd, pc, nbytes);
186 if (nwrote == nbytes) {
189 const void*
const pnull = memchr (pc, 0, nbytes);
194 size =
static_cast<const char*
>(pnull)
195 -
static_cast<const char*
>(
addr) + 1;
202 else if (
size_t (-1) == nwrote &&
EINTR == errno) {
206 else if (nwrote < nbytes) {
220 const size_t nwrote = write (fd,
addr, nbytes);
222 if (nwrote == nbytes)
228 return size_t (
size);
int mkstemp(char *) _LIBC_THROWS()
size_t strchk(const char *str)
size_t memchk(const void *addr, size_t nbytes)
std::ostream & info() noexcept
replacement for std::cout for NeBuild logging.