(root)/
glibc-2.38/
stdlib/
strtold_l.c
       1  /* Copyright (C) 1999-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #include <math.h>
      19  #include <stdlib.h>
      20  #include <wchar.h>
      21  
      22  #ifdef USE_WIDE_CHAR
      23  # define STRING_TYPE	wchar_t
      24  # define STRTOLD	wcstold_l
      25  # define __STRTOLD	__wcstold_l
      26  # define __STRTOD	__wcstod_l
      27  #else
      28  # define STRING_TYPE	char
      29  # define STRTOLD	strtold_l
      30  # define __STRTOLD	__strtold_l
      31  # define __STRTOD	__strtod_l
      32  #endif
      33  
      34  #define INTERNAL(x) INTERNAL1(x)
      35  #define INTERNAL1(x) __##x##_internal
      36  
      37  extern double INTERNAL (__STRTOD) (const STRING_TYPE *, STRING_TYPE **,
      38  				   int, locale_t);
      39  
      40  /* There is no `long double' type, use the `double' implementations.  */
      41  long double
      42  INTERNAL (__STRTOLD) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
      43  		      int group, locale_t loc)
      44  {
      45    return INTERNAL (__STRTOD) (nptr, endptr, group, loc);
      46  }
      47  #ifndef USE_WIDE_CHAR
      48  libc_hidden_def (INTERNAL (__STRTOLD))
      49  #endif
      50  
      51  long double
      52  weak_function
      53  __STRTOLD (const STRING_TYPE *nptr, STRING_TYPE **endptr, locale_t loc)
      54  {
      55    return INTERNAL (__STRTOD) (nptr, endptr, 0, loc);
      56  }
      57  #if defined _LIBC
      58  libc_hidden_def (__STRTOLD)
      59  libc_hidden_ver (__STRTOLD, STRTOLD)
      60  #endif
      61  weak_alias (__STRTOLD, STRTOLD)