* bytes of the value 0 will replace the "bad page", allowing the process
* to continue and allow its own parsing error detection to safely abort
* the operation without the process falling apart.
- *
+ *
* If you disable mmap safety, the SIGBUS handler will be restored to its
* default handler. Note that eina_file_map_all() and eina_file_map_new()
* will automatically enable mmap safety as they provide an mmaped file IO
* layer, and rely on mmap to not fail for any part of the file.
- *
+ *
* If you set up your own SIGBUS handler, then this will effectively disable
* the safe mmap handling and make you liable to crashes on IO to or from
* such "damaged files" that would take down your process.
if (siginfo->si_code == BUS_ADRALN)
{
ERR("Unaligned memory access. SIGBUS!!!");
- errno = perrno;
+ errno = perrno;
abort();
}
/* send this to stderr - not eina_log. Specifically want this on stderr */
/* mmap a pzge of zero's from /dev/zero in there */
if (mmap(addr, _eina_mmap_pagesize,
PROT_READ | PROT_WRITE | PROT_EXEC,
- MAP_PRIVATE | MAP_FIXED,
+ MAP_PRIVATE | MAP_FIXED,
_eina_mmap_zero_fd, 0) == MAP_FAILED)
{
/* mmap of /dev/zero failed :( */
perror("mmap");
ERR("Failed to mmap() /dev/zero in place of page. SIGBUS!!!");
- errno = perrno;
+ errno = perrno;
abort();
}
/* restore previous errno */
- errno = perrno;
+ errno = perrno;
}
#endif
return EINA_FALSE;
}
}
-
+
enabled = !!enabled;
-
+
if (mmap_safe == enabled) return mmap_safe;
if (enabled)
{
struct sigaction sa;
/* find out system page size the cleanest way we can */
-#ifdef _SC_PAGESIZE
+#ifdef _SC_PAGESIZE
_eina_mmap_pagesize = sysconf(_SC_PAGESIZE);
if (_eina_mmap_pagesize <= 0) return EINA_FALSE;
#else
}
mmap_safe = enabled;
return mmap_safe;
-#endif
+#endif
}
EAPI Eina_Bool