From 7a066745997b6e2dc7422cb876a6da092a9db060 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sat, 13 May 2017 03:03:07 +0200 Subject: [PATCH] largefile: Improve and document. * m4/largefile.m4 (gl_LARGEFILE): Set WINDOWS_64_BIT_ST_SIZE to 0 if the mingw headers already define 'stat' appropriately. * modules/largefile (Description): Clarify. * doc/largefile.texi: New file. * doc/gnulib.texi: Include it. * doc/posix-headers/sys_types.texi: Update. --- ChangeLog | 10 ++++++++++ doc/gnulib.texi | 3 +++ doc/largefile.texi | 8 ++++++++ doc/posix-headers/sys_types.texi | 2 +- m4/largefile.m4 | 21 ++++++++++++++++++--- modules/largefile | 2 +- 6 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 doc/largefile.texi diff --git a/ChangeLog b/ChangeLog index a9564f27cc..3107081f7d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2017-05-13 Bruno Haible + + largefile: Improve and document. + * m4/largefile.m4 (gl_LARGEFILE): Set WINDOWS_64_BIT_ST_SIZE to 0 if + the mingw headers already define 'stat' appropriately. + * modules/largefile (Description): Clarify. + * doc/largefile.texi: New file. + * doc/gnulib.texi: Include it. + * doc/posix-headers/sys_types.texi: Update. + 2017-05-13 Bruno Haible truncate: New module. diff --git a/doc/gnulib.texi b/doc/gnulib.texi index 094a98c42c..9a255531a3 100644 --- a/doc/gnulib.texi +++ b/doc/gnulib.texi @@ -6323,6 +6323,7 @@ to POSIX that it can be treated like any other Unix-like platform. @menu * Libtool and Windows:: +* Large File Support:: * Precise file timestamps on Windows:: * Windows sockets:: * Native Windows Support without MSVC Support:: @@ -6330,6 +6331,8 @@ to POSIX that it can be treated like any other Unix-like platform. @include windows-libtool.texi +@include largefile.texi + @include windows-stat-timespec.texi @include windows-sockets.texi diff --git a/doc/largefile.texi b/doc/largefile.texi new file mode 100644 index 0000000000..61e110db37 --- /dev/null +++ b/doc/largefile.texi @@ -0,0 +1,8 @@ +@node Large File Support +@section Large File Support + +The module provides support for files larger than 2 GB. +To this effect, it ensures that @code{off_t} is a 64-bit integer type +at least on the following platforms: +glibc, Mac OS X, FreeBSD, NetBSD, OpenBSD, AIX, HP-UX, IRIX, OSF/1, Solaris, +Cygwin, mingw, MSVC. diff --git a/doc/posix-headers/sys_types.texi b/doc/posix-headers/sys_types.texi index cf44beaf33..0f018b728b 100644 --- a/doc/posix-headers/sys_types.texi +++ b/doc/posix-headers/sys_types.texi @@ -37,4 +37,4 @@ glibc x32 This module, together with the module @code{largefile}, also defines the type @code{off_t} to a 64-bit integer type on some platforms: -mingw (except mingw64), MSVC 9. +mingw, MSVC 9. diff --git a/m4/largefile.m4 b/m4/largefile.m4 index 790f7c0ad3..edc1a9b41b 100644 --- a/m4/largefile.m4 +++ b/m4/largefile.m4 @@ -126,9 +126,24 @@ AC_DEFUN([gl_LARGEFILE], else WINDOWS_64_BIT_OFF_T=0 fi - dnl But all native Windows platforms (including mingw64) have a 32-bit - dnl st_size member in 'struct stat'. - WINDOWS_64_BIT_ST_SIZE=1 + dnl Some mingw versions define, if _FILE_OFFSET_BITS=64, 'struct stat' + dnl to 'struct _stat32i64' or 'struct _stat64' (depending on + dnl _USE_32BIT_TIME_T), which has a 32-bit st_size member. + AC_CACHE_CHECK([for 64-bit st_size], [gl_cv_member_st_size_64], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include + struct stat buf; + int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1]; + ]], + [[]])], + [gl_cv_member_st_size_64=yes], [gl_cv_member_st_size_64=no]) + ]) + if test $gl_cv_member_st_size_64 = no; then + WINDOWS_64_BIT_ST_SIZE=1 + else + WINDOWS_64_BIT_ST_SIZE=0 + fi ;; *) dnl Nothing to do on gnulib's side. diff --git a/modules/largefile b/modules/largefile index 4700bef250..fcae113dbe 100644 --- a/modules/largefile +++ b/modules/largefile @@ -1,5 +1,5 @@ Description: -Use large files. +Support for files larger than 2 GB. Files: m4/largefile.m4 -- 2.39.5