1 // -*- C++ -*-
2 //===------------------- support/android/locale_bionic.h ------------------===//
3 //
4 // The LLVM Compiler Infrastructure
5 //
6 // This file is dual licensed under the MIT and the University of Illinois Open
7 // Source Licenses. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
10
11 #ifndef _LIBCPP_SUPPORT_ANDROID_LOCALE_BIONIC_H
12 #define _LIBCPP_SUPPORT_ANDROID_LOCALE_BIONIC_H
13
14 #if defined(__BIONIC__)
15
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19
20 #include <stdlib.h>
21 #include <xlocale.h>
22
23 #ifdef __cplusplus
24 }
25 #endif
26
27 #if defined(__ANDROID__)
28
29 #include <support/xlocale/__posix_l_fallback.h>
30
31 // If we do not have this header, we are in a platform build rather than an NDK
32 // build, which will always be at least as new as the ToT NDK, in which case we
33 // don't need any of the inlines below since libc provides them.
34 #if __has_include(<android/ndk-version.h>)
35
36 #include <android/api-level.h>
37 #include <android/ndk-version.h>
38 // In NDK versions later than 16, locale-aware functions are provided by
39 // legacy_stdlib_inlines.h
40 #if __NDK_MAJOR__ <= 16
41 #if __ANDROID_API__ < 21
42 #include <support/xlocale/__strtonum_fallback.h>
43 #elif __ANDROID_API__ < 26
44
45 #if defined(__cplusplus)
46 extern "C" {
47 #endif
48
strtof_l(const char * __nptr,char ** __endptr,locale_t)49 inline _LIBCPP_INLINE_VISIBILITY float strtof_l(const char* __nptr, char** __endptr,
50 locale_t) {
51 return ::strtof(__nptr, __endptr);
52 }
53
strtod_l(const char * __nptr,char ** __endptr,locale_t)54 inline _LIBCPP_INLINE_VISIBILITY double strtod_l(const char* __nptr,
55 char** __endptr, locale_t) {
56 return ::strtod(__nptr, __endptr);
57 }
58
strtol_l(const char * __nptr,char ** __endptr,int __base,locale_t)59 inline _LIBCPP_INLINE_VISIBILITY long strtol_l(const char* __nptr, char** __endptr,
60 int __base, locale_t) {
61 return ::strtol(__nptr, __endptr, __base);
62 }
63
64 #if defined(__cplusplus)
65 }
66 #endif
67
68 #endif // __ANDROID_API__ < 26
69
70 #endif // __NDK_MAJOR__ <= 16
71 #endif // __has_include(<android/ndk-version.h>)
72 #endif // defined(__ANDROID__)
73
74 #endif // defined(__BIONIC__)
75 #endif // _LIBCPP_SUPPORT_ANDROID_LOCALE_BIONIC_H
76