fix the mremap signature
The mremap definition was incorrect (unsigned long instead of int) and
it was missing the optional new_address parameter.
Change-Id: Ib9d0675aaa098c21617cedc9b2b8cf267be3aec4
diff --git a/libc/bionic/ioctl.c b/libc/bionic/ioctl.cpp
similarity index 85%
rename from libc/bionic/ioctl.c
rename to libc/bionic/ioctl.cpp
index 6dd95d0..db85132 100644
--- a/libc/bionic/ioctl.c
+++ b/libc/bionic/ioctl.cpp
@@ -25,19 +25,16 @@
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
+
+#include <sys/ioctl.h>
#include <stdarg.h>
-extern int __ioctl(int, int, void *);
+extern "C" int __ioctl(int, int, void *);
-int ioctl(int fd, int request, ...)
-{
- va_list ap;
- void * arg;
-
- va_start(ap, request);
- arg = va_arg(ap, void *);
- va_end(ap);
-
- return __ioctl(fd, request, arg);
+int ioctl(int fd, int request, ...) {
+ va_list ap;
+ va_start(ap, request);
+ void* arg = va_arg(ap, void*);
+ va_end(ap);
+ return __ioctl(fd, request, arg);
}
-
diff --git a/libc/bionic/ioctl.c b/libc/bionic/mremap.cpp
similarity index 71%
copy from libc/bionic/ioctl.c
copy to libc/bionic/mremap.cpp
index 6dd95d0..4892b1d 100644
--- a/libc/bionic/ioctl.c
+++ b/libc/bionic/mremap.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 The Android Open Source Project
+ * Copyright (C) 2015 The Android Open Source Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,19 +25,21 @@
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
+
+#include <sys/mman.h>
#include <stdarg.h>
-extern int __ioctl(int, int, void *);
+extern "C" void* ___mremap(void*, size_t, size_t, int, void*);
-int ioctl(int fd, int request, ...)
-{
+void* mremap(void* old_address, size_t old_size, size_t new_size, int flags, ...) {
+ void* new_address = nullptr;
+ // The optional argument is only valid if the MREMAP_FIXED flag is set,
+ // so we assume it's not present otherwise.
+ if ((flags & MREMAP_FIXED) != 0) {
va_list ap;
- void * arg;
-
- va_start(ap, request);
- arg = va_arg(ap, void *);
+ va_start(ap, flags);
+ new_address = va_arg(ap, void*);
va_end(ap);
-
- return __ioctl(fd, request, arg);
+ }
+ return ___mremap(old_address, old_size, new_size, flags, new_address);
}
-