diff options
author | Yabin Cui <yabinc@google.com> | 2014-12-04 21:30:43 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-12-04 21:30:43 +0000 |
commit | 295bc2b97041c5b06465effe1c60138a485495d5 (patch) | |
tree | d5ae2f0f0754303c9e0fd0aa7016fb52a19632c3 /libc | |
parent | e3e3feaf917c725c9c1194c930c8f11216d09ab1 (diff) | |
parent | 5afae64a1bac56638c6348f0c8f5e9d61b654029 (diff) | |
download | android_bionic-295bc2b97041c5b06465effe1c60138a485495d5.tar.gz android_bionic-295bc2b97041c5b06465effe1c60138a485495d5.tar.bz2 android_bionic-295bc2b97041c5b06465effe1c60138a485495d5.zip |
Merge "implement posix_madvise"
Diffstat (limited to 'libc')
-rw-r--r-- | libc/Android.mk | 1 | ||||
-rw-r--r-- | libc/bionic/posix_madvise.cpp | 42 | ||||
-rw-r--r-- | libc/include/machine/posix_limits.h | 2 | ||||
-rw-r--r-- | libc/include/sys/mman.h | 8 |
4 files changed, 52 insertions, 1 deletions
diff --git a/libc/Android.mk b/libc/Android.mk index 2270dc607..f04cf5cd5 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -153,6 +153,7 @@ libc_bionic_src_files := \ bionic/poll.cpp \ bionic/posix_fadvise.cpp \ bionic/posix_fallocate.cpp \ + bionic/posix_madvise.cpp \ bionic/posix_timers.cpp \ bionic/pthread_atfork.cpp \ bionic/pthread_attr.cpp \ diff --git a/libc/bionic/posix_madvise.cpp b/libc/bionic/posix_madvise.cpp new file mode 100644 index 000000000..d77be0178 --- /dev/null +++ b/libc/bionic/posix_madvise.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <errno.h> +#include <sys/mman.h> + +#include "private/ErrnoRestorer.h" + +int posix_madvise(void* addr, size_t len, int advice) { + ErrnoRestorer errno_restorer; + + // Don't call madvise() on POSIX_MADV_DONTNEED, it will make the space not available. + if (advice == POSIX_MADV_DONTNEED) { + return 0; + } + return (madvise(addr, len, advice) == 0 ? 0 : errno); +} diff --git a/libc/include/machine/posix_limits.h b/libc/include/machine/posix_limits.h index 939a1de5b..25887bef6 100644 --- a/libc/include/machine/posix_limits.h +++ b/libc/include/machine/posix_limits.h @@ -32,7 +32,7 @@ /* Any constant values here other than -1 or 200809L are explicitly specified by POSIX.1-2008. */ /* Keep it sorted. */ -#define _POSIX_ADVISORY_INFO -1 /* posix_madvise() not implemented */ +#define _POSIX_ADVISORY_INFO 200809L #define _POSIX_AIO_LISTIO_MAX 2 #define _POSIX_AIO_MAX 1 #define _POSIX_ARG_MAX 4096 diff --git a/libc/include/sys/mman.h b/libc/include/sys/mman.h index 09bf0d914..166322269 100644 --- a/libc/include/sys/mman.h +++ b/libc/include/sys/mman.h @@ -43,6 +43,12 @@ __BEGIN_DECLS #define MREMAP_MAYMOVE 1 #define MREMAP_FIXED 2 +#define POSIX_MADV_NORMAL MADV_NORMAL +#define POSIX_MADV_RANDOM MADV_RANDOM +#define POSIX_MADV_SEQUENTIAL MADV_SEQUENTIAL +#define POSIX_MADV_WILLNEED MADV_WILLNEED +#define POSIX_MADV_DONTNEED MADV_DONTNEED + extern void* mmap(void*, size_t, int, int, int, off_t); extern void* mmap64(void*, size_t, int, int, int, off64_t); extern int munmap(void*, size_t); @@ -61,6 +67,8 @@ extern int munlock(const void*, size_t); extern int mincore(void*, size_t, unsigned char*); +extern int posix_madvise(void*, size_t, int); + __END_DECLS #endif /* _SYS_MMAN_H_ */ |