Skip to content

Commit 5e8f558

Browse files
author
Dana Robinson
committed
Merge remote-tracking branch 'canonical/develop' into off_t_2_haddr_t
2 parents 7603081 + faec68f commit 5e8f558

16 files changed

+212
-233
lines changed

.github/workflows/cmake.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,9 @@ jobs:
120120
uses: ./.github/workflows/msys2-cmake.yml
121121
with:
122122
build_mode: "Release"
123+
124+
call-release-cmake-i386:
125+
name: "CMake i386 Workflows"
126+
uses: ./.github/workflows/i386-cmake.yml
127+
with:
128+
build_mode: "Release"

.github/workflows/i386-cmake.yml

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
name: hdf5 dev CMake i386
2+
3+
# Triggers the workflow on a call from another workflow
4+
on:
5+
workflow_call:
6+
inputs:
7+
build_mode:
8+
description: "release vs. debug build"
9+
required: true
10+
type: string
11+
12+
permissions:
13+
contents: read
14+
15+
jobs:
16+
i386_build_and_test:
17+
name: "i386 ${{ inputs.build_mode }}"
18+
runs-on: ubuntu-latest
19+
steps:
20+
- name: Get Sources
21+
uses: actions/[email protected]
22+
23+
- name: setup alpine
24+
uses: jirutka/setup-alpine@v1
25+
with:
26+
arch: x86
27+
packages: >
28+
build-base
29+
libaec-dev
30+
libgit2-dev
31+
cmake
32+
33+
- name: CMake Configure
34+
shell: alpine.sh --root {0}
35+
run: |
36+
mkdir build
37+
cd build
38+
cmake -C ../config/cmake/cacheinit.cmake -G "Unix Makefiles" \
39+
--log-level=VERBOSE \
40+
-DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \
41+
-DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF \
42+
-DHDF5_BUILD_CPP_LIB:BOOL=OFF \
43+
-DLIBAEC_USE_LOCALCONTENT:BOOL=OFF \
44+
-DZLIB_USE_LOCALCONTENT:BOOL=OFF \
45+
-DHDF5_BUILD_FORTRAN:BOOL=OFF \
46+
-DHDF5_BUILD_JAVA:BOOL=OFF \
47+
-DHDF5_ENABLE_PLUGIN_SUPPORT:BOOL=OFF \
48+
..
49+
50+
- name: CMake Build
51+
shell: alpine.sh --root {0}
52+
run: |
53+
cmake --build . --parallel 3 --config ${{ inputs.build_mode }}
54+
working-directory: build
55+
56+
- name: CMake Run Tests
57+
shell: alpine.sh --root {0}
58+
run: |
59+
ctest . -E H5_H5DUMP-h5ex_table_11 --parallel 2 -C ${{ inputs.build_mode }} -VV
60+
working-directory: build
61+
62+
- name: CMake Run Expected To Fail Tests
63+
shell: alpine.sh --root {0}
64+
run: |
65+
ctest . -R H5_H5DUMP-h5ex_table_11 --parallel 2 -C ${{ inputs.build_mode }} -V
66+
working-directory: build
67+
continue-on-error: true

