xref: /freebsd/contrib/diff/lib/posixver.c (revision 72d849c76142f00c8016fa1ba9d3e6c3eb5481c4)
1  /* Which POSIX version to conform to, for utilities.
2  
3     Copyright (C) 2002, 2003, 2004 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 2, or (at your option)
8     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 along
16     with this program; if not, write to the Free Software Foundation,
17     Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
18  
19  /* Written by Paul Eggert.  */
20  
21  #if HAVE_CONFIG_H
22  # include <config.h>
23  #endif
24  
25  #include "posixver.h"
26  
27  #include <limits.h>
28  #include <stdlib.h>
29  
30  #if HAVE_UNISTD_H
31  # include <unistd.h>
32  #endif
33  #ifndef _POSIX2_VERSION
34  # define _POSIX2_VERSION 0
35  #endif
36  
37  #ifndef DEFAULT_POSIX2_VERSION
38  # define DEFAULT_POSIX2_VERSION _POSIX2_VERSION
39  #endif
40  
41  /* The POSIX version that utilities should conform to.  The default is
42     specified by the system.  */
43  
44  int
45  posix2_version (void)
46  {
47    long int v = DEFAULT_POSIX2_VERSION;
48    char const *s = getenv ("_POSIX2_VERSION");
49  
50    if (s && *s)
51      {
52        char *e;
53        long int i = strtol (s, &e, 10);
54        if (! *e)
55  	v = i;
56      }
57  
58    return v < INT_MIN ? INT_MIN : v < INT_MAX ? v : INT_MAX;
59  }
60