X-Git-Url: https://rtime.felk.cvut.cz/gitweb/l4.git/blobdiff_plain/d2904c5e14a2d9c6585ce5e2ff536584c91aeb99..72f8c5b742f7e0c579f3025c1e736ab5011c10ee:/l4/pkg/libc_backends/lib/l4re_file/mmap.cc diff --git a/l4/pkg/libc_backends/lib/l4re_file/mmap.cc b/l4/pkg/libc_backends/lib/l4re_file/mmap.cc index f0db54612..fb5d09c4f 100644 --- a/l4/pkg/libc_backends/lib/l4re_file/mmap.cc +++ b/l4/pkg/libc_backends/lib/l4re_file/mmap.cc @@ -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; }