.github/workflows/main-cmake-spc.yml

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,3 +559,55 @@ jobs:
559559
- name: CMake Build
560560
run: cmake --build . --parallel 3 --config Release
561561
working-directory: ${{ runner.workspace }}/build
562+
563+
test-cmake-minimum:
564+
runs-on: ubuntu-latest
565+
steps:
566+
- name: Install Linux Dependencies
567+
run: |
568+
sudo apt-get update
569+
sudo apt-get install ninja-build doxygen graphviz
570+
sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev
571+
sudo apt install gcc-12 g++-12 gfortran-12
572+
echo "CC=gcc-12" >> $GITHUB_ENV
573+
echo "CXX=g++-12" >> $GITHUB_ENV
574+
echo "FC=gfortran-12" >> $GITHUB_ENV
575+
576+
- uses: lukka/get-cmake@latest
577+
with:
578+
cmakeVersion: 3.18
579+
580+
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
581+
- name: Get Sources
582+
uses: actions/[email protected]
583+
584+
# CMAKE CONFIGURE
585+
- name: CMake Configure
586+
run: |
587+
mkdir "${{ runner.workspace }}/build"
588+
cd "${{ runner.workspace }}/build"
589+
cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \
590+
-G Ninja \
591+
--log-level=VERBOSE \
592+
-DCMAKE_BUILD_TYPE=Debug \
593+
-DBUILD_SHARED_LIBS=ON \
594+
-DHDF5_ENABLE_ALL_WARNINGS=ON \
595+
-DHDF5_ENABLE_WARNINGS_AS_ERRORS=ON \
596+
-DHDF5_ENABLE_PARALLEL:BOOL=OFF \
597+
-DHDF5_BUILD_CPP_LIB:BOOL=ON \
598+
-DHDF5_BUILD_FORTRAN=OFF \
599+
-DHDF5_BUILD_JAVA=ON \
600+
-DHDF5_BUILD_DOC=OFF \
601+
-DLIBAEC_USE_LOCALCONTENT=OFF \
602+
-DZLIB_USE_LOCALCONTENT=OFF \
603+
-DHDF5_ENABLE_MIRROR_VFD:BOOL=ON \
604+
-DHDF5_ENABLE_DIRECT_VFD:BOOL=ON \
605+
-DHDF5_ENABLE_ROS3_VFD:BOOL=ON \
606+
$GITHUB_WORKSPACE
607+
shell: bash
608+
609+
# BUILD
610+
- name: CMake Build
611+
run: cmake --build . --parallel 3 --config Release
612+
working-directory: ${{ runner.workspace }}/build
613+

src/H5FDcore.c

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -103,21 +103,22 @@ typedef struct H5FD_core_fapl_t {
103103
/* These macros check for overflow of various quantities. These macros
104104
* assume that file_offset_t is signed and haddr_t and size_t are unsigned.
105105
*
106-
* ADDR_OVERFLOW: Checks whether a file address of type `haddr_t'
107-
* is too large to be represented by the second argument
108-
* of the file seek function.
106+
* CORE_ADDR_OVERFLOW: Checks whether a file address of type `haddr_t'
107+
* is too large to be represented by the second argument
108+
* of the file seek function.
109109
*
110-
* SIZE_OVERFLOW: Checks whether a buffer size of type `hsize_t' is too
111-
* large to be represented by the `size_t' type.
110+
* CORE_SIZE_OVERFLOW: Checks whether a buffer size of type `hsize_t' is too
111+
* large to be represented by the `size_t' type.
112112
*
113-
* REGION_OVERFLOW: Checks whether an address and size pair describe data
114-
* which can be addressed entirely in memory.
113+
* CORE_REGION_OVERFLOW: Checks whether an address and size pair describe data
114+
* which can be addressed entirely in memory.
115115
*/
116-
#define MAXADDR ((haddr_t)((~(size_t)0) - 1))
117-
#define ADDR_OVERFLOW(A) (HADDR_UNDEF == (A) || (A) > (haddr_t)MAXADDR)
118-
#define SIZE_OVERFLOW(Z) ((Z) > (hsize_t)MAXADDR)
119-
#define REGION_OVERFLOW(A, Z) \
120-
(ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) || HADDR_UNDEF == (A) + (Z) || (size_t)((A) + (Z)) < (size_t)(A))
116+
#define CORE_MAXADDR ((haddr_t)((~(size_t)0) - 1))
117+
#define CORE_ADDR_OVERFLOW(A) (HADDR_UNDEF == (A) || (A) > (haddr_t)CORE_MAXADDR)
118+
#define CORE_SIZE_OVERFLOW(Z) ((Z) > (hsize_t)CORE_MAXADDR)
119+
#define CORE_REGION_OVERFLOW(A, Z) \
120+
(CORE_ADDR_OVERFLOW(A) || CORE_SIZE_OVERFLOW(Z) || HADDR_UNDEF == (A) + (Z) || \
121+
(size_t)((A) + (Z)) < (size_t)(A))
121122

