(root)/
tar-1.35/
gnu/
strtoimax.c
       1  /* Convert string representation of a number into an intmax_t value.
       2  
       3     Copyright (C) 1999, 2001-2004, 2006, 2009-2023 Free Software Foundation,
       4     Inc.
       5  
       6     This file is free software: you can redistribute it and/or modify
       7     it under the terms of the GNU Lesser General Public License as
       8     published by the Free Software Foundation, either version 3 of the
       9     License, or (at your option) any later version.
      10  
      11     This file is distributed in the hope that it will be useful,
      12     but WITHOUT ANY WARRANTY; without even the implied warranty of
      13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14     GNU Lesser General Public License for more details.
      15  
      16     You should have received a copy of the GNU Lesser General Public License
      17     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
      18  
      19  /* Written by Paul Eggert. */
      20  
      21  #include <config.h>
      22  
      23  /* Verify interface.  */
      24  #include <inttypes.h>
      25  
      26  #include <stdlib.h>
      27  
      28  #ifdef UNSIGNED
      29  # ifndef HAVE_DECL_STRTOULL
      30  "this configure-time declaration test was not run"
      31  # endif
      32  # if !HAVE_DECL_STRTOULL
      33  unsigned long long int strtoull (char const *, char **, int);
      34  # endif
      35  
      36  #else
      37  
      38  # ifndef HAVE_DECL_STRTOLL
      39  "this configure-time declaration test was not run"
      40  # endif
      41  # if !HAVE_DECL_STRTOLL
      42  long long int strtoll (char const *, char **, int);
      43  # endif
      44  #endif
      45  
      46  #ifdef UNSIGNED
      47  # define Int uintmax_t
      48  # define Strtoimax strtoumax
      49  # define Strtol strtoul
      50  # define Strtoll strtoull
      51  # define Unsigned unsigned
      52  #else
      53  # define Int intmax_t
      54  # define Strtoimax strtoimax
      55  # define Strtol strtol
      56  # define Strtoll strtoll
      57  # define Unsigned
      58  #endif
      59  
      60  Int
      61  Strtoimax (char const *ptr, char **endptr, int base)
      62  {
      63    static_assert (sizeof (Int) == sizeof (Unsigned long int)
      64                   || sizeof (Int) == sizeof (Unsigned long long int));
      65  
      66    if (sizeof (Int) != sizeof (Unsigned long int))
      67      return Strtoll (ptr, endptr, base);
      68  
      69    return Strtol (ptr, endptr, base);
      70  }