Home | History | Annotate | Download | only in android
      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 
     49 inline _LIBCPP_INLINE_VISIBILITY float strtof_l(const char* __nptr, char** __endptr,
     50                                                 locale_t) {
     51   return ::strtof(__nptr, __endptr);
     52 }
     53 
     54 inline _LIBCPP_INLINE_VISIBILITY double strtod_l(const char* __nptr,
     55                                                  char** __endptr, locale_t) {
     56   return ::strtod(__nptr, __endptr);
     57 }
     58 
     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