path: root/include
diff options
authorRich Felker <>2019-10-17 19:19:40 -0400
committerRich Felker <>2019-10-17 19:23:39 -0400
commit7cc79d10afd43811a486fd5e9fcdf8e45ac599e0 (patch)
tree740e26e12e169f5d2fb1812e65e728593f94f1fe /include
parent316730cdc7a330cddf288b4e5c1de5daa64e19f4 (diff)
define LONG_MAX via arch alltypes.h, strip down bits/limits.h
LLONG_MAX is uniform for all archs we support and plenty of header and code level logic assumes it is, so it does not make sense for limits.h bits mechanism to pretend it's variable. LONG_BIT can be defined in terms of LONG_MAX; there's no reason to put it in bits. by moving LONG_MAX definition to __LONG_MAX in alltypes.h and moving LLONG_MAX out of bits, there are now no plain-C limits that are defined in the bits header, so the bits header only needs to be included in the POSIX or extended profiles. this allows the feature test macro logic to be removed from the bits header, facilitating a long-term goal of getting such logic out of bits. having __LONG_MAX in alltypes.h will allow further generalization of headers. archs without a constant PAGESIZE no longer need bits/limits.h at all.
Diffstat (limited to 'include')
1 files changed, 11 insertions, 5 deletions
diff --git a/include/limits.h b/include/limits.h
index 02c2139d..1499eaae 100644
--- a/include/limits.h
+++ b/include/limits.h
@@ -3,9 +3,7 @@
#include <features.h>
-/* Most limits are system-specific */
-#include <bits/limits.h>
+#include <bits/alltypes.h> /* __LONG_MAX */
/* Support signed or unsigned plain-char */
@@ -17,8 +15,6 @@
#define CHAR_MAX 127
-/* Some universal constants... */
#define CHAR_BIT 8
#define SCHAR_MIN (-128)
#define SCHAR_MAX 127
@@ -30,8 +26,10 @@
#define INT_MAX 0x7fffffff
#define UINT_MAX 0xffffffffU
#define LONG_MIN (-LONG_MAX-1)
+#define LONG_MAX __LONG_MAX
#define ULONG_MAX (2UL*LONG_MAX+1)
#define LLONG_MIN (-LLONG_MAX-1)
+#define LLONG_MAX 0x7fffffffffffffffLL
#define MB_LEN_MAX 4
@@ -39,6 +37,8 @@
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+#include <bits/limits.h>
#define PIPE_BUF 4096
#define NAME_MAX 255
@@ -53,6 +53,12 @@
#define TTY_NAME_MAX 32
#define HOST_NAME_MAX 255
+#if LONG_MAX == 0x7fffffffL
+#define LONG_BIT 32
+#define LONG_BIT 64
/* Implementation choices... */
#define PTHREAD_KEYS_MAX 128