(root)/
tar-1.35/
gnu/
timegm.c
       1  /* Convert UTC calendar time to simple time.  Like mktime but assumes UTC.
       2  
       3     Copyright (C) 1994-2023 Free Software Foundation, Inc.
       4     This file is part of the GNU C Library.
       5  
       6     The GNU C Library is free software; you can redistribute it and/or
       7     modify it under the terms of the GNU Lesser General Public
       8     License as published by the Free Software Foundation; either
       9     version 2.1 of the License, or (at your option) any later version.
      10  
      11     The GNU C Library 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 GNU
      14     Lesser General Public License for more details.
      15  
      16     You should have received a copy of the GNU Lesser General Public
      17     License along with the GNU C Library; if not, see
      18     <https://www.gnu.org/licenses/>.  */
      19  
      20  #ifndef _LIBC
      21  # include <libc-config.h>
      22  #endif
      23  
      24  #include <time.h>
      25  #include <errno.h>
      26  
      27  #include "mktime-internal.h"
      28  
      29  __time64_t
      30  __timegm64 (struct tm *tmp)
      31  {
      32    static mktime_offset_t gmtime_offset;
      33    tmp->tm_isdst = 0;
      34    return __mktime_internal (tmp, __gmtime64_r, &gmtime_offset);
      35  }
      36  
      37  #if defined _LIBC && __TIMESIZE != 64
      38  
      39  libc_hidden_def (__timegm64)
      40  
      41  time_t
      42  timegm (struct tm *tmp)
      43  {
      44    struct tm tm = *tmp;
      45    __time64_t t = __timegm64 (&tm);
      46    if (in_time_t_range (t))
      47      {
      48        *tmp = tm;
      49        return t;
      50      }
      51    else
      52      {
      53        __set_errno (EOVERFLOW);
      54        return -1;
      55      }
      56  }
      57  
      58  #endif