diff options
author | Dan Albert <danalbert@google.com> | 2015-01-30 17:18:48 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-01-30 17:18:49 +0000 |
commit | 94335cc8e2f32638d9e38741ddabfd19a38e0840 (patch) | |
tree | 02269c699fdbd5ee653ecebe86da298e2c68df92 | |
parent | 542b94d9bf7eb3838b0582c02d7a1bf2e270af5a (diff) | |
parent | 466dbe444446da0a8729ae9ac7294f54276e29d7 (diff) | |
download | bionic-94335cc8e2f32638d9e38741ddabfd19a38e0840.zip bionic-94335cc8e2f32638d9e38741ddabfd19a38e0840.tar.gz bionic-94335cc8e2f32638d9e38741ddabfd19a38e0840.tar.bz2 |
Merge "Put back inline definitions if using an old API."
-rw-r--r-- | libc/include/android/legacy_errno_inlines.h | 43 | ||||
-rw-r--r-- | libc/include/android/legacy_signal_inlines.h | 98 | ||||
-rw-r--r-- | libc/include/android/legacy_stdlib_inlines.h | 64 | ||||
-rw-r--r-- | libc/include/android/legacy_sys_atomics_inlines.h | 72 | ||||
-rw-r--r-- | libc/include/android/legacy_sys_stat_inlines.h | 42 | ||||
-rw-r--r-- | libc/include/android/legacy_termios_inlines.h | 93 | ||||
-rw-r--r-- | libc/include/ctype.h | 58 | ||||
-rw-r--r-- | libc/include/errno.h | 4 | ||||
-rw-r--r-- | libc/include/signal.h | 16 | ||||
-rw-r--r-- | libc/include/stdlib.h | 24 | ||||
-rw-r--r-- | libc/include/sys/atomics.h | 45 | ||||
-rw-r--r-- | libc/include/sys/cdefs.h | 6 | ||||
-rw-r--r-- | libc/include/sys/stat.h | 6 | ||||
-rw-r--r-- | libc/include/termios.h | 4 |
14 files changed, 530 insertions, 45 deletions
diff --git a/libc/include/android/legacy_errno_inlines.h b/libc/include/android/legacy_errno_inlines.h new file mode 100644 index 0000000..71096fc --- /dev/null +++ b/libc/include/android/legacy_errno_inlines.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2015 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. + */ + +#ifndef _ANDROID_LEGACY_ERRNO_INLINES_H +#define _ANDROID_LEGACY_ERRNO_INLINES_H + +#include <sys/cdefs.h> + +__BEGIN_DECLS + +static __inline int __attribute__((deprecated)) __set_errno(int n) { + errno = n; + return -1; +} + +__END_DECLS + +#endif /* _ANDROID_LEGACY_ERRNO_INLINES_H */ diff --git a/libc/include/android/legacy_signal_inlines.h b/libc/include/android/legacy_signal_inlines.h new file mode 100644 index 0000000..1b6e687 --- /dev/null +++ b/libc/include/android/legacy_signal_inlines.h @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2015 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. + */ + +#ifndef _ANDROID_LEGACY_SIGNAL_INLINES_H_ +#define _ANDROID_LEGACY_SIGNAL_INLINES_H_ + +#include <string.h> +#include <sys/cdefs.h> + +__BEGIN_DECLS + +extern sighandler_t bsd_signal(int signum, sighandler_t handler); + +static __inline int sigismember(sigset_t *set, int signum) { + /* Signal numbers start at 1, but bit positions start at 0. */ + int bit = signum - 1; + const unsigned long *local_set = (const unsigned long *)set; + if (set == NULL || bit < 0 || bit >= (int)(8 * sizeof(sigset_t))) { + errno = EINVAL; + return -1; + } + return (int)((local_set[bit / LONG_BIT] >> (bit % LONG_BIT)) & 1); +} + +static __inline int sigaddset(sigset_t *set, int signum) { + /* Signal numbers start at 1, but bit positions start at 0. */ + int bit = signum - 1; + unsigned long *local_set = (unsigned long *)set; + if (set == NULL || bit < 0 || bit >= (int)(8 * sizeof(sigset_t))) { + errno = EINVAL; + return -1; + } + local_set[bit / LONG_BIT] |= 1UL << (bit % LONG_BIT); + return 0; +} + +static __inline int sigdelset(sigset_t *set, int signum) { + /* Signal numbers start at 1, but bit positions start at 0. */ + int bit = signum - 1; + unsigned long *local_set = (unsigned long *)set; + if (set == NULL || bit < 0 || bit >= (int)(8 * sizeof(sigset_t))) { + errno = EINVAL; + return -1; + } + local_set[bit / LONG_BIT] &= ~(1UL << (bit % LONG_BIT)); + return 0; +} + +static __inline int sigemptyset(sigset_t *set) { + if (set == NULL) { + errno = EINVAL; + return -1; + } + memset(set, 0, sizeof(sigset_t)); + return 0; +} + +static __inline int sigfillset(sigset_t *set) { + if (set == NULL) { + errno = EINVAL; + return -1; + } + memset(set, ~0, sizeof(sigset_t)); + return 0; +} + +static __inline sighandler_t signal(int s, sighandler_t f) { + return bsd_signal(s, f); +} + +__END_DECLS + +#endif /* _ANDROID_LEGACY_SIGNAL_INLINES_H_ */ diff --git a/libc/include/android/legacy_stdlib_inlines.h b/libc/include/android/legacy_stdlib_inlines.h new file mode 100644 index 0000000..58a2a9e --- /dev/null +++ b/libc/include/android/legacy_stdlib_inlines.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2015 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. + */ + +#ifndef _ANDROID_LEGACY_STDLIB_INLINES_H_ +#define _ANDROID_LEGACY_STDLIB_INLINES_H_ + +#include <sys/cdefs.h> + +__BEGIN_DECLS + +static __inline float strtof(const char *nptr, char **endptr) { + return (float)strtod(nptr, endptr); +} + +static __inline double atof(const char *nptr) { return (strtod(nptr, NULL)); } + +static __inline int abs(int __n) { return (__n < 0) ? -__n : __n; } + +static __inline long labs(long __n) { return (__n < 0L) ? -__n : __n; } + +static __inline long long llabs(long long __n) { + return (__n < 0LL) ? -__n : __n; +} + +static __inline int rand(void) { return (int)lrand48(); } + +static __inline void srand(unsigned int __s) { srand48(__s); } + +static __inline long random(void) { return lrand48(); } + +static __inline void srandom(unsigned int __s) { srand48(__s); } + +static __inline int grantpt(int __fd __attribute((unused))) { + return 0; /* devpts does this all for us! */ +} + +__END_DECLS + +#endif /* _ANDROID_LEGACY_STDLIB_INLINES_H_ */ diff --git a/libc/include/android/legacy_sys_atomics_inlines.h b/libc/include/android/legacy_sys_atomics_inlines.h new file mode 100644 index 0000000..85cbade --- /dev/null +++ b/libc/include/android/legacy_sys_atomics_inlines.h @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2015 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. + */ + +#ifndef _ANDROID_LEGACY_SYS_ATOMICS_INLINES_H_ +#define _ANDROID_LEGACY_SYS_ATOMICS_INLINES_H_ + +#include <sys/cdefs.h> + +__BEGIN_DECLS + +/* Note: atomic operations that were exported by the C library didn't + * provide any memory barriers, which created potential issues on + * multi-core devices. We now define them as inlined calls to + * GCC sync builtins, which always provide a full barrier. + * + * NOTE: The C library still exports atomic functions by the same + * name to ensure ABI stability for existing NDK machine code. + * + * If you are an NDK developer, we encourage you to rebuild your + * unmodified sources against this header as soon as possible. + */ +#define __ATOMIC_INLINE__ static __inline __attribute__((always_inline)) + +__ATOMIC_INLINE__ int __atomic_cmpxchg(int old, int _new, volatile int *ptr) { + /* We must return 0 on success */ + return __sync_val_compare_and_swap(ptr, old, _new) != old; +} + +__ATOMIC_INLINE__ int __atomic_swap(int _new, volatile int *ptr) { + int prev; + do { + prev = *ptr; + } while (__sync_val_compare_and_swap(ptr, prev, _new) != prev); + return prev; +} + +__ATOMIC_INLINE__ int __atomic_dec(volatile int *ptr) { + return __sync_fetch_and_sub(ptr, 1); +} + +__ATOMIC_INLINE__ int __atomic_inc(volatile int *ptr) { + return __sync_fetch_and_add(ptr, 1); +} + +__END_DECLS + +#endif /* _ANDROID_LEGACY_SYS_ATOMICS_INLINES_H_ */ diff --git a/libc/include/android/legacy_sys_stat_inlines.h b/libc/include/android/legacy_sys_stat_inlines.h new file mode 100644 index 0000000..f6d3c0f --- /dev/null +++ b/libc/include/android/legacy_sys_stat_inlines.h @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2015 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. + */ + +#ifndef _ANDROID_LEGACY_SYS_STAT_INLINES_H_ +#define _ANDROID_LEGACY_SYS_STAT_INLINES_H_ + +#include <sys/cdefs.h> + +__BEGIN_DECLS + +static __inline int mkfifo(const char *__p, mode_t __m) { + return mknod(__p, (__m & ~S_IFMT) | S_IFIFO, (dev_t)0); +} + +__END_DECLS + +#endif /* _ANDROID_LEGACY_SYS_STAT_INLINES_H_ */ diff --git a/libc/include/android/legacy_termios_inlines.h b/libc/include/android/legacy_termios_inlines.h new file mode 100644 index 0000000..fb61f27 --- /dev/null +++ b/libc/include/android/legacy_termios_inlines.h @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2015 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. + */ + +#ifndef _ANDROID_LEGACY_TERMIOS_INLINES_H_ +#define _ANDROID_LEGACY_TERMIOS_INLINES_H_ + +#include <linux/termios.h> +#include <sys/cdefs.h> +#include <sys/ioctl.h> +#include <sys/types.h> + +__BEGIN_DECLS + +static __inline int tcgetattr(int fd, struct termios *s) { + return ioctl(fd, TCGETS, s); +} + +static __inline int tcsetattr(int fd, int __opt, const struct termios *s) { + return ioctl(fd, __opt, (void *)s); +} + +static __inline int tcflow(int fd, int action) { + return ioctl(fd, TCXONC, (void *)(intptr_t)action); +} + +static __inline int tcflush(int fd, int __queue) { + return ioctl(fd, TCFLSH, (void *)(intptr_t)__queue); +} + +static __inline pid_t tcgetsid(int fd) { + pid_t _pid; + return ioctl(fd, TIOCGSID, &_pid) ? (pid_t)-1 : _pid; +} + +static __inline int tcsendbreak(int fd, int __duration) { + return ioctl(fd, TCSBRKP, (void *)(uintptr_t)__duration); +} + +static __inline speed_t cfgetospeed(const struct termios *s) { + return (speed_t)(s->c_cflag & CBAUD); +} + +static __inline int cfsetospeed(struct termios *s, speed_t speed) { + s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD); + return 0; +} + +static __inline speed_t cfgetispeed(const struct termios *s) { + return (speed_t)(s->c_cflag & CBAUD); +} + +static __inline int cfsetispeed(struct termios *s, speed_t speed) { + s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD); + return 0; +} + +static __inline void cfmakeraw(struct termios *s) { + s->c_iflag &= + ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON); + s->c_oflag &= ~OPOST; + s->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); + s->c_cflag &= ~(CSIZE | PARENB); + s->c_cflag |= CS8; +} + +__END_DECLS + +#endif /* _ANDROID_LEGACY_TERMIOS_INLINES_H_ */ diff --git a/libc/include/ctype.h b/libc/include/ctype.h index d05a952..83b5ba7 100644 --- a/libc/include/ctype.h +++ b/libc/include/ctype.h @@ -43,36 +43,37 @@ #include <sys/cdefs.h> #include <xlocale.h> -#define _CTYPE_U 0x01 -#define _CTYPE_L 0x02 -#define _CTYPE_D 0x04 -#define _CTYPE_S 0x08 -#define _CTYPE_P 0x10 -#define _CTYPE_C 0x20 -#define _CTYPE_X 0x40 -#define _CTYPE_B 0x80 -#define _CTYPE_R (_CTYPE_P|_CTYPE_U|_CTYPE_L|_CTYPE_D|_CTYPE_B) -#define _CTYPE_A (_CTYPE_L|_CTYPE_U) +#define _CTYPE_U 0x01 +#define _CTYPE_L 0x02 +#define _CTYPE_D 0x04 +#define _CTYPE_S 0x08 +#define _CTYPE_P 0x10 +#define _CTYPE_C 0x20 +#define _CTYPE_X 0x40 +#define _CTYPE_B 0x80 +#define _CTYPE_R (_CTYPE_P|_CTYPE_U|_CTYPE_L|_CTYPE_D|_CTYPE_B) +#define _CTYPE_A (_CTYPE_L|_CTYPE_U) __BEGIN_DECLS extern const char *_ctype_; #if defined(__GNUC__) || defined(_ANSI_LIBRARY) || defined(lint) -int isalnum(int); -int isalpha(int); -int iscntrl(int); -int isdigit(int); -int isgraph(int); -int islower(int); -int isprint(int); -int ispunct(int); -int isspace(int); -int isupper(int); -int isxdigit(int); -int tolower(int); -int toupper(int); +int isalnum(int); +int isalpha(int); +int iscntrl(int); +int isdigit(int); +int isgraph(int); +int islower(int); +int isprint(int); +int ispunct(int); +int isspace(int); +int isupper(int); +int isxdigit(int); +int tolower(int); +int toupper(int); +#if __ANDROID_API__ >= 21 int isalnum_l(int, locale_t); int isalpha_l(int, locale_t); int isblank_l(int, locale_t); @@ -87,17 +88,18 @@ int isupper_l(int, locale_t); int isxdigit_l(int, locale_t); int tolower_l(int, locale_t); int toupper_l(int, locale_t); +#endif /* __ANDROID_API__ >= 21 */ #if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __POSIX_VISIBLE > 200112 \ || __XPG_VISIBLE > 600 -int isblank(int); +int isblank(int); #endif #if __BSD_VISIBLE || __XPG_VISIBLE -int isascii(int); -int toascii(int); -int _tolower(int); -int _toupper(int); +int isascii(int); +int toascii(int); +int _tolower(int); +int _toupper(int); #endif /* __BSD_VISIBLE || __XPG_VISIBLE */ #endif /* __GNUC__ || _ANSI_LIBRARY || lint */ diff --git a/libc/include/errno.h b/libc/include/errno.h index 1a36b7a..82f4b42 100644 --- a/libc/include/errno.h +++ b/libc/include/errno.h @@ -46,6 +46,10 @@ extern volatile int* __errno(void) __pure2; /* a macro expanding to the errno l-value */ #define errno (*__errno()) +#if __ANDROID_API__ < 21 +#include <android/legacy_errno_inlines.h> +#endif + __END_DECLS #endif /* _ERRNO_H */ diff --git a/libc/include/signal.h b/libc/include/signal.h index 39d37e9..554e0ac 100644 --- a/libc/include/signal.h +++ b/libc/include/signal.h @@ -105,15 +105,15 @@ struct sigaction { extern int sigaction(int, const struct sigaction*, struct sigaction*); -extern sighandler_t signal(int, sighandler_t); +_BIONIC_NOT_BEFORE_21(extern sighandler_t signal(int, sighandler_t);) extern int siginterrupt(int, int); -extern int sigaddset(sigset_t*, int); -extern int sigdelset(sigset_t*, int); -extern int sigemptyset(sigset_t*); -extern int sigfillset(sigset_t*); -extern int sigismember(const sigset_t*, int); +_BIONIC_NOT_BEFORE_21(extern int sigaddset(sigset_t*, int);) +_BIONIC_NOT_BEFORE_21(extern int sigdelset(sigset_t*, int);) +_BIONIC_NOT_BEFORE_21(extern int sigemptyset(sigset_t*);) +_BIONIC_NOT_BEFORE_21(extern int sigfillset(sigset_t*);) +_BIONIC_NOT_BEFORE_21(extern int sigismember(const sigset_t*, int);) extern int sigpending(sigset_t*) __nonnull((1)); extern int sigprocmask(int, const sigset_t*, sigset_t*); @@ -136,6 +136,10 @@ extern int sigqueue(pid_t, int, const union sigval); extern int sigtimedwait(const sigset_t*, siginfo_t*, const struct timespec*); extern int sigwaitinfo(const sigset_t*, siginfo_t*); +#if __ANDROID_API__ < 21 +#include <android/legacy_signal_inlines.h> +#endif + __END_DECLS #endif /* _SIGNAL_H_ */ diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h index dca4474..cbd7aeb 100644 --- a/libc/include/stdlib.h +++ b/libc/include/stdlib.h @@ -76,10 +76,10 @@ extern unsigned long long strtoull(const char *, char **, int); extern int posix_memalign(void **memptr, size_t alignment, size_t size); -extern double atof(const char*); +_BIONIC_NOT_BEFORE_21(extern double atof(const char*);) extern double strtod(const char*, char**) __LIBC_ABI_PUBLIC__; -extern float strtof(const char*, char**) __LIBC_ABI_PUBLIC__; +_BIONIC_NOT_BEFORE_21(extern float strtof(const char*, char**) __LIBC_ABI_PUBLIC__;) extern long double strtold(const char*, char**) __LIBC_ABI_PUBLIC__; extern long double strtold_l(const char *, char **, locale_t) __LIBC_ABI_PUBLIC__; @@ -90,9 +90,9 @@ extern int atoi(const char*) __purefunc; extern long atol(const char*) __purefunc; extern long long atoll(const char*) __purefunc; -extern int abs(int) __pure2; -extern long labs(long) __pure2; -extern long long llabs(long long) __pure2; +_BIONIC_NOT_BEFORE_21(extern int abs(int) __pure2;) +_BIONIC_NOT_BEFORE_21(extern long labs(long) __pure2;) +_BIONIC_NOT_BEFORE_21(extern long long llabs(long long) __pure2;) extern char * realpath(const char *path, char *resolved); extern int system(const char *string); @@ -109,9 +109,9 @@ void arc4random_buf(void*, size_t); #define RAND_MAX 0x7fffffff -int rand(void); +_BIONIC_NOT_BEFORE_21(int rand(void);) int rand_r(unsigned int*); -void srand(unsigned int); +_BIONIC_NOT_BEFORE_21(void srand(unsigned int);) double drand48(void); double erand48(unsigned short[3]); @@ -124,12 +124,12 @@ unsigned short* seed48(unsigned short[3]); void srand48(long); char* initstate(unsigned int, char*, size_t); -long random(void); +_BIONIC_NOT_BEFORE_21(long random(void);) char* setstate(char*); -void srandom(unsigned int); +_BIONIC_NOT_BEFORE_21(void srandom(unsigned int);) int getpt(void); -int grantpt(int); +_BIONIC_NOT_BEFORE_21(int grantpt(int);) int posix_openpt(int); char* ptsname(int); int ptsname_r(int, char*, size_t); @@ -172,6 +172,10 @@ extern size_t wcstombs(char *, const wchar_t *, size_t); extern size_t __ctype_get_mb_cur_max(void); #define MB_CUR_MAX __ctype_get_mb_cur_max() +#if __ANDROID_API__ < 21 +#include <android/legacy_stdlib_inlines.h> +#endif + __END_DECLS #endif /* _STDLIB_H */ diff --git a/libc/include/sys/atomics.h b/libc/include/sys/atomics.h new file mode 100644 index 0000000..38ab366 --- /dev/null +++ b/libc/include/sys/atomics.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2015 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. + */ + +#ifndef _SYS_ATOMICS_H_ +#define _SYS_ATOMICS_H_ + +/* + * These got proper out of line definitions in L. Putting the inline definitions + * back for old targets brings us closer to being able to use one set of headers + * for all API levels. + * + * The other inlines we put back went in to their appropriate headers, but the + * sys/atomics.h header was removed, so we'll just add these somewhere we can be + * sure they will be included. + */ +#if __ANDROID_API__ < 21 +#include <android/legacy_sys_atomics_inlines.h> +#endif + +#endif /* _SYS_ATOMICS_H_ */ diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h index 21d59fa..48763d7 100644 --- a/libc/include/sys/cdefs.h +++ b/libc/include/sys/cdefs.h @@ -556,4 +556,10 @@ /* Used to rename functions so that the compiler emits a call to 'x' rather than the function this was applied to. */ #define __RENAME(x) __asm__(#x) +#if __ANDROID_API__ >= 21 +#define _BIONIC_NOT_BEFORE_21(x) x +#else +#define _BIONIC_NOT_BEFORE_21(x) +#endif /* __ANDROID_API__ >= 21 */ + #endif /* !_SYS_CDEFS_H_ */ diff --git a/libc/include/sys/stat.h b/libc/include/sys/stat.h index eb9bf2e..c22516f 100644 --- a/libc/include/sys/stat.h +++ b/libc/include/sys/stat.h @@ -171,7 +171,7 @@ mode_t umask(mode_t mode) { } #endif /* defined(__BIONIC_FORTIFY) */ -extern int mkfifo(const char*, mode_t); +_BIONIC_NOT_BEFORE_21(extern int mkfifo(const char*, mode_t);) extern int mkfifoat(int, const char*, mode_t); extern int fchmodat(int, const char*, mode_t, int); @@ -183,6 +183,10 @@ extern int mknodat(int, const char*, mode_t, dev_t); extern int utimensat(int fd, const char *path, const struct timespec times[2], int flags); extern int futimens(int fd, const struct timespec times[2]); +#if __ANDROID_API__ < 21 +#include <android/legacy_sys_stat_inlines.h> +#endif + __END_DECLS #endif /* _SYS_STAT_H_ */ diff --git a/libc/include/termios.h b/libc/include/termios.h index b9685ca..683fde2 100644 --- a/libc/include/termios.h +++ b/libc/include/termios.h @@ -35,6 +35,7 @@ __BEGIN_DECLS +#if __ANDROID_API__ >= 21 speed_t cfgetispeed(const struct termios*); speed_t cfgetospeed(const struct termios*); void cfmakeraw(struct termios*); @@ -48,6 +49,9 @@ int tcgetattr(int, struct termios*); pid_t tcgetsid(int); int tcsendbreak(int, int); int tcsetattr(int, int, const struct termios*); +#else +#include <android/legacy_termios_inlines.h> +#endif __END_DECLS |