able to unmap memory that may have be allocated using multiple calls
to MMAP, so long as they are adjacent.
-HAVE_MREMAP default: 1 on linux, else 0
+HAVE_MREMAP default: 1 on linux and NetBSD, else 0
If true realloc() uses mremap() to re-allocate large blocks and
extend or shrink allocation spaces.
#define MMAP_CLEARS 1
#endif /* MMAP_CLEARS */
#ifndef HAVE_MREMAP
-#ifdef linux
+#if defined(linux) || defined(__NetBSD__)
#define HAVE_MREMAP 1
-#else /* linux */
+#else /* linux || __NetBSD__ */
#define HAVE_MREMAP 0
-#endif /* linux */
+#endif /* linux || __NetBSD__ */
#endif /* HAVE_MREMAP */
#ifndef MALLOC_FAILURE_ACTION
#define MALLOC_FAILURE_ACTION errno = ENOMEM;
/*------------------------------ internal #includes ---------------------- */
-#ifdef WIN32
+#ifdef _MSC_VER
#pragma warning( disable : 4146 ) /* no "unsigned" warnings */
#endif /* WIN32 */
#endif /* HAVE_MMAP */
#if HAVE_MMAP && HAVE_MREMAP
+#if defined(linux)
#define CALL_MREMAP(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv))
+#elif defined(__NetBSD__)
+#define CALL_MREMAP(addr, osz, nsz, mv) mremap((addr), (osz), (addr), (nsz), (mv))
+#else
+#define CALL_MREMAP(addr, osz, nsz, mv) MFAIL
+#endif
#else /* HAVE_MMAP && HAVE_MREMAP */
#define CALL_MREMAP(addr, osz, nsz, mv) MFAIL
#endif /* HAVE_MMAP && HAVE_MREMAP */