diff --git a/.github/workflows/aocc-auto.yml b/.github/workflows/aocc-auto.yml
index b556737e3b1..8b33173db53 100644
--- a/.github/workflows/aocc-auto.yml
+++ b/.github/workflows/aocc-auto.yml
@@ -74,6 +74,7 @@ jobs:
--enable-build-mode=${{ inputs.build_mode }} \
--enable-shared \
--enable-parallel \
+ --enable-subfiling-vfd \
LDFLAGS="-L/home/runner/work/hdf5/hdf5/aocc-compiler-4.2.0/lib \
-L/home/runner/work/hdf5/hdf5/openmpi-4.1.6-install/lib"
diff --git a/.github/workflows/aocc-cmake.yml b/.github/workflows/aocc-cmake.yml
index 92ac0d25fe8..d4cff890e63 100644
--- a/.github/workflows/aocc-cmake.yml
+++ b/.github/workflows/aocc-cmake.yml
@@ -71,6 +71,7 @@ jobs:
-DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \
-DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF \
-DHDF5_ENABLE_PARALLEL:BOOL=ON \
+ -DHDF5_ENABLE_SUBFILING_VFD:BOOL=ON \
-DHDF5_BUILD_CPP_LIB:BOOL=OFF \
-DLIBAEC_USE_LOCALCONTENT=OFF \
-DZLIB_USE_LOCALCONTENT=OFF \
diff --git a/.github/workflows/autotools.yml b/.github/workflows/autotools.yml
index a430dc6b51c..a202076005a 100644
--- a/.github/workflows/autotools.yml
+++ b/.github/workflows/autotools.yml
@@ -100,6 +100,12 @@ jobs:
name: "Autotools TestExpress Workflows"
uses: ./.github/workflows/testxpr-auto.yml
+ call-release-auto-julia:
+ name: "Autotools Julia Workflows"
+ uses: ./.github/workflows/julia-auto.yml
+ with:
+ build_mode: "production"
+
# workflow-msys2-autotools:
# name: "CMake msys2 Workflows"
# uses: ./.github/workflows/msys2-auto.yml
diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml
index 21d201922de..7fe99c2f3cb 100644
--- a/.github/workflows/cmake.yml
+++ b/.github/workflows/cmake.yml
@@ -103,4 +103,8 @@ jobs:
name: "CMake TestExpress Workflows"
uses: ./.github/workflows/testxpr-cmake.yml
-
+ call-release-cmake-julia:
+ name: "CMake Julia Workflows"
+ uses: ./.github/workflows/julia-cmake.yml
+ with:
+ build_mode: "Release"
diff --git a/.github/workflows/intel-auto.yml b/.github/workflows/intel-auto.yml
index ea983c3a76b..6e0380efb4e 100644
--- a/.github/workflows/intel-auto.yml
+++ b/.github/workflows/intel-auto.yml
@@ -46,7 +46,8 @@ jobs:
$GITHUB_WORKSPACE/configure \
--enable-build-mode=${{ inputs.build_mode }} \
--enable-shared \
- --disable-fortran
+ --enable-cxx \
+ --enable-fortran
- name: Autotools Build
shell: bash
diff --git a/.github/workflows/intel-cmake.yml b/.github/workflows/intel-cmake.yml
index a8d5b7d49b8..fb703d480b3 100644
--- a/.github/workflows/intel-cmake.yml
+++ b/.github/workflows/intel-cmake.yml
@@ -43,13 +43,13 @@ jobs:
run: |
mkdir "${{ runner.workspace }}/build"
cd "${{ runner.workspace }}/build"
- cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \
- -G Ninja \
- --log-level=VERBOSE \
+ cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake -G Ninja --log-level=VERBOSE \
-DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \
+ -DHDF5_BUILD_FORTRAN:BOOL=ON \
+ -DHDF5_BUILD_CPP_LIB:BOOL=ON \
-DLIBAEC_USE_LOCALCONTENT=OFF \
-DZLIB_USE_LOCALCONTENT=OFF \
- $GITHUB_WORKSPACE
+ ${{ github.workspace }}
- name: CMake Build (Linux)
shell: bash
@@ -97,7 +97,7 @@ jobs:
run: |
mkdir "${{ runner.workspace }}/build"
Set-Location -Path "${{ runner.workspace }}\\build"
- cmake -C ${{ github.workspace }}/config/cmake/cacheinit.cmake -G Ninja -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} -DHDF5_BUILD_FORTRAN=ON -DLIBAEC_USE_LOCALCONTENT=OFF -DZLIB_USE_LOCALCONTENT=OFF ${{ github.workspace }}
+ cmake -C ${{ github.workspace }}/config/cmake/cacheinit.cmake -G Ninja -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} -DHDF5_BUILD_FORTRAN=ON -DHDF5_BUILD_CPP_LIB=ON -DLIBAEC_USE_LOCALCONTENT=OFF -DZLIB_USE_LOCALCONTENT=OFF ${{ github.workspace }}
- name: CMake Build (Windows)
shell: pwsh
diff --git a/.github/workflows/julia-auto.yml b/.github/workflows/julia-auto.yml
new file mode 100644
index 00000000000..a7dd2ab15b9
--- /dev/null
+++ b/.github/workflows/julia-auto.yml
@@ -0,0 +1,79 @@
+name: hdf5 dev autotools julia
+
+on:
+ workflow_call:
+ inputs:
+ build_mode:
+ description: "release vs. debug build"
+ required: true
+ type: string
+
+permissions:
+ contents: read
+
+jobs:
+ julia_build_and_test:
+ name: "julia ${{ inputs.build_mode }}"
+ runs-on: ubuntu-latest
+ steps:
+ - name: Get Sources
+ uses: actions/checkout@v4.1.1
+
+ - name: Install Dependencies
+ shell: bash
+ run: |
+ sudo apt-get update
+ sudo apt-get install autoconf automake libtool libtool-bin libaec-dev
+ sudo apt-get install doxygen graphviz
+ sudo apt install -y zlib1g-dev libcurl4-openssl-dev libjpeg-dev wget curl bzip2
+ sudo apt install -y m4 flex bison cmake libzip-dev openssl build-essential
+
+ - name: Autotools Configure
+ shell: bash
+ run: |
+ sh ./autogen.sh
+ mkdir "${{ runner.workspace }}/build"
+ cd "${{ runner.workspace }}/build"
+ $GITHUB_WORKSPACE/configure \
+ --enable-build-mode=${{ inputs.build_mode }} \
+ --disable-fortran \
+ --enable-shared \
+ --disable-parallel \
+ --prefix=/tmp
+
+ - name: Autotools Build
+ shell: bash
+ run: |
+ make -j3
+ working-directory: ${{ runner.workspace }}/build
+
+ - name: Install HDF5
+ shell: bash
+ run: |
+ make install
+ working-directory: ${{ runner.workspace }}/build
+
+ - name: Install julia
+ uses: julia-actions/setup-julia@latest
+ with:
+ version: '1.6'
+ arch: 'x64'
+
+ - name: Get julia hdf5 source
+ uses: actions/checkout@v4.1.1
+ with:
+ repository: JuliaIO/HDF5.jl
+ path: .
+
+ - name: Generate LocalPreferences
+ run: |
+ echo '[HDF5]' >> LocalPreferences.toml
+ echo 'libhdf5 = "/tmp/lib/libhdf5.so"' >> LocalPreferences.toml
+ echo 'libhdf5_hl = "/tmp/lib/libhdf5_hl.so"' >> LocalPreferences.toml
+
+ - uses: julia-actions/julia-buildpkg@latest
+
+ - name: Julia Run Tests
+ uses: julia-actions/julia-runtest@latest
+ env:
+ JULIA_DEBUG: Main
diff --git a/.github/workflows/julia-cmake.yml b/.github/workflows/julia-cmake.yml
new file mode 100644
index 00000000000..c1306d6a381
--- /dev/null
+++ b/.github/workflows/julia-cmake.yml
@@ -0,0 +1,82 @@
+name: hdf5 dev CMake julia
+
+on:
+ workflow_call:
+ inputs:
+ build_mode:
+ description: "release vs. debug build"
+ required: true
+ type: string
+
+permissions:
+ contents: read
+
+jobs:
+ julia_build_and_test:
+ name: "julia ${{ inputs.build_mode }}"
+ runs-on: ubuntu-latest
+ steps:
+ - name: Get Sources
+ uses: actions/checkout@v4.1.1
+
+ - name: Install Dependencies
+ shell: bash
+ run: |
+ sudo apt-get update
+ sudo apt-get install ninja-build doxygen graphviz
+ sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev
+ sudo apt install -y libaec-dev zlib1g-dev wget curl bzip2 flex bison cmake libzip-dev openssl build-essential
+
+ - name: CMake Configure
+ shell: bash
+ run: |
+ mkdir "${{ runner.workspace }}/build"
+ cd "${{ runner.workspace }}/build"
+ cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake -G Ninja \
+ -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \
+ -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF \
+ -DHDF5_ENABLE_PARALLEL:BOOL=OFF \
+ -DHDF5_BUILD_CPP_LIB:BOOL=OFF \
+ -DLIBAEC_USE_LOCALCONTENT=OFF \
+ -DZLIB_USE_LOCALCONTENT=OFF \
+ -DHDF5_BUILD_FORTRAN:BOOL=OFF \
+ -DHDF5_BUILD_JAVA:BOOL=OFF \
+ -DCMAKE_INSTALL_PREFIX=/tmp \
+ $GITHUB_WORKSPACE
+
+ - name: CMake Build
+ shell: bash
+ run: |
+ cmake --build . --parallel 3 --config ${{ inputs.build_mode }}
+ working-directory: ${{ runner.workspace }}/build
+
+ - name: Install HDF5
+ shell: bash
+ run: |
+ cmake --install .
+ working-directory: ${{ runner.workspace }}/build
+
+ - name: Install julia
+ uses: julia-actions/setup-julia@latest
+ with:
+ version: '1.6'
+ arch: 'x64'
+
+ - name: Get julia hdf5 source
+ uses: actions/checkout@v4.1.1
+ with:
+ repository: JuliaIO/HDF5.jl
+ path: .
+
+ - name: Generate LocalPreferences
+ run: |
+ echo '[HDF5]' >> LocalPreferences.toml
+ echo 'libhdf5 = "/tmp/lib/libhdf5.so"' >> LocalPreferences.toml
+ echo 'libhdf5_hl = "/tmp/lib/libhdf5_hl.so"' >> LocalPreferences.toml
+
+ - uses: julia-actions/julia-buildpkg@latest
+
+ - name: Julia Run Tests
+ uses: julia-actions/julia-runtest@latest
+ env:
+ JULIA_DEBUG: Main
diff --git a/.github/workflows/main-auto-par.yml b/.github/workflows/main-auto-par.yml
index bd1b1c45902..ad893d04724 100644
--- a/.github/workflows/main-auto-par.yml
+++ b/.github/workflows/main-auto-par.yml
@@ -50,8 +50,9 @@ jobs:
- name: Get Sources
uses: actions/checkout@v4.1.7
- # AUTOTOOLS CONFIGURE
- name: Autotools Configure
+ env:
+ NPROCS: 2
run: |
sh ./autogen.sh
mkdir "${{ runner.workspace }}/build"
@@ -62,6 +63,7 @@ jobs:
--with-default-api-version=v114 \
--enable-shared \
--enable-parallel \
+ --enable-subfiling-vfd \
--disable-cxx \
--enable-fortran \
--disable-java \
@@ -71,7 +73,28 @@ jobs:
--with-szlib=yes
shell: bash
- # BUILD
- name: Autotools Build
run: make -j3
working-directory: ${{ runner.workspace }}/build
+
+ # ph5diff tests are in the tools/tests directory so they will get run
+ # here, so leave NPROCS set here as well
+ - name: Autotools Run Tests
+ env:
+ NPROCS: 2
+ run: |
+ cd test && make check -j2 && cd ..
+ cd tools && make check -j2 && cd ..
+ cd hl && make check -j2 && cd ..
+ cd fortran/test && make check -j2 && cd ../..
+ working-directory: ${{ runner.workspace }}/build
+ if: ${{ inputs.thread_safety == 'disable' }}
+
+ - name: Autotools Run Parallel Tests
+ env:
+ NPROCS: 2
+ run: |
+ cd testpar && make check && cd ..
+ cd fortran/testpar && make check -j2 && cd ../..
+ working-directory: ${{ runner.workspace }}/build
+ if: ${{ inputs.thread_safety == 'disable' }}
diff --git a/.github/workflows/main-cmake-par.yml b/.github/workflows/main-cmake-par.yml
index 9a87dead10d..c00caa713c9 100644
--- a/.github/workflows/main-cmake-par.yml
+++ b/.github/workflows/main-cmake-par.yml
@@ -47,6 +47,7 @@ jobs:
-DBUILD_SHARED_LIBS=ON \
-DHDF5_ENABLE_ALL_WARNINGS=ON \
-DHDF5_ENABLE_PARALLEL:BOOL=ON \
+ -DHDF5_ENABLE_SUBFILING_VFD:BOOL=ON \
-DHDF5_BUILD_CPP_LIB:BOOL=OFF \
-DHDF5_BUILD_FORTRAN=ON \
-DHDF5_BUILD_JAVA=OFF \
@@ -62,3 +63,16 @@ jobs:
- name: CMake Build
run: cmake --build . --parallel 3 --config ${{ inputs.build_mode }}
working-directory: ${{ runner.workspace }}/build
+
+ #
+ # RUN TESTS
+ #
+ - name: CMake Run Tests
+ run: ctest . -E MPI_TEST --parallel 2 -C ${{ inputs.build_mode }} -V
+ working-directory: ${{ runner.workspace }}/build
+ if: ${{ matrix.run_tests && (inputs.thread_safety != 'TS') }}
+
+ - name: CMake Run Parallel Tests
+ run: ctest . -R MPI_TEST -C ${{ inputs.build_mode }} -V
+ working-directory: ${{ runner.workspace }}/build
+ if: ${{ matrix.run_tests && (inputs.thread_safety != 'TS') }}
diff --git a/.github/workflows/nvhpc-auto.yml b/.github/workflows/nvhpc-auto.yml
index bb986d3c800..bca490485d7 100644
--- a/.github/workflows/nvhpc-auto.yml
+++ b/.github/workflows/nvhpc-auto.yml
@@ -67,6 +67,26 @@ jobs:
make -j3
working-directory: ${{ runner.workspace }}/build
+ # ph5diff tests are in the tools/tests directory so they will get run
+ # here, so leave NPROCS set here as well
+ - name: Autotools Run Tests
+ env:
+ NPROCS: 2
+ run: |
+ export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.7/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/24.7/compilers/bin:$PATH
+ cd tools && make check -j2 && cd ..
+ cd hl && make check -j2 && cd ..
+ cd fortran && make check -j2 && cd ..
+ working-directory: ${{ runner.workspace }}/build
+
+ - name: Autotools Run Parallel Tests
+ env:
+ NPROCS: 2
+ run: |
+ export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.7/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/24.7/compilers/bin:$PATH
+ cd testpar && make check && cd ..
+ working-directory: ${{ runner.workspace }}/build
+
- name: Autotools Install
shell: bash
run: |
diff --git a/.github/workflows/nvhpc-cmake.yml b/.github/workflows/nvhpc-cmake.yml
index a0641fa3089..3dbefa22861 100644
--- a/.github/workflows/nvhpc-cmake.yml
+++ b/.github/workflows/nvhpc-cmake.yml
@@ -68,3 +68,16 @@ jobs:
run: |
cmake --build . --parallel 3 --config ${{ inputs.build_mode }}
working-directory: ${{ runner.workspace }}/build
+
+ # Skipping dt_arith and dtransform while we investigate long double failures
+ - name: CMake Run Tests
+ shell: bash
+ run: |
+ ctest . -E "MPI_TEST|H5TEST-dt_arith|H5TEST-dtransform" --parallel 2 -C ${{ inputs.build_mode }} -V
+ working-directory: ${{ runner.workspace }}/build
+
+ - name: CMake Run Parallel Tests
+ shell: bash
+ run: |
+ ctest . -R MPI_TEST -C ${{ inputs.build_mode }} -V
+ working-directory: ${{ runner.workspace }}/build
diff --git a/doc/img/release-schedule.plantuml b/doc/img/release-schedule.plantuml
index 741160e31d3..d0fd79b1426 100644
--- a/doc/img/release-schedule.plantuml
+++ b/doc/img/release-schedule.plantuml
@@ -23,14 +23,14 @@ Project starts 2023-01-01
[1.12.3] happens 2023-11-30
[1.12] is colored in #88CCEE
-[1.14] starts at 2023-01-01 and lasts 122 weeks
+[1.14] starts at 2023-01-01 and lasts 118 weeks
[1.14.1] happens at 2023-04-30
[1.14.2] happens at 2023-08-31
[1.14.3] happens at 2023-10-31
[1.14.4.2] happens at 2024-04-15
[1.14.4.3] happens at 2024-05-22
[1.14.5] happens at 2024-09-30
-[1.14.6] happens at 2025-04-30
+[1.14.6] happens at 2025-03-31
[1.14.1] displays on same row as [1.14.1]
[1.14.2] displays on same row as [1.14.1]
[1.14.3] displays on same row as [1.14.1]
@@ -39,8 +39,8 @@ Project starts 2023-01-01
[1.14.6] displays on same row as [1.14.1]
[1.14] is colored in #B187CF
-[1.16] starts at 2025-04-30 and lasts 35 weeks
-[1.16.0] happens at 2025-04-30
+[1.16] starts at 2025-03-31 and lasts 35 weeks
+[1.16.0] happens at 2025-03-31
[1.16.1] happens at 2025-09-30
[1.16.1] displays on same row as [1.16.0]
[1.16] is colored in #02BFA0
diff --git a/doc/img/release-schedule.png b/doc/img/release-schedule.png
index 82e1cf5d495..20a0a55986d 100644
Binary files a/doc/img/release-schedule.png and b/doc/img/release-schedule.png differ
diff --git a/doxygen/dox/CollectiveCalls.dox b/doxygen/dox/CollectiveCalls.dox
new file mode 100644
index 00000000000..9f26896262b
--- /dev/null
+++ b/doxygen/dox/CollectiveCalls.dox
@@ -0,0 +1,1265 @@
+/** \page collective_calls Collective Calling Requirements in Parallel HDF5 Applications
+ *
+ * \section sec_collective_calls_intro Introduction
+ * This document addresses two topics of concern
+ in a parallel computing environment:
+
- HDF5 functions that must be called collectively and when
+
- Properties that must be used in a coordinated manner
+
+
+ The term @ref options in the "Additional notes"
+ column indicates that the first item in the "Function"
+ column of the same row is a macro that is selectively mapped to one
+ of the two immediately-following functions.
+ For example, #H5Acreate is a macro that can be mapped to
+ either #H5Acreate1 or #H5Acreate2.
+ This mapping is configurable and is explained in
+ \ref api-compat-macros.
+ The macro structure was introduced at HDF5 Release 1.8.0.
+ *
+ * \section sec_collective_calls_func Always collective
+ * The following functions must always be called collectively.
+
+
+
+ API
+ |
+ Function
+ |
+ All processes:
+
+ same datatype & dataspace
+ |
+
+ All processes:
+
+ same access properties
+ |
+
+ All processes:
+
+ same creation properties
+ |
+
+ Available in releases since
+ |
+
+ Additional notes
+ |
+
+
+ H5A
+ |
+ #H5Acreate
+
+ #H5Acreate1
+
+ #H5Acreate2
+ |
+ X
+ |
+ X
+ |
+ X
+ |
+ 1.8.x
+ |
+ @ref options
+
+ The function #H5Acreate was renamed to
+ #H5Acreate1 at Release 1.8.0.
+ |
+
+
+ |
+ #H5Acreate_by_name
+ |
+ X
+ |
+ X
+ |
+ X
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Adelete
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+ |
+ #H5Adelete_by_idx
+ |
+ |
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Adelete_by_name
+ |
+ |
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Arename
+ |
+ |
+ |
+ |
+ 1.6.x
+ |
+ |
+
+
+ |
+ #H5Arename_by_name
+ |
+ |
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Awrite
+ |
+ |
+ |
+ |
+ |
+ Because raw data for an attribute is cached locally,
+ all processes must participate in order to guarantee that
+ future #H5Aread calls return correct results
+ on all processes.
+ |
+
+
+ |
+
+ H5D
+ |
+ #H5Dcreate
+
+ #H5Dcreate1
+
+ #H5Dcreate2
+ |
+ X
+ |
+ X
+ |
+ X
+ |
+ 1.8.x
+ |
+ @ref options
+
+ The function #H5Dcreate was renamed to
+ #H5Dcreate1 at Release 1.8.0.
+ |
+
+
+ |
+ #H5Dcreate_anon
+ |
+ X
+ |
+ X
+ |
+ X
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Dextend
+ |
+ |
+ |
+ |
+ |
+ All processes must participate only if the number of chunks
+ in the dataset actually changes.
+
+ All processes must use the same dataspace dimensions.
+ |
+
+
+ |
+ #H5Dset_extent
+ |
+ |
+ |
+ |
+ 1.6.x
+ |
+ All processes must participate only if the number of chunks
+ in the dataset actually changes.
+
+ All processes must use the same dataspace dimensions.
+ |
+
+
+ |
+
+ H5F
+ |
+ #H5Fclose
+ |
+ |
+ |
+ |
+ |
+ All processes must participate only if this is the
+ last reference to the file identifier.
+ |
+
+
+ |
+ #H5Fcreate
+ |
+ |
+ X
+ |
+ X
+ |
+ |
+ |
+
+
+ |
+ #H5Fflush
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+ |
+ #H5Fmount
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+ |
+ #H5Fopen
+ |
+ |
+ X
+ |
+ |
+ |
+ |
+
+
+ |
+ #H5Freopen
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+ |
+ #H5Funmount
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+ |
+
+ H5G
+ |
+ #H5Gcreate
+
+ #H5Gcreate1
+
+ #H5Gcreate2
+ |
+ |
+ X
+ |
+ X
+ |
+ 1.8.x
+ |
+ @ref options
+
+ The function #H5Gcreate was renamed to
+ #H5Gcreate1 at Release 1.8.0.
+ |
+
+
+ |
+ #H5Gcreate_anon
+ |
+ |
+ X
+ |
+ X
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Glink
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+ |
+ #H5Glink2
+ |
+ |
+ |
+ |
+ 1.6.x
+ |
+ |
+
+
+ |
+ #H5Gmove
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+ |
+ #H5Gmove2
+ |
+ |
+ |
+ |
+ 1.6.x
+ |
+ |
+
+
+ |
+ #H5Gset_comment
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+ |
+ #H5Gunlink
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+ |
+
+ H5I
+ |
+ #H5Idec_ref
+ |
+ |
+ |
+ |
+ 1.6.x
+ |
+ This function may be called independently if the object identifier
+ does not refer to an object that was collectively opened.
+ |
+
+
+ |
+ #H5Iinc_ref
+ |
+ |
+ |
+ |
+ 1.6.x
+ |
+ This function may be called independently if the object identifier
+ does not refer to an object that was collectively opened.
+ |
+
+
+ |
+
+ H5L
+ |
+ #H5Lcopy
+ |
+ |
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Lcreate_external
+ |
+ |
+ |
+ X
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Lcreate_hard
+ |
+ |
+ |
+ X
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Lcreate_soft
+ |
+ |
+ |
+ X
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Lcreate_ud
+ |
+ |
+ |
+ X
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Ldelete
+ |
+ |
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Ldelete_by_idx
+ |
+ |
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Lmove
+ |
+ |
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+
+ H5O
+ |
+ #H5Ocopy
+ |
+ |
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Odecr_refcount
+ |
+ |
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Oincr_refcount
+ |
+ |
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Olink
+ |
+ |
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Oset_comment
+ |
+ |
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Oset_comment_by_name
+ |
+ |
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+
+ H5R
+ |
+ #H5Rcreate
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+ |
+
+ H5T
+ |
+ #H5Tcommit
+
+ #H5Tcommit1
+
+ #H5Tcommit2
+ |
+ |
+ X
+ |
+ X
+ |
+ 1.8.x
+ |
+ @ref options
+
+ The function #H5Tcommit was renamed to
+ #H5Tcommit1 at Release 1.8.0.
+ |
+
+
+ |
+ #H5Tcommit_anon
+ |
+ |
+ X
+ |
+ X
+ |
+ 1.8.x
+ |
+ |
+
+
+ *
+ * \section sec_collective_calls_nomod Collective, unless target object will not be modified
+ * The following functions must normally be called collectively.
+ * If, however, the target object will not be modified,
+ * they may be called independently.
+ *
+
+
+ API
+ |
+ Function
+ |
+ All processes:
+
+ same datatype & dataspace
+ |
+
+ All processes:
+
+ same access properties
+ |
+
+ All processes:
+
+ same creation properties
+ |
+
+ Available in releases since
+ |
+
+ Additional notes
+ |
+
+
+ H5A
+ |
+ #H5Aclose
+ |
+ |
+ |
+ |
+ |
+ All processes must participate only if
+ all file identifiers for a file have been closed and
+ this is the last outstanding object identifier.
+ |
+
+
+ |
+ #H5Aopen
+ |
+ |
+ X
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Aopen_by_idx
+ |
+ |
+ X
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Aopen_by_name
+ |
+ |
+ X
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Aopen_idx
+ |
+ |
+ X
+ |
+ |
+ |
+ |
+
+
+ |
+ #H5Aopen_name
+ |
+ |
+ X
+ |
+ |
+ |
+ |
+
+
+ |
+
+ H5D
+ |
+ #H5Dclose
+ |
+ |
+ |
+ |
+ |
+ All processes must participate only if
+ all file identifiers for a file have been closed and
+ this is the last outstanding object identifier.
+ |
+
+
+ |
+ #H5Dopen
+
+ #H5Dopen1
+
+ #H5Dopen2
+ |
+ |
+ X
+ |
+ |
+ 1.8.x
+ |
+ @ref options
+
+ The function #H5Dopen was renamed to
+ #H5Dopen1 at Release 1.8.0.
+ |
+
+
+ |
+
+ H5G
+ |
+ #H5Gclose
+ |
+ |
+ |
+ |
+ |
+ All processes must participate only if
+ all file identifiers for a file have been closed and
+ this is the last outstanding object identifier.
+ |
+
+
+ |
+ #H5Gopen
+
+ #H5Gopen1
+
+ #H5Gopen2
+ |
+ |
+ X
+ |
+ |
+ 1.8.x
+ |
+ @ref options
+
+ The function #H5Gopen was renamed to
+ #H5Gopen1 at Release 1.8.0.
+ |
+
+
+ |
+
+ H5I
+ |
+ #H5Iget_file_id
+ |
+ |
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+
+ H5O
+ |
+ #H5Oclose
+ |
+ |
+ |
+ |
+ 1.8.x
+ |
+ All processes must participate only if
+ all file identifiers for a file have been closed and
+ this is the last outstanding object identifier.
+ |
+
+
+ |
+ #H5Oopen
+ |
+ |
+ X
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Oopen_by_addr
+ |
+ |
+ X
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+ #H5Oopen_by_idx
+ |
+ |
+ X
+ |
+ |
+ 1.8.x
+ |
+ |
+
+
+ |
+
+ H5R
+ |
+ #H5Rdereference
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+ |
+
+ H5T
+ |
+ #H5Tclose
+ |
+ |
+ |
+ |
+ |
+ All processes must participate only if
+ the datatype is for a committed datatype,
+ all the file identifiers for the file have been closed, and
+ this is the last outstanding object identifier.
+ |
+
+
+ |
+ #H5Topen
+
+ #H5Topen1
+
+ #H5Topen2
+ |
+ |
+ X
+ |
+ |
+ 1.8.x
+ |
+ @ref options
+
+ The function #H5Topen was renamed to
+ #H5Topen1 at Release 1.8.0.
+ |
+
+
+
+ *
+ * \section sec_collective_calls_props Properties
+ * The following properties must be set to the same values
+ * for an object or link in all cases where the object or link is accessed
+ * in a parallel program.
+
+
+
+
+
+ Function
+ |
+ Available in releases since
+ |
+
+
+ Dataset creation properties
+ |
+
+
+ #H5Pmodify_filter
+ |
+ 1.8.x
+ |
+
+
+ #H5Premove_filter
+ |
+ 1.8.x
+ |
+
+
+ #H5Pset_alloc_time
+ |
+ |
+
+
+ #H5Pset_chunk
+ |
+ |
+
+
+ #H5Pset_external
+ |
+ |
+
+
+ #H5Pset_fill_time
+ |
+ |
+
+
+ #H5Pset_fill_value
+ |
+ |
+
+
+ #H5Pset_filter
+ |
+ |
+
+
+ #H5Pset_fletcher32
+ |
+ 1.8.x
+ |
+
+
+ #H5Pset_layout
+ |
+ |
+
+
+ #H5Pset_nbit
+ |
+ 1.8.x
+ |
+
+
+ #H5Pset_shuffle
+ |
+ |
+
+
+ #H5Pset_szip
+ |
+ |
+
+
+ |
+
+
+ Dataset transfer properties
+
+ |
+
+ #H5Pset_btree_ratios
+ |
+ |
+
+
+ #H5Pset_buffer
+ |
+ |
+
+
+ #H5Pset_dxpl_mpio
+ |
+ |
+
+
+ #H5Pset_preserve
+ |
+ |
+
+
+ |
+
+
+ File access properties
+
+ |
+
+ #H5Pset_alignment
+ |
+ |
+
+
+ #H5Pset_cache
+ |
+ |
+
+
+ #H5Pset_fapl_mpio
+ |
+ |
+
+
+ #H5Pset_fclose_degree
+ |
+ |
+
+
+ #H5Pset_gc_references
+ |
+ |
+
+
+ #H5Fset_latest_format
+ |
+ 1.8.x
+ |
+
+
+ #H5Pset_libver_bounds
+ |
+ 1.8.x
+ |
+
+
+ #H5Pset_mdc_config
+ |
+ |
+
+
+ #H5Pset_meta_block_size
+ |
+ |
+
+
+ #H5Pset_small_data_block_size
+ |
+ |
+
+
+ #H5Pset_sieve_buf_size
+ |
+ |
+
+
+ |
+
+
+ |
+
+
+ Function
+ |
+ Available in releases since
+ |
+
+
+ File creation properties
+
+ |
+
+ #H5Pset_istore_k
+ |
+ |
+
+
+ #H5Pset_shared_mesg_index
+ |
+ 1.8.x
+ |
+
+
+ #H5Pset_shared_mesg_nindexes
+ |
+ 1.8.x
+ |
+
+
+ #H5Pset_shared_mesg_phase_change
+ |
+ 1.8.x
+ |
+
+
+ #H5Pset_sizes
+ |
+ |
+
+
+ #H5Pset_sym_k
+ |
+ |
+
+
+ #H5Pset_userblock
+ |
+ |
+
+
+ |
+
+
+ Group creation properties
+
+ |
+
+ #H5Pset_est_link_info
+ |
+ 1.8.x
+ |
+
+
+ #H5Pset_link_creation_order
+ |
+ 1.8.x
+ |
+
+
+ #H5Pset_link_phase_change
+ |
+ 1.8.x
+ |
+
+
+ #H5Pset_local_heap_size_hint
+ |
+ 1.8.x
+ |
+
+
+ |
+
+
+ Link creation properties
+
+ |
+
+ #H5Pset_char_encoding
+ |
+ 1.8.x
+ |
+
+
+ #H5Pset_create_intermediate_group
+ |
+ 1.8.x
+ |
+
+
+ |
+
+
+ Object creation properties
+
+ |
+
+ #H5Pset_attr_phase_change
+ |
+ 1.8.x
+ |
+
+
+ #H5Pset_attr_creation_order
+ |
+ 1.8.x
+ |
+
+
+ #H5Pset_obj_track_times
+ |
+ 1.8.x
+ |
+
+
+ |
+
+
+ Object copy properties
+
+ |
+
+ #H5Pset_copy_object
+ |
+ 1.8.x
+ |
+
+
+ |
+
+
+ */
diff --git a/doxygen/dox/IntroParHDF5.dox b/doxygen/dox/IntroParHDF5.dox
index b8785d43c9d..58a6e7958b0 100644
--- a/doxygen/dox/IntroParHDF5.dox
+++ b/doxygen/dox/IntroParHDF5.dox
@@ -96,6 +96,8 @@ Once a file is opened by the processes of a communicator:
\li Multiple processes write to the same dataset.
\li Each process writes to an individual dataset.
+@see \ref collective_calls
+
Please refer to the Supported Configuration Features Summary in the release notes for the current release
of HDF5 for an up-to-date list of the platforms that we support Parallel HDF5 on.
diff --git a/src/H5Centry.c b/src/H5Centry.c
index 6883e897186..1ca7479cf7e 100644
--- a/src/H5Centry.c
+++ b/src/H5Centry.c
@@ -3131,7 +3131,7 @@ H5C_protect(H5F_t *f, const H5C_class_t *type, haddr_t addr, void *udata, unsign
else
empty_space = cache_ptr->max_cache_size - cache_ptr->index_size;
- /* try to free up if necceary and if evictions are permitted. Note
+ /* try to free up if necessary and if evictions are permitted. Note
* that if evictions are enabled, we will call H5C__make_space_in_cache()
* regardless if the min_free_space requirement is not met.
*/
diff --git a/src/H5Gdeprec.c b/src/H5Gdeprec.c
index 25333bfba5c..d7a738c711e 100644
--- a/src/H5Gdeprec.c
+++ b/src/H5Gdeprec.c
@@ -204,7 +204,7 @@ H5Gcreate1(hid_t loc_id, const char *name, size_t size_hint)
loc_params.obj_type = H5I_get_type(loc_id);
/* get the location object */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id)))
+ if (NULL == (vol_obj = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier");
/* Create the group */
@@ -262,7 +262,7 @@ H5Gopen1(hid_t loc_id, const char *name)
loc_params.obj_type = H5I_get_type(loc_id);
/* get the location object */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id)))
+ if (NULL == (vol_obj = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier");
/* Open the group */
@@ -320,7 +320,7 @@ H5Glink(hid_t cur_loc_id, H5G_link_t type, const char *cur_name, const char *new
new_loc_params.loc_data.loc_by_name.lapl_id = H5P_LINK_ACCESS_DEFAULT;
/* Get the location object */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(cur_loc_id)))
+ if (NULL == (vol_obj = H5VL_vol_object(cur_loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier");
/* Construct a temporary VOL object */
@@ -351,7 +351,7 @@ H5Glink(hid_t cur_loc_id, H5G_link_t type, const char *cur_name, const char *new
loc_params.obj_type = H5I_get_type(cur_loc_id);
/* get the location object */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(cur_loc_id)))
+ if (NULL == (vol_obj = H5VL_vol_object(cur_loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier");
/* Set up VOL callback arguments */
@@ -409,9 +409,9 @@ H5Glink2(hid_t cur_loc_id, const char *cur_name, H5G_link_t type, hid_t new_loc_
new_loc_params.loc_data.loc_by_name.lapl_id = H5P_LINK_ACCESS_DEFAULT;
/* Get the location objects */
- if (NULL == (vol_obj1 = (H5VL_object_t *)H5I_object(cur_loc_id)))
+ if (NULL == (vol_obj1 = H5VL_vol_object(cur_loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier");
- if (NULL == (vol_obj2 = (H5VL_object_t *)H5I_object(new_loc_id)))
+ if (NULL == (vol_obj2 = H5VL_vol_object(new_loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier");
/* Set up VOL callback arguments */
@@ -443,7 +443,7 @@ H5Glink2(hid_t cur_loc_id, const char *cur_name, H5G_link_t type, hid_t new_loc_
loc_params.obj_type = H5I_get_type(new_loc_id);
/* get the location object */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(new_loc_id)))
+ if (NULL == (vol_obj = H5VL_vol_object(new_loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier");
/* Set up VOL callback arguments */
@@ -493,7 +493,7 @@ H5Gmove(hid_t src_loc_id, const char *src_name, const char *dst_name)
loc_params2.loc_data.loc_by_name.lapl_id = H5P_LINK_ACCESS_DEFAULT;
/* get the location object */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(src_loc_id)))
+ if (NULL == (vol_obj = H5VL_vol_object(src_loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier");
/* Move the link */
@@ -550,11 +550,11 @@ H5Gmove2(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id, const char *d
if (H5L_SAME_LOC != src_loc_id)
/* get the location object */
- if (NULL == (vol_obj1 = (H5VL_object_t *)H5I_object(src_loc_id)))
+ if (NULL == (vol_obj1 = H5VL_vol_object(src_loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier");
if (H5L_SAME_LOC != dst_loc_id)
/* get the location object */
- if (NULL == (vol_obj2 = (H5VL_object_t *)H5I_object(dst_loc_id)))
+ if (NULL == (vol_obj2 = H5VL_vol_object(dst_loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier");
/* Move the link */
@@ -597,7 +597,7 @@ H5Gunlink(hid_t loc_id, const char *name)
loc_params.loc_data.loc_by_name.lapl_id = H5P_LINK_ACCESS_DEFAULT;
/* Get the location object */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id)))
+ if (NULL == (vol_obj = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier");
/* Set up VOL callback arguments */
@@ -644,7 +644,7 @@ H5Gget_linkval(hid_t loc_id, const char *name, size_t size, char *buf /*out*/)
loc_params.loc_data.loc_by_name.lapl_id = H5P_LINK_ACCESS_DEFAULT;
/* Get the location object */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id)))
+ if (NULL == (vol_obj = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier");
/* Set up VOL callback arguments */
@@ -728,8 +728,9 @@ H5Gset_comment(hid_t loc_id, const char *name, const char *comment)
*
* Note: Deprecated in favor of H5Oget_comment/H5Oget_comment_by_name
*
- * Return: Success: Number of characters in the comment. The value
- * returned may be larger than the BUFSIZE argument.
+ * Return: Success: Number of characters in the comment, excluding the
+ * NULL terminator character. The value returned may be
+ * larger than the BUFSIZE argument.
*
* Failure: Negative
*
@@ -1175,7 +1176,7 @@ H5Gget_objname_by_idx(hid_t loc_id, hsize_t idx, char *name /*out*/, size_t size
loc_params.obj_type = H5I_get_type(loc_id);
/* Get the location object */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id)))
+ if (NULL == (vol_obj = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, (-1), "invalid location identifier");
/* Set up VOL callback arguments */
diff --git a/src/H5M.c b/src/H5M.c
index b196f0930b8..99984ea4fb1 100644
--- a/src/H5M.c
+++ b/src/H5M.c
@@ -397,7 +397,7 @@ H5Mcreate_anon(hid_t loc_id, hid_t key_type_id, hid_t val_type_id, hid_t mcpl_id
HGOTO_ERROR(H5E_MAP, H5E_CANTSET, H5I_INVALID_HID, "can't set access property list info");
/* get the location object */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id)))
+ if (NULL == (vol_obj = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier");
/* Set location parameters */
@@ -693,7 +693,7 @@ H5Mget_key_type(hid_t map_id)
FUNC_ENTER_API(H5I_INVALID_HID)
/* Check args */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP)))
+ if (NULL == (vol_obj = H5VL_vol_object_verify(map_id, H5I_MAP)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid map identifier");
/* Set up VOL callback arguments */
@@ -737,7 +737,7 @@ H5Mget_val_type(hid_t map_id)
FUNC_ENTER_API(H5I_INVALID_HID)
/* Check args */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP)))
+ if (NULL == (vol_obj = H5VL_vol_object_verify(map_id, H5I_MAP)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid map identifier");
/* Set up VOL callback arguments */
@@ -781,7 +781,7 @@ H5Mget_create_plist(hid_t map_id)
FUNC_ENTER_API(H5I_INVALID_HID)
/* Check args */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP)))
+ if (NULL == (vol_obj = H5VL_vol_object_verify(map_id, H5I_MAP)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid map identifier");
/* Set up VOL callback arguments */
@@ -828,7 +828,7 @@ H5Mget_access_plist(hid_t map_id)
FUNC_ENTER_API(H5I_INVALID_HID)
/* Check args */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP)))
+ if (NULL == (vol_obj = H5VL_vol_object_verify(map_id, H5I_MAP)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid map identifier");
/* Set up VOL callback arguments */
@@ -871,7 +871,7 @@ H5Mget_count(hid_t map_id, hsize_t *count /*out*/, hid_t dxpl_id)
FUNC_ENTER_API(H5I_INVALID_HID)
/* Check args */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP)))
+ if (NULL == (vol_obj = H5VL_vol_object_verify(map_id, H5I_MAP)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid map identifier");
/* Get the default dataset transfer property list if the user didn't provide one */
@@ -927,7 +927,7 @@ H5M__put_api_common(hid_t map_id, hid_t key_mem_type_id, const void *key, hid_t
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid value memory datatype ID");
/* Get map pointer */
- if (NULL == (*vol_obj_ptr = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP)))
+ if (NULL == (*vol_obj_ptr = H5VL_vol_object_verify(map_id, H5I_MAP)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "map_id is not a map ID");
/* Get the default dataset transfer property list if the user didn't provide one */
@@ -1056,7 +1056,7 @@ H5M__get_api_common(hid_t map_id, hid_t key_mem_type_id, const void *key, hid_t
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid value memory datatype ID");
/* Get map pointer */
- if (NULL == (*vol_obj_ptr = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP)))
+ if (NULL == (*vol_obj_ptr = H5VL_vol_object_verify(map_id, H5I_MAP)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "map_id is not a map ID");
/* Get the default dataset transfer property list if the user didn't provide one */
@@ -1187,7 +1187,7 @@ H5Mexists(hid_t map_id, hid_t key_mem_type_id, const void *key, hbool_t *exists,
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid key memory datatype ID");
/* Get map pointer */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP)))
+ if (NULL == (vol_obj = H5VL_vol_object_verify(map_id, H5I_MAP)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "map_id is not a map ID");
/* Get the default dataset transfer property list if the user didn't provide one */
@@ -1263,7 +1263,7 @@ H5Miterate(hid_t map_id, hsize_t *idx, hid_t key_mem_type_id, H5M_iterate_t op,
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no operator specified");
/* Get map pointer */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP)))
+ if (NULL == (vol_obj = H5VL_vol_object_verify(map_id, H5I_MAP)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "map_id is not a map ID");
/* Get the default dataset transfer property list if the user didn't provide one */
@@ -1348,7 +1348,7 @@ H5Miterate_by_name(hid_t loc_id, const char *map_name, hsize_t *idx, hid_t key_m
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no operator specified");
/* Get the location object */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id)))
+ if (NULL == (vol_obj = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier");
/* Get the default dataset transfer property list if the user didn't provide one */
@@ -1412,7 +1412,7 @@ H5Mdelete(hid_t map_id, hid_t key_mem_type_id, const void *key, hid_t dxpl_id)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid key memory datatype ID");
/* Get map pointer */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP)))
+ if (NULL == (vol_obj = H5VL_vol_object_verify(map_id, H5I_MAP)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "map_id is not a map ID");
/* Get the default dataset transfer property list if the user didn't provide one */
diff --git a/src/H5Mpublic.h b/src/H5Mpublic.h
index 44c78fe064f..7676d372b16 100644
--- a/src/H5Mpublic.h
+++ b/src/H5Mpublic.h
@@ -245,9 +245,27 @@ H5_DLL hid_t H5Mcreate_async(hid_t loc_id, const char *name, hid_t key_type_id,
/**
* \ingroup H5M
*
- * \brief
+ * \brief Creates a map object without linking it into a file
*
- * \details
+ * \fgdta_loc_id
+ * \type_id{key_type_id}
+ * \type_id{val_type_id}
+ * \mcpl_id
+ * \mapl_id
+ * \return \hid_t{map object}
+ * The resulting ID should be linked into the file with H5Olink or it
+ * will be deleted when closed.
+ *
+ * \details H5Mcreate_anon() creates a new map object for storing key-value
+ * pairs. The in-file datatype for keys is defined by \p key_type_id
+ * and the in-file datatype for values is defined by \p val_type_id. \p
+ * loc_id specifies the file to create the map object, but no link to
+ * the object is created. Other options can be specified through the
+ * property lists \p mcpl_id and \p mapl_id.
+ *
+ * The new map should be linked into the group hierarchy before being
+ * closed or it will be deleted. The dataset should be closed when the
+ * caller is no longer interested in it.
*
* \since 1.12.0
*
diff --git a/src/H5O.c b/src/H5O.c
index 26340aa567a..39887b51a29 100644
--- a/src/H5O.c
+++ b/src/H5O.c
@@ -359,7 +359,7 @@ H5Oopen_by_token(hid_t loc_id, H5O_token_t token)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "can't open H5O_TOKEN_UNDEF");
/* Get the location object */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id)))
+ if (NULL == (vol_obj = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier");
/* Get object type */
@@ -436,7 +436,7 @@ H5O__copy_api_common(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id, c
HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set object access arguments");
/* get the object */
- if (NULL == (*vol_obj_ptr = (H5VL_object_t *)H5I_object(dst_loc_id)))
+ if (NULL == (*vol_obj_ptr = H5VL_vol_object(dst_loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier");
loc_params2.type = H5VL_OBJECT_BY_SELF;
loc_params2.obj_type = H5I_get_type(dst_loc_id);
diff --git a/src/H5Odeprec.c b/src/H5Odeprec.c
index f74ec542d6f..37a3996c1e6 100644
--- a/src/H5Odeprec.c
+++ b/src/H5Odeprec.c
@@ -347,7 +347,7 @@ H5Oopen_by_addr(hid_t loc_id, haddr_t addr)
FUNC_ENTER_API(H5I_INVALID_HID)
/* Get the location object */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id)))
+ if (NULL == (vol_obj = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier");
/* Get object type */
diff --git a/src/H5Odtype.c b/src/H5Odtype.c
index 24671b02107..b2e6c8f65be 100644
--- a/src/H5Odtype.c
+++ b/src/H5Odtype.c
@@ -135,7 +135,7 @@ H5O__dtype_decode_helper(unsigned *ioflags /*in,out*/, const uint8_t **pp, H5T_t
* that case is impossible.
*
* Instead of using our normal H5_IS_BUFFER_OVERFLOW macro, use
- * H5_IS_KNOWN_BUFFER_OVERFLOW, which will skip the check when the
+ * H5_IS_KNOWN_BUFFER_OVERFLOW, which will skip the check when
* we're decoding a buffer from H5Tconvert().
*
* Even if this is fixed at some point in the future, as long as we
diff --git a/src/H5Tcommit.c b/src/H5Tcommit.c
index d64c4e82439..92853c63058 100644
--- a/src/H5Tcommit.c
+++ b/src/H5Tcommit.c
@@ -349,7 +349,7 @@ H5Tcommit_anon(hid_t loc_id, hid_t type_id, hid_t tcpl_id, hid_t tapl_id)
loc_params.obj_type = H5I_get_type(loc_id);
/* Get the file object */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id)))
+ if (NULL == (vol_obj = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid file identifier");
/* Commit the datatype */
diff --git a/src/H5Tdeprec.c b/src/H5Tdeprec.c
index cc998346cb4..3483597346e 100644
--- a/src/H5Tdeprec.c
+++ b/src/H5Tdeprec.c
@@ -116,7 +116,7 @@ H5Tcommit1(hid_t loc_id, const char *name, hid_t type_id)
loc_params.obj_type = H5I_get_type(loc_id);
/* get the object from the loc_id */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id)))
+ if (NULL == (vol_obj = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier");
/* Commit the datatype */
@@ -167,7 +167,7 @@ H5Topen1(hid_t loc_id, const char *name)
loc_params.obj_type = H5I_get_type(loc_id);
/* Get the location object */
- if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(loc_id)))
+ if (NULL == (vol_obj = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier");
/* Open the datatype */
diff --git a/src/H5Tpublic.h b/src/H5Tpublic.h
index 97ee27c7f46..57a5b6047c3 100644
--- a/src/H5Tpublic.h
+++ b/src/H5Tpublic.h
@@ -52,7 +52,7 @@ typedef enum H5T_class_t {
typedef enum H5T_order_t {
H5T_ORDER_ERROR = -1, /**< error */
H5T_ORDER_LE = 0, /**< little endian */
- H5T_ORDER_BE = 1, /**< bit endian */
+ H5T_ORDER_BE = 1, /**< big endian */
H5T_ORDER_VAX = 2, /**< VAX mixed endian */
H5T_ORDER_MIXED = 3, /**< Compound type with mixed member orders */
H5T_ORDER_NONE = 4 /**< no particular order (strings, bits,..) */
diff --git a/src/H5VLcallback.c b/src/H5VLcallback.c
index 1662776ef9c..58e839c9985 100644
--- a/src/H5VLcallback.c
+++ b/src/H5VLcallback.c
@@ -1744,18 +1744,28 @@ H5VL__attr_close(void *obj, const H5VL_class_t *cls, hid_t dxpl_id, void **req)
herr_t
H5VL_attr_close(const H5VL_object_t *vol_obj, hid_t dxpl_id, void **req)
{
- herr_t ret_value = SUCCEED; /* Return value */
+ bool vol_wrapper_set = false; /* Whether the VOL object wrapping context was set up */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
/* Sanity check */
assert(vol_obj);
+ /* Set wrapper info in API context */
+ if (H5VL_set_vol_wrapper(vol_obj) < 0)
+ HGOTO_ERROR(H5E_VOL, H5E_CANTSET, FAIL, "can't set VOL wrapper info");
+ vol_wrapper_set = true;
+
/* Call the corresponding internal VOL routine */
if (H5VL__attr_close(vol_obj->data, vol_obj->connector->cls, dxpl_id, req) < 0)
HGOTO_ERROR(H5E_VOL, H5E_CANTCLOSEOBJ, FAIL, "attribute close failed");
done:
+ /* Reset object wrapping info in API context */
+ if (vol_wrapper_set && H5VL_reset_vol_wrapper() < 0)
+ HDONE_ERROR(H5E_VOL, H5E_CANTRESET, FAIL, "can't reset VOL wrapper info");
+
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5VL_attr_close() */
diff --git a/src/H5VLnative.c b/src/H5VLnative.c
index ceee7f16c43..6f6b2d0768d 100644
--- a/src/H5VLnative.c
+++ b/src/H5VLnative.c
@@ -393,7 +393,7 @@ H5VLnative_addr_to_token(hid_t loc_id, haddr_t addr, H5O_token_t *token)
bool is_native_vol_obj;
/* Get the location object */
- if (NULL == (vol_obj_container = (H5VL_object_t *)H5I_object(loc_id)))
+ if (NULL == (vol_obj_container = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier");
/* Make sure that the VOL object is a native connector object */
@@ -486,7 +486,7 @@ H5VLnative_token_to_addr(hid_t loc_id, H5O_token_t token, haddr_t *addr)
bool is_native_vol_obj;
/* Get the location object */
- if (NULL == (vol_obj_container = (H5VL_object_t *)H5I_object(loc_id)))
+ if (NULL == (vol_obj_container = H5VL_vol_object(loc_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier");
/* Make sure that the VOL object is a native connector object */
diff --git a/src/H5public.h b/src/H5public.h
index e2a82b9bb14..9dd18cd5ff7 100644
--- a/src/H5public.h
+++ b/src/H5public.h
@@ -443,7 +443,7 @@ extern "C" {
* \details H5open() initializes the HDF5 library.
*
* \details When the HDF5 library is used in a C application, the library is
- * automatically initialized when the first HDf5 function call is
+ * automatically initialized when the first HDF5 function call is
* issued. If one finds that an HDF5 library function is failing
* inexplicably, H5open() can be called first. It is safe to call
* H5open() before an application issues any other function calls to
diff --git a/test/tfile.c b/test/tfile.c
index 1c8e6a04b1f..02f996f66a3 100644
--- a/test/tfile.c
+++ b/test/tfile.c
@@ -8104,45 +8104,38 @@ test_min_dset_ohdr(void)
/****************************************************************
**
** test_unseekable_file():
-** Test that attempting to open an unseekable file fails gracefully
+** Test that attempting to create/open an unseekable file fails gracefully
** without a segfault (see hdf5#1498)
****************************************************************/
static void
test_unseekable_file(void)
{
- hid_t file_id = H5I_INVALID_HID; /* File ID */
-
/* Output message about test being performed */
MESSAGE(5, ("Testing creating/opening an unseekable file\n"));
- /* Creation */
-#ifdef H5_HAVE_WIN32_API
- file_id = H5Fcreate("NUL", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
-#else
- file_id = H5Fcreate("/dev/null", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
-#endif
-
- H5Fclose(file_id);
+ /* Flush message in case this test segfaults */
+ fflush(stdout);
- /* Open, truncate */
+ /* Creation */
#ifdef H5_HAVE_WIN32_API
- file_id = H5Fopen("NUL", H5F_ACC_TRUNC, H5P_DEFAULT);
+ H5Fcreate("NUL", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
#else
- file_id = H5Fopen("/dev/null", H5F_ACC_TRUNC, H5P_DEFAULT);
+ H5Fcreate("/dev/null", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
#endif
- H5Fclose(file_id);
+ /* Should fail without segfault */
+ /* TODO - Does not properly fail on all systems */
+ /* VERIFY(file_id, H5I_INVALID_HID, "H5Fcreate"); */
- /* Open, RDWR */
+ /* Opening */
#ifdef H5_HAVE_WIN32_API
- file_id = H5Fopen("NUL", H5F_ACC_RDWR, H5P_DEFAULT);
+ H5Fopen("NUL", H5F_ACC_RDWR, H5P_DEFAULT);
#else
- file_id = H5Fopen("/dev/null", H5F_ACC_RDWR, H5P_DEFAULT);
+ H5Fopen("/dev/null", H5F_ACC_RDWR, H5P_DEFAULT);
#endif
- H5Fclose(file_id);
-
- exit(EXIT_SUCCESS);
+ /* TODO - Does not properly fail on all systems */
+ /* VERIFY(file_id, H5I_INVALID_HID, "H5Fopen"); */
}
/****************************************************************
**
diff --git a/test/vol.c b/test/vol.c
index 041e0c9b88b..9fa4f06c1ca 100644
--- a/test/vol.c
+++ b/test/vol.c
@@ -914,11 +914,9 @@ test_basic_file_operation(const char *driver_name)
TEST_ERROR;
}
- /* H5Fcreate */
if ((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id)) < 0)
TEST_ERROR;
- /* H5Fget_obj_count */
if ((obj_count = H5Fget_obj_count(fid, H5F_OBJ_FILE)) < 0)
TEST_ERROR;
if ((obj_count = H5Fget_obj_count(fid, H5F_OBJ_ALL)) < 0)
@@ -926,7 +924,6 @@ test_basic_file_operation(const char *driver_name)
if ((obj_count = H5Fget_obj_count((hid_t)H5F_OBJ_ALL, H5F_OBJ_DATASET)) < 0)
TEST_ERROR;
- /* H5Fget_obj_ids */
if ((obj_count = H5Fget_obj_ids(fid, H5F_OBJ_ALL, 2, obj_id_list)) < 0)
TEST_ERROR;
if ((obj_count = H5Fget_obj_ids((hid_t)H5F_OBJ_ALL, H5F_OBJ_DATASET, 2, obj_id_list)) < 0)
@@ -937,7 +934,6 @@ test_basic_file_operation(const char *driver_name)
strcmp(driver_name, "family") != 0 && strcmp(driver_name, "direct") != 0 &&
strcmp(driver_name, "core") != 0 && strcmp(driver_name, "core_paged") != 0 &&
strcmp(driver_name, "mpio") != 0 && strcmp(driver_name, "splitter") != 0)) {
- /* H5Fget_access_plist */
if ((fapl_id2 = H5Fget_access_plist(fid)) < 0)
TEST_ERROR;
if (H5Pequal(fapl_id, fapl_id2) != true)
@@ -946,53 +942,42 @@ test_basic_file_operation(const char *driver_name)
TEST_ERROR;
} /* end if */
- /* H5Fget_create_plist */
if ((fcpl_id = H5Fget_create_plist(fid)) < 0)
TEST_ERROR;
if (H5Pclose(fcpl_id) < 0)
TEST_ERROR;
- /* H5Fget_filesize */
if (H5Fget_filesize(fid, &file_size) < 0)
TEST_ERROR;
/* Can't retrieve VFD handle for split / multi / family VFDs */
if ((bool)(strcmp(driver_name, "split") != 0 && strcmp(driver_name, "multi") != 0 &&
strcmp(driver_name, "family") != 0)) {
- /* H5Fget_vfd_handle */
if (H5Fget_vfd_handle(fid, H5P_DEFAULT, &os_file_handle) < 0)
TEST_ERROR;
} /* end if */
- /* H5Fget_intent */
if (H5Fget_intent(fid, &intent) < 0)
TEST_ERROR;
- /* H5Fget_info2 */
if (H5Fget_info2(fid, &finfo) < 0)
TEST_ERROR;
- /* H5Fget_name */
if (H5Fget_name(fid, name, 32) < 0)
TEST_ERROR;
- /* H5Fclear_elink_file_cache */
if (H5Fclear_elink_file_cache(fid) < 0)
TEST_ERROR;
- /* H5Fflush */
if (H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0)
TEST_ERROR;
- /* H5Fclose */
if (H5Fclose(fid) < 0)
TEST_ERROR;
- /* H5Fis_accessible */
if (H5Fis_accessible(filename, fapl_id) < 0)
TEST_ERROR;
- /* H5Fopen */
if ((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl_id)) < 0)
TEST_ERROR;
@@ -1001,7 +986,6 @@ test_basic_file_operation(const char *driver_name)
strcmp(driver_name, "family") != 0 && strcmp(driver_name, "direct") != 0 &&
strcmp(driver_name, "core") != 0 && strcmp(driver_name, "core_paged") != 0 &&
strcmp(driver_name, "mpio") != 0 && strcmp(driver_name, "splitter") != 0)) {
- /* H5Fget_access_plist */
if ((fapl_id2 = H5Fget_access_plist(fid)) < 0)
TEST_ERROR;
if (H5Pequal(fapl_id, fapl_id2) != true)
@@ -1018,7 +1002,6 @@ test_basic_file_operation(const char *driver_name)
strcmp(driver_name, "family") != 0 && strcmp(driver_name, "direct") != 0 &&
strcmp(driver_name, "core") != 0 && strcmp(driver_name, "core_paged") != 0 &&
strcmp(driver_name, "mpio") != 0 && strcmp(driver_name, "splitter") != 0)) {
- /* H5Fget_access_plist */
if ((fapl_id2 = H5Fget_access_plist(fid_reopen)) < 0)
TEST_ERROR;
if (H5Pequal(fapl_id, fapl_id2) != true)
@@ -1034,7 +1017,6 @@ test_basic_file_operation(const char *driver_name)
h5_delete_test_file(FILENAME[0], fapl_id);
- /* H5Pclose */
if (H5Pclose(fapl_id) < 0)
TEST_ERROR;
@@ -1086,27 +1068,22 @@ test_basic_group_operation(void)
if ((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id)) < 0)
TEST_ERROR;
- /* H5Gcreate */
if ((gid = H5Gcreate2(fid, NATIVE_VOL_TEST_GROUP_NAME, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
TEST_ERROR;
- /* H5Gget_create_plist */
if ((gcpl_id = H5Gget_create_plist(gid)) < 0)
TEST_ERROR;
if (H5Pclose(gcpl_id) < 0)
TEST_ERROR;
- /* H5Gget_info */
if (H5Gget_info(gid, &info) < 0)
TEST_ERROR;
if (H5Gget_info(fid, &info) < 0)
TEST_ERROR;
- /* H5Gget_info_by_name */
if (H5Gget_info_by_name(fid, NATIVE_VOL_TEST_GROUP_NAME, &info, H5P_DEFAULT) < 0)
TEST_ERROR;
- /* H5Gget_info_by_idx */
if (H5Gget_info_by_idx(fid, "/", H5_INDEX_NAME, H5_ITER_NATIVE, 0, &info, H5P_DEFAULT) < 0)
TEST_ERROR;
@@ -1117,19 +1094,15 @@ test_basic_group_operation(void)
if (H5Gflush(gid) < 0)
TEST_ERROR;
- /* H5Gclose */
if (H5Gclose(gid) < 0)
TEST_ERROR;
- /* H5Gopen */
if ((gid = H5Gopen2(fid, NATIVE_VOL_TEST_GROUP_NAME, H5P_DEFAULT)) < 0)
TEST_ERROR;
- /* H5Gcreate_anon */
if ((gid_a = H5Gcreate_anon(fid, H5P_DEFAULT, H5P_DEFAULT)) < 0)
TEST_ERROR;
- /* H5Grefresh */
if (H5Grefresh(gid) < 0)
TEST_ERROR;
@@ -1142,7 +1115,6 @@ test_basic_group_operation(void)
h5_delete_test_file(FILENAME[0], fapl_id);
- /* H5Pclose */
if (H5Pclose(fapl_id) < 0)
TEST_ERROR;
@@ -1213,7 +1185,6 @@ test_basic_dataset_operation(void)
out_buf[i] = 0;
}
- /* H5Dcreate */
curr_dims = 0;
if ((sid = H5Screate_simple(1, &curr_dims, &max_dims)) < 0)
TEST_ERROR;
@@ -1226,7 +1197,6 @@ test_basic_dataset_operation(void)
H5P_DEFAULT)) < 0)
TEST_ERROR;
- /* H5Dcreate_anon */
if ((did_a = H5Dcreate_anon(fid, H5T_NATIVE_INT, sid, dcpl_id, H5P_DEFAULT)) < 0)
TEST_ERROR;
@@ -1235,7 +1205,6 @@ test_basic_dataset_operation(void)
if (H5Pclose(dcpl_id) < 0)
TEST_ERROR;
- /* H5Dset_extent */
curr_dims = N_ELEMENTS;
if (H5Dset_extent(did, &curr_dims) < 0)
TEST_ERROR;
@@ -1247,35 +1216,28 @@ test_basic_dataset_operation(void)
if (H5Dflush(did) < 0)
TEST_ERROR;
- /* H5Dwrite */
if (H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, in_buf) < 0)
TEST_ERROR;
- /* H5Drefresh */
if (H5Drefresh(did) < 0)
TEST_ERROR;
- /* H5Dclose */
if (H5Dclose(did) < 0)
TEST_ERROR;
if (H5Dclose(did_a) < 0)
TEST_ERROR;
- /* H5Dopen */
if ((did = H5Dopen2(fid, NATIVE_VOL_TEST_DATASET_NAME, H5P_DEFAULT)) < 0)
TEST_ERROR;
- /* H5Dget_space */
if ((sid = H5Dget_space(did)) < 0)
TEST_ERROR;
if (H5Sclose(sid) < 0)
TEST_ERROR;
- /* H5Dget_space_status */
if (H5Dget_space_status(did, &status) < 0)
TEST_ERROR;
- /* H5Dget_type */
if ((tid = H5Dget_type(did)) < 0)
TEST_ERROR;
if (H5Tclose(tid) < 0)
@@ -1287,13 +1249,11 @@ test_basic_dataset_operation(void)
if (H5Tclose(tid) < 0)
TEST_ERROR;
- /* H5Dget_create_plist */
if ((dcpl_id = H5Dget_create_plist(did)) < 0)
TEST_ERROR;
if (H5Pclose(dcpl_id) < 0)
TEST_ERROR;
- /* H5Dget_access_plist */
if ((dapl_id = H5Dget_access_plist(did)) < 0)
TEST_ERROR;
if (H5Pclose(dapl_id) < 0)
@@ -1311,7 +1271,6 @@ test_basic_dataset_operation(void)
if (HADDR_UNDEF != (offset = H5Dget_offset(did)))
TEST_ERROR;
- /* H5Dread */
if (H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, out_buf) < 0)
TEST_ERROR;
@@ -1326,7 +1285,6 @@ test_basic_dataset_operation(void)
h5_delete_test_file(FILENAME[0], fapl_id);
- /* H5Pclose */
if (H5Pclose(fapl_id) < 0)
TEST_ERROR;
@@ -1391,44 +1349,35 @@ test_basic_attribute_operation(void)
if ((sid = H5Screate_simple(1, &dims, &dims)) < 0)
TEST_ERROR;
- /* H5Acreate */
if ((aid = H5Acreate2(fid, NATIVE_VOL_TEST_ATTRIBUTE_NAME, H5T_NATIVE_INT, sid, H5P_DEFAULT,
H5P_DEFAULT)) < 0)
TEST_ERROR;
- /* H5Awrite */
if (H5Awrite(aid, H5T_NATIVE_INT, &data_in) < 0)
TEST_ERROR;
- /* H5Aread */
if (H5Aread(aid, H5T_NATIVE_INT, &data_out) < 0)
TEST_ERROR;
if (data_in != data_out)
TEST_ERROR;
- /* H5Aclose */
if (H5Aclose(aid) < 0)
TEST_ERROR;
- /* H5Aopen */
if ((aid = H5Aopen(fid, NATIVE_VOL_TEST_ATTRIBUTE_NAME, H5P_DEFAULT)) < 0)
TEST_ERROR;
if (H5Aclose(aid) < 0)
TEST_ERROR;
- /* H5Adelete */
if (H5Adelete(fid, NATIVE_VOL_TEST_ATTRIBUTE_NAME) < 0)
TEST_ERROR;
- /* H5Acreate_by_name */
if ((aid_name = H5Acreate_by_name(fid, NATIVE_VOL_TEST_GROUP_NAME, NATIVE_VOL_TEST_ATTRIBUTE_NAME,
H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
TEST_ERROR;
- /* H5Aclose */
if (H5Aclose(aid_name) < 0)
TEST_ERROR;
- /* H5Adelete_by_name */
if (H5Adelete_by_name(fid, NATIVE_VOL_TEST_GROUP_NAME, NATIVE_VOL_TEST_ATTRIBUTE_NAME, H5P_DEFAULT) < 0)
TEST_ERROR;
@@ -1441,7 +1390,6 @@ test_basic_attribute_operation(void)
h5_delete_test_file(FILENAME[0], fapl_id);
- /* H5Pclose */
if (H5Pclose(fapl_id) < 0)
TEST_ERROR;
@@ -1495,23 +1443,19 @@ test_basic_object_operation(void)
if ((gid = H5Gcreate2(fid, NATIVE_VOL_TEST_GROUP_NAME, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
TEST_ERROR;
- /* H5Oget_info */
if (H5Oget_info3(fid, &object_info, H5O_INFO_ALL) < 0)
TEST_ERROR;
//! [H5Oget_info_by_name3_snip]
- /* H5Oget_info_by_name */
if (H5Oget_info_by_name3(fid, NATIVE_VOL_TEST_GROUP_NAME, &object_info, H5O_INFO_ALL, H5P_DEFAULT) < 0)
TEST_ERROR;
//! [H5Oget_info_by_name3_snip]
- /* H5Oexists_by_name */
if (H5Oexists_by_name(fid, NATIVE_VOL_TEST_GROUP_NAME, H5P_DEFAULT) != true)
TEST_ERROR;
- /* H5Oopen/close */
if ((oid = H5Oopen(fid, NATIVE_VOL_TEST_GROUP_NAME, H5P_DEFAULT)) < 0)
TEST_ERROR;
if (H5Oclose(oid) < 0)
@@ -1524,7 +1468,6 @@ test_basic_object_operation(void)
h5_delete_test_file(FILENAME[0], fapl_id);
- /* H5Pclose */
if (H5Pclose(fapl_id) < 0)
TEST_ERROR;
@@ -1572,7 +1515,6 @@ test_basic_link_operation(void)
if ((gid = H5Gcreate2(fid, NATIVE_VOL_TEST_GROUP_NAME, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
TEST_ERROR;
- /* H5Lcreate_hard */
if (H5Lcreate_hard(fid, "/", gid, NATIVE_VOL_TEST_HARD_LINK_NAME, H5P_DEFAULT, H5P_DEFAULT) < 0)
TEST_ERROR;
@@ -1580,18 +1522,15 @@ test_basic_link_operation(void)
if (H5Lcreate_soft("/", fid, NATIVE_VOL_TEST_SOFT_LINK_NAME, H5P_DEFAULT, H5P_DEFAULT) < 0)
TEST_ERROR;
- /* H5Lexists */
if (H5Lexists(gid, NATIVE_VOL_TEST_HARD_LINK_NAME, H5P_DEFAULT) < 0)
TEST_ERROR;
if (H5Lexists(fid, NATIVE_VOL_TEST_SOFT_LINK_NAME, H5P_DEFAULT) < 0)
TEST_ERROR;
- /* H5Lcopy */
if (H5Lcopy(gid, NATIVE_VOL_TEST_HARD_LINK_NAME, fid, NATIVE_VOL_TEST_COPY_LINK_NAME, H5P_DEFAULT,
H5P_DEFAULT) < 0)
TEST_ERROR;
- /* H5Lmove */
if (H5Lmove(fid, NATIVE_VOL_TEST_COPY_LINK_NAME, gid, NATIVE_VOL_TEST_MOVE_LINK_NAME, H5P_DEFAULT,
H5P_DEFAULT) < 0)
TEST_ERROR;
@@ -1603,7 +1542,6 @@ test_basic_link_operation(void)
h5_delete_test_file(FILENAME[0], fapl_id);
- /* H5Pclose */
if (H5Pclose(fapl_id) < 0)
TEST_ERROR;
@@ -1654,7 +1592,6 @@ test_basic_datatype_operation(void)
if ((tid = H5Tcopy(H5T_NATIVE_INT)) < 0)
TEST_ERROR;
- /* H5Tcommit */
if (H5Tcommit2(fid, NATIVE_VOL_TEST_DATATYPE_NAME, tid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT) < 0)
TEST_ERROR;
@@ -1665,23 +1602,18 @@ test_basic_datatype_operation(void)
if (H5Tflush(tid) < 0)
TEST_ERROR;
- /* H5Trefresh */
if (H5Trefresh(tid) < 0)
TEST_ERROR;
- /* H5Tclose */
if (H5Tclose(tid) < 0)
TEST_ERROR;
- /* H5Topen */
if ((tid = H5Topen2(fid, NATIVE_VOL_TEST_DATATYPE_NAME, H5P_DEFAULT)) < 0)
TEST_ERROR;
- /* H5Tget_create_plist */
if ((tcpl_id = H5Tget_create_plist(tid)) < 0)
TEST_ERROR;
- /* H5Tcommit_anon */
if ((tid_anon = H5Tcopy(H5T_NATIVE_INT)) < 0)
TEST_ERROR;
if (H5Tcommit_anon(fid, tid_anon, H5P_DEFAULT, H5P_DEFAULT) < 0)
@@ -1698,7 +1630,6 @@ test_basic_datatype_operation(void)
h5_delete_test_file(FILENAME[0], fapl_id);
- /* H5Pclose */
if (H5Pclose(fapl_id) < 0)
TEST_ERROR;