122123
/* Prototypes */
123124
static herr_t H5FD__core_add_dirty_region(H5FD_core_t *file, haddr_t start, haddr_t end);
@@ -147,7 +148,7 @@ static const H5FD_class_t H5FD_core_g = {
147148
H5FD_CLASS_VERSION, /* struct version */
148149
H5FD_CORE_VALUE, /* value */
149150
"core", /* name */
150-
MAXADDR, /* maxaddr */
151+
CORE_MAXADDR, /* maxaddr */
151152
H5F_CLOSE_WEAK, /* fc_degree */
152153
NULL, /* terminate */
153154
NULL, /* sb_size */
@@ -707,7 +708,7 @@ H5FD__core_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr
707708
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid file name");
708709
if (0 == maxaddr || HADDR_UNDEF == maxaddr)
709710
HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr");
710-
if (ADDR_OVERFLOW(maxaddr))
711+
if (CORE_ADDR_OVERFLOW(maxaddr))
711712
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, NULL, "maxaddr overflow");
712713
assert(H5P_DEFAULT != fapl_id);
713714
if (NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id)))
@@ -1155,7 +1156,7 @@ H5FD__core_set_eoa(H5FD_t *_file, H5FD_mem_t H5_ATTR_UNUSED type, haddr_t addr)
11551156

11561157
FUNC_ENTER_PACKAGE
11571158

1158-
if (ADDR_OVERFLOW(addr))
1159+
if (CORE_ADDR_OVERFLOW(addr))
11591160
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "address overflow");
11601161

