summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDana Robinson <43805+derobins@users.noreply.github.com>2024-01-18 17:03:59 (GMT)
committerGitHub <noreply@github.com>2024-01-18 17:03:59 (GMT)
commitab11e076bf90ee2f59016bbbc4a781c9142f30b2 (patch)
tree4531f6cde46e3d3a9376ffebda318e8a76592062 /src
parent5ae4ecc1f20659b3abffcc4098a91e085173017b (diff)
downloadhdf5-ab11e076bf90ee2f59016bbbc4a781c9142f30b2.zip
hdf5-ab11e076bf90ee2f59016bbbc4a781c9142f30b2.tar.gz
hdf5-ab11e076bf90ee2f59016bbbc4a781c9142f30b2.tar.bz2
Replace off_t with HDoff_t internally (#3944)
off_t is a 32-bit signed value on Windows, so we should use HDoff_t (which is __int64 on Windows) internally instead. Also defines HDftell on Windows to be _ftelli64().
Diffstat (limited to 'src')
-rw-r--r--src/H5Pdcpl.c2
-rw-r--r--src/H5Ppublic.h3
-rw-r--r--src/H5win32defs.h3
3 files changed, 6 insertions, 2 deletions
diff --git a/src/H5Pdcpl.c b/src/H5Pdcpl.c
index cdee942..ae426ee 100644
--- a/src/H5Pdcpl.c
+++ b/src/H5Pdcpl.c
@@ -1550,7 +1550,7 @@ H5P__dcrt_ext_file_list_dec(const void **_pp, void *_value)
enc_size = *(*pp)++;
assert(enc_size < 256);
UINT64DECODE_VAR(*pp, enc_value, enc_size);
- efl->slot[u].offset = (off_t)enc_value;
+ efl->slot[u].offset = (HDoff_t)enc_value;
/* decode size */
enc_size = *(*pp)++;
diff --git a/src/H5Ppublic.h b/src/H5Ppublic.h
index df0ede1..98b7c2f 100644
--- a/src/H5Ppublic.h
+++ b/src/H5Ppublic.h
@@ -6477,6 +6477,9 @@ H5_DLL herr_t H5Pset_dset_no_attrs_hint(hid_t dcpl_id, hbool_t minimize);
* when H5Dwrite() is called to write data to it, the library
* will create the file.
*
+ * \note On Windows, off_t is typically a 32-bit signed long value, which
+ * limits the valid offset that can be set to 2 GiB.
+ *
* \since 1.0.0
*
*/
diff --git a/src/H5win32defs.h b/src/H5win32defs.h
index ba6028a..a9a4628 100644
--- a/src/H5win32defs.h
+++ b/src/H5win32defs.h
@@ -22,7 +22,7 @@
/* off_t exists on Windows, but is always a 32-bit long, even on 64-bit Windows,
* so we define HDoff_t to be __int64, which is the type of the st_size field
- * of the _stati64 struct.
+ * of the _stati64 struct and what is returned by _ftelli64().
*/
#define HDoff_t __int64
@@ -42,6 +42,7 @@ struct timezone {
#define HDcreat(S, M) Wopen_utf8(S, O_CREAT | O_TRUNC | O_RDWR, M)
#define HDflock(F, L) Wflock(F, L)
#define HDfstat(F, B) _fstati64(F, B)
+#define HDftell(F) _ftelli64(F)
#define HDgetdcwd(D, S, Z) _getdcwd(D, S, Z)
#define HDgetdrive() _getdrive()
#define HDgettimeofday(V, Z) Wgettimeofday(V, Z)