summaryrefslogtreecommitdiff
path: root/src/stdlib/realloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/stdlib/realloc.c')
-rw-r--r--src/stdlib/realloc.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/src/stdlib/realloc.c b/src/stdlib/realloc.c
index 9b4d28ee..c1008457 100644
--- a/src/stdlib/realloc.c
+++ b/src/stdlib/realloc.c
@@ -1,19 +1,18 @@
-#include <stdlib.h>
+#if ((!defined _POSIX_C_SOURCE) || (_POSIX_C_SOURCE < 199309L))
+#undef _POSIX_C_SOURCE
+#define _POSIX_C_SOURCE 199309L
+#define POSIX_FORCED
+#endif
-#if defined _POSIX_C_SOURCE && 199305L <= _POSIX_C_SOURCE
-#include "sys/types.h"
-#include "fcntl.h"
-#include "sys/mman.h"
+#include <stdlib.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <sys/mman.h>
-#else
+#ifdef POSIX_FORCED
#include "_syscall.h"
-#define PROT_READ 0x1
-#define PROT_WRITE 0x2
-#define MAP_PRIVATE 0x2
-#define O_RDWR 0x2
-#define mmap(_a, _l, _p, _fl, _fd, _o) __syscall(__syscall_lookup(mmap), _a, _l, _p, _fl, _fd, _o)
-#define open(_p, _a, _m) __syscall(__syscall_lookup(open), _p, _a, _m)
-
+#define mmap(_a, _l, _p, _fl, _fd, _o) __scall6(mmap, _a, _l, _p, _fl, _fd, _o)
+#define open(_p, _a, _m) __scall3(open, _p, _a, _m)
#endif
/** change the amount of memory allocated **/
@@ -29,8 +28,11 @@ void * realloc(void * ptr, size_t size)
if (ptr == NULL) {
/* malloc() */
- return (void*)(long)mmap(NULL, size, PROT_READ | PROT_WRITE,
+ ptr = (void*)(long)mmap(NULL, size, PROT_READ | PROT_WRITE,
MAP_PRIVATE, backing, 0);
+ if (ptr == MAP_FAILED) {
+ return NULL;
+ }
} else if (size == 0) {
/* free() */
}