]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/pkg/libc_backends/lib/l4re_file/mmap.cc
update
[l4.git] / l4 / pkg / libc_backends / lib / l4re_file / mmap.cc
index f0db54612af9c95466aca63dbc226a6853e74b36..fb5d09c4f466c4d296bcd89abbe41985238d93ba 100644 (file)
@@ -64,11 +64,24 @@ L4B_REDIRECT_3(int, mprotect, void *, size_t, int);
 L4B_REDIRECT_3(int, madvise, void *, size_t, int);
 L4B_REDIRECT_3(int, msync, void *, size_t, int);
 
-void *mremap(void *old_address, size_t old_size, size_t new_size,
-             int flags) L4_NOTHROW
+void *mremap(void *old_addr, size_t old_size, size_t new_size,
+             int flags, ...) L4_NOTHROW
 {
-  printf("mremap(%p, %zd, %zd, %x) called: unimplemented!\n",
-         old_address, old_size, new_size, flags);
-  errno = EINVAL;
-  return MAP_FAILED;
+  void *resptr;
+  if (flags & MREMAP_FIXED)
+    {
+      va_list a;
+      va_start(a, flags);
+      resptr = va_arg(a, void *);
+      va_end(a);
+    }
+
+  int r = L4B(mremap(old_addr, old_size, new_size, flags, &resptr));
+  if (r < 0)
+    {
+      errno = -r;
+      return MAP_FAILED;
+    }
+
+  return resptr;
 }