summaryrefslogtreecommitdiffstats
path: root/libc/include/sys/limits.h
blob: 2d0d11ebc801238379848ae25671494ec562adc4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
/* $OpenBSD: limits.h,v 1.6 2005/12/13 00:35:23 millert Exp $ */
/*
 * Copyright (c) 2002 Marc Espie.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE OPENBSD PROJECT AND CONTRIBUTORS
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OPENBSD
 * PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
#ifndef _SYS_LIMITS_H_
#define _SYS_LIMITS_H_

#include <sys/cdefs.h>
#include <linux/limits.h>

/* Common definitions for limits.h. */

/*
 * <machine/internal_types.h> is meant to describe a specific architecture,
 * but to be a safe include, that doesn't ever define anything that is
 * user-visible (only typedefs and #define names that stays in the __xxx
 * namespace).
 *
 *   __machine_has_unsigned_chars	(default is signed chars)
 *   __FLT_xxx/__DBL_xxx		non standard values for floating
 *   					points limits.
 */
#include <machine/internal_types.h>

/* Legacy */
#include <machine/limits.h>

#define	CHAR_BIT	8		/* number of bits in a char */

#define	SCHAR_MAX	0x7f		/* max value for a signed char */
#define SCHAR_MIN	(-0x7f-1)	/* min value for a signed char */

#define	UCHAR_MAX	0xffU		/* max value for an unsigned char */
#ifdef __machine_has_unsigned_chars
# define CHAR_MIN	0		/* min value for a char */
# define CHAR_MAX	0xff		/* max value for a char */
#else
# define CHAR_MAX	0x7f
# define CHAR_MIN	(-0x7f-1)
#endif

#define	USHRT_MAX	0xffffU		/* max value for an unsigned short */
#define	SHRT_MAX	0x7fff		/* max value for a short */
#define SHRT_MIN        (-0x7fff-1)     /* min value for a short */

#define	UINT_MAX	0xffffffffU	/* max value for an unsigned int */
#define	INT_MAX		0x7fffffff	/* max value for an int */
#define	INT_MIN		(-0x7fffffff-1)	/* min value for an int */

#ifdef __LP64__
# define ULONG_MAX	0xffffffffffffffffUL
					/* max value for unsigned long */
# define LONG_MAX	0x7fffffffffffffffL
					/* max value for a signed long */
# define LONG_MIN	(-0x7fffffffffffffffL-1)
					/* min value for a signed long */
#else
# define ULONG_MAX	0xffffffffUL	/* max value for an unsigned long */
# define LONG_MAX	0x7fffffffL	/* max value for a long */
# define LONG_MIN	(-0x7fffffffL-1)/* min value for a long */
#endif

#if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999
# define ULLONG_MAX	0xffffffffffffffffULL
					/* max value for unsigned long long */
# define LLONG_MAX	0x7fffffffffffffffLL
					/* max value for a signed long long */
# define LLONG_MIN	(-0x7fffffffffffffffLL-1)
					/* min value for a signed long long */
#endif

#if __BSD_VISIBLE
# define UID_MAX	UINT_MAX	/* max value for a uid_t */
# define GID_MAX	UINT_MAX	/* max value for a gid_t */
#endif


#ifdef __LP64__
# define LONG_BIT	64
#else
# define LONG_BIT	32
#endif

/* float.h defines these as well */
# if !defined(DBL_DIG)
#  if defined(__DBL_DIG)
#   define DBL_DIG	__DBL_DIG
#   define DBL_MAX	__DBL_MAX
#   define DBL_MIN	__DBL_MIN

#   define FLT_DIG	__FLT_DIG
#   define FLT_MAX	__FLT_MAX
#   define FLT_MIN	__FLT_MIN
#  else
#   define DBL_DIG	15
#   define DBL_MAX	1.7976931348623157E+308
#   define DBL_MIN	2.2250738585072014E-308

#   define FLT_DIG	6
#   define FLT_MAX	3.40282347E+38F
#   define FLT_MIN	1.17549435E-38F
#  endif
# endif

/* Bionic: the following has been optimized out from our processed kernel headers */

#define  CHILD_MAX   999
#define  OPEN_MAX    256

/* Bionic-specific definitions */

#define  _POSIX_VERSION             200112L   /* Posix C language bindings version */
#define  _POSIX2_VERSION            -1        /* we don't support Posix command-line tools */
#define  _POSIX2_C_VERSION          _POSIX_VERSION
#define  _XOPEN_VERSION             500       /* by Posix definition */
#define  _XOPEN_XCU_VERSION         -1        /* we don't support command-line utilities */

/* tell what we implement legacy stuff when appropriate */
#if _POSIX_VERSION > 0
#define  _XOPEN_XPG2                1
#define  _XOPEN_XPG3                1
#define  _XOPEN_XPG4                1
#define  _XOPEN_UNIX                1
#endif

#define  _XOPEN_ENH_I18N          -1  /* we don't support internationalization in the C library */
#define  _XOPEN_CRYPT             -1  /* don't support X/Open Encryption */
#define  _XOPEN_LEGACY            -1  /* don't claim we support these, we have some of them but not all */
#define  _XOPEN_REALTIME          -1 /* we don't support all these functions */
#define  _XOPEN_REALTIME_THREADS  -1  /* same here */

#define  _POSIX_REALTIME_SIGNALS    -1  /* for now, this is not supported */
#define  _POSIX_PRIORITY_SCHEDULING  1  /* priority scheduling is a Linux feature */
#define  _POSIX_TIMERS               1  /* Posix timers are supported */
#undef   _POSIX_ASYNCHRONOUS_IO         /* aio_ functions are not supported */
#define  _POSIX_SYNCHRONIZED_IO      1  /* synchronized i/o supported */
#define  _POSIX_FSYNC                1  /* fdatasync() supported */
#define  _POSIX_MAPPED_FILES         1  /* mmap-ed files supported */

/* XXX: TODO: complete and check list here */


#define  _POSIX_THREADS             1    /* we support threads */
#define  _POSIX_THREAD_STACKADDR    1    /* we support thread stack address */
#define  _POSIX_THREAD_STACKSIZE    1    /* we support thread stack size */
#define  _POSIX_THREAD_PRIO_INHERIT 200112L   /* linux feature */
#define  _POSIX_THREAD_PRIO_PROTECT 200112L   /* linux feature */

#undef   _POSIX_PROCESS_SHARED           /* we don't support process-shared synchronization */
#undef   _POSIX_THREAD_SAFE_FUNCTIONS    /* most functions are, but not everything yet */
#define  _POSIX_CHOWN_RESTRICTED    1    /* yes, chown requires appropriate privileges */
#define  _POSIX_MONOTONIC_CLOCK     0    /* the monotonic clock may be available; ask sysconf */
#define  _POSIX_NO_TRUNC            1    /* very long pathnames generate an error */
#define  _POSIX_SAVED_IDS           1    /* saved user ids is a Linux feature */
#define  _POSIX_JOB_CONTROL         1    /* job control is a Linux feature */

#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 /* the minimum mandated by POSIX */
#define PTHREAD_DESTRUCTOR_ITERATIONS 4
#define _POSIX_THREAD_KEYS_MAX 128            /* the minimum mandated by POSIX */
/* TODO: our PTHREAD_KEYS_MAX is currently too low to be posix compliant! */
#define _POSIX_THREAD_THREADS_MAX 64          /* the minimum mandated by POSIX */
#define PTHREAD_THREADS_MAX                   /* bionic has no specific limit */


#endif