summaryrefslogtreecommitdiff
path: root/src/system.h
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2005-01-03 18:43:09 +0000
committerJim Meyering <jim@meyering.net>2005-01-03 18:43:09 +0000
commit7f6d0aeb3ac198512be54ae9684ed26702446477 (patch)
treed45181963709b9bffd20fe21f961a1551a90be34 /src/system.h
parent5e37309f7a5ec851025c50f720853545c697cdf5 (diff)
downloadcoreutils-7f6d0aeb3ac198512be54ae9684ed26702446477.tar.xz
If PRIdMAX, PRIoMAX, PRIuMAX, and PRIxMAX are
not all defined and either ULONG_MAX or ULLONG_MAX is not defined, then fail at compile-time rather than let tools like od produce invalid results at run time.
Diffstat (limited to 'src/system.h')
-rw-r--r--src/system.h20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/system.h b/src/system.h
index 27aff00d7..9fd123812 100644
--- a/src/system.h
+++ b/src/system.h
@@ -368,28 +368,38 @@ initialize_exit_failure (int status)
# include <stdint.h>
#endif
-#if ULONG_MAX < ULLONG_MAX
-# define LONGEST_MODIFIER "ll"
-#else
-# define LONGEST_MODIFIER "l"
-#endif
#if PRI_MACROS_BROKEN
# undef PRIdMAX
# undef PRIoMAX
# undef PRIuMAX
# undef PRIxMAX
#endif
+
+#if ULONG_MAX < ULLONG_MAX
+# define LONGEST_MODIFIER "ll"
+#else
+# define LONGEST_MODIFIER "l"
+#endif
+
#ifndef PRIdMAX
# define PRIdMAX LONGEST_MODIFIER "d"
+# defined USED_LONGEST_MODIFIER
#endif
#ifndef PRIoMAX
# define PRIoMAX LONGEST_MODIFIER "o"
+# defined USED_LONGEST_MODIFIER
#endif
#ifndef PRIuMAX
# define PRIuMAX LONGEST_MODIFIER "u"
+# defined USED_LONGEST_MODIFIER
#endif
#ifndef PRIxMAX
# define PRIxMAX LONGEST_MODIFIER "x"
+# defined USED_LONGEST_MODIFIER
+#endif
+
+#if USED_LONGEST_MODIFIER && (!defined ULONG_MAX || !defined ULLONG_MAX)
+# error "your PRI.MAX macros are broken and we don't work around it"
#endif
#include <ctype.h>