[tz] [PROPOSED 2/2] Omit _LARGE_FILES, _DARWIN_USE_64_BIT_INODE

Paul Eggert eggert at cs.ucla.edu
Thu Oct 27 19:29:18 UTC 2022


Last year tzcode stopped using functions relying on large file
offsets, notably the ‘stat’ function.  So do not enable large-file
support, except on GNU/Linux where large-file support is a
prerequisite for 64-bit timestamps on 32-bit hosts.
* NEWS: Mention this.
* private.h (_LARGE_FILES, _DARWIN_USE_64_BIT_INODE):
Do not define; no longer needed.
(_TIME_BITS): Do not default to 64 if the builder compiles with
-D_FILE_OFFSET_BITS=32, as this combination does not work.
---
 NEWS      |  8 ++++++++
 private.h | 18 ++++++------------
 2 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/NEWS b/NEWS
index 2c905fd..582ab64 100644
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,8 @@ Unreleased, experimental changes
     zic now supports links to links, and vanguard form uses this.
     Simplify four Ontario zones into one.
     Fix a Y2438 bug when reading TZif data.
+    Enable 64-bit time_t on 32-bit glibc platforms.
+    Omit large-file support when no longer needed.
     In C code, use some C23 features if available.
     Remove no-longer-needed workaround for Qt bug 53071.
 
@@ -71,6 +73,12 @@ Unreleased, experimental changes
     To continue to limit time_t to 32 bits on these platforms, use
     "make CFLAGS='-D_TIME_BITS=32'".
 
+    In C code, do not enable large-file support on platforms like AIX
+    and macOS that no longer need it now that tzcode does not use
+    off_t or related functions like 'stat'.  Large-file support is
+    still enabled by default on GNU/Linux, as it is needed for 64-bit
+    time_t support.
+
     In C code, prefer C23 keywords to pre-C23 macros for alignof,
     bool, false, and true.  Also, use the following C23 features if
     available: __has_include, unreachable.
diff --git a/private.h b/private.h
index baacdfb..deff90e 100644
--- a/private.h
+++ b/private.h
@@ -131,21 +131,15 @@
 /* Enable strtoimax on pre-C99 Solaris 11.  */
 #define __EXTENSIONS__ 1
 
-/* Although tzcode does not call 'stat'-like functions directly, stdio
-   functions may call them.  To avoid having them fail unnecessarily
-   with errno == EOVERFLOW, enable large files on GNUish systems ...  */
+/* On GNUish systems where time_t might be 32 or 64 bits, use 64.
+   On these platforms _FILE_OFFSET_BITS must also be 64; otherwise
+   setting _TIME_BITS to 64 does not work.  The code does not
+   otherwise rely on _FILE_OFFSET_BITS being 64, since it does not
+   use off_t or functions like 'stat' that depend on off_t.  */
 #ifndef _FILE_OFFSET_BITS
 # define _FILE_OFFSET_BITS 64
 #endif
-/* ... and on AIX ...  */
-#define _LARGE_FILES 1
-/* ... and enable large inode numbers on Mac OS X 10.5 and later.  */
-#define _DARWIN_USE_64_BIT_INODE 1
-
-/* On GNUish systems where time_t might be 32 or 64 bits, use 64.
-   This supports a wider time range, and avoids having 'stat'-like
-   functions fail unnecessarily with errno == EOVERFLOW.  */
-#ifndef _TIME_BITS
+#if !defined _TIME_BITS && _FILE_OFFSET_BITS == 64
 # define _TIME_BITS 64
 #endif
 
-- 
2.37.3



More information about the tz mailing list