11611162
file->eoa = addr;
@@ -1271,7 +1272,7 @@ H5FD__core_read(H5FD_t *_file, H5FD_mem_t H5_ATTR_UNUSED type, hid_t H5_ATTR_UNU
12711272
/* Check for overflow conditions */
12721273
if (HADDR_UNDEF == addr)
12731274
HGOTO_ERROR(H5E_IO, H5E_OVERFLOW, FAIL, "file address overflowed");
1274-
if (REGION_OVERFLOW(addr, size))
1275+
if (CORE_REGION_OVERFLOW(addr, size))
12751276
HGOTO_ERROR(H5E_IO, H5E_OVERFLOW, FAIL, "file address overflowed");
12761277

12771278
/* Read the part which is before the EOF marker */
@@ -1325,7 +1326,7 @@ H5FD__core_write(H5FD_t *_file, H5FD_mem_t H5_ATTR_UNUSED type, hid_t H5_ATTR_UN
13251326
assert(buf);
13261327

13271328
/* Check for overflow conditions */
1328-
if (REGION_OVERFLOW(addr, size))
1329+
if (CORE_REGION_OVERFLOW(addr, size))
13291330
HGOTO_ERROR(H5E_IO, H5E_OVERFLOW, FAIL, "file address overflowed");
13301331

13311332
/*

src/H5FDdirect.c

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -90,27 +90,6 @@ typedef struct H5FD_direct_t {
9090

9191
} H5FD_direct_t;
9292

93-
/*
94-
* These macros check for overflow of various quantities. These macros
95-
* assume that HDoff_t is signed and haddr_t and size_t are unsigned.
96-
*
97-
* ADDR_OVERFLOW: Checks whether a file address of type `haddr_t'
98-
* is too large to be represented by the second argument
99-
* of the file seek function.
100-
*
101-
* SIZE_OVERFLOW: Checks whether a buffer size of type `hsize_t' is too
102-
* large to be represented by the `size_t' type.
103-
*
104-
* REGION_OVERFLOW: Checks whether an address and size pair describe data
105-
* which can be addressed entirely by the second
106-
* argument of the file seek function.
107-
*/
108-
#define MAXADDR (((haddr_t)1 << (8 * sizeof(HDoff_t) - 1)) - 1)
109-
#define ADDR_OVERFLOW(A) (HADDR_UNDEF == (A) || ((A) & ~(haddr_t)MAXADDR))
110-
#define SIZE_OVERFLOW(Z) ((Z) & ~(hsize_t)MAXADDR)
111-
#define REGION_OVERFLOW(A, Z) \
112-
(ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) || HADDR_UNDEF == (A) + (Z) || (HDoff_t)((A) + (Z)) < (HDoff_t)(A))
113-
11493
/* Prototypes */
11594
static herr_t H5FD__direct_populate_config(size_t boundary, size_t block_size, size_t cbuf_size,
11695
H5FD_direct_fapl_t *fa_out);
@@ -137,7 +116,7 @@ static const H5FD_class_t H5FD_direct_g = {
137116
H5FD_CLASS_VERSION, /* struct version */
138117
H5FD_DIRECT_VALUE, /* value */
139118
"direct", /* name */
140-
MAXADDR, /* maxaddr */
119+
H5FD_MAXADDR, /* maxaddr */
141120
H5F_CLOSE_WEAK, /* fc_degree */
142121
NULL, /* terminate */
143122
NULL, /* sb_size */
@@ -436,7 +415,7 @@ H5FD__direct_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxad
436415
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid file name");
437416
if (0 == maxaddr || HADDR_UNDEF == maxaddr)
438417
HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr");
439-
if (ADDR_OVERFLOW(maxaddr))
418+
if (H5FD_ADDR_OVERFLOW(maxaddr))
440419
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, NULL, "bogus maxaddr");
441420

442421
/* Build the open flags */
@@ -818,7 +797,7 @@ H5FD__direct_read(H5FD_t *_file, H5FD_mem_t H5_ATTR_UNUSED type, hid_t H5_ATTR_U
818797
/* Check for overflow conditions */
819798
if (HADDR_UNDEF == addr)
820799
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined");
821-
if (REGION_OVERFLOW(addr, size))
800+
if (H5FD_REGION_OVERFLOW(addr, size))
822801
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow");
823802

824803
/* If the system doesn't require data to be aligned, read the data in
@@ -998,7 +977,7 @@ H5FD__direct_write(H5FD_t *_file, H5FD_mem_t H5_ATTR_UNUSED type, hid_t H5_ATTR_
998977
/* Check for overflow conditions */
999978
if (HADDR_UNDEF == addr)
1000979
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined");
1001-
if (REGION_OVERFLOW(addr, size))
980+
if (H5FD_REGION_OVERFLOW(addr, size))
1002981
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow");
1003982

1004983
/* If the system doesn't require data to be aligned, read the data in

src/H5FDhdfs.c

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -230,19 +230,6 @@ typedef struct H5FD_hdfs_t {
230230
#endif
231231
} H5FD_hdfs_t;
232232

233-
/*
234-
* These macros check for overflow of various quantities. These macros
235-
* assume that HDoff_t is signed and haddr_t and size_t are unsigned.
236-
*
237-
* ADDR_OVERFLOW: Checks whether a file address of type `haddr_t'
238-
* is too large to be represented by the second argument
239-
* of the file seek function.
240-
* Only included if HDFS code should compile.
241-
*
242-
*/
243-
#define MAXADDR (((haddr_t)1 << (8 * sizeof(HDoff_t) - 1)) - 1)
244-
#define ADDR_OVERFLOW(A) (HADDR_UNDEF == (A) || ((A) & ~(haddr_t)MAXADDR))
245-
246233
/* Prototypes */
247234
static void *H5FD__hdfs_fapl_get(H5FD_t *_file);
248235
static void *H5FD__hdfs_fapl_copy(const void *_old_fa);
@@ -267,7 +254,7 @@ static const H5FD_class_t H5FD_hdfs_g = {
267254
H5FD_CLASS_VERSION, /* struct version */
268255
H5FD_HDFS_VALUE, /* value */
269256
"hdfs", /* name */
270-
MAXADDR, /* maxaddr */
257+
H5FD_MAXADDR, /* maxaddr */
271258
H5F_CLOSE_WEAK, /* fc_degree */
272259
NULL, /* terminate */
273260
NULL, /* sb_size */
@@ -840,7 +827,7 @@ H5FD__hdfs_open(const char *path, unsigned flags, hid_t fapl_id, haddr_t maxaddr
840827
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid file name");
841828
if (0 == maxaddr || HADDR_UNDEF == maxaddr)
842829
HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr");
843-
if (ADDR_OVERFLOW(maxaddr))
830+
if (H5FD_ADDR_OVERFLOW(maxaddr))
844831
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, NULL, "bogus maxaddr");
845832
if (flags != H5F_ACC_RDONLY)
846833
HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, NULL, "only Read-Only access allowed");

src/H5FDlog.c

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -129,27 +129,6 @@ typedef struct H5FD_log_t {
129129
H5FD_log_fapl_t fa; /* Driver-specific file access properties */
130130
} H5FD_log_t;
131131

132-
/*
133-
* These macros check for overflow of various quantities. These macros
134-
* assume that HDoff_t is signed and haddr_t and size_t are unsigned.
135-
*
136-
* ADDR_OVERFLOW: Checks whether a file address of type `haddr_t'
137-
* is too large to be represented by the second argument
138-
* of the file seek function.
139-
*
140-
* SIZE_OVERFLOW: Checks whether a buffer size of type `hsize_t' is too
141-
* large to be represented by the `size_t' type.
142-
*
143-
* REGION_OVERFLOW: Checks whether an address and size pair describe data
144-
* which can be addressed entirely by the second
145-
* argument of the file seek function.
146-
*/
147-
#define MAXADDR (((haddr_t)1 << (8 * sizeof(HDoff_t) - 1)) - 1)
148-
#define ADDR_OVERFLOW(A) (HADDR_UNDEF == (A) || ((A) & ~(haddr_t)MAXADDR))
149-
#define SIZE_OVERFLOW(Z) ((Z) & ~(hsize_t)MAXADDR)
150-
#define REGION_OVERFLOW(A, Z) \
151-
(ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) || HADDR_UNDEF == (A) + (Z) || (HDoff_t)((A) + (Z)) < (HDoff_t)(A))
152-
153132
/* Prototypes */
154133
static void *H5FD__log_fapl_get(H5FD_t *file);
155134
static void *H5FD__log_fapl_copy(const void *_old_fa);
@@ -177,7 +156,7 @@ static const H5FD_class_t H5FD_log_g = {
177156
H5FD_CLASS_VERSION, /* struct version */
178157
H5FD_LOG_VALUE, /* value */
179158
"log", /* name */
180-
MAXADDR, /* maxaddr */
159+
H5FD_MAXADDR, /* maxaddr */
181160
H5F_CLOSE_WEAK, /* fc_degree */
182161
NULL, /* terminate */
183162
NULL, /* sb_size */
@@ -450,7 +429,7 @@ H5FD__log_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
450429
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid file name");
451430
if (0 == maxaddr || HADDR_UNDEF == maxaddr)
452431
HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr");
453-
if (ADDR_OVERFLOW(maxaddr))
432+
if (H5FD_ADDR_OVERFLOW(maxaddr))
454433
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, NULL, "bogus maxaddr");
455434

456435
/* Initialize timers */
@@ -1120,7 +1099,7 @@ H5FD__log_read(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, had
11201099
/* Check for overflow conditions */
11211100
if (!H5_addr_defined(addr))
11221101
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined, addr = %llu", (unsigned long long)addr);
1123-
if (REGION_OVERFLOW(addr, size))
1102+
if (H5FD_REGION_OVERFLOW(addr, size))
11241103
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow, addr = %llu", (unsigned long long)addr);
11251104

11261105
/* Log the I/O information about the read */
@@ -1344,7 +1323,7 @@ H5FD__log_write(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, ha
13441323
/* Check for overflow conditions */
13451324
if (!H5_addr_defined(addr))
13461325
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined, addr = %llu", (unsigned long long)addr);
1347-
if (REGION_OVERFLOW(addr, size))
1326+
if (H5FD_REGION_OVERFLOW(addr, size))
13481327
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow, addr = %llu, size = %llu",
13491328
(unsigned long long)addr, (unsigned long long)size);
13501329

0 commit comments

Comments
 (0)