(root)/
coreutils-9.4/
lib/
posixver.c
       1  /* Which POSIX version to conform to, for utilities.
       2  
       3     Copyright (C) 2002-2006, 2009-2023 Free Software Foundation, Inc.
       4  
       5     This program is free software: you can redistribute it and/or modify
       6     it under the terms of the GNU General Public License as published by
       7     the Free Software Foundation, either version 3 of the License, or
       8     (at your option) any later version.
       9  
      10     This program is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      13     GNU General Public License for more details.
      14  
      15     You should have received a copy of the GNU General Public License
      16     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
      17  
      18  /* Written by Paul Eggert.  */
      19  
      20  #include <config.h>
      21  
      22  #include "posixver.h"
      23  
      24  #include <limits.h>
      25  #include <stdlib.h>
      26  
      27  #include <unistd.h>
      28  #ifndef _POSIX2_VERSION
      29  # define _POSIX2_VERSION 0
      30  #endif
      31  
      32  #ifndef DEFAULT_POSIX2_VERSION
      33  # define DEFAULT_POSIX2_VERSION _POSIX2_VERSION
      34  #endif
      35  
      36  /* The POSIX version that utilities should conform to.  The default is
      37     specified by the system.  */
      38  
      39  int
      40  posix2_version (void)
      41  {
      42    long int v = DEFAULT_POSIX2_VERSION;
      43    char const *s = getenv ("_POSIX2_VERSION");
      44  
      45    if (s && *s)
      46      {
      47        char *e;
      48        long int i = strtol (s, &e, 10);
      49        if (! *e)
      50          v = i;
      51      }
      52  
      53    return v < INT_MIN ? INT_MIN : v < INT_MAX ? v : INT_MAX;
      54  }