From 68bffcd45eff04fa8caeb1b33e6513e88a70bcf5 Mon Sep 17 00:00:00 2001 From: jhendersonHDF Date: Thu, 10 Oct 2024 09:50:43 -0500 Subject: [PATCH 001/179] Remove old RELEASE.txt note (#4945) --- release_docs/RELEASE.txt | 8 -------- 1 file changed, 8 deletions(-) diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index f700c8a266a..36de830a71c 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -191,14 +191,6 @@ Bug Fixes since HDF5-1.16.0 release Testing ------- - - Disabled running of MPI Atomicity tests for OpenMPI major versions < 5 - - Support for MPI atomicity operations is not implemented for major - versions of OpenMPI less than version 5. This would cause the MPI - atomicity tests for parallel HDF5 to sporadically fail when run - with OpenMPI. Testphdf5 now checks if OpenMPI is being used and will - skip running the atomicity tests if the major version of OpenMPI is - < 5. Platforms Tested From 6e8c7a959739332142cf6413c7d8e21695bfddb8 Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Thu, 10 Oct 2024 13:16:36 -0500 Subject: [PATCH 002/179] add analysis and coverage to CDash reports (#4938) * Add sanitzers and coverage workflows * add UndefinedBehavior sanitize --- .github/workflows/cmake-analysis.yml | 419 +++++++++++++++++++++++++++ .github/workflows/cmake-script.yml | 108 +------ .github/workflows/daily-build.yml | 20 +- .github/workflows/daily-schedule.yml | 16 + CMakeLists.txt | 2 + config/cmake/ConfigureChecks.cmake | 7 +- config/sanitizer/code-coverage.cmake | 4 + config/toolchain/intel.cmake | 6 +- src/H5VLpassthru.c | 7 - src/H5system.c | 18 +- 10 files changed, 473 insertions(+), 134 deletions(-) create mode 100644 .github/workflows/cmake-analysis.yml create mode 100644 .github/workflows/daily-schedule.yml diff --git a/.github/workflows/cmake-analysis.yml b/.github/workflows/cmake-analysis.yml new file mode 100644 index 00000000000..58eb6ce584f --- /dev/null +++ b/.github/workflows/cmake-analysis.yml @@ -0,0 +1,419 @@ +name: hdf5 dev ctest analysis runs + +# Triggers the workflow on a call from another workflow +on: + workflow_call: + inputs: + snap_name: + description: 'The name in the source tarballs' + type: string + required: false + default: hdfsrc + file_base: + description: "The common base name of the source tarballs" + required: true + type: string + use_environ: + description: 'Environment to locate files' + type: string + required: true + default: snapshots + +permissions: + contents: read + +jobs: + coverage_test_linux_GCC: + # Linux (Ubuntu) w/ gcc + coverage + # + name: "Ubuntu GCC Coverage" + runs-on: ubuntu-latest + steps: + - name: Install CMake Dependencies (Linux_coverage) + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz curl libncurses5 build-essential + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + sudo apt-get install lcov -q -y + + - name: Set file base name (Linux_coverage) + id: set-file-base + run: | + FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") + echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT + if [[ '${{ inputs.use_environ }}' == 'release' ]] + then + SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") + else + SOURCE_NAME_BASE=$(echo "hdfsrc") + fi + echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT + + # Get files created by release script + - name: Get tgz-tarball (Linux_coverage) + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + with: + name: tgz-tarball + path: ${{ github.workspace }} + + - name: List files for the space (Linux_coverage) + run: | + ls -l ${{ github.workspace }} + ls ${{ runner.workspace }} + + - name: Uncompress source (Linux_coverage) + run: tar -zxvf ${{ github.workspace }}/${{ steps.set-file-base.outputs.FILE_BASE }}.tar.gz + + - name: Copy script files for the space (Linux_coverage) + run: | + cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake ${{ runner.workspace }}/hdf5 + cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF5config.cmake ${{ runner.workspace }}/hdf5 + + - name: List files for the hdf5 (Linux_coverage) + run: | + ls ${{ runner.workspace }}/hdf5 + + - name: Create options file (Linux_coverage) + uses: "DamianReeves/write-file-action@master" + with: + path: ${{ runner.workspace }}/hdf5/HDF5options.cmake + write-mode: overwrite + contents: | + set (CTEST_DROP_SITE_INIT "my.cdash.org") + # Change following line to submit to your CDash dashboard to a different CDash project + set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") + #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF5") + set (LOCAL_COVERAGE_TEST "TRUE") + set (LOCAL_USE_GCOV "TRUE") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_STATIC_LIBS:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_JAVA:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_CPP_LIB:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_COVERAGE:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCODE_COVERAGE:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_ENCODING:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_PLUGIN_SUPPORT:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_PACK_EXAMPLES:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_PACKAGE_EXTLIBS:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_NO_PACKAGES:BOOL=ON") + + - name: Run ctest (Linux_coverage) + run: | + cd "${{ runner.workspace }}/hdf5" + ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH_COV,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug -VV -O hdf5.log + shell: bash + continue-on-error: true + + # Save log files created by ctest script + - name: Save log (Linux_coverage) + uses: actions/upload-artifact@v4 + with: + name: clang-coverage-log + path: ${{ runner.workspace }}/hdf5/hdf5.log + if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` + + build_and_test_linux_LeakSanitizer: + # Linux (Ubuntu) w/ clang + LeakSanitizer + # + name: "Ubuntu Clang LeakSanitizer" + runs-on: ubuntu-latest + steps: + - name: Install CMake Dependencies (Linux_Leak) + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz curl libncurses5 + + - name: add clang to env + uses: KyleMayes/install-llvm-action@v2.0.5 + id: setup-clang + with: + env: true + version: '18' + + - name: Set file base name (Linux_Leak) + id: set-file-base + run: | + FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") + echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT + if [[ '${{ inputs.use_environ }}' == 'release' ]] + then + SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") + else + SOURCE_NAME_BASE=$(echo "hdfsrc") + fi + echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT + + # Get files created by release script + - name: Get tgz-tarball (Linux_Leak) + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + with: + name: tgz-tarball + path: ${{ github.workspace }} + + - name: List files for the space (Linux_Leak) + run: | + ls -l ${{ github.workspace }} + ls ${{ runner.workspace }} + + - name: Uncompress source (Linux_Leak) + run: tar -zxvf ${{ github.workspace }}/${{ steps.set-file-base.outputs.FILE_BASE }}.tar.gz + + - name: Copy script files for the space (Linux_Leak) + run: | + cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake ${{ runner.workspace }}/hdf5 + cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF5config.cmake ${{ runner.workspace }}/hdf5 + + - name: List files for the hdf5 (Linux_Leak) + run: | + ls ${{ runner.workspace }}/hdf5 + + - name: Create options file (Linux_Leak) + uses: "DamianReeves/write-file-action@master" + with: + path: ${{ runner.workspace }}/hdf5/HDF5options.cmake + write-mode: overwrite + contents: | + set (CTEST_DROP_SITE_INIT "my.cdash.org") + # Change following line to submit to your CDash dashboard to a different CDash project + set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") + #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF5") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") + set (MODEL "Sanitize") + set (GROUP "Sanitize") + set (LOCAL_MEMCHECK_TEST "TRUE") + set (CTEST_MEMORYCHECK_TYPE "LeakSanitizer") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_STATIC_LIBS:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_JAVA:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_CPP_LIB:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SANITIZERS:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DUSE_SANITIZER:STRING=Leak") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_ENCODING:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_PLUGIN_SUPPORT:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") + + - name: Run ctest (Linux_Leak) + run: | + cd "${{ runner.workspace }}/hdf5" + ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-LEAK,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug -VV -O hdf5.log + shell: bash + continue-on-error: true + + # Save log files created by ctest script + - name: Save log (Linux_Leak) + uses: actions/upload-artifact@v4 + with: + name: leak-ubuntu-log + path: ${{ runner.workspace }}/hdf5/hdf5.log + if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` + + build_and_test_linux_AddressSanitizer: + # Linux (Ubuntu) w/ clang + AddressSanitizer + # + name: "Ubuntu Clang AddressSanitizer" + runs-on: ubuntu-latest + steps: + - name: Install CMake Dependencies (Linux_Address) + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz curl libncurses5 + + - name: add clang to env + uses: KyleMayes/install-llvm-action@v2.0.5 + id: setup-clang + with: + env: true + version: '18' + + - name: Set file base name (Linux_Address) + id: set-file-base + run: | + FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") + echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT + if [[ '${{ inputs.use_environ }}' == 'release' ]] + then + SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") + else + SOURCE_NAME_BASE=$(echo "hdfsrc") + fi + echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT + + # Get files created by release script + - name: Get tgz-tarball (Linux_Address) + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + with: + name: tgz-tarball + path: ${{ github.workspace }} + + - name: List files for the space (Linux_Address) + run: | + ls -l ${{ github.workspace }} + ls ${{ runner.workspace }} + + - name: Uncompress source (Linux_Address) + run: tar -zxvf ${{ github.workspace }}/${{ steps.set-file-base.outputs.FILE_BASE }}.tar.gz + + - name: Copy script files for the space (Linux_Address) + run: | + cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake ${{ runner.workspace }}/hdf5 + cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF5config.cmake ${{ runner.workspace }}/hdf5 + + - name: List files for the hdf5 (Linux_Address) + run: | + ls ${{ runner.workspace }}/hdf5 + + - name: Create options file (Linux_Address) + uses: "DamianReeves/write-file-action@master" + with: + path: ${{ runner.workspace }}/hdf5/HDF5options.cmake + write-mode: overwrite + contents: | + set (CTEST_DROP_SITE_INIT "my.cdash.org") + # Change following line to submit to your CDash dashboard to a different CDash project + set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") + #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF5") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") + set (MODEL "Sanitize") + set (GROUP "Sanitize") + set (LOCAL_MEMCHECK_TEST "TRUE") + set (CTEST_MEMORYCHECK_TYPE "AddressSanitizer") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_STATIC_LIBS:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_JAVA:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_CPP_LIB:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SANITIZERS:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DUSE_SANITIZER:STRING=Address") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_ENCODING:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_PLUGIN_SUPPORT:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") + + - name: Run ctest (Linux_Address) + run: | + cd "${{ runner.workspace }}/hdf5" + ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-ADDR,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug -VV -O hdf5.log + shell: bash + continue-on-error: true + + # Save log files created by ctest script + - name: Save log (Linux_Address) + uses: actions/upload-artifact@v4 + with: + name: address-ubuntu-log + path: ${{ runner.workspace }}/hdf5/hdf5.log + if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` + + build_and_test_linux_UndefinedBehaviorSanitizer: + # Linux (Ubuntu) w/ clang + UndefinedBehaviorSanitizer + # + name: "Ubuntu Clang UndefinedBehaviorSanitizer" + runs-on: ubuntu-latest + steps: + - name: Install CMake Dependencies (Linux_UndefinedBehavior) + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz curl libncurses5 + + - name: add clang to env + uses: KyleMayes/install-llvm-action@v2.0.5 + id: setup-clang + with: + env: true + version: '18' + + - name: Set file base name (Linux_UndefinedBehavior) + id: set-file-base + run: | + FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") + echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT + if [[ '${{ inputs.use_environ }}' == 'release' ]] + then + SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") + else + SOURCE_NAME_BASE=$(echo "hdfsrc") + fi + echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT + + # Get files created by release script + - name: Get tgz-tarball (Linux_UndefinedBehavior) + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + with: + name: tgz-tarball + path: ${{ github.workspace }} + + - name: List files for the space (Linux_UndefinedBehavior) + run: | + ls -l ${{ github.workspace }} + ls ${{ runner.workspace }} + + - name: Uncompress source (Linux_UndefinedBehavior) + run: tar -zxvf ${{ github.workspace }}/${{ steps.set-file-base.outputs.FILE_BASE }}.tar.gz + + - name: Copy script files for the space (Linux_UndefinedBehavior) + run: | + cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake ${{ runner.workspace }}/hdf5 + cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF5config.cmake ${{ runner.workspace }}/hdf5 + + - name: List files for the hdf5 (Linux_UndefinedBehavior) + run: | + ls ${{ runner.workspace }}/hdf5 + + - name: Create options file (Linux_UndefinedBehavior) + uses: "DamianReeves/write-file-action@master" + with: + path: ${{ runner.workspace }}/hdf5/HDF5options.cmake + write-mode: overwrite + contents: | + set (CTEST_DROP_SITE_INIT "my.cdash.org") + # Change following line to submit to your CDash dashboard to a different CDash project + set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") + #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF5") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") + set (MODEL "Sanitize") + set (GROUP "Sanitize") + set (LOCAL_MEMCHECK_TEST "TRUE") + set (CTEST_MEMORYCHECK_TYPE "UndefinedBehaviorSanitizer") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_STATIC_LIBS:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_JAVA:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_CPP_LIB:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SANITIZERS:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DUSE_SANITIZER:STRING=Undefined") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_ENCODING:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_PLUGIN_SUPPORT:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") + + - name: Run ctest (Linux_UndefinedBehavior) + run: | + cd "${{ runner.workspace }}/hdf5" + ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-UNDEF,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug -VV -O hdf5.log + shell: bash + continue-on-error: true + + # Save log files created by ctest script + - name: Save log (Linux_UndefinedBehavior) + uses: actions/upload-artifact@v4 + with: + name: undefined-ubuntu-log + path: ${{ runner.workspace }}/hdf5/hdf5.log + if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` diff --git a/.github/workflows/cmake-script.yml b/.github/workflows/cmake-script.yml index 35541279595..f30504f10da 100644 --- a/.github/workflows/cmake-script.yml +++ b/.github/workflows/cmake-script.yml @@ -490,9 +490,7 @@ jobs: env: FC: ${{ steps.setup-fortran.outputs.fc }} CC: ${{ steps.setup-fortran.outputs.cc }} - CXX: ${{ steps.setup-fortran.outputs.cxx }} - BINSIGN: ${{ needs.check-secret.outputs.sign-state }} - SIGNTOOLDIR: ${{ github.workspace }}/Microsoft.Windows.SDK.BuildTools/bin/10.0.22621.0/x64 + CXX: ${{ steps.setup-fortran.outputs.cc }} run: | cd "${{ runner.workspace }}/hdf5" ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-Intel,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=VS202264,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log @@ -603,110 +601,6 @@ jobs: if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` ####### clang builds - build_and_test_win_clang: - # Windows w/ clang + CMake - # - name: "Windows ClangCL CTest" - runs-on: windows-latest - steps: - - name: Install Dependencies (Windows_clang) - run: choco install ninja - - - name: add clang to env - uses: KyleMayes/install-llvm-action@v2.0.5 - id: setup-clang - with: - env: true - version: '18' - - - name: Set file base name (Windows_clang) - id: set-file-base - run: | - FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") - echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT - if [[ '${{ inputs.use_environ }}' == 'release' ]] - then - SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") - else - SOURCE_NAME_BASE=$(echo "hdfsrc") - fi - echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT - shell: bash - - # Get files created by release script - - name: Get zip-tarball (Windows_clang) - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 - with: - name: zip-tarball - path: ${{ github.workspace }} - - - name: using powershell - shell: pwsh - run: Get-Location - - - name: List files for the space (Windows_clang) - run: | - Get-ChildItem -Path ${{ github.workspace }} - Get-ChildItem -Path ${{ runner.workspace }} - shell: pwsh - - - name: Uncompress source (Windows_clang) - working-directory: ${{ github.workspace }} - run: 7z x ${{ steps.set-file-base.outputs.FILE_BASE }}.zip - shell: bash - - - name: Copy script files for the space (Windows_clang) - run: | - Copy-Item -Path ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake -Destination ${{ runner.workspace }}/hdf5/ - Copy-Item -Path ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF5config.cmake -Destination ${{ runner.workspace }}/hdf5/ - shell: pwsh - - - name: List files for the hdf5 (Windows_clang) - run: | - Get-ChildItem -Path ${{ runner.workspace }}/hdf5 - shell: pwsh - - - name: Create options file (Windows_clang) - uses: "DamianReeves/write-file-action@master" - with: - path: ${{ runner.workspace }}/hdf5/HDF5options.cmake - write-mode: overwrite - contents: | - set (CTEST_DROP_SITE_INIT "my.cdash.org") - # Change following line to submit to your CDash dashboard to a different CDash project - #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF5") - set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") - #set (CMAKE_GENERATOR_TOOLSET "ClangCL") - set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") - #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_TOOLCHAIN_FILE:STRING=config/toolchain/clang.cmake") - set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_JAVA:BOOL=ON") - set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_CPP_LIB:BOOL=ON") - set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=OFF") - set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=ON") - set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=ON") - set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_ENCODING:BOOL=ON") - set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_PLUGIN_SUPPORT:BOOL=ON") - set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") - set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") - - - name: Run ctest (Windows_clang) with clang - env: - BINSIGN: ${{ needs.check-secret.outputs.sign-state }} - SIGNTOOLDIR: ${{ github.workspace }}/Microsoft.Windows.SDK.BuildTools/bin/10.0.22621.0/x64 - run: | - cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-Clang,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=VS202264,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log - shell: pwsh - continue-on-error: true - - # Save log files created by ctest script - - name: Save log (Windows_clang) - uses: actions/upload-artifact@v4 - with: - name: clang-win-log - path: ${{ runner.workspace }}/hdf5/hdf5.log - if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - build_and_test_linux_clang: # Linux (Ubuntu) w/ clang + CMake # diff --git a/.github/workflows/daily-build.yml b/.github/workflows/daily-build.yml index ef98e353ab2..65150c5f3ec 100644 --- a/.github/workflows/daily-build.yml +++ b/.github/workflows/daily-build.yml @@ -1,6 +1,7 @@ name: hdf5 dev daily build -# Triggers the workflow on a schedule or on demand +# Triggers the workflow on demand or on a call from another workflow +# NOTE: inputs must be duplicated between triggers on: workflow_dispatch: inputs: @@ -9,8 +10,13 @@ on: type: string required: false default: check - schedule: - - cron: "6 0 * * *" + workflow_call: + inputs: + use_ignore: + description: 'Ignore has_changes check' + type: string + required: false + default: check permissions: contents: read @@ -61,6 +67,14 @@ jobs: use_environ: snapshots if: ${{ ((needs.call-workflow-tarball.outputs.has_changes == 'true') || (needs.get-old-names.outputs.run-ignore == 'ignore')) }} + call-workflow-sanitizers: + needs: [get-old-names, call-workflow-tarball] + uses: ./.github/workflows/cmake-analysis.yml + with: + file_base: ${{ needs.call-workflow-tarball.outputs.file_base }} + use_environ: snapshots + if: ${{ ((needs.call-workflow-tarball.outputs.has_changes == 'true') || (needs.get-old-names.outputs.run-ignore == 'ignore')) }} + call-workflow-ctest: needs: [get-old-names, call-workflow-tarball] uses: ./.github/workflows/cmake-ctest.yml diff --git a/.github/workflows/daily-schedule.yml b/.github/workflows/daily-schedule.yml new file mode 100644 index 00000000000..83486c97696 --- /dev/null +++ b/.github/workflows/daily-schedule.yml @@ -0,0 +1,16 @@ +name: hdf5 dev daily build on schedule + +# Triggers the workflow on a schedule or on demand +on: + workflow_dispatch: + schedule: + - cron: "6 0 * * *" + +permissions: + contents: write # In order to allow tag creation and file deletion + +jobs: + daily-build: + uses: ./.github/workflows/daily-build.yml + with: + use_ignore: check diff --git a/CMakeLists.txt b/CMakeLists.txt index 2dc3af4a8ef..5522dc35aad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -600,8 +600,10 @@ option (HDF5_ENABLE_COVERAGE "Enable code coverage for Libraries and Programs" O if (HDF5_ENABLE_COVERAGE) include (${HDF5_SOURCE_DIR}/config/sanitizer/code-coverage.cmake) if(CODE_COVERAGE AND CODE_COVERAGE_ADDED) + message(VERBOSE "Add instrumentation to all targets") add_code_coverage () # Adds instrumentation to all targets else () + message(VERBOSE "Use --coverage option") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 --coverage -fprofile-arcs -ftest-coverage") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g --coverage -O0 -fprofile-arcs -ftest-coverage") if (CMAKE_C_COMPILER_ID STREQUAL "GNU") diff --git a/config/cmake/ConfigureChecks.cmake b/config/cmake/ConfigureChecks.cmake index 6db82bb9229..c13334c5f8c 100644 --- a/config/cmake/ConfigureChecks.cmake +++ b/config/cmake/ConfigureChecks.cmake @@ -67,6 +67,8 @@ if (WIN32 AND NOT MINGW) set (${HDF_PREFIX}_HAVE_VISUAL_STUDIO 1) endif () endif () + message (TRACE "MSVC=${MSVC}") + message (TRACE "HAVE_VISUAL_STUDIO=${${HDF_PREFIX}_HAVE_VISUAL_STUDIO}") endif () if (WINDOWS) @@ -79,13 +81,12 @@ if (WINDOWS) endif () if (NOT UNIX AND NOT CYGWIN) set (${HDF_PREFIX}_HAVE_GETCONSOLESCREENBUFFERINFO 1) - if (MSVC_VERSION GREATER_EQUAL 1900) - set (${HDF_PREFIX}_HAVE_TIMEZONE 1) - endif () + set (${HDF_PREFIX}_HAVE_TIMEZONE 1) set (${HDF_PREFIX}_HAVE_GETTIMEOFDAY 1) set (${HDF_PREFIX}_HAVE_LIBWS2_32 1) set (${HDF_PREFIX}_HAVE_LIBWSOCK32 1) endif () + message (TRACE "HAVE_TIMEZONE=${${HDF_PREFIX}_HAVE_TIMEZONE}") endif () # ---------------------------------------------------------------------- diff --git a/config/sanitizer/code-coverage.cmake b/config/sanitizer/code-coverage.cmake index 54a33deda3f..5249ed05af1 100644 --- a/config/sanitizer/code-coverage.cmake +++ b/config/sanitizer/code-coverage.cmake @@ -81,9 +81,13 @@ option( # Programs find_program(LLVM_COV_PATH llvm-cov) +message(VERBOSE "program llvm-cov=${LLVM_COV_PATH}") find_program(LLVM_PROFDATA_PATH llvm-profdata) +message(VERBOSE "program llvm-profdata=${LLVM_PROFDATA_PATH}") find_program(LCOV_PATH lcov) +message(VERBOSE "program lcov=${LCOV_PATH}") find_program(GENHTML_PATH genhtml) +message(VERBOSE "program genhtml=${GENHTML_PATH}") # Hide behind the 'advanced' mode flag for GUI/ccmake mark_as_advanced(FORCE LLVM_COV_PATH LLVM_PROFDATA_PATH LCOV_PATH GENHTML_PATH) diff --git a/config/toolchain/intel.cmake b/config/toolchain/intel.cmake index f8f60b28b46..f5b227ba2a0 100644 --- a/config/toolchain/intel.cmake +++ b/config/toolchain/intel.cmake @@ -4,7 +4,11 @@ set(CMAKE_COMPILER_VENDOR "intel") set(CMAKE_C_COMPILER icx) -set(CMAKE_CXX_COMPILER icpx) +if(WIN32) + set(CMAKE_CXX_COMPILER icx) +else() + set(CMAKE_CXX_COMPILER icpx) +endif() set(CMAKE_Fortran_COMPILER ifx) # the following is used if cross-compiling diff --git a/src/H5VLpassthru.c b/src/H5VLpassthru.c index 8c1de0e6d96..14274ed86c9 100644 --- a/src/H5VLpassthru.c +++ b/src/H5VLpassthru.c @@ -49,13 +49,6 @@ /* (Uncomment to enable) */ /* #define ENABLE_PASSTHRU_LOGGING */ -/* Hack for missing va_copy() in old Visual Studio editions - * (from H5win2_defs.h - used on VS2012 and earlier) - */ -#if defined(_WIN32) && defined(_MSC_VER) && (_MSC_VER < 1800) -#define va_copy(D, S) ((D) = (S)) -#endif - /************/ /* Typedefs */ /************/ diff --git a/src/H5system.c b/src/H5system.c index 21135bc5da9..2da53d82e55 100644 --- a/src/H5system.c +++ b/src/H5system.c @@ -173,14 +173,10 @@ Nflock(int H5_ATTR_UNUSED fd, int H5_ATTR_UNUSED operation) time_t H5_make_time(struct tm *tm) { - time_t the_time; /* The converted time */ -#if defined(H5_HAVE_VISUAL_STUDIO) && (_MSC_VER >= 1900) /* VS 2015 */ - /* In gcc and in Visual Studio prior to VS 2015 'timezone' is a global - * variable declared in time.h. That variable was deprecated and in - * VS 2015 is removed, with _get_timezone replacing it. - */ + time_t the_time; /* The converted time */ +#if defined(H5_HAVE_VISUAL_STUDIO) long timezone = 0; -#endif /* defined(H5_HAVE_VISUAL_STUDIO) && (_MSC_VER >= 1900) */ +#endif time_t ret_value = 0; /* Return value */ FUNC_ENTER_NOAPI_NOINIT @@ -203,13 +199,9 @@ H5_make_time(struct tm *tm) /* BSD-like systems */ the_time += tm->tm_gmtoff; #elif defined(H5_HAVE_TIMEZONE) -#if defined(H5_HAVE_VISUAL_STUDIO) && (_MSC_VER >= 1900) /* VS 2015 */ - /* In gcc and in Visual Studio prior to VS 2015 'timezone' is a global - * variable declared in time.h. That variable was deprecated and in - * VS 2015 is removed, with _get_timezone replacing it. - */ +#if defined(H5_HAVE_VISUAL_STUDIO) _get_timezone(&timezone); -#endif /* defined(H5_HAVE_VISUAL_STUDIO) && (_MSC_VER >= 1900) */ +#endif the_time -= timezone - (tm->tm_isdst ? 3600 : 0); #else From 9df4c0dad41e10f2fc020888d380ccdd6ba9ed57 Mon Sep 17 00:00:00 2001 From: vchoi-hdfgroup <55293060+vchoi-hdfgroup@users.noreply.github.com> Date: Fri, 11 Oct 2024 07:38:22 -0500 Subject: [PATCH 003/179] =?UTF-8?q?Fix=20for=20issue=20#4849=20that=20sett?= =?UTF-8?q?ings=20in=20fapl=20libver=20bounds=20causes=20unexpe=E2=80=A6?= =?UTF-8?q?=20(#4939)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix for issue #4849 that settings in fapl libver bounds causes unexpected H5Fopen failures. File with non-SWMR-write access can now be opened without regard for superblock version. Due to the fix, H5Fstart_swmr_write() also needs to be modified as well as the tests for libver bounds. The "RFC: Setting Bounds for Object Creation in HDF5 1.10.0" is also updated to reflect the changes. * Fix c++ libver bound test failure. --- c++/test/tfile.cpp | 2 +- src/H5Fint.c | 36 ++++-- src/H5Fsuper.c | 36 ++---- src/H5Oint.c | 17 +++ src/H5Oprivate.h | 1 + test/swmr.c | 275 +++++++++++++++++++++++++++------------------ test/tfile.c | 165 +++++++-------------------- test/tmisc.c | 2 +- 8 files changed, 261 insertions(+), 273 deletions(-) diff --git a/c++/test/tfile.cpp b/c++/test/tfile.cpp index bd7d96422e8..7f3406a60b8 100644 --- a/c++/test/tfile.cpp +++ b/c++/test/tfile.cpp @@ -759,7 +759,7 @@ test_libver_bounds() /* Run the tests */ test_libver_bounds_real(H5F_LIBVER_EARLIEST, H5O_VERSION_1, H5F_LIBVER_LATEST, H5O_VERSION_2); - test_libver_bounds_real(H5F_LIBVER_LATEST, H5O_VERSION_2, H5F_LIBVER_EARLIEST, H5O_VERSION_2); + test_libver_bounds_real(H5F_LIBVER_LATEST, H5O_VERSION_2, H5F_LIBVER_EARLIEST, H5O_VERSION_1); PASSED(); } /* end test_libver_bounds() */ diff --git a/src/H5Fint.c b/src/H5Fint.c index 0764bb43beb..e89b4bdb6af 100644 --- a/src/H5Fint.c +++ b/src/H5Fint.c @@ -3181,7 +3181,8 @@ H5F__set_libver_bounds(H5F_t *f, H5F_libver_t low, H5F_libver_t high) assert(f->shared); /* Set the bounds only if the existing setting is different from the inputs */ - if (f->shared->low_bound != low || f->shared->high_bound != high) { + if ((f->shared->low_bound != low || f->shared->high_bound != high) && + !(H5F_INTENT(f) & H5F_ACC_SWMR_WRITE)) { /* Call the flush routine, for this file */ /* Note: This is done in case the binary format for representing a * metadata entry class changes when the file format low / high @@ -3704,6 +3705,7 @@ H5F_get_metadata_read_retry_info(H5F_t *file, H5F_retry_info_t *info) * --only allow datasets and groups without attributes * --disallow named datatype with/without attributes * --disallow opened attributes attached to objects + * --disallow opened objects below 1.10 * * NOTE: Currently, only opened groups and datasets are allowed * when enabling SWMR via H5Fstart_swmr_write(). @@ -3746,7 +3748,7 @@ H5F__start_swmr_write(H5F_t *f) if (f->shared->sblock->super_vers < HDF5_SUPERBLOCK_VERSION_3) HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "file superblock version - should be at least 3"); - /* Check for correct file format version */ + /* Check for correct file format version to start SWMR writing */ if ((f->shared->low_bound < H5F_LIBVER_V110) || (f->shared->high_bound < H5F_LIBVER_V110)) HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "file format version does not support SWMR - needs to be 1.10 or greater"); @@ -3783,6 +3785,31 @@ H5F__start_swmr_write(H5F_t *f) /* Allocate space for group and object locations */ if ((obj_ids = (hid_t *)H5MM_malloc(grp_dset_count * sizeof(hid_t))) == NULL) HGOTO_ERROR(H5E_FILE, H5E_CANTALLOC, FAIL, "can't allocate buffer for hid_t"); + + /* Get the list of opened object ids (groups & datasets) */ + if (H5F_get_obj_ids(f, H5F_OBJ_GROUP | H5F_OBJ_DATASET, grp_dset_count, obj_ids, false, + &grp_dset_count) < 0) + HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "H5F_get_obj_ids failed"); + + /* Ensure that there's no old-style opened objects */ + for (u = 0; u < grp_dset_count; u++) { + H5O_native_info_t ninfo; + H5O_loc_t *oloc; + uint8_t version; + + if (NULL == (oloc = H5O_get_loc(obj_ids[u]))) + HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "H5O_get_loc() failed"); + + if (H5O_get_native_info(oloc, &ninfo, H5O_NATIVE_INFO_HDR) < 0) + HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "H5O_get_native_info() failed"); + + if (H5O_get_version_bound(f->shared->low_bound, &version) < 0) + HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "H5O_get_version_bound() failed"); + + if (ninfo.hdr.version < version) + HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "disallow opened objects below 1.10"); + } + if ((obj_glocs = (H5G_loc_t *)H5MM_malloc(grp_dset_count * sizeof(H5G_loc_t))) == NULL) HGOTO_ERROR(H5E_FILE, H5E_CANTALLOC, FAIL, "can't allocate buffer for object group locations"); if ((obj_olocs = (H5O_loc_t *)H5MM_malloc(grp_dset_count * sizeof(H5O_loc_t))) == NULL) @@ -3797,11 +3824,6 @@ H5F__start_swmr_write(H5F_t *f) HGOTO_ERROR(H5E_FILE, H5E_CANTALLOC, FAIL, "can't allocate buffer for hid_t"); assert(obj_apl_ids[0] == H5P_DEFAULT); - /* Get the list of opened object ids (groups & datasets) */ - if (H5F_get_obj_ids(f, H5F_OBJ_GROUP | H5F_OBJ_DATASET, grp_dset_count, obj_ids, false, - &grp_dset_count) < 0) - HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "H5F_get_obj_ids failed"); - /* Save the VOL connector and the object wrapping context for the refresh step */ if (grp_dset_count > 0) { H5VL_object_t *vol_obj; diff --git a/src/H5Fsuper.c b/src/H5Fsuper.c index 39c92f34b17..28b21ed01b3 100644 --- a/src/H5Fsuper.c +++ b/src/H5Fsuper.c @@ -432,45 +432,27 @@ H5F__super_read(H5F_t *f, H5P_genplist_t *fa_plist, bool initial_read) HGOTO_ERROR(H5E_FILE, H5E_CANTPROTECT, FAIL, "unable to load superblock"); /* - * When opening a file with SWMR-write access, the library will first - * check to ensure that superblock version 3 is used. Otherwise fail - * file open. - * - * Then the library will upgrade the file's low_bound depending on - * superblock version as follows: - * --version 0 or 1: no change to low_bound - * --version 2: upgrade low_bound to at least V18 - * --version 3: upgrade low_bound to at least V110 + * When opening a file with SWMR-write access, the library will check to + * ensure that: + * --superblock version 3 is used + * --superblock version does not exceed the version allowed by high bound + * --upgrade low_bound to at least V110 + * Otherwise fail file open for SMWR-write access * * Upgrading low_bound will give the best format versions available for * that superblock version. Due to the possible upgrade, the fapl returned * from H5Fget_access_plist() might indicate a low_bound higher than what * the user originally set. * - * After upgrading low_bound, the library will check to ensure that the - * superblock version does not exceed the version allowed by high_bound. - * Otherwise fail file open. - * * For details, please see RFC:Setting Bounds for Object Creation in HDF5 1.10.0. */ - - /* Check to ensure that superblock version 3 is used for SWMR-write access */ if (H5F_INTENT(f) & H5F_ACC_SWMR_WRITE) { if (sblock->super_vers < HDF5_SUPERBLOCK_VERSION_3) HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "superblock version for SWMR is less than 3"); - } - - /* Upgrade low_bound to at least V18 when encountering version 2 superblock */ - if (sblock->super_vers == HDF5_SUPERBLOCK_VERSION_2) - f->shared->low_bound = MAX(H5F_LIBVER_V18, f->shared->low_bound); - - /* Upgrade low_bound to at least V110 when encountering version 3 superblock */ - if (sblock->super_vers >= HDF5_SUPERBLOCK_VERSION_3) + if (sblock->super_vers > HDF5_superblock_ver_bounds[f->shared->high_bound]) + HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "superblock version exceeds high bound"); f->shared->low_bound = MAX(H5F_LIBVER_V110, f->shared->low_bound); - - /* Version bounds check */ - if (sblock->super_vers > HDF5_superblock_ver_bounds[f->shared->high_bound]) - HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "superblock version exceeds high bound"); + } /* Pin the superblock in the cache */ if (H5AC_pin_protected_entry(sblock) < 0) diff --git a/src/H5Oint.c b/src/H5Oint.c index 4256f9cc79f..c9363697fa5 100644 --- a/src/H5Oint.c +++ b/src/H5Oint.c @@ -2959,3 +2959,20 @@ H5O_has_chksum(const H5O_t *oh) FUNC_LEAVE_NOAPI(H5O_SIZEOF_CHKSUM_OH(oh) > 0) } /* end H5O_has_chksum() */ + +/*------------------------------------------------------------------------- + * Function: H5O_get_version_bound + * + * Purpose: Retrieve the version for a given bound from object version array + * + *------------------------------------------------------------------------- + */ +herr_t +H5O_get_version_bound(H5F_libver_t bound, uint8_t *version) +{ + FUNC_ENTER_NOAPI_NOINIT_NOERR + + *version = (uint8_t)H5O_obj_ver_bounds[bound]; + + FUNC_LEAVE_NOAPI(SUCCEED) +} /* end H5O_get_version_bound() */ diff --git a/src/H5Oprivate.h b/src/H5Oprivate.h index a5eebcf3985..4b1f4e07940 100644 --- a/src/H5Oprivate.h +++ b/src/H5Oprivate.h @@ -933,6 +933,7 @@ H5_DLL uint8_t H5O_get_oh_version(const H5O_t *oh); H5_DLL herr_t H5O_get_rc_and_type(const H5O_loc_t *oloc, unsigned *rc, H5O_type_t *otype); H5_DLL H5AC_proxy_entry_t *H5O_get_proxy(const H5O_t *oh); H5_DLL bool H5O_has_chksum(const H5O_t *oh); +H5_DLL herr_t H5O_get_version_bound(H5F_libver_t bound, uint8_t *version); /* Object header message routines */ H5_DLL herr_t H5O_msg_create(const H5O_loc_t *loc, unsigned type_id, unsigned mesg_flags, diff --git a/test/swmr.c b/test/swmr.c index cb99917756a..ce9d73e272c 100644 --- a/test/swmr.c +++ b/test/swmr.c @@ -1554,20 +1554,26 @@ test_metadata_read_retry_info(hid_t in_fapl) * Should fail to enable SWMR as the file is already in SWMR writing mode * Close the file * - * (B) Opening a file - * Open the file with write + non-latest-format - * --file has v3 superblock and all latest version support enabled - * Open dataset "dataset1" 3 times--keep it open - * Write to "dataset1" - * Create a group in the file - * Create a chunked dataset "dataset2" in the group--should be using latest chunk indexing--keep it open - * Should succeed in enabling SWMR - * Should succeed in reading from multiple opens of "dataset1" - * Close multiple opens of "dataset1" - * Close "dataset2" - * Create "dataset3"--should be using latest chunk indexing - * Close "dataset3" - * Close the group and file + * (B) Open the file with write + non-latest-format (earliest, latest) + * --file has v3 superblock + * Create a group in the file + * Create a chunked dataset "dataset2" in the group--keep it open + * Verify "dataset2" is using v1 btree indexing + * Should fail to enable SWMR writing + * + * (C) Open a file with write + non-latest format (V110, latest) + * Open the old style group "/group/dataset2" in the file + * Should fail to enable SWMR writing + * + * (D) Open a file with write + non-latest format (V110, latest) + * Open the old style group "/group" + * Open the new style group "/dataset1" in the file + * Should fail to enable SWMR writing + * + * (E) Open a file with write + non-latest format (V110, latest) + * Open the new style group "/dataset1" in the file + * Should succeed to enable SWMR writing + * */ static int test_start_swmr_write(hid_t in_fapl, bool new_format) @@ -1707,11 +1713,11 @@ test_start_swmr_write(hid_t in_fapl, bool new_format) FAIL_STACK_ERROR; /* - * Case B: when opening a file + * Case B: when opening a file with (earliest, latest) */ - /* Open the file again with write + non-latest-format */ - if ((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) + /* Open the file again with write + non-latest-format (earliest, latest) */ + if ((fid = H5Fopen(filename, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR; /* Get the file's access_property list */ @@ -1730,23 +1736,6 @@ test_start_swmr_write(hid_t in_fapl, bool new_format) if (H5Pclose(file_fapl) < 0) FAIL_STACK_ERROR; - /* open "dataset1", keep it open */ - if ((did1 = H5Dopen2(fid, "dataset1", H5P_DEFAULT)) < 0) - FAIL_STACK_ERROR; - - /* open "dataset1" second time */ - if ((did1_a = H5Dopen2(fid, "dataset1", H5P_DEFAULT)) < 0) - FAIL_STACK_ERROR; - - /* open "dataset1" third time */ - if ((did1_b = H5Dopen2(fid, "dataset1", H5P_DEFAULT)) < 0) - FAIL_STACK_ERROR; - - /* Write to "dataset1" */ - wdata = 88; - if (H5Dwrite(did1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &wdata) < 0) - FAIL_STACK_ERROR; - /* Create a group */ if ((gid = H5Gcreate2(fid, "group", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR; @@ -1764,99 +1753,112 @@ test_start_swmr_write(hid_t in_fapl, bool new_format) /* Get the chunk index type for "dataset2" */ if (H5D__layout_idx_type_test(did2, &idx_type) < 0) FAIL_STACK_ERROR; - if (idx_type != H5D_CHUNK_IDX_BT2) - FAIL_PUTS_ERROR("should be using v2 B-tree chunk indexing"); - - /* Should succeed in enabling SWMR writing */ - if (H5Fstart_swmr_write(fid) < 0) - FAIL_STACK_ERROR; - - /* Get the file's access_property list */ - if ((file_fapl = H5Fget_access_plist(fid)) < 0) - FAIL_STACK_ERROR; + if (idx_type != H5D_CHUNK_IDX_BTREE) + FAIL_PUTS_ERROR("should be using v1 B-tree chunk indexing"); - /* Retrieve the # of read attempts */ - if (H5Pget_metadata_read_attempts(file_fapl, &attempts) < 0) - FAIL_STACK_ERROR; + /* Should fail in enabling SWMR writing since file is opened with (earliest/latest) */ + H5E_BEGIN_TRY + { + ret = H5Fstart_swmr_write(fid); + } + H5E_END_TRY + if (ret >= 0) + TEST_ERROR; - /* Should be 100 */ - if (attempts != H5F_SWMR_METADATA_READ_ATTEMPTS) + if (H5Gclose(gid) < 0) + TEST_ERROR; + if (H5Dclose(did2) < 0) + TEST_ERROR; + if (H5Fclose(fid) < 0) TEST_ERROR; - /* Close the property list */ - if (H5Pclose(file_fapl) < 0) - FAIL_STACK_ERROR; + /* + * Case C: when opening a file with (V110, latest) + */ - rdata = 0; - /* Read from "dataset1" via did1_b (multiple opens) */ - if (H5Dread(did1_b, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdata) < 0) - FAIL_STACK_ERROR; - if (wdata != rdata) - FAIL_STACK_ERROR; - if (H5Dclose(did1_b) < 0) + if (H5Pset_libver_bounds(fapl, H5F_LIBVER_V110, H5F_LIBVER_LATEST) < 0) FAIL_STACK_ERROR; - /* Read from "dataset1" */ - rdata = 0; - if (H5Dread(did1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdata) < 0) - FAIL_STACK_ERROR; - if (wdata != rdata) - FAIL_STACK_ERROR; - if (H5Dclose(did1) < 0) + /* Open the file again with write + non-latest-format (V110, latest) */ + if ((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR; - rdata = 0; - /* Read from "dataset1" via did1_a (multiple opens) */ - if (H5Dread(did1_a, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdata) < 0) - FAIL_STACK_ERROR; - if (wdata != rdata) + /* Open the old style dataset: /group/datset2 */ + if ((did2 = H5Dopen2(fid, "/group/dataset2", H5P_DEFAULT)) < 0) FAIL_STACK_ERROR; - if (H5Dclose(did1_a) < 0) + + /* Open the new style dataset */ + if ((did1 = H5Dopen2(fid, "dataset1", H5P_DEFAULT)) < 0) FAIL_STACK_ERROR; - /* Close "dataset2", dataspace, dataset creation property list */ + /* Should fail in enabling SWMR writing since there are old style objects opened */ + H5E_BEGIN_TRY + { + ret = H5Fstart_swmr_write(fid); + } + H5E_END_TRY + if (ret >= 0) + TEST_ERROR; + if (H5Dclose(did2) < 0) - FAIL_STACK_ERROR; - if (H5Sclose(sid2) < 0) - FAIL_STACK_ERROR; - if (H5Pclose(dcpl) < 0) - FAIL_STACK_ERROR; + TEST_ERROR; + if (H5Dclose(did1) < 0) + TEST_ERROR; + if (H5Fclose(fid) < 0) + TEST_ERROR; - /* Create "dataset3" */ - if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) - FAIL_STACK_ERROR; - if (H5Pset_chunk(dcpl, 2, chunk_dim2) < 0) - FAIL_STACK_ERROR; - if ((sid3 = H5Screate_simple(2, dim2, max_dim2)) < 0) - FAIL_STACK_ERROR; - if ((did3 = H5Dcreate2(fid, "dataset3", H5T_NATIVE_INT, sid3, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) - FAIL_STACK_ERROR; + /* + * Case D: when opening a file with (V110, latest) + */ - /* Get the chunk index type for "dataset3" */ - if (H5D__layout_idx_type_test(did3, &idx_type) < 0) + /* Open the file again with write + non-latest-format (V110, latest) */ + if ((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR; - if (idx_type != H5D_CHUNK_IDX_BT2) - FAIL_PUTS_ERROR("should be using v2 B-tree as index"); - /* Close "dataset3", dataspace, dataset creation property list */ - if (H5Dclose(did3) < 0) - FAIL_STACK_ERROR; - if (H5Sclose(sid3) < 0) + /* Open the old style group: /group */ + if ((gid = H5Gopen2(fid, "group", H5P_DEFAULT)) < 0) FAIL_STACK_ERROR; - if (H5Pclose(dcpl) < 0) + + /* Open the new style dataset */ + if ((did1 = H5Dopen2(fid, "dataset1", H5P_DEFAULT)) < 0) FAIL_STACK_ERROR; - /* Close the group */ + /* Should fail in enabling SWMR writing since there are old style objects opened */ + H5E_BEGIN_TRY + { + ret = H5Fstart_swmr_write(fid); + } + H5E_END_TRY + if (ret >= 0) + TEST_ERROR; + if (H5Gclose(gid) < 0) + TEST_ERROR; + if (H5Dclose(did1) < 0) + TEST_ERROR; + if (H5Fclose(fid) < 0) + TEST_ERROR; + + /* + * Case E: when opening a file with (V110, latest) + */ + + /* Open the file again with write + non-latest-format (V110, latest) */ + if ((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR; - /* Close the file access property list */ - if (H5Pclose(fapl) < 0) + /* Open the new style dataset */ + if ((did1 = H5Dopen2(fid, "dataset1", H5P_DEFAULT)) < 0) FAIL_STACK_ERROR; - /* Close the file */ + /* Should succeed in enabling SWMR writing */ + if (H5Fstart_swmr_write(fid) < 0) + TEST_ERROR; + + if (H5Dclose(did1) < 0) + TEST_ERROR; if (H5Fclose(fid) < 0) - FAIL_STACK_ERROR; + TEST_ERROR; PASSED(); @@ -1915,12 +1917,12 @@ test_start_swmr_write(hid_t in_fapl, bool new_format) * --Enable SWMR writing mode twice * --First time succeed, second time fail * --Close the file - (2) --Open the file with write + with/without latest format + * (2) --Open the file with write + with/without latest format * --Succeed to enable SWMR writing mode * --Reopen the same file * --fail to enable SWMR writing mode for the reopened file * --Close the file - (3) --Open the file with write + with/without latest format + * (3) --Open the file with write + with/without latest format * --Open the same file again * --succeed to enable SWMR for the first opened file * --fail to enable SWMR for the second opened file @@ -1931,7 +1933,6 @@ test_start_swmr_write(hid_t in_fapl, bool new_format) * --fail to open due to superblock version not 3 * (2) Open the file with SWMR write+non-latest-format * --fail to open due to superblock version not 3 - * (3) Open the file with write+latest format * --fail to enable SWMR due to superblock version not 3 * (4) Open the file with write+non-latest-format @@ -2164,8 +2165,18 @@ test_err_start_swmr_write(hid_t in_fapl, bool new_format) if (H5Aclose(aid) < 0) FAIL_STACK_ERROR; - /* Should succeed in enabling SWMR writing */ - if (H5Fstart_swmr_write(fid) < 0) + /* Should succeed in enabling SWMR writing when new_format */ + /* Should fail in enabling SWMR writing when !new_format */ + H5E_BEGIN_TRY + { + ret = H5Fstart_swmr_write(fid); + } + H5E_END_TRY + if (new_format) { + if (ret < 0) + TEST_ERROR; + } + else if (ret >= 0) TEST_ERROR; /* Close the dataspace */ @@ -2195,8 +2206,18 @@ test_err_start_swmr_write(hid_t in_fapl, bool new_format) if ((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR; - /* Should succeed in enabling SWMR writing mode */ - if (H5Fstart_swmr_write(fid) < 0) + /* Should succeed when new_format */ + /* Should fail when !new_format */ + H5E_BEGIN_TRY + { + ret = H5Fstart_swmr_write(fid); + } + H5E_END_TRY + if (new_format) { + if (ret < 0) + TEST_ERROR; + } + else if (ret >= 0) TEST_ERROR; /* Should fail for a second call to enable SWMR writing mode */ @@ -2218,8 +2239,18 @@ test_err_start_swmr_write(hid_t in_fapl, bool new_format) if ((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR; - /* Should succeed in enabling SWMR writing mode */ - if (H5Fstart_swmr_write(fid) < 0) + /* Should succeed when new_format */ + /* Should fail when !new_format */ + H5E_BEGIN_TRY + { + ret = H5Fstart_swmr_write(fid); + } + H5E_END_TRY + if (new_format) { + if (ret < 0) + TEST_ERROR; + } + else if (ret >= 0) TEST_ERROR; /* Re-open the same file */ @@ -2251,8 +2282,18 @@ test_err_start_swmr_write(hid_t in_fapl, bool new_format) if ((fid2 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR; - /* Should succeed in enabling SWMR writing for fid */ - if (H5Fstart_swmr_write(fid) < 0) + /* Should succeed when new_format */ + /* Should fail when !new_format */ + H5E_BEGIN_TRY + { + ret = H5Fstart_swmr_write(fid); + } + H5E_END_TRY + if (new_format) { + if (ret < 0) + TEST_ERROR; + } + else if (ret >= 0) TEST_ERROR; /* Should fail to enable SWMR writing for fid2 */ @@ -2500,6 +2541,11 @@ test_start_swmr_write_concur(hid_t in_fapl, bool new_format) * will fail without H5Fstart_swmr_write() */ + if (!new_format) { + if (H5Pset_libver_bounds(fapl, H5F_LIBVER_V110, H5F_LIBVER_LATEST) < 0) + FAIL_STACK_ERROR; + } + /* Fork child process */ if ((childpid = fork()) < 0) FAIL_STACK_ERROR; @@ -7429,6 +7475,11 @@ test_multiple_same(hid_t in_fapl, bool new_format) if ((fapl = H5Pcopy(in_fapl)) < 0) FAIL_STACK_ERROR; + if (!new_format) { + if (H5Pset_libver_bounds(fapl, H5F_LIBVER_V110, H5F_LIBVER_LATEST) < 0) + FAIL_STACK_ERROR; + } + /* Set the filename to use for this test (dependent on fapl) */ h5_fixname(FILENAME[0], fapl, filename, sizeof(filename)); diff --git a/test/tfile.c b/test/tfile.c index 0915ef78ba3..9ffedc0f001 100644 --- a/test/tfile.c +++ b/test/tfile.c @@ -5649,19 +5649,18 @@ test_libver_bounds_real(H5F_libver_t libver_create, unsigned oh_vers_create, H5F * *------------------------------------------------------------------------- */ -#define VERBFNAME "tverbounds_dspace.h5" +#define VFNAME "verbounds.h5" #define VERBDSNAME "dataset 1" #define SPACE1_DIM1 3 static void test_libver_bounds_open(void) { - hid_t file = H5I_INVALID_HID; /* File ID */ - hid_t space = H5I_INVALID_HID; /* Dataspace ID */ - hid_t dset = H5I_INVALID_HID; /* Dataset ID */ - hid_t fapl = H5I_INVALID_HID; /* File access property list ID */ - hid_t new_fapl = H5I_INVALID_HID; /* File access property list ID for reopened file */ - hid_t dcpl = H5I_INVALID_HID; /* Dataset creation property list ID */ - hsize_t dim[1] = {SPACE1_DIM1}; /* Dataset dimensions */ + hid_t file = H5I_INVALID_HID; /* File ID */ + hid_t space = H5I_INVALID_HID; /* Dataspace ID */ + hid_t dset = H5I_INVALID_HID; /* Dataset ID */ + hid_t fapl = H5I_INVALID_HID; /* File access property list ID */ + hid_t dcpl = H5I_INVALID_HID; /* Dataset creation property list ID */ + hsize_t dim[1] = {SPACE1_DIM1}; /* Dataset dimensions */ H5F_libver_t low, high; /* File format bounds */ hsize_t chunk_dim[1] = {SPACE1_DIM1}; /* Chunk dimensions */ bool vol_is_native; @@ -5707,7 +5706,7 @@ test_libver_bounds_open(void) CHECK(ret, FAIL, "H5Pset_libver_bounds"); /* Create the file */ - file = H5Fcreate(VERBFNAME, H5F_ACC_TRUNC, H5P_DEFAULT, fapl); + file = H5Fcreate(VFNAME, H5F_ACC_TRUNC, H5P_DEFAULT, fapl); CHECK(file, FAIL, "H5Fcreate"); /* Create dataset */ @@ -5720,49 +5719,36 @@ test_libver_bounds_open(void) ret = H5Fclose(file); CHECK(ret, FAIL, "H5Fclose"); - /* Attempt to open latest file with (earliest, v18), should fail */ + /* Attempt to open latest file with (earliest, v18) should succeed */ ret = H5Pset_libver_bounds(fapl, H5F_LIBVER_EARLIEST, H5F_LIBVER_V18); - H5E_BEGIN_TRY - { - file = H5Fopen(VERBFNAME, H5F_ACC_RDONLY, fapl); - } - H5E_END_TRY - VERIFY(file, FAIL, "Attempted to open latest file with earliest version"); + CHECK(ret, FAIL, "H5Pset_libver_bounds"); + + if ((file = H5Fopen(VFNAME, H5F_ACC_RDONLY, fapl)) < 0) + VERIFY((file >= 0), true, "Attempt to open latest file with earliest version should succeed"); + ret = H5Fclose(file); + CHECK(ret, FAIL, "H5Fclose"); /* Attempt to open latest file with (v18, v18), should fail */ ret = H5Pset_libver_bounds(fapl, H5F_LIBVER_V18, H5F_LIBVER_V18); - H5E_BEGIN_TRY - { - file = H5Fopen(VERBFNAME, H5F_ACC_RDONLY, fapl); - } - H5E_END_TRY - VERIFY(file, FAIL, "Attempted to open latest file with v18 bounds"); + CHECK(ret, FAIL, "H5Pset_libver_bounds"); + + file = H5Fopen(VFNAME, H5F_ACC_RDONLY, fapl); + VERIFY((file >= 0), true, "Attempt to open latest file with v18 bounds should succeed"); + ret = H5Fclose(file); + CHECK(ret, FAIL, "H5Fclose"); - /* Opening VERBFNAME in these combination should succeed. - For each low bound, verify that it is upgraded properly */ + /* Opening VERBFNAME in these combination should succeed */ high = H5F_LIBVER_LATEST; for (low = H5F_LIBVER_EARLIEST; low < H5F_LIBVER_NBOUNDS; low++) { - H5F_libver_t new_low = H5F_LIBVER_EARLIEST; /* Set version bounds for opening file */ ret = H5Pset_libver_bounds(fapl, low, high); CHECK(ret, FAIL, "H5Pset_libver_bounds"); /* Open the file */ - file = H5Fopen(VERBFNAME, H5F_ACC_RDONLY, fapl); - CHECK(file, FAIL, "H5Fopen"); - - /* Get the new file access property */ - new_fapl = H5Fget_access_plist(file); - CHECK(new_fapl, FAIL, "H5Fget_access_plist"); - - /* Get new low bound and verify that it has been upgraded properly */ - ret = H5Pget_libver_bounds(new_fapl, &new_low, NULL); - CHECK(ret, FAIL, "H5Pget_libver_bounds"); - VERIFY(new_low >= H5F_LIBVER_V110, true, "Low bound should be upgraded to at least H5F_LIBVER_V110"); + file = H5Fopen(VFNAME, H5F_ACC_RDONLY, fapl); + VERIFY(file >= 0, true, "H5Fopen should succeed"); - ret = H5Pclose(new_fapl); - CHECK(ret, FAIL, "H5Pclose"); ret = H5Fclose(file); CHECK(ret, FAIL, "H5Fclose"); } /* for low */ @@ -5886,9 +5872,10 @@ test_libver_bounds(void) /* Run the tests */ test_libver_bounds_real(H5F_LIBVER_EARLIEST, 1, H5F_LIBVER_LATEST, 2); - test_libver_bounds_real(H5F_LIBVER_LATEST, 2, H5F_LIBVER_EARLIEST, 2); + test_libver_bounds_real(H5F_LIBVER_LATEST, 2, H5F_LIBVER_EARLIEST, 1); test_libver_bounds_open(); test_libver_bounds_copy(); + } /* end test_libver_bounds() */ /************************************************************************************** @@ -6251,7 +6238,7 @@ test_libver_bounds_super_create(hid_t fapl, hid_t fcpl, htri_t is_swmr, htri_t n ** ** (A) Opening a file with write access ** -** Superblock version 0, 1 +** Superblock version 0, 1, 2, 3 ** -------------------------------------------------------------------------------- ** | (earliest, v18) | (earliest, v110) | (v18, v18) | (v18, v110) | (v110, v110) | ** |______________________________________________________________________________| @@ -6261,26 +6248,6 @@ test_libver_bounds_super_create(hid_t fapl, hid_t fcpl, htri_t is_swmr, htri_t n ** |______________________________________________________________________________| ** ** -** Superblock version 2 -** -------------------------------------------------------------------------------- -** | (earliest, v18) | (earliest, v110) | (v18, v18) | (v18, v110) | (v110, v110) | -** |______________________________________________________________________________| -** File's low bound | -->v18 | no change | -** |------------------------------------------------------------------------------| -** File open | succeed | -** |______________________________________________________________________________| -** -** Superblock version 3 -** -------------------------------------------------------------------------------- -** | (earliest, v18) | (earliest, v110) | (v18, v18) | (v18, v110) | (v110, v110) | -** |______________________________________________________________________________| -** File's low bound | -- | -->v110 | -- | -->v110 | no change | -** |------------------------------------------------------------------------------| -** File open | fail | succeed | fail | succeed | succeed | -** |______________________________________________________________________________| -** -** -** ** (B) Opening a file with SWMR-write access ** ** Superblock version 0, 1, 2 @@ -6316,9 +6283,7 @@ static void test_libver_bounds_super_open(hid_t fapl, hid_t fcpl, htri_t is_swmr, htri_t non_def_fsm) { hid_t fid = H5I_INVALID_HID; /* File ID */ - H5F_t *f = NULL; /* Internal file pointer */ hid_t new_fapl = H5I_INVALID_HID; /* File access property list */ - unsigned super_vers; /* Superblock version */ H5F_libver_t low, high; /* Low and high bounds */ herr_t ret; /* Return value */ @@ -6339,13 +6304,6 @@ test_libver_bounds_super_open(hid_t fapl, hid_t fcpl, htri_t is_swmr, htri_t non else { VERIFY(fid >= 0, true, "H5Fcreate"); - /* Get the internal file pointer */ - f = (H5F_t *)H5VL_object(fid); - CHECK_PTR(f, "H5VL_object"); - - /* The file's superblock version */ - super_vers = f->shared->sblock->super_vers; - /* Close the file */ ret = H5Fclose(fid); CHECK(ret, FAIL, "H5Fclose"); @@ -6374,66 +6332,18 @@ test_libver_bounds_super_open(hid_t fapl, hid_t fcpl, htri_t is_swmr, htri_t non } H5E_END_TRY - if (non_def_fsm && high < H5F_LIBVER_V110) { - VERIFY(fid, H5I_INVALID_HID, "H5Fopen"); - continue; - } - /* Get the internal file pointer if the open succeeds */ if (fid >= 0) { - f = (H5F_t *)H5VL_object(fid); - CHECK_PTR(f, "H5VL_object"); + ret = H5Fclose(fid); + CHECK(ret, FAIL, "H5Fclose"); } + else { - /* Verify the file open succeeds or fails */ - switch (super_vers) { - case 3: - if (high >= H5F_LIBVER_V110) { - /* Should succeed */ - VERIFY(fid >= 0, true, "H5Fopen"); - VERIFY(f->shared->low_bound >= H5F_LIBVER_V110, true, - "HDF5_superblock_ver_bounds"); - - /* Close the file */ - ret = H5Fclose(fid); - CHECK(ret, FAIL, "H5Fclose"); - } - else /* Should fail */ - VERIFY(fid >= 0, false, "H5Fopen"); - break; - - case 2: - if (is_swmr) /* Should fail */ - VERIFY(fid >= 0, false, "H5Fopen"); - else { /* Should succeed */ - VERIFY(fid >= 0, true, "H5Fopen"); - VERIFY(f->shared->low_bound >= H5F_LIBVER_V18, true, - "HDF5_superblock_ver_bounds"); - - /* Close the file */ - ret = H5Fclose(fid); - CHECK(ret, FAIL, "H5Fclose"); - } - break; - - case 1: - case 0: - if (is_swmr) /* Should fail */ - VERIFY(fid >= 0, false, "H5Fopen"); - else { /* Should succeed */ - VERIFY(fid >= 0, true, "H5Fopen"); - VERIFY(f->shared->low_bound, low, "HDF5_superblock_ver_bounds"); - - ret = H5Fclose(fid); - CHECK(ret, FAIL, "H5Fclose"); - } - break; + VERIFY((is_swmr || (non_def_fsm && (high < H5F_LIBVER_V110))), true, "H5Fopen"); + } - default: - break; - } /* end switch */ - } /* end for */ - } /* end for */ + } /* end for */ + } /* end for */ /* Close the file access property list */ ret = H5Pclose(new_fapl); @@ -6555,6 +6465,7 @@ test_libver_bounds_obj(hid_t fapl) fid = H5Fopen(FILE8, H5F_ACC_RDWR, new_fapl); } H5E_END_TRY + VERIFY((fid >= 0), true, "File open should succeed"); if (fid >= 0) { /* The file open succeeds */ @@ -6773,6 +6684,7 @@ test_libver_bounds_dataset(hid_t fapl) fid = H5Fopen(FILE8, H5F_ACC_RDWR, new_fapl); } H5E_END_TRY + VERIFY((fid >= 0), true, "File open should succeed"); if (fid >= 0) { /* The file open succeeds */ @@ -7002,6 +6914,7 @@ test_libver_bounds_dataspace(hid_t fapl) fid = H5Fopen(FILE8, H5F_ACC_RDWR, new_fapl); } H5E_END_TRY + VERIFY((fid >= 0), true, "File open should succeed"); if (fid >= 0) { /* The file open succeeds */ @@ -7338,6 +7251,7 @@ test_libver_bounds_datatype_check(hid_t fapl, hid_t tid) fid = H5Fopen(FILE8, H5F_ACC_RDWR, new_fapl); } H5E_END_TRY + VERIFY((fid >= 0), true, "File open should succeed"); if (fid >= 0) { /* The file open succeeds */ @@ -7666,6 +7580,7 @@ test_libver_bounds_attributes(hid_t fapl) fid = H5Fopen(FILE8, H5F_ACC_RDWR, new_fapl); } H5E_END_TRY + VERIFY((fid >= 0), true, "File open should succeed"); if (fid >= 0) { /* The file open succeeds */ @@ -7686,7 +7601,7 @@ test_libver_bounds_attributes(hid_t fapl) CHECK_PTR(attr, "H5VL_object"); /* Verify the attribute message version */ - VERIFY(attr->shared->version, H5O_attr_ver_bounds[f->shared->low_bound], + VERIFY(attr->shared->version >= H5O_attr_ver_bounds[f->shared->low_bound], true, "H5O_attr_ver_bounds"); /* Close the attribute */ diff --git a/test/tmisc.c b/test/tmisc.c index 8c73aa61949..a368aa0fa96 100644 --- a/test/tmisc.c +++ b/test/tmisc.c @@ -6868,7 +6868,7 @@ test_misc40(void) CHECK(ret, FAIL, "H5Fclose"); /* Re-open the file */ - fid = H5Fopen(MISC25C_FILE, H5F_ACC_RDWR, H5P_DEFAULT); + fid = H5Fopen(MISC25C_FILE, H5F_ACC_RDWR, fapl); CHECK(fid, H5I_INVALID_HID, "H5Fopen"); /* Set the compact/dense value high, to see if we can trick the From 5e8fd61750ea72a29a70a2df8eab4dd3ebc4ad03 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Fri, 11 Oct 2024 09:10:31 -0700 Subject: [PATCH 004/179] Announce 1.16.0 --> 2.0.0 (#4950) --- README.md | 8 +++----- doc/img/release-schedule.plantuml | 14 ++++++-------- doc/img/release-schedule.png | Bin 22892 -> 21840 bytes 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 37c45ad022d..e5c4d917305 100644 --- a/README.md +++ b/README.md @@ -90,12 +90,10 @@ are tentative. | Release | New Features | | ------- | ------------ | -| 1.14.5 | oss-fuzz fixes, ros3 VFD improvements | -| 1.14.6 | Last maintenance release of 1.14 | -| 1.16.0 | Complex number support, updated library defaults (cache sizes, etc.) | -| 2.0.0 | Multi-threaded HDF5, crashproofing / metadata journaling, Full (VFD) SWMR, encryption, digital signatures, sparse datasets, improved storage for variable-length datatypes, better Unicode support (especially on Windows), semantic versioning | +| 2.0.0 | Drop Autotools support, complex number support, updated library defaults (cache sizes, etc.), semantic versioning | +| FUTURE | Multi-threaded HDF5, crashproofing / metadata journaling, Full (VFD) SWMR, encryption, digital signatures, sparse datasets, improved storage for variable-length datatypes, better Unicode support (especially on Windows) | -Some HDF5 2.0.0 features listed here may be released in a 1.16.x release. +NOTE: In the March 2025 release we will begin using semantic versioning (https://semver.org/) and the previously announced 1.16.0 version will instead be numbered 2.0.0. This list of feature release versions is also tentative, and the specific release in which a feature is introduced may change. diff --git a/doc/img/release-schedule.plantuml b/doc/img/release-schedule.plantuml index d0fd79b1426..c7e45c18b4c 100644 --- a/doc/img/release-schedule.plantuml +++ b/doc/img/release-schedule.plantuml @@ -23,26 +23,24 @@ 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 118 weeks +[1.14] starts at 2023-01-01 and lasts 92 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-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] [1.14.4.2] displays on same row as [1.14.1] [1.14.5] displays on same row as [1.14.1] -[1.14.6] displays on same row as [1.14.1] [1.14] is colored in #B187CF -[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 +[2.0] starts at 2024-09-30 and lasts 53 weeks +[2.0.0] happens at 2025-03-31 +[2.1.0] happens at 2025-09-30 +[2.1.0] displays on same row as [2.0.0] +[2.0] is colored in #02BFA0 @endgantt diff --git a/doc/img/release-schedule.png b/doc/img/release-schedule.png index 20a0a55986d6bec975ec83a87d6987e4a516d49e..ec65bfa595d18fe3aaee66d27984dd1894d371ca 100644 GIT binary patch literal 21840 zcmcG$by!tjw>G?Oz@SB?WP^Z!fJnESO@nlZgb30d(xGlzKvKFJ38e%CR8YE0KtgE{ zkd}VOhTnOf=R4;;e|+C{ed`b1>{x5fImaC19{0G%3Q&9?c^U5p9s+^5EG>mrMj+0r zAP}c0a8AQJ7#oZ42*gcM z>gyx(Op~&Ka@~SzM@O&1XO`VoWloD#R0YEWXGob+z8VCGXF4mIKPqdvWk>7uCAMuP zbZCa${!)Y?>SnFpQB2#tb&6PH;kL$DIcE}aLby5{LEm_sE}XoSyAq3k{7O^UQ26-8 zLkKK~hg=+I06|Z-0`+t_vqoVT;buL)h^mfc|EK3? zM0Tc#eNd_Dp>aq1vmzwomfwr-m*iAd#-@to?eFh%aBzHob&HM;L$KB(%XWR=)CSgW zB7h-Dk-YW!nF}!$zie>W>h?Kk=olIO+gnB#(qTTiZQ3s&KB=BPeP2^kQ(XM(!QS@D zSWUIvbW0E!o9FhZQy!V&oMWW*ysQMLp5Ay$%FXFV%*@Qbp_C*AOFuQ!bnfcw zoBI7*(5Nk@%zThvK!6zKxikF+Uu6H!K*6Jef`aAc<$B-CkLo;ybQ)^sTi>t|qqr@; z7e8Cla+Q{ql{GL(xAU=|?Z94UYiYz?ScH+$p;b%d?bX#)%xeYVovEHo*;A)Zt<>%n z>L!!J+LO)H&YeYc)pt3)*<9#fY)BUVJ8_0TEpK!w%T-bvjHsp~^0taYzx}TU++0=Nyf*n_K>&DZEV{PgtN` z8P1y7OUK5>mS$HG@8@@c#t=reF;Zzi+as1Wp6BV{dYKr3Xgdcx+1sQ$sVXfk zjjWxuY>mD{BHrKE*Tt|w&SRB9CFEhO8AaeMZmZqVj zBjmvd37)vRy1J#MWj1NvP?`Cg1rP77t*xM|ck=S`l$RbE8XAg=pA%QAJKSA_U6V%f zLi8rD$F2js=@HA!!STMA@V2aRXVU2K@a}r2$VDGid)sV5#aP<-LW}zbB|QQWb8-3E z83a2fI9T4og5{v9ynJhaXFbuX=f@8@9HqVGU^5{Mft#BfstJBC;<(TkMk~4I{IOHy z$Q>pN7I37(`e=W>(@||~U?4g?992hkK-&&BycGB#ZcYikCK;nSz>@jMEZwP>VL zerhk*?Le*K$DiSLd%k~{Dw4*j^g246>rRJ3KGM?KKREEabe#j%Hujz|KObMBkX!WA z-qK9jH&-b69l)BdU%xIcF0P!5eGT)Q{UA|!%d$61enTTwb;X_*Be>pn&*A)Em`3vx#wWaWLq6eJj6z@55s0R5{E?Y3S~( zHd2$ZXu`%9c`ed=2h{}bV4hhDoGTm~@(=T32HnAwOFD%|zJLGQK&&7L(+0x;KaY7G z5^_aBp|h{A&vK-EdTL7hgUwHv!enqP?+hBh^AvEJ_2np~OAw-#N2@E~v){jeml$_G zb8ukHw{vjltD^Bpzp-=gU1aNYVu%z|R8J-{Olrx8$p>}6PO-3PaP~X`F?s>(&U#({ z{?Ruwnpx=2pRb4;&lrph4=19eluwp8g8O%Lbe!sLtTp|$zH{cn6$)OP3G2Fpts<`j zW?JlF@T(y}%=c2N#&>XAVB~Xyu*;&NqRhD1i(Gcrp6=?OVNgig*xpueqH@ipPor%$P3en!T|V4~o; zpN@w|L_|p&si+Vi_)zP_NOIath`LI{R&aKPJzPDUP7k|gZg!0jwXm?js#9es%8WpC zdHiV~Jq59P^UqH)2zv_){N@91FW^)CasCJs8%!xs-g{ZkbLXj-*U^U$A9mJf{rvox zN${vbD-4^7xPuR;*}PJ%WA|o7j-+vLFJ2@U@f4&n>`oKM&H}h$>`x)Q&`O5nST=pk zDk@^D8IHHEt$f;gwLf{~qti-Ka`HF?2yDD8s@=`|@F9la*X%4z=y0J1Z%=GL?5EDj)h}PZ(96Y$;<&8TY||?weRSWkd#4FwYui_1cY6H2Sbt+P({XX& zj%M*qBod;!qT_m3mm;bO?1KJ50x#^7;bE;aTBi`+Rt-P&I8P(y^fz{IsZfP75Cxn* zeR`%dIXNoot9EEl_$^sDZRB%TFhaONp}j-KWIT_y!7Xma(;+{rTQ(9xg6Nt<<=> z{b@Fc6?vNt4GpRq8oildOSrhW;N%^03ksH+BN({+iY zvbx55l!SjyfMK^RqSj~HgMxx+`IDBi2H8&`K4}90yZ)LDMkn1oy#@yi*4o8aq;o%>+1z?--5@Pmwfl`bJwZBG%!Y5qJTMLvwS5+lAWC$>^90B z+ARmnGkOZUf8Z!~|C{vxBmVoJNK)Zum{i;7Kj0IE6A&24q11jlV&DqmQxY0^pZB!4 z)oDW9Pb_k-YUiD*pI^1BbO)#~`7QV&4$d_W!zNj_n#km21+ub=3hUug)48rxz)#5n zPK9=S_4E*kF5%;EZ*Nn>Hxu~m?dZq! zw0ZEEOYt8!2OdqTw#D;w3Z|bfX=-cBKv4B#W5#ts=RX_sy`w*V;LyNztSv1w8O@r* zZ(&}09_+#vj3)TCw4|e=QvWePlO-fDFpkSSx}t)IreSEPGBfjQ8!g5P_a{#2FK(m~ zNq=`YAtB-YBSQDZf{Hdi?zwLSVO97uv|8pAkG~s!!Qf&DoSdBSkB@hn76YH3^G8s* zHo1!iL6Cg)>eB8e>|BXtYVA7D8rY1Tv&1O8ix+PP-rzDLp_w|^9yk7uNn?C!QDr}S zrDh*Y(C8YegBy-y3TXvlKw3`0ql)40-@6#3;f!SHjOCX<{Rc=dT;oo?mz7~$a;DV0Xca*)-^zU zrS{stOGC%OVFw#Yhx;mGZXTw)!fJH4QRMKQ?c_IxBqGtV^TSJT+J9={LUA z9c~s8)64z+6~va1n0R!!UDtagbOw<^Hc1<<&8i?Jbq#Rjh;`j)f6WC%x@nSu!;K4^ zJU`cW^!4>$p1*8nV#4b%*9GwzHdmE9<6|n`Q|A(479k$k+uI-Q4%XGKcL*FW1PaGv zg@p!9A90&(VHi{Hv9|?q`Z76p-@w4PhK79zFgpB1h`Al!04XdMZ*G2AF2c|j zhEJUm#s8*;PCIh@3lUstz#aBRwG-B#lrj6ALG1Q8hI}TtP-=yI(+UuLeh_eEM@Pr> z^t5trX@27wqbE_XUw1*?W$$#R>P>WX^y}BJ;U*zCDw6=3fTOQSuMYAzy^qeT09C#A zS0#0I$Lfv_te=Y(dmVX7N=oX)tE#FtG&X9es{W|;aNFBj5;@q2h>GfuzVm2zW8Pp{ z300w@s*15W8^`-f3LBM$-JRvI$17E)J1i{jkb8`~ueX1Gc_H2{vTNxk(vi9981nDC;Tt;Najm zmFb26ViIvuQqpccYC6n^%1TNh*GQKL06cE4u1s&vo;?dU@cr$}m&+HiyObT7tG>6p zSVSy1a@j!)y&xPDYEob;I!F&EQxG{QUEBKxW*}rY<^S-)g#|g+xmAvP_g0C&rW8Rg zkgGZjllR=a|8fLe5FE6}?#Aa#s>j}Xau@37$ioodMbQfnHv-Ra!~%|ct5KwzH+~6Y z^(DiP>QKs?2GX?+t>nXZ?8J`e5mffO5_E`SLD#RR!lXzD2p(5;h*tO*R|6bCApWmu zxvr5>R^=Y{W5~C0Xz1NPNRbJacBADT+9&DdM`bz>_N(7|wwjz4bEb%!n?G22v0I&j zd+{2IjPp5-raQ4v)w+&~7a6DiDY3a1^qh-4ra^K})k-9Qk#DPHJR%X#%k2L`$wF@2Y;2+Raa`maqaUZ)k%abVZ$(JZJ-K}!moPwxn=s%SNu(TQn7{bhOe&9% zj1?MDY7ZRAJgO1@j8}q}7O#n1&1#cmeWQ>pJlb^Lp`U_`?9C2Cu4-Ooh#b9u>jq`1R{kW8>_sELPo*ya1LU>8jsV z`@fC<7IyqM{@eH^=`gfvp~h(CU_lIlRi}^Yy91$Q*l_!h-GqdMz~#0!H=|@SB||81 z@$h7%r3r(+0tg?d)_*?n5?@$RM_EM${!Riw`r!lbwDoF|fDJ^w6Y@N{O2*MX>)OqoSb}U{Q5%` z6?5}qR63xMrMgfa?m5+2|72YXS1G9rky7Zfmrz1*m#>anb!0& zp+nf}Pk+HG0f(}F%8sx;WGEU55$krvEK0^Ad1;`l>(7^qY?mncIr;gkVCLSvv+d7Q z0}BWa2#}VO`)Kp?MeSu~lEA6s15ASm3pyJ^saF;k1;Ewy=WEPPO%b5L%E2ib!*+rs zWopXMclg)j6wkn5vL%YSe>ZpdH7XU-wd&er{8mC(n_KksJ>rXlMT3jmt&nIr zEe(s;bwHSIY3ZqYRJMGh#)LbAg(K?-ZJ=jjnV*$K4@42{CA~UNV1@DuoR}CH=dzPM zhu;}UT3NA*E1^fSQyotizlnMWJSIxmwR-lT^&IH(NnLS~^UM z?&r^+5S=fL0{C=#^5luCY9B<1uTNHidJ_{9o9#^Q^hARX^q9|l10m3;Gf95@RZdxQ zi?8ZlJyk2=*MYOlM@KcCUkeLb4WySu}5e@#tgSkJ=p!+}d9@a*^Bz40R|a&q%F zbbntRJ*HB#*HwjFudAd%*~2N)1h!G?&nrk4xtGHVh$;q|N1w~Ok@sn&QLUe z{3*4VQgy@^9`J>*yIg=?J}zTOorh0SIS9flu{hNij`d0)@c*t(&bG%hM9Eydc(HQn z)Ez-VcOdB@e5A9@Lc%KI{+C@uq%I=^AhIMf%wabwi>iRv25DJ$+6Zdyjb|D{;9cPJu{kj;+2!VltkmX$;K+DUw2a+<+u_c*#D)LzU zV4v{sHH@}Fvkf{)=2L#rAr6Biz2@V`Dtbm+@-Uo#76pgQOGxeAE2)OLls;25GU5EK zUU9l7yD1IQ=pJSY!k5T!mwLka*jXuhJW2G(G9xo{uSI@*0&T8170N%L!w1KHhW1VC zd~}lAa^?1z8@MtT*crmY!V=uMYMPqg-##p9cw%c~V`FMM4>`L;@Qvxk#cE)5QWgIK zH;qXGN+sk9JVzdx?B;uy^%;m-C@F|!XmkS*ui$8)JU}^* zL?V~R>sFSRg&%)H)Z|&3o0H#tf|iuLkldNfXHW03S36*u&W)_mx@*mwHv6$wKx>I$ zfEoF2-yJ+1Ik&}J9CkU7u2^J(4O4#?a|1ol01PG0-C;>Ff1*m4Zxn2jcM;ehU61P$FSs-984wau3jjw~ z9&qdX_wNG(@%nx8lFzr|cFhyW$javD<@H^C#xJsIhLQ)MtD{4?w|V*R)4T1a^@3^3 z)FF)DC`V1FbqK;3CtoNJO47BYU|mbO_Bi~9zQ>DHqBw`O-^qHyr$1)J7F%r4^VDIy zxRQ~}HN6M*gkO=!yPTgPPMaM#OevWw6*cwVPJH+qfXVKVaq_{U-ci~(-r3VY44o-q z9)K#~yd-lT?3#NYzC5UgWy>E*(|q#N0L5$OE@wI%d$agT94vc5yLfowD&XODj^0kDR&i^t*qR z0xwdC0U5@MDaOj56`ojiKL5k3ne@46iaVpELf_K^p3x)vIH%JH6OPFQH2O(%#vl(tWXj$rzVOdg z@7F{7`H0x=-Ru3~ags0J#JtYQVI=NvOF!JFG&y-s_UpeZ;>!vPCWvnJ`%Ry{a zDWoS~;rj4j)$!2V>tTzBc(324)7GWlAL!P9!FrsjBW&dMR0@vlR(}QT?}um6H@~{B zV7A}Y-vN2h;O3&3wzg*x=_C#m}~2kOuC+*9>dPQLXaWxHh5q+DIyv&PkShj8lukd`s6Kr7P+R-0BBLrruKZ7wZD@(%BrAW61JZdPl2o))5X1Vm^ z$0-BVqu)X(1+0F2fD9Fi-H=aSBxB7PTar*=B!O4J|BO{wCv$Ky0az+5JOoAsR=l^j zx03Sa@l`f>>35Psjn?X4ZxK+&cEVj`JxJ72Rz}rrZfyy>tQl%*#w_sT`8GjD4YCU@7gVKNcG&4V++1TLNCcUYe=sKST1qSjz`+W@*Ew;8aiJ3xiFdmRtOe`;>U0nj__U+rb`T6S`8>-PnD8@joa*J41CLx;%Z;qv~W z@ZRfJDTrzgt*#aj8(xQmz}eLmQZ5Ne$-Uj(o{NJ8kDMR_gn5NIP-3~N5W`Lb@Da*c z0H9iwQB6<)2i$TeOv>HELr6&I7}%?+sX@d}O--ehc%@lxF$6SW_LlaEA9KDGJ7vXl zD*(*_03QmD#UF>$b0M04{P+W=4Jz%^^msmL0E>r*hwJOb2E|TfN)zv%47d3aAS0T; z3pQUqp4v|ia!DuRBt#5l?V0~wopg3XqpP3l3D3hM-7fF)GgJgVou4+3QV_J?@2_CH z5^uB5VEO38qs9bnwHd2B98oJYT>7*4wRWRjen@~@$Z@7?o!Y|PY)L@Gb{uqH*h9>; z(>;k|erBGvuPoST{vbT-#a?h{=!z^(?3&zo_0DD{DTkE+RxpM@JZ85_vQboKUAH0D zdbo;1qpmK9&!aCL8yOLIa@|*r@-t#eB%zHeF0!iQClMfqj3+j<=#9ripI4s4@!Aj6 zRJq*T0(o<&YSeI?s3PgB+i{ZpzFb^4sn z7)a2QP$%U$A16P=@PJh4t>ye^tAvTU<4O+&O6vR6l)SaiH{sdrvW>N}7EC`8wZdMw z-Ta}#HzBT`c9zLgbH11}Td~#0doEO9DK=Dpc$hSEn!{QlESQUjr~8!V`4g>~5yM0= zE4jI6UF{VLb)1v?#MMqX8Dr~qUG?bkdkB_mh5weM)k94NPW~8|Jq-J4+m+bR2Sfo4 zg z9dO0DxnPlM^bvRIz>OzVGPRS!j$9e79vmKS`AOd;)NQIDDd{IiZ*FGx~hP^h0DsVEY?+0@Z7pcOhmiY0MvCO&-)BE!GI zIR{nsZ`P+rqdAsLO-xeW%*p(7zD4za&UewbZI;l?6kpza?Vi)}4=8nedn0tzOm+0X z29g3SoCkL-eE4@#Enoe59j=2y-0@fI1>anXC)KK0aOlBWgeJS8@R8pG>l@_cT-FyL zjfPuKt1G_GcH*6%ans?zk$9! zPM}))vuo~l-l{k98Q>R4EX5A{>ZRDuBfLNYQb8I0UB#P6enJ zLKI+iK_MYnFvzBX|R^^{YE0!S zF;!@z+JF71mv+5!a}s|uDpMquj*A(TZ`;_&0By07_yo7(hy9R*nEYK*ymC_$@tD zSgXV+xcdyaGw()9m;*(Ih-SE%%=}Ui@q8uIQ}q~r1W5MHn>U4t49c7Sd8GiTUqYnlz|mm~Iwd9cKyDeCnwjN+->OXo!T}&; zV`HQF9VkQm8$kwJV@-<69-Aa+p~b~1MLZK4C;0>f@>$6O(DU>2P&fR>ld8x_L_`GO zT-Re$t$-OTD@k@=YyMz6SvqzFyOb$pu<|L1;EF7VOH8_vz{nbRQh|eWqy!HH91sWz z*FbOrOzt-xEEWj8hy6hW#}1HHT|7(D^70;kCY}!<1Jj_SP9G(MPr>^bKx1Wq9DP2B zgvgAHj6i2t`QgJg9uoMu^N&@=Kn^ErM9L!wg|Ln=?4GEtkE`FvrKP3eDo}wzrM~Xa z1wB_4l&2t1Xz#(wWB&g6Sy));Fg&@mJFlp?P4^Zr2<`n{P}5RYi`i>@YONs>vUh?!9#bsED!d*i?x@jrv`jCH zOe4{wtJ`bot8ft%$2aC3w$bEX_@kEn6LU^z zx}Q;Zq(9%Jgj}j#(NSmkUukCFbArwC7f!D8Dhq(=_Vy#TQNfX$`5v>2q~)haYP|NI z6TCm#V7N$MJJ#4OR-$TR&Q@BMT~YSyqU(sjh}MYX=*^QkxCX|6#JJaO8ryGUk$Kf{ zpCfJC=sAQp>k9_OlbqweAc=oP3BR_+1VfHkh#nZthLB=!8pJF+vnW~H zWrVXJ&H7#P0CW#1>H^SDmO})WSsqJjej@O;k0DLDICCB$SpIq^#t)5*g?%S_GX^-u z!~K{r_!~r11qGJc+S>S|ghT;`Tfc{38v<@yOcg_PNYjObOZiY;-3X9P-J2-@4HD0# z*;yWtxnnQ;Eo=Oaicy3NpTN^5}Z3+AA zURLLS`$Jmz>(>(>)aTmzxVh5C_V$956j7!q4hE3~{8Rue;L~bq5v8Bwn44KlLq-3i*6&USCgpL27(Pa1G`9TgQ7#l&8o5{nUXE0?0% z1yNmpAk>UO2bCosZ`4CWfWn|?4!!`f{rU6#aky_oj_U`bNuYpJDv7LJYVX5N>}0mk zH97i-Zk|fhtBJxMafcnD(nq@l$2|~l-?IF6La?(L3hPMH5iJduVyLPZGp$`O?W@Fn%b!cP+6iHArybd2%>t3e@#qtJl z9Ux2_iJ5^Ez}H+@C-{LU?Dk06>`7a&k;Se*j6L#DMANxhY6BBq}ix zrGCXDgeSxe{0pT$L8{JTU-%d->g3}jS)kaUQUu#`8uY{vlY=ctc<(cam>qdpyAO+L zwgo;o@gH!bK(u66Vb40ZK4=W}8b}sMs8-G+W}Ymw-4M!xL}YGC@+Lt>M#h|${1S5p z6slQRSqI8cz__d?gCH6T*{o4AToqr4uc$sXH0)}I_KopsC${>ywmno4cCMpY9&$hd zcWdj}q@T_54?g~#pR3M#ppPEBbe|~-?6`*+3RJ^TJ!O4EE^>8326SW`J45fEUaXI! z=)jvH{g4Q|@#&g@wRO=>gUGEbN4rgi@1d8=wVhJn8OG1gUW5sOcm|GL9#TIjjun>9 zZVu{g|M^q={=J>8E$A##$$T-G1YTR%8JXB-re4R$M|Z8)zPB_r6_=D4NV&yq`X z`kl9rb)T<;K|{X`CH8N<U`Q0$xNUfHVTk0!WG*Z3V(kb=t}Y(E-g$^WCUQ`4+YQ2&cQXFpvp)BBnjR;S$TOmh*1+m z0Ee+eefj|zq&Jlu9T6q3&0}!xT6IQZN~$Ns!hgEQ^N~I3h1xFQLt#?-`cw^EAx#jv zfd!iEEl|M@r4-1D-SbBPf=-v96{@WZ*v<5I`9pa-63 zUmWd?b3W*yLPg!|0VF{Kwe; z1hhkkB&c4yySr;^Yd5|?D}_#ttJ)x5jqB#xL4@c{8+-foIxe&|_N2Lad3eB}U%pIv z_eleIN+9tCbnvk(Lr`NnW6N>ztCc3A`IURdsS4=Kl9mpDxC)iw(8haCPGA-m|Kbkn z#l4R0z1SUKKKA&uc5Ha?s`c2G;RQ=_%DNi%qxYImJuR165r~|KP`Boc&B=dJuGryV z#i<#E&s7HqbVQuG$L`B8Nx4Z5Zs8)l?|m2n+&uA4V#WesNA>*_Ur0oP9NaV^nH%#d*kPPq?NB# z_;>22^>on3CPk*js$V76fAtRQV)(NW9MvROKr-eIh2KS8K)L*vV; z7+IWD))^uZYdB{Y@y{VEnAy;p7Z+6HFuYr7MnyE>N{tT-+c5-YgGy^_a!K(Qy{3Z# zy_PesBqP_4UUjAX!5z)l54Od&3*3D}w=I3szl{K`-;`|xULOdo~vt^4d z^*qZ4UwC}~=1pCzndP$x@1K8!V5`7U?0&pv@QQ`{KM306L}C|=dS>~w<_p#&sS~Ra z#Rv4VzO@xCMK`mIvta?XfYptS-z@?E_|@-F=J*cY2ee(#2NyVX;nFkM{Xj5$`}Pf5 zYaE8qSRMn8w_T=ywKW(?qjkjG9& zM)WmWIyyR_E92=C*<6cLA=KbVvZ#ZzowvCKb19mnCvfB~lB_QnUG(z4!cm6z;pffwD zkQ`GB128AFyLSMvB=YiQB_+Kqprr#Z%kR38GdyGl%?Ln}OioVr4|o9?k)6%pvC{;r z(A&EXzK%sUH5*_h6s5qY$BBb)hhz>`-heMGW8nT|+Iy$$p6)sIx z)yM@qA5_@u*90Ua8-U>R`j1N-_kQ2e^v=o20T*9(jI0zl!7zjj5j6;paphtWhddGL~;@VXLOQyYP#66>2e97z>F0lW{t$33@U4sNM z2bPx641kYv?gp%To&s7*UOv;BXKi~M6o&hUdn>p!FecF8WGP6`lR8Ab@KK@{0fW=( zO?to(&YCDk*OAnRHBUt7a}c*fX9g2>edfadfHgg>&_WE&ZujdtT3P^-yFs3Eu)hxi z>5No%WqSmIAHePf?Q$T~9J@Vhadgb3$l;fR*i2iTwSW0dkx4cXg2SYdI<8rBuGS{1I4$$ z?FZ&P4Y3bxV7forQCe|f*B@<58CiN>=*mkXWcc09-tTC-ypj~dXn6ldWQ@qI2Qvlp zNaau*$-ZPs>MvnTHAtd$mT5Yy{ze+DJWvGP0(Wju>%=ZUgW3VeT6x5)ZoO%p{Pm0D zhz@}EAUHKBc05(-2jLqunm?$!1Gz|W@MyVZe67xtAqq=qfCX)IM^n?|5{}Tu^yG)# z!^5tSp*8cyt_F1`3S?J4aCC$=(E7_c+N^IN7lCq8jHer@Q=ublAZOXEj~e!QVj?v2R)O2{ z_xA_Ozp|)d+2pVuUGI->BaD>05$2zX6%u{*M+jjNWR{$HZTu@}cfB!!00T3wyMdQlDLg4=A^MyQF z$o1fFXlS4$BjYjaV|4uqmH`g!+pFuu#Kh_OOkq-nmXqhwkmL_uGnxQ5MXCD_q69C{$ zjY4gBWCbk-9vCt2L#7MdM>z9+h_$RY1Rh`_5Wq zBuSd(a88KH=NIQ(gHfa)8aF}H>DVX9qmfnk`dft3J3Ga=GG>y`XA(F;cuXA@Cdt`~ z)t>Po3ttem`jA^hiP!FTM;`H@*S7aWI4v-S~t(UCozn-^=9Cg-tbU zPgg+mf|Wy;)EOdP`d>V2Sw3jT<*~oqzg3N(Fj>3TSrZ<}TDK zTL7v68bbmC0?1gkyDId-k3-cGy4|*ZKg5bg)`27fNlCUsGBl+xBqTr`8R#kK-G+?> z%{I}{BdqucdJLg$<8~mlqXYy68O&{ga1^`)871W?^iE#CK0h}Hz2qq2WCfh&&Q9Zd zX&^KP$u`Tw_fx}V=CFYvghJgQQ%gjRT$zysNRq+rb$z}xn0D-Q8L*F#IDKkFHJU*A z;loPvLDpSIpv%?OqX$Ow90%vbOK6^k-92Eqv4=8$1igrWvY}rSegj244a*u8Fn;J} z>jh~DkXp9`k;B553y8gIfIom_wa1U2h7O7R^6lFUFnRzv96dps5`a$YPM7Sxuc!wT z1APh_wP0fuBA)J`JcXwnI5;>!*#HP9yJ#!um`YW=)`dr72+0*Z768u&wf<6>JWPMH z7aBySy8ScEJD@cL-AMCR1C9LsB78^4f>U^WDgGoNclZPuKN<2UdfY8roBGCL*)?C#|5jVetin6_<)<&E9wsJ+`Rb- z8j({|KY#ry?&8?f(NS1crM2R##wtOK0$OcxVPS4jM3BlFh&&7d85!BG*9}0IAQiZ7 z2D+^$@BRk!jD4?hb8>Ov6RQAH*hP?vW(p`kNJI0Yimxll%C>?ZfR-P4zyZ_*wY0S0 z%IVmKj!X4+Xm?>Rc<=+38qUelta8ZJmCt#murqFYyhaA@Vw?uMuu71_=MJf>s6?cv z)7CUJH%pIq_(7YYuP+e_@`2Uux+5WO?tz$qyj-v>umYtedr!|p?^9=>2A|F?61*|y zw$h#`unpBfIt-{ytE#JeTj5?oHw7*Yl=9$(v~_ib!JuAdTj}ekLUU6|Ny$tpM6#cT z=qw!U<|?(HeNbSpTSQslg0l!R^q`cCO~$TaHCmW+!t3^E;%CrlD9we062tYKK^1wP zfRk1ZP{Rd4E62fcD@Xfh*&@?6K9Ht|4cvD;vZn)Nl4j`y(L%bUz{)Np63_znD<4P?s&bts~^E5<;4EWM+$wmXU4<_&v zJfv&?3bey$Ys+DkLy$mpJ6?H*53hEQu=x1J+1cy?crL|XsP}SPkICWe zKos7n8n4RBgK8>2FE0TqAu;jX>F2A&YVyzoVrjXAebURLG>D`iE1ZCo1)gfqzjK=? z0G!Ka-oy6SG-813YIkPhuirCzMZvcQ@pvP9WBlmwP3=Q&8XA2l^gsp%8N$7{0YJ1v zM?{yNVE=v!h|lyt5oR~D{Pfo?TnSMZz*N&Cr)OqdU0fXH6``e`@SjB?WIc4v1Gnej zeLuJNSa^OM<^H8Q7pGhIrR}-b874;(;$J?hq^_RzAI%$y7YS#u&7r+_gtmX!L+1(f z3amrr0y^GbSt#cNfe6}6=-LDt5mGWP^MO}4xLO7Wogh^}rTzi7UP?j1xbP?Tp-*mx zr;k?!o+biAhKD7AKo91nIV%|wrblIFYIU9ma}^*V++VI<*;rt3W09Qt`IC@>!ou9V zmE)nt@&K$I6qm&%B&t4qV8?K`>(sBkV_+fgsW_5}+j|0@5;&w>tw%sGgM)>K8f6p} zS%bgbtm?-;j|u1=pc&l{kE~b5P;t9wc)gE)h_}8c=$=O<$mlYk3!b^9qscZcOQLhL zWp0hAhVGi-cb^mvj1@_(48E2x%37%D(%Fkju8c*^ZFW^=>IP{KoDT6tt{Dgj2p9`g zY#whYnqN{cLVYd7y|FdOj78KolYz~qaD89TP3YcB2cO`*-tyW^0G&&-}Ycf)F zM`+}e{mqR=kuYG`(=XjxMkCXF!*z?uc*6W&rP9eDaRb5O-jE*RMcyrw2yWz4q;= z&7Vp>{>4K50+AQKAND%C(Tt}oceb#O6qb-72e)X@ykg`GmD$fDvp)$4eLr>{o^8mM zy@T~fHCs5)Tt34 zUm~J_K;E!xVJPV;bf9oZ%$zQ@Ob7213`01hZ3AXZ0Q*x(q^*b<+b&nQ*8!)?X)TgS zL46;=Adj`FX292=+7dm=?VZ1LUJPTb@o|3B)zw_w3(6vd8rRB4z}`OJk)V(BTq9#o zgHj`4U8q6;67*A8^&XXRc8Yf#M32AjI$S5|8i3dd5oUIF79PE@wLHq415cFsFkvny zo}7bu4ULl%!N`uz#~Z|E(&y?F!-A!RY|&2`!u(lMNuB~HB8D44BD$f7LfS@%M4}bw zggw69kPhSu&->+{V-ZXzxrVlpxf6+&Z|braE^w|HgMc@`FgvsA{H0c!e)A%!{DJ!} z^;2SarcmI7?W8+Q>^rxVX7wYHE{x1BwLBwD*b||!Yo5fSx9rv0Hyd4vndU#fuxCO(+0zAecTUU1Y?6QA?@ECMHMA_0wD zrJJ86$GN45|27OsZ#;XXVV+@NH zp=SdjBIhg-t|;Nb!9kB&NdBnzS17hXnECpo8TvMvnE0WZv$4T>zy^X~P~<`p#?aUp z`&g5T#B?c$$B;2W{sL+Zz^U9E9BFMih@0F2@lt)DAp@VzaeQL`I6MC`4%^51-tRom^S(cB{DrRq zjxAGnZQN_~J$e=on3J8YB;TtUDwmBky;joLy*CQ1jpC<$7+J;ukv~svrBEnGmaudf z)YD8&T8zdayvOS*5ICbceS9&8xS!!nW&{U6J?crtqC=#737ShJYdxjZOLLhi^*G1e zZa1t7D8Sdz^9A0u;{^S7=W);!crTG;o=^1vra@*Qavat`?eR4Fo8;aPu(;4#gAIhm zgk0z}=YbnpwyCn);Rs?dl!Kqp93`@x@FOyPrTcVmwXQHm`7K1sZ1xbGJQx57UX-nS zM(aw}n~2jD2V-}OL|vG$779C2s~4~k-0Nt?gOMy*e*PTe=&9QNDY~+d# z$M*E}mw=j-s&9nvfP94~u`cIHRD3+&k${>rJ@)(Nq@6_6i5*Lw9Ge7Fa(Qxjz1gf% zC^m4pz26kp<9||rJ}coV(o{rNflT%pXFXN#!JE!ycJ8epUmqVb3&4m%^9daKLZQ%F zUUyc2)Dst;By{hC2*V5s>3H+Tph_fY_V%>!iP2x^npMZBluBeH)P)OQahL=x;yvTk za&Pgu2BY!ENbv+VLXE*-Kym3UG&?<{({d~qBKUW`MA0s(6qcDX;VQf|id_N3j!IRN zJ`=8LwOUj%C^L4h6~h@n6fO9-0Hiq+@xWv{0^9(i7N8lR9x(uYp!pNBFhsGdxoHC2 zE3n<)YjJeth1d<0s&!yZ+5#A9IF25HHp_F^ZmHa7O#_*oF>;DIB@nTj2}?`PAp@E z$Ha_4Y&lb4hvNhFZm3Y0j7x%<^>jB`Ty}*&)g^6Fl)3r}X$(B|PcF*4nPgG>mt&&r z>^LGS{362qPcBymiS9?8r-hN`N`wm@sy_E^CDUqxI{^9+d~6ZX66wtO@=&-WNX_Z zprQqFU|=B45hz&eoQZXCO{wE&TTM$ep&hd^lB=Jd*DSg8bJmL_SUSE+e`*@Nt=BDT SNz>VxZ*5JA6b+OlBr6=N%&ZhLv-eIMva>f0O2|HBD|;T4y-EWI$yQdG+1cB< z9xv7V{r-Hu*Z2Be*X{a;I?j2$p0DS4JnoPC<9z=i- zt&_8jHK&Q4jmsw-Edjv+O$&8xr$4U~`~}x>OK9!Yvx~oc=IBq?YahbbIg>l(9}wDX zuQcYoN&578eQ)?e{pn|{-_M+V8~8Z3I_HuL)ny6+i=`(=9v+o^tjl~WZ)DJB#EVP3 z{o=`Ji!YT=$FRk2YDv0_%-q$zaejXOB&RvKDt}5%84bztvTu`Xn!b85oA)(v``Z<+Cbt>05pQP=BX#0586bEXYisWsJTr_d5xgf_+*(=H=x^Ww4IR6OkKB|Wr8w)!cf?7#!ydcv*lvi*XL>?vUGmb(e@lt(Go{DlDV9KmiYH^QHr&8 zV>v;XC{-utW>xaR^Gfzx)ROvV4aSeT`*_4X*0GlmZlBhFEleSN%YELtfzrPB4*J^3 zu=UF;*qhe^<#Nw|5MkhKZ5SQ(UevYUCH`v2+Y-`tyg*TZz0~m;-kB&!;WZgs4S)Uv z{AQhdrdt|2d+j@muOiXD$>wT(9Z}K_%Z-i9=?@mp7MDk|A36Q#%M3%No#)RT6Yb+2 zo^$ifUPK~I9rq_nPFt+7op#u*;iuC(phS7PJ#OuL)oiEf%ADI@AFZjvhm&|N4f9}B#AjG=V4S!vx_DW0sfrBU^3l*K#A$|=P?yB9SF z>juiZ+d3b(5D;j_%Szr*cQc$DJofxdcg4>|vl#EAl>C2@N}n+$)sYM!o{u9$jfnre z!%KJMp&sYQ@^Bgb#%?aow})C^N`@;0d)zp4_@+OB!%aGCh9CDIJ{%$7=1EvcKc%MG zE9hKVnW<;CiBDosa!t%x?s1q-^hk_NdXAh5f;6_X`p9pBfZ#af;1G03D;!3CPo-uc zZ@9mrqK54E>swjb$jcYKyVQ~2Vb?5C$Zr{1K62!DTIm1$`2FG$G5ls*N4mULf<+ zD+`PE`Sma6$(y~T%`sf~AE}`(^8-`)vx_~8{k7gzPTpHnnQueV21h6$+ewC*P&Q`o3F?XdJR42g1Bl43yd4P=yo>S ze537cYd0ruKT*hdcz~c*2}Z1}nc&=`Q>2||(U~zs#%gxQ-go02?as`G^ZdZ(_b0S# zTEY`TBTt!=!V3Crt2p{dgXRXSdi#6Ys51?!T$U$Vi3`j-ORThXe8(EYVF1RR84An^ z_r$+x@9nME9qpBm%9hx`;(sUF^@Vl%ttorUt}Oc@_sJ9IE?;l3>?<_x z+wwu@@L%1YeT6nZ&u6(3nY=R=Q@1njPhr@Xa^s+ZsgUV33397?ShM@Z^d1W1`LFCp zKl5OoHj&(gHsWBJP+@?0lqgkF2D&wFpL?RH~* z#&>Te>QMRR3p!7C8NYknR6iOj=JV~%gVUF8Z7el&)#MNP;&*BB8x5+bliWt0N<2PZ zF_jTtJyiIYg6dJ+rvdouP(+RAy3gL`!8GTDzA$>%wFQZp*eZcYEN7BQG4{-uO??=$aA6lMf&Z#1LZ~4S0|pEtYF;^ zTOMqP%S`t1fcHB(I;LlI3=>6KO8T}b9GJrBmDvvF>y;fjasIs=N~qy}hRfX74mFGsjhwDrEiTO^lLuQQ4h{}Z*h_3P`P9NcgN$~>U13KU z?AdhZUxl zv~xzx*X6i0RMljsUed1LjJ%}4Z{7Eewl%dOoPPRc5a)Rjw|gb!O_9tqLpwV=uv;35 zPBSa2FK$U|5!Y?D+Ns~M`DVCWvp%%F)^E4^oU3l9cqrF(*jsCeQ}?xuA+7y;(#nfb z;#P|zA5>M!kMb(Sa^IY05-koRv+c@K*^&^hesSdZxfC(Nu}7z_X_r`HP=bd9Rj}1d zflf4@vqc_!c+H8EZU!;>4o|6jaTqqM-U1pP%N#1ZYLzZAb${P@4(EeKQ zj&s<5waEOCd!LaH({;1>vVcHuU5GFB3*RmUOEOliwS{3LZS4&){IZzG&*a@%^SyQv zGaLSU->w@3226Ek&iI=rd#|DGx1RcbPPu_9;=hMw-R80GD>Mla%+Scygf;H8!d>bp zah~bXEwOCU)A54m$kV(d6d8X$z{_< zlHIj9tAg+{8etdpPc%Pq_5Q>Z(?y|L)dm`i$Rc#dE?gvp?EXSK}bSbgHCv362KytSIeT@R+sSJMMP3_Z{rM0=wbb zq78wRw8E9g9t$<=2ds|x9ABuMDTpjn#jsA2isE;cAN&PNyYyT|ZFecAuFI}X48Nl- zqc9%uQtJpo6zP6Md|nb(mGQO6_c ze{)q}*z48Fl{)-(-IB|fV)Ryi@RUul>%vf|*q%01&yf(mWY2lQK}<{xGqI7^;>}&n zUiISK49$6XM8uZzo+cIJ1HK>r~V1DNz;hs!J=dv)ApTLJP zISR4GdobNs#sR;#OC#hIuxW{Mr?Y!L;4d$?vsanYEHKNUh9%QNyERwA7~T^q%sxiM+DuFRkp=RjWuP zAi$l3^vc54qT8sV*7V9PQOH@yd7829M-T@%2c0DoIAuW_~ zh-0UMz|;xY&V1zfE4%D7PPVGH5R}euqRHJ* zYrKH#Y@Z6((+^_0qtaqq?XcFP7d|^Jw+b{rT?%!CK)%pdB(XmKwPdD2Y_DjqNlGPG zGrz)d5;aP409m%40)t$!&-7>Um!(*ZOlspSA#SP;P8m*ZeLv-Uju@LwtwKP6J_<)g zo%80+o5@~FP59kmJbIdohWyMKub*#^TJ_{@Zp~mHc|Wc1iCU6cGhZ00+4E0I6n6DF zx8AK~bhxtq$m@u&Q>mfX;1pv7L;7BshaP8QYYe(=R9;AP_1?Gp$H~_uJYdJE>ihx` zB*w^1k@NY#U=w)x{|~hJkB{FWMi3IgRA7_uTOneClSey9?-xG`K6H`Z64ggePOk9$ zvN6Ob2qZ17tud$7o#wu-W~GKyu5`%PjE5-L*6pqh)p(X!^(sai zIW#c=Q0i@dK+r*&M?J;#EI2J+=at#dZ*Pn1VKSzTPP#S9U>*o-Y4Ze|L@tgtoLZ_t zki`q-A{Di_wlIxF+PAnrg!-(cPPE21&zz(Y^4gv&>)`WPx$Dl>G~T7AgrR`bV&t=# z?s=Lui}BTQD*juV(c{mk1cu7&j4slrxIMfvMcpaR*=#2(UIs@U0YbPO6t z=JkzRFNY{7itReN_rJUu6m7q>6G?KMoPv*h7V`RJYkZ~=WPV*ScXp#%ujXhDh{>2< zcX#)WZmf}*yZ5m7x*&genW3$2l}o;1t?i&t&7q$RG;dMtHEA*7@6%)>Eqn5^X(O_- zNgfBQQ(kqrsr}gA`lVG4#B18~G?*iNC#T}TfvW*dera;a;n#M4zJpIIBwV#`d4A=JCCZP1 zL4*H+J}J|?L;UT08n(9c_6;-wUK{tC`1dd>4^-6Xo^sW0yp#^T5OEQf%Ef(qV>GmR z#w1i!a~&XC;*txXr4WVJ%b$d~&i2A-i!t)~QYQ41rh{|ePE1F`>lfD36$gcYO+Jd1up4TEGIe8&Jln8J+XFR`6ggU+K_h>!a zc6qZ;39NSgWp>zMoP)ct(+}l_OJC#otV}ZoUHWZ`Ht?TxU^eS0KFdhoyWA;%p3(xc z&5{c)iZ$pgN9D#y(D>@l@9z*qZgT+HK2KuV)QgXs435Ry)wXj%H1-|~mzG;d-dkbD zQjnkHBNyi|s@3nf(Ve3~>$72O2WZ)c<=9K9XXk~ielU||M^VQg;stMQ?^s0{YT1TF95)G+k*>??Ok~~j)25N6c`s8FRc%{4kzPx zCLxZ#-?&CzA0Bd>Jlarwn$lt%hY7`;6LBldyT|~G%5aYCB7??B;|lS0U7lNgmtf-B znwl!cqxCXw#X5{*v~Wb-xmrdgmKt}itKaHUFYK@JbZxn8)x$ou1#7!1JsbdMM=AN* zU`-Ru@=949QVHY3PF#>U2l4DU;A`XPK)0XV&V^qYi`xQA-1%=I&-jCWbl z&mTT~2>8}_?Th)_lj?UN%BV5AX%{6vdMmNsaO zi%Du8?JcIE?;p*bebTtLkt6O0KT+Fs#iF&SNxEWzV&;D2-#DKD>rgC868VW1#)-Qs zIK#G&G4x<9=XEwCq;xN6>oxMF(Z1oe+N}lf^El^f`@88EJH8SwZyz2;YCqeWyY=<4 z!q^eEI@pnr7NBGj^;{c()3!(9GqDjXM6YyFGJ`X>LF7;?X`=^o$Ch>H-QyD$__yeW zjXQfgo3O)9xnwq;7k9js8Ko^@%E*wtz{IMvE|y+(u{$`8+f_1-l3tBMi>INNS|u;D zo{rs5Zc+EDpFfK*r7V-YTo1{YPco=fSypzxiRUWqI>;3;K~8CM^VeoX@6w2=NvFlq zaXaXUPHe;p2d-NC9V32`?je{*O~)M(PCaU+!mZk2!kcP(nI?N<;|kB?%)-J#&3xUr z>DfFIjg4@^s*2wC;or=N=Tv5x0nTmW zab1A)`L)DKc>btZtZ5y7cVYa)r$pf@rzx@@d<|_~r0xgkxSe4%baz9p_o#g*IV+y- z#zCD&2UQExw);$e*|nuc2C>a1B}2FG{@>1r>ooN4t(Db5^*05Os0N}~f2qy(bT0Nt zud?O#+8mtC6PyaBC+M{3&ITdJb8BvQeVA5M?Wo@~uJt9GvO#{A**-NT(N(B+_f|TU z9FAcWs}S}Jxz8*uxZWF{897i0A3zRDcB>_Mvl@&NzX1D)4f*b zdZM8na0{JQxLCqM$!Z~_TFOFsOB!{}rzQCNqLG7O8l=f#=UxN7QtR-tVXx)Zu57ho zkC}Wu+X|*Bqo@25+RU94Mqc)io0{(1)$Nv|DjtjvG?8U99AslNs=eD+_+7_5vBZ8< z%AL*AO((&yp|T&MQq|@}JR0S-IUeJ1q~RGAa|!mO`GxR`<(E(~0!-cj$fe%&{K4+Z z(TE%mh{dR}OII3{rUDFoHpfqi?I^qMZV%)6rPZVe7si^8`2rKNTF)dO&2CW1J6n8& zQ{g^emcx-H#hX#PTHoo^M@p1SwU_QdeS=iyqqKOICmAu%^XLq{7C$()i3${6zQ><; z`i&`#(TCGFAnXH+VzR5bRw41^g8}J8Q9D1cu3EU8mF}2ROQk{rMPf)zckZ9M=L2+Ceniq=t2A&gWI2)I!qZcIMSOHsjdDY z`o=Zo6WxpZhYjZ}rTX#M73TX*LbZVj;bS%(X{IMguP|g2%EBw$w&q-{v7H&bl(J|R z*8O9b9v2eD!+>U`k&OcKLRJbVBc%HA22)LHD^rLhsf$i)?&uZd6syZRC{`}(_Bpir z3g#85`vsplTOSwB{X9f{EI5jnhE*@B5QdEW^VgAV@YQOrFf6r>oz2xx+TC7n9@MDw z@s2IAtKBpUy&yW|Hu~(n!s+L9M5Fk4W6gn`&1H=pszmN30PqZxxsWFoYPSpgvb3;C z)NR5G)s9eXG{!x+v9l>|_OuIo^d$9@Eh8U->Zr0L zFZ#LapnZ;?=au1#db;sMZ0D^9S&RHA)$GM(5?<+x3+j?ze914+-{Xklh#nY%Qo;ik zZEPZjqWHbo!-n&B0Iw^=^LqmjA3qym^}^cxozP#mdKUfjxQ@;n(VLq=LIpNuZ@nKFcn1 zj)~LS3*Wnkt=*aqU z$>s8vU4exIj#~1O;p!;qGvgur5?3Ak-O2K_8rtBrOS0Bc%BIIh<&EYxQp!d%D?nr> z<%w`&f`2S($f!mft!go2#Jqq#6doQNWhvBQ@)*rHLmDe=H*{daXDhYw#Z(m+!;}o= zQOpW*Z8HB=Mr~{e5=kUgn3@EqK3N&lMcKoSd1;zfNMa_%-S$}UuZO9Ap;&tJw6rOi zFE6z_!>cdzsCGD|jf^(5oV(y#+Xu^fT1jN_&B0UDz=h;$VWS;oLxcd@q=#0XX~JQEd3pv%v1nl zK``rwN_MgDey7Q#g&0Zd?V0tI9=cncJfU8{pHzj(Ro0CBpAhO3qk~r0>+s%ymOPrc zd^hE-YL&m!jk#c2nWP)NnRMQXQ1u+UO+;nHT~Ds1|J{iD_M7|e%M*tu%sqyCHJLhP z4I4w6Vki^28HIz-^T}Z^8bx1HhB&Dj~a8$XW7Vzib-QiS${?*M|^A5n}P0s0tN{LjHE*|e*%V` zlxpc28^!zISiX-+x5%KxRf``7JP%jjk**&=Vg`|{9ONN&Ge{xI@TW!@DLFox?Dx_! zENwCqpW@5zS0wMT$=8EIHYQzC}i%?PDm7Vh8RIg*fa#u69@-8tC(xH+HjX+{N) z5r&7GGd66H?ytGEO5T*r2mBL7k2V=dDXoM>9;WgU&I0Mp3?BUGS}H_N8U zt9zF)Q&7HyV}}unafiXJ{^R;^bHo;vfNh?2=cRuZI;4KUoxCnP((taUs$AvdgJl!Z zf;385yK{ZN*EyTe^)+REI9p5P?HVD#fpH9So2@c9euLIyVTEY@KA8Q8z_6%1x|imR z7Rw(sl=lg{oFaCxr}T-M(i$h zW-1x$1BsTuDemvL0jCd6V!n}5qR=W(MZ9fN9Zz#$;uc9m1SifdtV`3nkCE=?mOa?i zQC7a#Fm8iJpZKo8e8pj`@wDRA8>)|6s0GQl*bRV;SR$AC;CpK`@71S>&T`{-NAL&` zsPWu{=F3&!9GzYEV|!j69WPgyJB9Y7%{ePVyb4SIr`!#N#1-+X$OzB2*57MB|95mx zqaT2?x3Ckxj{VO7|0N?=@GrR|8zIhKqij09oMx(C^>adOzlRKPy5GN<|fW<`aOtw9=cv$I#oPOLxS~^txc>oBv zJT?w5`8QNm4OHci47W#ybJeVL1dR*_mtIi0J=u13^f-Q@Pu9Svm9O{t_7p8gH}mtT z5E<-c;2~m9>?!OVpsQ|1K~z9klrL~Xl|QDp6aPZ_57fR7`I3{>SD!^XV;EBT=mGEb zL5Bqc$TeE}_Wsl{2u^$7Z&$}5uncFGmAM)ydN$2G<&R%vgjD!uHsX%69XxqKMB8OM zN=9ZFnp}frnRtDSI=tyu!Y>Uro%f0&o>P>Y7uEW>S#&|GBbd?kK}BwQ zlMD*O&`~ol{Pp+lDk^j$W;#>H6l3=mZkS1B@pf!<@Z1?(A;>K1n%BS;0tT zBP2z&SeRT;xvovf!64goo}Ph{wc9C;%rPYJ=by!Qms<`teSD9RXhv4K^ba(=L5*>rl796BB$(G5yfv%zcbD4S_iwEE)P$J+$V+|f9BKiC}`$A=-!R|!7ok#O-y?A4(!_$MlWN&@> z=@su6E{bk$ZUS*}iv5<5*lxsQLZmnZ-r%A9yL6%2Vg;&oQbF;kaHq5c3ZbcQvg-rh zKI(oXsHKG0f!wvps{sQLROvkme)<{Eps9?4E`0cPPiu&w9;!rC!xAu|;--wO6%rdz zllvQtr!h!>ne0fQ<-l1VKaJiYn7JW1f0svcMe;j^i*w6j$qyB34uJ zWF4K7!9)h1Ar4yn`RTx70m#$lU4CU-sIV)tDa~!7{z+kO`+x$cIu}lu{sPq?KjY^WQ^Mh4`cxHw<5>n>tUq_{5<`6Cg zgD26U(GMb{AK9ONi74U9D7pw#>jt1L3@21b!D%lQ?so*!s_Z|L#wQ6=J5!}75*0I( z=PaXDP{GL4*5~t%G7q}v^U{gT|L5RT)tE4IEPqory4V5` zu{9n=+OyAsxcKE$#g0=yS1X&RwCTsyol5q|sSwweKYjwa=y+01Mue(mXJa@G74K!M z9J_+LT9?&nw#TPpdhxZh-0pK5E}AJ!kB`86?>n>^s!f^YXA{Aj?DKW;0(bnX4V^c~ zmpnp?jQ_r(A&w98I)<}6MLt!E0wV9NRH>z}`gD1JF2Xe)HyuBNUGN+WFI$=2+zRz! z#N(`d)=t4KuBT%h6js*?jq|5_R);R=WQMR`DJv=cGXd$!YOPn-2UfKVO6GHNEw!+< z7Gp9x#owoM$4hpsY^`kmH3z-4zFt9JOL8@`JIXcl6CxJmXnNC{9LI;%A$WYGC8kiNp7=u*5U8zPuEdP?Wx1 zk5EHceP5wL&~g2@a--QpK|@)YME?+SHS(J-RyokFxd5GA=sOXC*aSZ8ANC zs~g@(_s3|Aetc%tnei;I(6lMycCxDP&L}P9H&N)GZmt(KTp(Vt?JwmJ5GecAeiz>Q zk*bxin;t{!I$&R%hQJct5|63$7&3uFM;94($5umsBGW;A9Odo!YU;CcH?+ZKS3{jB3@@ zJZ7b!p|3vx-2~u^#g;ta!%JI$!yh<{08(0jxO)5h?3Y)btJCD#gvj$zMtzUVNl8fo ztq3r%r=r#Dp&1(8(YQ0tVx_=j=)KwveE%9W+owCygQ`!u#Prqq)}2ugy|$HAHU_xw z$8eo5v@JEUhI4wP$OXCC-|=Cz%kRC2(ohvXOoU>6ZTe#6hyY=BHZ%m%IO8rG*X!BU zFu@+2k=8jwK@ocH${o;|>@D0GA0G#j#u{4hlL?NWTyv3Wx}Jfq%}^~Z#;GW0hsDVS zzD!7{y{m)l(htq3?Cg4?92Nju z%;<<6s#!uUef?@EK%pHgbd8w=c`|PLDn3jg{<7h{{Rvk;ql4X-D;& zp9;{x+fipc6;_v38cMDe+p?e4+t_iRIQX)}^{wM%sfC8?8(?)Ny1WNV$)9Oj{C!D7 zHQA!q_DyJ-{_e6K^`4>m20r(BrOc)vb6T-{tunI-O*P5+a z!3HPmAI>!1>W>7>lk9B8Q#C$CyLG}jNfB?lrBE`_YP>q*v;N9=DK2?8wY~b!-(+88 z#4Wy`ni;BO%q!crSJ>O^d)t=veC@|657$W^)ZNz$x_@TNP|d)#yNDyMyFfEvZd9to zLAR%!*il%(V{P$~M&z$~Y0d60Gbg?#pD0EA`h7gIfye`EGUTvxx{j+)h@UjonNd8` zjQulPOp$!#&!k?J{(dJB{4aX-&&UM-JLaWkIDo#4kn@0QgCs0?)|;$saSr|RLTHyR z*%cm?IehvUJnfy-jN(Y>*4 z@=|0=TBK$WEm5e)mE@flu+@hKUYcuD1k>L5g&87f;zL-RgAmkTVzmwulxJVK6LAmN^S&&YY3?t`4X3o7z47 z)#>hWR>7Zt*~-!??Xr!Hk2gt_?lrM(Y8m=M5IFYhT4!Pz;fUs{Wh&k~i3yvz>qC~} z$(b&|mS>_%0h4^urc3?UL|d{E_XbF%sTaRmVGs8xZMjVw8H0qVf!Z;+mkB%U zK1s8X&kT>)!>(U`IWHq(WCz4+gtlSU|8=<=J;gX(~6 zb-gF@<0Y0yd1wvo8|e|P=__Xb&bMa7;qlU*#o_3cHT}ueQT3zQzW&wK)my7Go?^vJ z*nF{K416m702-5;qS`c}>hY>xD8rc!KGh+mfS$x?gglg^49$dl3>Kq) z+RZ~$1j=$<>YNi#USWpHhJC7_$*?KVN6HBkmk|~I6k_6iYtX*Io&S&81q8Zv6mwbd zo^Kr_dj%1V;N;7Um+f~|^zN*|f8N|Eh?{m@uo0jT^6(Y4oAbrb;OD*Vo>Xu@lgcIF zxZ(-#`F7D$!5J5j%x@ijI_QJX+L*|41#T8&nRD}rN!;seIU17%3jHqB>unz(Zk^As zE_*)vl)2eyDbwylKj$Sl`Nd9!Nu_E8M?V*ZkKR)z;_Ge{ zyS2R#bFFY~sA?rB(#NfPG1K5@m8+OQ!;AL2W} zhTb*T*&t98CKiKy_l=~&;fqmP$`=bPHvhC!6D zx4Zoa$zkYYAdsoLeq)>^_v16F-V6n*DT88D*_7t5RiH&07#Iiv&B{#A94K`Sp+P=! z_9zViw~qcQ*9GWW0%sxr))rQr`%xUxegBe_j+SD%z;uuuLW5k#3iZkra0M_6pRvq} z30F-U!xnlti_F_D?2dp2cn(y-cbEapP>RElvjA;Dq&DWmgmErM61=lSapbvzQUbuh z3C`8C;`-JBbr#}N2!f`talBRw@M!5N9-!4a*jz$o zTmHfqzXw_}?HUi~LRim~7C1h)%{g-GiBROKeC{nnBO@aqAqa-T6Tw6fL40(3E*>{QN#K`PY%z{xYl_28C4T2(*qm z0q@p#(t#Bbb-j@uoMSORPyq<8Xzjw)d$%EGLko_Boqa`9xmJOQhzJDG*%Y-)I5yQT z!D|k%Cf|O(%s3F{7o`e;*YV$wDs2mdRV9Xf5Jq68bUcSaYpczE$)q%R2K2SJBVpix z19d<~u?|21kA4Bvf5s8etEeYv={)LpV+oxLssqK|5R+l1N_g(0!T@4 zy&$FiF6?Eg)b@_MPeWs_r;p}jo9(U*Pt>Q?@c34>=*y)3dP8m&$KoPcmeVX>xBtO{ zyI%{@>}RVMGJSdMsH7LV&GF*V!=8icNC<#y!Flkv-oKm)Hakt*!?J#dA-?oV?j`Ak z)KT-q&x>gZW^>4~*?%`mN#3ja5Q@fAAw6D)Pte00KR?{yI=hSiC^}rZsRHor*F`az zOxFw#U=%-E=HP`EJ~k^>X&Nf4{T{zYPV|P`F?FHX?Cd?K&H+Wiinih9d1_14ug|`g z>mj4%dLYNl!`BU?eJT5BB2jlzE?1`}BTA$0!e&^-v0no}pFdLazCk{v13*#)x5YHp zuxM>>`O}Av^mums0voN@{5;dd{of;c9oV~n)doYg#Que1sns|*KP85Vj}@q1e`qw;aX6ufOGAU2>S^XXu?|F_pzaIb3P3b*y9@T$W{)D}TdAaar&{+g44P%M! z(V^bZT^xN*PWW!%`qY)6`vjIb?<6{uL2e96<~V*EIXR)=u`vPYc|f3m(}K#R5O=8p zOb&+)TI9xpqK8ZqdbMXpKHaOXHdliN=2gysLRmH~8*-d!wCDl}A)Hud9tU z(Y$NSW@`GC!KN~$B5I0xV&jvW$xOllrc zJY!NJdEP6T{z_*nL&FQN2+<^b-RrGJ$`(DvmILMXHeX+d4?**OBgT`O?N%JGY&4hd zYnH-+B3Y&}uB_LE#W?RF>KbE;J0PwA-WX!+Y)^hah`Vc`SMY|2bdwmuU!KEkT9v>o ziQjw7?!sV|E7W&}P%7URI2n2UM!HTjs=?WHUC7Me%z#d<^Mb|lKGby3_h>DGu?GP& zC7;q`56T0#6pHbHx|EJQG{z+2ZU}k3SvyEX5S?nR_jZz~XOiP5!3T!l3R5$-3}X*t z%%U|S&`Zn9<4=cg3F!6_A==Ehr+hwFIGXd&`rD`;L*B!YJ21(S*K3dHNJ{Q}cp)}^ z#ePI`lRmtU_Nfjs3n**mL706K&$Zcht|XumI1MTpT}FNu?&Da016Nn9r)Jhqa&GRq zaQ;_F;y}%Ic-CtYR;{26)!emc$7A3+W;*2jvLeQ8SIyc>dJSQgw0CK8ASE33ca!j=9i;C`hU()N(QOp@V5?A)Acc8ZK#zWdC~$&!56DI+>cll^lDR% z#Ef_{Yw6=pYTOf#3M)qSzoMTa()EC8kDR%%mM;BcI3G8yMGFyStG5of1ifz5Xa6N} zvw$<|8ae966jQEdKOD03d}XE z*-8*}JTQ|P7kWu436X0y6Z6ozM}+85w!{ly&06E$T9IhMvt+Af9ubgn8R{q}xdY9f zCDTnv(?^8qwF_@Q@Op4;-aEmo^;JmhqD1-k$5dPE3&SrYo&Z`nx_$2|a@Zk9zdfdM zXXO3Uw4ZfEC>a&__beLK47;D*q;dkmE(*@Fb1wIK*CdhMEj8!jx zifouiMDiXgh9Vo^9vSm>{|)=wzOhG$=Ynr!iF^{I^G&U-Gy=8>brdYbS=qIA`^cV^ zVet758#EMa&D)Z;s7B1LEiux(iYScMFg}ct+kY5XK1j&t1RYGj)>&EYr)rG9L}PO^ zWYI5KDybXoYsCzCdBtbdQK`r}piaX&yo%Q7c__yee-8Db;yWTlr0`KM7y0!n+Uab* zeue6RCM{8N{Ea)=*bQ59+E7}`gCV`OSg6c(^weFPKkerP}G zM+$@uF`5<@V7 zr{ce&9_aY)6-ZN|JE*J@WA&gIm6xJQnRpYnbeQ%KMV#$mWs}xD?EXZZJcZ43IHQhh zl#Vch2OgPG(*6#esUcPI=(YqwHN2_g?c6lM0@Xzv3c(l46IXL(VRTBt7eqaNe0~uU z8uaWFTkgPN4DJVAV?RRLV2s?yF@W!ur~1%=b;!kG;_7R}%`!zhCid$eWZp0p2sT^j z%|dn^2vpr4r6ervKR>rn(AbBR8;_umE$ChZF&Zs;Hg(B9jH&0(jx3ft`Bp_)$F-RENmxuwOk^a3=ii_PQ+NVLV4x{Tgqm^YYR&t} zqt&`O_Z?bvf^c{#vEY2QF6GN#AgT)G3? zp{kWEx;sN5o>eV_(V8IYuP*f`k(-qISJ_c-{5SSaz4#k0jW@XA@)mqGQ>r(TCZ#~P zX=peER)Pz&*WK4d+vv&hRBxfW--0s!5zTeVKOF4;MmqsIynkzJ&)1QL;Ql+%gA#;Y zA*SH8h8n(a(&-?9G9ALOb4$o&Ljl_h1ea{&r6>)8`#6Bu1Yv(wrUZWAv+Qd8Lr4(m zy(lca3^2bvJ~_D#@GuCLjtT?OcL=J3>lTnmq;>d!x&@=0%t8c{{7$oI2stbdV>1PZ z?iuX@L61=3`EuBPtB^3Dz=1xbY9SSH4#@DM0{3Gu6GrtH>(CM*ORQ%MxD>HY2)WK% z=f@4y{AYwe0Aoa+a0Qh8ymvoe)KsBZsehtSJ)IcrNb7$X&ml5E%Ge z=ZgnHd!Av9P~TC4>)FV}$u$FgLX1L3-MWM)0JfM8|1MkO&4-woCM#unD z)o*HhC##^40VdZDmJ$k?x7Xk{5B^``dw3wAGIY9olYt-Da@i*suH#ys$e+(Axu3ksr)hl+Ru>{$Fcz?QQgM#E-kOJK+XBMTAF>k zYZ&+Pch#~pPyqRgY=o1)!VkYF2(if>@O=ekfM#_3f4uEmrt*%he)r_1C#xSTY4yfK zt{gQI6Bg9Wbm^YNH&BO3u{Hn4RE#^(}%Q2Z}n+a zIxYf->Zz8+P)Wy{blgQ(Pxb#=P*xsV&Q5FM49&!~>)o4PVM6)(|6V1gXPU?UJ+26; zT)#iJ{cqQn*m?ORF>4lhG$?@s0UhmMm&o=D4*K@P8tk8bH zBM{FUZ1Z~dEZ$dn5t-e;XbOMPQeCa`wXaqnuF0({y6wZ01LB-l=55gw5VVA*(jpJk zut?_}#++rz&0BuoR{7AAUPqvbaDTSSfl+N-w*5(3E(sFtI03s08w6!(q4|5{ru{HQ z0Q2VZ%Z9+)Vlxtm;^I=m@$W9{E@7+pK(TjVCPhDtco1a4-wvUGh<*mC$jpu&a9-?@ z{fjdqR4NTL?cQd7(}pZ+wnS~c$9=1#K@(3z>-F=2h$TQe{68?uxAj911+8Ptl_5R% z-A}>`8(S(#jq2GzoZLJA;f^Y?tbJ1V(=k~gv-7`pc7o0?zSJbw*B`^Cg}V!C&9L4o zm$`_BJ9q)g-{k9p4Vcloh2*kijtgQ zcwW5eFV~mqMYIMiVSUo0hG5E05NSbe#RoVKwxWkI5L4!@apT&?00frO*iOBNk}Z}S zEq6N?CK0?>1wb2lMSI+&S8G&>)ti)MWsY!;+>f>d*DVjweu^dq%fjDT-@e!jdSb>k zESa_Vr%_D%8|}Z38bKP@ep`Sbte~$xEc7c0D1qIe^Z8I-&HQm#_~e!sI8q;wzX#7W zpZ&=DedYfJ9Dcp}EW380*XGhfPtYay1dvJAE`i!A3$G}y3aPhZG(>oZYo}$A$5}Gz zdcZ9M%}{s3IEJuQb?_`Gvl`O-CBJ+e?~{*Zpc&=nN>irDdTDl zBh$=YrV~XP$h;>)WOyV@r$;OixnAJEZ;fVV$Tmd;IsKs9=4Aze9yJe22)ROJCyRKQ6Si0*?@{PtlwVqhjO z=uf9U!Ms3B^x!R?@^=`T>B@Hef{tOzJAXs_s^jDb#JLQIvSIfdbL1=tUu&xSDjYNM z*!x!hyYb`^-+N&5O~ve>a+AK`KE@2L31Y5l5`6~lnT@Z*;F^GfY7jgVu0!tTP}hU? zz5CmFIh*0y8rV*6)1T(ijiKJ(DdPEbRids2zqg%gJ`KX2al_iV(*BPjG@f8gPJ;gH z)~Oq5pp5?i=1&5S88=lN9B#Fhz82|F8IHg&uAo6&xo#&MAM(f5LWJVi8>%ghM zLff(h`lJlS#H}7ZJH$7;wO}duoGveN3btf9v}jDP@0uT7Il(@u7%f9XsjaiQbQA11 zZ9+47U?{}teRy`8TvgYaEzu@1KbwyRU% zL&OAA_9^*Z%+6WO9M!WUbKHpv`7s`2vK z%I`R>zI7bZeuOgrqkI=<+E=`C0mkMruJ;q$TMTu$>+!Vd{Ky9iBN6a093(#YTl20V zLi+k{`v{Z`J$C41@Ybb>?SlRd4<2fyv~j=%Q}U3Nt`|N2+-U(WOraC*tfO#@kgqO4 zzNo+#c;}@xa81Pc(192etP)ty-(py}O&helvW((8Kl(}zUGn)YeGU=-;&RPm-|phv zmQN{*kvvWv5qG|?$p|5m=oTqV2Nhvvinr}Dj-4?kY`QI!-C z#9B$=ZVRb~{}w&hBWmq`H1Bu=j!6$_`4?jy+`-Sv<*Eg-0^I{&z7a3#u>w{J0WtxF z+mBg-@pkZaF3Xc`T8nm0xW+b-<=_PDHSeuzm^iYRhBY1zA`3t*ux2KV?7DM>iWxPs zhi@T37Cd1I{5El}uCY}HAhcx7M)w0pI?=C*`FLYeaCCdL1JBBqUKq`e-| zm|l1|K{%Ee$g+*CmpD}5U;H7WzY02^T-84x4(u$6M{h{~)RqACW&y}TKrWp!Anw2s zHD|58Z&?Xj9e=YcKh~0`Us0Tr@&+W6Esa;;8x^ilK zGB~h&m>3!+wG;t)Kcg_VX#&Q$W2x``pDp0O;=%KbWPV^mCY};ehuZ}&XiMDvA`hBo zP_F;d(t_n-BIya5kv#P7g_sKbgu(53OAGD@IdJ$RYFg<6(0;E@Z|qyE#swI%o%V&2 zprYNNz3t2lfg*rXwld-p6YL;H)}}`W|0$E7y7G=YVinG#fZbn?V!JA1pH~KBKwlXA zNY3NGHPl%VV+l@^C50ro@;@SK9)?)+cL@Y^d<5~u?ZrW}BRrDEO=S}wpz=dELAK{A|Mrl{UiJKt zQ>OyiOW+}v?p>L3HxH`eRQSXvhe^mq+F^zpdtd zas*}kKeomen6<8%wVbO#zK10pB=kQ?9I9{=5e#Fs5qZYHMf6;h-vikSesWP>zWoN! z(1B&1ngy%eh$%)c(}uC;U`5IZ8qn~jYlU&i1F!zI%GD0YM|6)jSnea_svG#~z+@H5 zg^(i-H(F1VU!`ZWBINJ{&kAMJZx#KIG})$s<-*`J@ra23^B!Q;3*=|MelP0hA_Isc z>A*%M3ATwn2IKiOFpBvzro*>XpkDol!%BT5RX)m`(Q&d>@6CXc?-`AV0Pcv8D0^ku zg}Xd{3@UJVR;S%s7Wt&lXgDZF%!8O#oHFL!c{VvI2fxNfo(PkjfZry(9`MQFC75f> z(~z`cu*7H8)3_ON4hyaas4&KE*{trG&VjDVrA>65(K@#AxN(LEr774-*Q3G$-L0DN zx5!mplRT!g_f|FT)P_;Om;U4@D1Q-Hn3t>UN4}r}*lNmutY!tVp?yGk@3$NZ|)8O)(Ut;Mrf#b8k&$_zbFRk>1Y@y+At@Mr=BRald;*d-qH>WkszU)mI zFh{lXM94*hU5ahgrAM|&M1F!a7E(W@Ec^*fmD%8R7)wZNlSx;SMh(WvQA(#-Q;0KF zrM8lUNE(YC>-jC1j^Yxmay29-Ha0wIl?U!hc0VJFB=EI@{YJJky!d8O1_S1~zp95+ zVC)r2Z(vf7aE|uD?{lB^6YL z+&=Z!nLr;OS!dF4@{62SzeBVCIPr1^_4zEneQ1nVXB_+`kOv>KfJxKdIykW|BY?lh z>xH#l??* zW<&yCJ$8&a;UcSqSx5qrcQkP2WSc~3BVrj|Jv!!176SmOeGe)1Z4A}y0PINc-P;rr zj{j|filb<(CeB;t59ag3vqafUYV2evdb}8vZK|1^_#Xm!RZ@^*`?>D5Zug2HD`Sor zS)zu6)2utY69||NdNu4jC=vJNiSMmU7%2 zNyeD2CD=6SgyR9Xc+dKef5-dkiZm~9Nb!Wmh7Z8+hEUiN5Z`hkfd(3N4GieV7IP;g ztCroB(CF#Yx8$VLw9Z}gDsMT0zvT0PWC%?T zQ2|QPik9Oo|euv z{m@h>IX44)wg}e;19)@iF!Ia&4&tk&M~(+(7h|BI>C%u6q-Uz_u%^6xY!VuN)^O?r z4_#7Koxh%!NrNC~NBWg*ZJ?%rvMa`zV%VR)NP5ThkIcPi6>XKF6{kjSmDzSM<(+*y zS0C z7lg_@3q67aRLrUzs*=`h0T8Xe2&>4Il<8lDVD_sT_k1$Jg;!GW4r2fv z=8-*3H{Jz_G4XBxU;=Mmer-D5%j8*f(^uh-iHPX{&@DE0TL~p8oB>$|SZbOEGopww zd+J+G_z9o;SwRy2@$`9U?tmi1(85t%p26C@WCR8XQ1bs=@gfxe&6CS{?*!IFlo!6c zT%7b)a%|MskK%7+o)#2Nw|v%l6hQ$Ltk2F=g-j&RtEA`mzyC~t(b+yua6==)f&yh$ z)JvSZ1DipXc)#G%$l~0h^$!6o!=24c+C)5r@;|5sp%TJ;-`zNszkbpfQ!_$1IBeB zTx5?pasS08u$TbKPyz*H+y%fOet1J(j$glHDc1?nV;*!>e0yiTBMN#b6bcD9$!W90 zj#BNVky{jw(SfPar=#;{3X%l^9N~@jl3EWVs4@lDO=NUq>>>T~6IFPQ%8XSUI|mnW z_7{K%GeYm_(G0TwnLcPJ*aGqm_pL?Rr@(Din7#-r)t(t`3@bIWN%{24Nu`CVr%U)xjP`Rc>Dh?(BPmwc1R@R_WU?_ zbEScu9UepWQU(~J{}KmMh#9 zuQe(=I%Yud_w-!ACem3h#6IM5mxG`@gOST3ET$E=!hhp^5YVt%ZH0iYTAgmtwpr<_ z4NNVi9tlIsz6F<0BFquhJbJwno2m8ErkjH&E+Yvo8HVC6% zX?X3m#=8KW$xym>7z)SEYGLCcfzjpJ-Pn<=(1w^X DEqUR* From 6b43197b0817596f47670c6b55d26ff7f86d6bd9 Mon Sep 17 00:00:00 2001 From: Scot Breitenfeld Date: Fri, 11 Oct 2024 18:18:48 -0500 Subject: [PATCH 005/179] Fixed data typing errors discovered by promoting integers and reals. (#4947) --- fortran/src/H5Rff.F90 | 6 +++--- fortran/src/H5VLff.F90 | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/fortran/src/H5Rff.F90 b/fortran/src/H5Rff.F90 index cad9d3c8a0e..75933e28fb4 100644 --- a/fortran/src/H5Rff.F90 +++ b/fortran/src/H5Rff.F90 @@ -856,13 +856,13 @@ INTEGER(C_INT) FUNCTION H5Requal(ref1_ptr, ref2_ptr) & END FUNCTION H5Requal END INTERFACE - c_equal = INT(H5Requal(ref1_ptr, ref2_ptr)) + c_equal = INT(H5Requal(ref1_ptr, ref2_ptr), C_INT) hdferr = 0 equal = .FALSE. - IF(c_equal .EQ. 1)THEN + IF(c_equal .EQ. 1_C_INT)THEN equal = .TRUE. - ELSE IF(c_equal .LT. 0)THEN + ELSE IF(c_equal .LT. 0_C_INT)THEN hdferr = -1 ENDIF diff --git a/fortran/src/H5VLff.F90 b/fortran/src/H5VLff.F90 index b07e1389f21..e1629328ce2 100644 --- a/fortran/src/H5VLff.F90 +++ b/fortran/src/H5VLff.F90 @@ -419,7 +419,8 @@ SUBROUTINE H5VLcmp_connector_cls_f(are_same, conn_id1, conn_id2, hdferr) INTEGER(HID_T), INTENT(IN) :: conn_id1 INTEGER(HID_T), INTENT(IN) :: conn_id2 INTEGER, INTENT(OUT) :: hdferr - INTEGER :: are_same_c + + INTEGER(C_INT) :: are_same_c INTERFACE INTEGER(C_INT) FUNCTION H5VLcmp_connector_cls(cmp_value, conn_id1, conn_id2) BIND(C, NAME='H5VLcmp_connector_cls') @@ -432,7 +433,7 @@ END FUNCTION H5VLcmp_connector_cls are_same = .FALSE. hdferr = INT(H5VLcmp_connector_cls(are_same_c, conn_id1, conn_id2)) - IF(are_same_c .EQ. 0) are_same = .TRUE. + IF(are_same_c .EQ. 0_C_INT) are_same = .TRUE. END SUBROUTINE H5VLcmp_connector_cls_f From fc5b66b1a8208e17c5cad8ab02533484039f167b Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Mon, 14 Oct 2024 14:30:22 -0700 Subject: [PATCH 006/179] Only clear FE_INVALID when that symbol is present on the system (#4954) When we initialize the floating-point types at library startup, it's possible to raise floating-point exceptions when we check which things are supported. Normally, we clear these floating-point exceptions via feclearexcept(FE_INVALID), but FE_INVALID may not be present on all systems. Specifically, this was reported as being a problem when using Emscripten 3.1.68 to compile HDF5 1.14.5 to WebAssembly. We've added an #ifdef FE_INVALID block around the exception clearing code to correct this. Fixes #4952 --- release_docs/RELEASE.txt | 14 +++++++++++++- src/H5Tinit_float.c | 6 +++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 36de830a71c..cf9b65cc086 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -132,7 +132,19 @@ Bug Fixes since HDF5-1.16.0 release =================================== Library ------- - - + - Only clear FE_INVALID when that symbol is present on the system + + When we initialize the floating-point types at library startup, it's + possible to raise floating-point exceptions when we check which things + are supported. Normally, we clear these floating-point exceptions via + feclearexcept(FE_INVALID), but FE_INVALID may not be present on all + systems. Specifically, this was reported as being a problem when using + Emscripten 3.1.68 to compile HDF5 1.14.5 to WebAssembly. + + We've added an #ifdef FE_INVALID block around the exception clearing + code to correct this. + + Fixes GitHub issue #4952 Java Library diff --git a/src/H5Tinit_float.c b/src/H5Tinit_float.c index de959b49735..39deda03625 100644 --- a/src/H5Tinit_float.c +++ b/src/H5Tinit_float.c @@ -608,9 +608,13 @@ H5T__init_native_float_types(void) #endif done: - /* Clear any FE_INVALID exceptions from NaN handling */ + /* Clear any FE_INVALID exceptions from NaN handling. FE_INVALID is C99/C11, + * but may not be present on all systems. + */ +#ifdef FE_INVALID if (feclearexcept(FE_INVALID) != 0) HSYS_GOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "can't clear floating-point exceptions"); +#endif /* Restore the original environment */ if (feupdateenv(&saved_fenv) != 0) From 97420ea678ec28800c89a27c63e6aa71793ca5f1 Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Mon, 14 Oct 2024 17:10:30 -0500 Subject: [PATCH 007/179] Remove duplicate and unneeded dmg step in workflow - correct ABI version compare (#4955) * Rerun dmg on failure - correct ABI version compare * Remove unneeded dmg step --- .github/workflows/main-cmake.yml | 8 -------- .github/workflows/release.yml | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/.github/workflows/main-cmake.yml b/.github/workflows/main-cmake.yml index 9c58f0ba8e2..3c953409740 100644 --- a/.github/workflows/main-cmake.yml +++ b/.github/workflows/main-cmake.yml @@ -270,11 +270,3 @@ jobs: path: ${{ runner.workspace }}/build/HDF5-*-Darwin.tar.gz if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` if: ${{ (matrix.os == 'macos-latest') && (inputs.thread_safety != 'TS') }} - - - name: Save published dmg binary (Mac_latest) - uses: actions/upload-artifact@v4 - with: - name: tgz-macos14_clang-${{ inputs.build_mode }}-dmg-binary - path: ${{ runner.workspace }}/build/HDF5-*-Darwin.dmg - if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - if: ${{ (matrix.os == 'macos-latest') && (inputs.thread_safety != 'TS') }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e41b30c4d37..5f750a08f7e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -55,7 +55,7 @@ jobs: needs: [log-the-inputs, call-workflow-tarball, call-workflow-ctest] uses: ./.github/workflows/abi-report.yml with: - file_ref: '1.14.4.3' + file_ref: '1.14.5' file_base: ${{ needs.call-workflow-tarball.outputs.file_base }} use_tag: ${{ needs.log-the-inputs.outputs.rel_tag }} use_environ: release From b24cd0261b2ae256d09f4afc5f07314f28137dc8 Mon Sep 17 00:00:00 2001 From: "H. Joe Lee" Date: Thu, 17 Oct 2024 11:11:24 -0500 Subject: [PATCH 008/179] Fix h5py GitHub Action (#4962) --- .github/workflows/h5py.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/h5py.yml b/.github/workflows/h5py.yml index a0c39d67f59..c6c6aa7505b 100644 --- a/.github/workflows/h5py.yml +++ b/.github/workflows/h5py.yml @@ -28,8 +28,9 @@ jobs: ./spack/bin/spack install py-h5py@master+mpi ^hdf5@develop-1.17 ./spack/bin/spack install py-pytest ./spack/bin/spack install py-ipython + ./spack/bin/spack install py-pytest-mpi spack load py-h5py spack load py-pytest spack load py-ipython - pip install pytest-mpi + spack load py-pytest-mpi python -c "import h5py; h5py.run_tests(); print(h5py.version.info);" From 7f619c9b13f846bcecaf70569a8a4992b1fa491d Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Thu, 17 Oct 2024 11:11:52 -0500 Subject: [PATCH 009/179] Do not package debug builds (#4963) * Do not package debug builds * Do not try to upload with debug builds --- .github/workflows/main-cmake.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main-cmake.yml b/.github/workflows/main-cmake.yml index 3c953409740..d633bb77ebb 100644 --- a/.github/workflows/main-cmake.yml +++ b/.github/workflows/main-cmake.yml @@ -241,6 +241,7 @@ jobs: - name: CMake Run Package run: cpack -C ${{ inputs.build_mode }} -V working-directory: ${{ runner.workspace }}/build + if: ${{ inputs.build_mode != 'Debug' }} - name: List files in the space run: | @@ -253,7 +254,7 @@ jobs: name: zip-vs2022_cl-${{ inputs.build_mode }}-binary path: ${{ runner.workspace }}/build/HDF5-*-win64.zip if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - if: ${{ (matrix.os == 'windows-latest') && (inputs.thread_safety != 'TS') }} + if: ${{ (matrix.os == 'windows-latest') && (inputs.thread_safety != 'TS') && ( inputs.build_mode != 'Debug') }} - name: Save published binary (linux) uses: actions/upload-artifact@v4 @@ -261,7 +262,7 @@ jobs: name: tgz-ubuntu-2204_gcc-${{ inputs.build_mode }}-binary path: ${{ runner.workspace }}/build/HDF5-*-Linux.tar.gz if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - if: ${{ (matrix.os == 'ubuntu-latest') && (inputs.thread_safety != 'TS') }} + if: ${{ (matrix.os == 'ubuntu-latest') && (inputs.thread_safety != 'TS') && ( inputs.build_mode != 'Debug') }} - name: Save published binary (Mac_latest) uses: actions/upload-artifact@v4 @@ -269,4 +270,4 @@ jobs: name: tgz-macos14_clang-${{ inputs.build_mode }}-binary path: ${{ runner.workspace }}/build/HDF5-*-Darwin.tar.gz if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - if: ${{ (matrix.os == 'macos-latest') && (inputs.thread_safety != 'TS') }} + if: ${{ (matrix.os == 'macos-latest') && (inputs.thread_safety != 'TS') && ( inputs.build_mode != 'Debug') }} From ad307bf61f7dcd234204c1256b4954d9493e956a Mon Sep 17 00:00:00 2001 From: Scot Breitenfeld Date: Thu, 17 Oct 2024 11:17:20 -0500 Subject: [PATCH 010/179] Updated hyperslab documentation (#4965) * corrected Fortran docs for hyperslab selection * updated hyperslab op doc --- fortran/src/H5Sff.F90 | 6 ++++-- src/H5Spublic.h | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/fortran/src/H5Sff.F90 b/fortran/src/H5Sff.F90 index 3c301c2f462..db709ddc10f 100644 --- a/fortran/src/H5Sff.F90 +++ b/fortran/src/H5Sff.F90 @@ -893,6 +893,10 @@ END SUBROUTINE h5sset_extent_none_f !! \param operator Flag, valid values are: !! \li H5S_SELECT_SET_F !! \li H5S_SELECT_OR_F +!! \li H5S_SELECT_AND_F +!! \li H5S_SELECT_XOR_F +!! \li H5S_SELECT_NOTB_F +!! \li H5S_SELECT_NOTA_F !! \param start Array with hyperslab offsets, \Bold{0-based indices}. !! \param count Number of blocks included in the hyperslab. !! \param hdferr \fortran_error @@ -1000,8 +1004,6 @@ END SUBROUTINE h5sselect_hyperslab_f ! H5S_SELECT_XOR_F ! H5S_SELECT_NOTB_F ! H5S_SELECT_NOTA_F -! H5S_SELECT_APPEND_F -! H5S_SELECT_PREPEND_F ! start - array with hyperslab offsets ! count - number of blocks included in the ! hyperslab diff --git a/src/H5Spublic.h b/src/H5Spublic.h index 3697374d49c..a5264099b0f 100644 --- a/src/H5Spublic.h +++ b/src/H5Spublic.h @@ -190,6 +190,8 @@ H5_DLL herr_t H5Sclose(hid_t space_id); * composing the entire current extent). If either \p stride or * \p block is NULL, then it will be set to \p 1. * + * See H5Sselect_hyperslab() for valid operators (\p op). + * * \since 1.10.6 * */ @@ -213,6 +215,8 @@ H5_DLL hid_t H5Scombine_hyperslab(hid_t space_id, H5S_seloper_t op, const hsize_ * from \p space1_id is copied for the dataspace extent of the * newly created dataspace. * + * See H5Sselect_hyperslab() for valid operators (\p op). + * * \since 1.10.6 * */ @@ -816,6 +820,8 @@ H5_DLL htri_t H5Sis_simple(hid_t space_id); * \p space2_id. The first selection is modified to contain the * result of \p space1_id operated on by \p space2_id. * + * See H5Sselect_hyperslab() for valid operators (\p op). + * * \since 1.10.6 * */ From e64e1ea881c431a9561b83607d722994af641026 Mon Sep 17 00:00:00 2001 From: Michael Cho Date: Thu, 17 Oct 2024 12:20:47 -0400 Subject: [PATCH 011/179] Fix linker flag in pkg-config file for system zlib (#4957) Previously was hardcoding `-lzlib-static` which will result in the wrong linker flags when built with system zlib. It looks like there was logic to figure out the library name but the resulting `libname` was never used. --- CMakeFilters.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeFilters.cmake b/CMakeFilters.cmake index 52d65e59e47..57c51edceaf 100644 --- a/CMakeFilters.cmake +++ b/CMakeFilters.cmake @@ -108,7 +108,7 @@ if (HDF5_ENABLE_Z_LIB_SUPPORT) # on the target. The target returned is: ZLIB::ZLIB get_filename_component (libname ${ZLIB_LIBRARIES} NAME_WLE) string (REGEX REPLACE "^lib" "" libname ${libname}) - set_target_properties (ZLIB::ZLIB PROPERTIES OUTPUT_NAME zlib-static) + set_target_properties (ZLIB::ZLIB PROPERTIES OUTPUT_NAME ${libname}) set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ZLIB::ZLIB) endif () else () From 29c84e0d597553a988cd71f455edf53e010fa319 Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Thu, 17 Oct 2024 19:10:24 -0500 Subject: [PATCH 012/179] Incorporate remaining parts of the filters.html file (#4966) --- doxygen/dox/ExamplesAPI.dox | 10 ---- src/H5Dmodule.h | 3 +- src/H5PLmodule.h | 95 +++++++++++++++++++++++++++++++++---- src/H5Zmodule.h | 38 +++++++++++++++ 4 files changed, 125 insertions(+), 21 deletions(-) diff --git a/doxygen/dox/ExamplesAPI.dox b/doxygen/dox/ExamplesAPI.dox index e2ee26ee28e..f3903cec1d2 100644 --- a/doxygen/dox/ExamplesAPI.dox +++ b/doxygen/dox/ExamplesAPI.dox @@ -800,16 +800,6 @@ FORTRAN h5ex_d_lzf.ddl -Read / Write Dataset using MAFISC Compression - -C - FORTRAN Java JavaObj MATLAB PyHigh PyLow - -h5ex_d_mafisc.h5 -h5ex_d_mafisc.tst -h5ex_d_mafisc.ddl - - Read / Write Dataset using ZFP Compression C diff --git a/src/H5Dmodule.h b/src/H5Dmodule.h index 96c5b1a704e..5829e80fc9a 100644 --- a/src/H5Dmodule.h +++ b/src/H5Dmodule.h @@ -1612,7 +1612,8 @@ allocated if necessary. * care must be taken to assure that all the external files are accessible in the new location. * * \subsection subsec_dataset_filters Using HDF5 Filters - * This section describes in detail how to use the n-bit, scale-offset filters and szip filters. + * This section describes in detail how to use the n-bit, scale-offset filters and szip filters. For + * details on the how filters are used in the read / write of data, see /def subsubsec_dataset_transfer_pipe. * * \subsubsection subsubsec_dataset_filters_nbit Using the N‐bit Filter * N-bit data has n significant bits, where n may not correspond to a precise number of bytes. On diff --git a/src/H5PLmodule.h b/src/H5PLmodule.h index 1aedc2783fe..9f867ee5fff 100644 --- a/src/H5PLmodule.h +++ b/src/H5PLmodule.h @@ -48,16 +48,23 @@ * available to the application. For example, if the application intends to apply the HDF5 bzip2 compression * filter that was registered with The HDF Group and has an identification number 307 * (Registered - * Filters) then the application would follow the steps as outlined below: \code dcpl = H5Pcreate - * (H5P_DATASET_CREATE); status = H5Pset_filter (dcpl, (H5Z_filter_t)307, H5Z_FLAG_MANDATORY, (size_t)6, - * cd_values); dset = H5Dcreate (file, DATASET, H5T_STD_I32LE, space, H5P_DEFAULT, dcpl, status = H5Dwrite - * (dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata[0]); \endcode + * Filters) then the application would follow the steps as outlined below: + * \code + * dcpl = H5Pcreate (H5P_DATASET_CREATE); + * status = H5Pset_filter (dcpl, (H5Z_filter_t)307, H5Z_FLAG_MANDATORY, (size_t)6, cd_values); + * dset = H5Dcreate (file, DATASET, H5T_STD_I32LE, space, H5P_DEFAULT, dcpl, H5P_DEFAULT); + * status = H5Dwrite (dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata[0]); + * \endcode * * \subsubsection subsubsec_filter_plugins_model_read Reading Data with an Applied Third-party Filter * An application does not need to do anything special to read the data with a third-party filter applied. For * example, if one wants to read data written in the previous example, the following regular steps should be - * taken: \code file = H5Fopen (FILE, H5F_ACC_RDONLY, H5P_DEFAULT); dset = H5Dopen (file, DATASET, - * H5P_DEFAULT); H5Dread (dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata[0]); \endcode + * taken: + * \code + * file = H5Fopen (FILE, H5F_ACC_RDONLY, H5P_DEFAULT); + * dset = H5Dopen (file, DATASET, H5P_DEFAULT); + * H5Dread (dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata[0]); + * \endcode * * The command-line utility h5dump, for example, will read and display the data as shown: * \code @@ -161,10 +168,78 @@ * plugin on the system. * * \subsubsection subsubsec_filter_plugins_prog_write Writing a Filter Function - * The HDF5 filter function for the dynamically loaded filter feature should be written as any custom filter - * described in Custom Filters. See the - * “Example” section, section 5, of that document to get an idea of the simple filter function, and see the - * example of the more sophisticated HDF5 bzip2 filter function in the “Building an HDF5 bzip2 Plugin Example” + * The HDF5 filter function for the dynamically loaded filter feature should be written as a custom filter. + * This example shows how to define and register a simple filter + * that adds a checksum capability to the data stream. + * + * The function that acts as the filter always returns zero (failure) if the md5() function was + * not detected at configuration time (left as an exercise for the reader). Otherwise the function is broken + * down to an input and output half. The output half calculates a checksum, increases the size of the output + * buffer if necessary, and appends the checksum to the end of the buffer. The input half calculates the + * checksum on the first part of the buffer and compares it to the checksum already stored at the end of the + * buffer. If the two differ then zero (failure) is returned, otherwise the buffer size is reduced to exclude + * the checksum. /code size_t md5_filter(unsigned int flags, size_t cd_nelmts, const unsigned int cd_values[], + * size_t nbytes, size_t *buf_size, void **buf) + * { + * \c \#ifdef HAVE_MD5 + * unsigned char cksum[16]; + * + * if (flags & H5Z_REVERSE) { + * // Input + * assert(nbytes >= 16); + * md5(nbytes-16, *buf, cksum); + * // Compare + * if (memcmp(cksum, (char*)(*buf)+ nbytes- 16, 16)) { + * return 0; // fail + * } + * // Strip off checksum + * return nbytes - 16; + * } + * else { + * // Output + * md5(nbytes, *buf, cksum); + * // Increase buffer size if necessary + * if (nbytes + 16 > *buf_size) { + * *buf_size = nbytes + 16; + * *buf = realloc(*buf, *buf_size); + * } + * // Append checksum + * memcpy((char*)(*buf)+nbytes, cksum, 16); + * return nbytes+16; + * } + * \c \#else + * return 0; // fail + * \c \#endif + * } + * /endcode + * + * Once the filter function is defined it must be registered so + * the HDF5 library knows about it. Since we're testing this + * filter we choose one of the #H5Z_filter_t numbers + * from the reserved range. We'll randomly choose 305. + * + * /code + * \c \#define FILTER_MD5 305 + * herr_t status = H5Zregister(FILTER_MD5, "md5 checksum", md5_filter); + * /endcode + * + * Now we can use the filter in a pipeline. We could have added + * the filter to the pipeline before defining or registering the + * filter as long as the filter was defined and registered by time + * we tried to use it (if the filter is marked as optional then we + * could have used it without defining it and the library would + * have automatically removed it from the pipeline for each chunk + * written before the filter was defined and registered). + * + * /code + * hid_t dcpl = H5Pcreate(H5P_DATASET_CREATE); + * hsize_t chunk_size[3] = {10,10,10}; + * H5Pset_chunk(dcpl, 3, chunk_size); + * H5Pset_filter(dcpl, FILTER_MD5, 0, 0, NULL); + * hid_t dset = H5Dcreate(file, "dset", H5T_NATIVE_DOUBLE, space, dcpl); + * /endcode + * + * See the example of a more sophisticated HDF5 bzip2 filter function in the /ref subsec_filter_plugins_build * section. The HDF5 bzip2 filter function is also available for download from Filter Plugin Repository. * diff --git a/src/H5Zmodule.h b/src/H5Zmodule.h index d1087b8bcd5..e02be5c2677 100644 --- a/src/H5Zmodule.h +++ b/src/H5Zmodule.h @@ -71,6 +71,7 @@ * shuffling algorithm) and error checking (Fletcher32 checksum). For further * flexibility, the library allows a user application to extend the pipeline * through the creation and registration of customized filters. + * See \ref sec_filter_plugins * * The flexibility of the filter pipeline implementation enables the definition * of additional filters by a user application. A filter @@ -83,6 +84,43 @@ * the difficulty of implementing random access for partial I/O. Compact dataset * filters are not supported because they would not produce significant results. * + * HDF5 allows chunked data to pass through user-defined filters + * on the way to or from disk. The filters operate on chunks of an + * #H5D_CHUNKED dataset can be arranged in a pipeline + * so output of one filter becomes the input of the next filter. + * + * Each filter has a two-byte identification number (type + * #H5Z_filter_t) allocated by The HDF Group and can also be + * passed application-defined integer resources to control its + * behavior. Each filter also has an optional ASCII comment + * string. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Values for #H5Z_filter_tDescription
0-255These values are reserved for filters predefined and + * registered by the HDF5 library and of use to the general + * public.
256-511Filter numbers in this range are used for testing only + * and can be used temporarily by any organization. No + * attempt is made to resolve numbering conflicts since all + * definitions are by nature temporary.
512-65535Reserved for future assignment. Please contact the + * HDF5 development team + * to reserve a value or range of values for + * use by your filters.
+ * * Filter identifiers for the filters distributed with the HDF5 * Library are as follows: * From 1c23395bd6195bfbb205357a53cb8519f9ae3a86 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Fri, 18 Oct 2024 07:57:34 -0700 Subject: [PATCH 013/179] Remove TRUE and FALSE from H5private.h (#4969) * Remove TRUE and FALSE from H5private.h * Replace hbool_t with bool in test code --- c++/test/tattr.cpp | 2 +- c++/test/tfile.cpp | 6 ++-- c++/test/tlinks.cpp | 14 ++++---- c++/test/tobject.cpp | 32 +++++++++--------- hl/test/test_lite.c | 72 ++++++++++++++++++++-------------------- src/H5Eint.c | 4 +-- src/H5TSmutex.c | 6 ++-- src/H5TSwin.c | 2 +- src/H5VLint.c | 4 +-- src/H5VLtest.c | 2 +- src/H5private.h | 10 ------ test/cmpd_dset.c | 14 ++++---- test/error_test.c | 38 ++++++++++----------- test/h5test.c | 16 ++++----- test/select_io_dset.c | 2 +- test/trefer.c | 4 +-- test/ttsafe_rec_rwlock.c | 16 ++++----- test/vol.c | 4 +-- 18 files changed, 119 insertions(+), 129 deletions(-) diff --git a/c++/test/tattr.cpp b/c++/test/tattr.cpp index 07ab0a6d777..a01833802a4 100644 --- a/c++/test/tattr.cpp +++ b/c++/test/tattr.cpp @@ -1983,7 +1983,7 @@ test_attr(const void *params) // Loop over using new group format unsigned new_format; - for (new_format = FALSE; new_format <= TRUE; new_format++) { + for (new_format = false; new_format <= true; new_format++) { FileAccPropList curr_fapl; // Set the file access proplist for the type of format diff --git a/c++/test/tfile.cpp b/c++/test/tfile.cpp index 7f3406a60b8..94742f3c447 100644 --- a/c++/test/tfile.cpp +++ b/c++/test/tfile.cpp @@ -842,7 +842,7 @@ test_file_info() SUBTEST("File general information"); hsize_t out_threshold = 0; // Free space section threshold to get - hbool_t out_persist = FALSE; // Persist free-space read + hbool_t out_persist = false; // Persist free-space read // File space handling strategy H5F_fspace_strategy_t out_strategy = H5F_FSPACE_STRATEGY_FSM_AGGR; @@ -869,7 +869,7 @@ test_file_info() // Verify file space information. verify_val(static_cast(out_strategy), static_cast(H5F_FSPACE_STRATEGY_FSM_AGGR), "H5File::getFileInfo", __LINE__, __FILE__); - verify_val(out_persist, FALSE, "H5File::getFileInfo", __LINE__, __FILE__); + verify_val(out_persist, false, "H5File::getFileInfo", __LINE__, __FILE__); verify_val(static_cast(out_threshold), 1, "H5File::getFileInfo", __LINE__, __FILE__); /* Retrieve file space page size */ @@ -884,7 +884,7 @@ test_file_info() fcpl.setIstorek(F2_ISTORE); hsize_t threshold = 5; // Free space section threshold to set - hbool_t persist = TRUE; // Persist free-space to set + hbool_t persist = true; // Persist free-space to set H5F_fspace_strategy_t strategy = H5F_FSPACE_STRATEGY_PAGE; fcpl.setFileSpaceStrategy(strategy, persist, threshold); diff --git a/c++/test/tlinks.cpp b/c++/test/tlinks.cpp index a6d68631fc4..355a4282651 100644 --- a/c++/test/tlinks.cpp +++ b/c++/test/tlinks.cpp @@ -129,14 +129,14 @@ test_basic_links(hid_t fapl_id, hbool_t new_format) H5File file(filename, H5F_ACC_RDWR, FileCreatPropList::DEFAULT, fapl); // Verify link existence - if (file.nameExists("dset1", LinkAccPropList::DEFAULT) != TRUE) + if (file.nameExists("dset1", LinkAccPropList::DEFAULT) != true) throw InvalidActionException("H5File::nameExists", "dset1 doesn't exist"); - if (file.nameExists("grp1/soft", LinkAccPropList::DEFAULT) != TRUE) + if (file.nameExists("grp1/soft", LinkAccPropList::DEFAULT) != true) throw InvalidActionException("H5File::nameExists", "grp1/soft doesn't exist"); // Deprecated - if (file.exists("dset1", LinkAccPropList::DEFAULT) != TRUE) + if (file.exists("dset1", LinkAccPropList::DEFAULT) != true) throw InvalidActionException("H5File::exists", "dset1 doesn't exist"); - if (file.exists("grp1/soft", LinkAccPropList::DEFAULT) != TRUE) + if (file.exists("grp1/soft", LinkAccPropList::DEFAULT) != true) throw InvalidActionException("H5File::exists", "grp1/soft doesn't exist"); // Verify link values @@ -290,7 +290,7 @@ test_move(hid_t fapl_id, hbool_t new_format) // Move a soft link across files, should succeed grp_2.moveLink("soft", file_b, "soft_new_name"); - if (file_b.exists("soft_new_name") != TRUE) + if (file_b.exists("soft_new_name") != true) throw InvalidActionException("H5File::exists", "grp1/soft doesn't exist"); // Move a group across groups in the same file while renaming it @@ -429,7 +429,7 @@ test_copy(hid_t fapl_id, hbool_t new_format) // Copy a soft link across files, should succeed grp_2.copyLink("soft", file_b, "soft_new_name"); - if (file_b.exists("soft_new_name") != TRUE) + if (file_b.exists("soft_new_name") != true) throw InvalidActionException("H5File::exists", "soft_new_name doesn't exist"); // Move a group across groups in the same file while renaming it @@ -730,7 +730,7 @@ test_links(const void *params) throw Exception("test_links", "H5Pset_libver_bounds failed"); /* Loop over using new group format */ - for (new_format = FALSE; new_format <= TRUE; new_format++) { + for (new_format = false; new_format <= true; new_format++) { hid_t my_fapl_id; /* Check for FAPL to use */ diff --git a/c++/test/tobject.cpp b/c++/test/tobject.cpp index cec13323544..a7ac635de07 100644 --- a/c++/test/tobject.cpp +++ b/c++/test/tobject.cpp @@ -169,54 +169,54 @@ test_existance() // Check if GROUP1 exists in the file bool exists = file.nameExists(GROUP1); - verify_val(exists, TRUE, "Group::nameExists GROUP1_1", __LINE__, __FILE__); + verify_val(exists, true, "Group::nameExists GROUP1_1", __LINE__, __FILE__); // Deprecated exists = file.exists(GROUP1); - verify_val(exists, TRUE, "Group::exists GROUP1_1", __LINE__, __FILE__); + verify_val(exists, true, "Group::exists GROUP1_1", __LINE__, __FILE__); // Open GROUP1 Group grp1 = file.openGroup(GROUP1); // Check if GROUP1_1 and GROUP1_2 exist in GROUP1 exists = grp1.nameExists(GROUP1_1); - verify_val(exists, TRUE, "Group::nameExists GROUP1_1", __LINE__, __FILE__); + verify_val(exists, true, "Group::nameExists GROUP1_1", __LINE__, __FILE__); exists = grp1.nameExists(GROUP1_2); - verify_val(exists, TRUE, "Group::nameExists GROUP1_2", __LINE__, __FILE__); + verify_val(exists, true, "Group::nameExists GROUP1_2", __LINE__, __FILE__); // Deprecated exists = grp1.exists(GROUP1_1); - verify_val(exists, TRUE, "Group::exists GROUP1_1", __LINE__, __FILE__); + verify_val(exists, true, "Group::exists GROUP1_1", __LINE__, __FILE__); exists = grp1.exists(GROUP1_2); - verify_val(exists, TRUE, "Group::exists GROUP1_2", __LINE__, __FILE__); + verify_val(exists, true, "Group::exists GROUP1_2", __LINE__, __FILE__); // Check if DSET_IN_GRP1 exists in GROUP1 exists = grp1.nameExists(DSET_IN_GRP1); - verify_val(exists, TRUE, "Group::nameExists DSET_IN_GRP1", __LINE__, __FILE__); + verify_val(exists, true, "Group::nameExists DSET_IN_GRP1", __LINE__, __FILE__); // Deprecated exists = grp1.exists(DSET_IN_GRP1); - verify_val(exists, TRUE, "Group::exists DSET_IN_GRP1", __LINE__, __FILE__); + verify_val(exists, true, "Group::exists DSET_IN_GRP1", __LINE__, __FILE__); // Open GROUP1_2 Group grp1_2 = grp1.openGroup(GROUP1_2); // Check if DSET_IN_GRP1_2 exists in GROUP1_2 exists = grp1_2.nameExists(DSET_IN_GRP1_2); - verify_val(exists, TRUE, "Group::nameExists DSET_IN_GRP1_2", __LINE__, __FILE__); + verify_val(exists, true, "Group::nameExists DSET_IN_GRP1_2", __LINE__, __FILE__); // Deprecated exists = grp1_2.exists(DSET_IN_GRP1_2); - verify_val(exists, TRUE, "Group::exists DSET_IN_GRP1_2", __LINE__, __FILE__); + verify_val(exists, true, "Group::exists DSET_IN_GRP1_2", __LINE__, __FILE__); // Check if a dataset exists given dataset as location with full path name DataSet dset1 = file.openDataSet(DSET_IN_FILE); exists = dset1.nameExists("/Top Group/Dataset_in_Group_1"); - verify_val(exists, TRUE, "Group::nameExists given dataset with full path name", __LINE__, __FILE__); + verify_val(exists, true, "Group::nameExists given dataset with full path name", __LINE__, __FILE__); exists = grp1_2.nameExists(DSET_IN_GRP1); - verify_val(exists, FALSE, "Group::nameExists DSET_IN_GRP1", __LINE__, __FILE__); + verify_val(exists, false, "Group::nameExists DSET_IN_GRP1", __LINE__, __FILE__); // Deprecated exists = dset1.exists("/Top Group/Dataset_in_Group_1"); - verify_val(exists, TRUE, "Group::exists given dataset with full path name", __LINE__, __FILE__); + verify_val(exists, true, "Group::exists given dataset with full path name", __LINE__, __FILE__); exists = grp1_2.exists(DSET_IN_GRP1); - verify_val(exists, FALSE, "Group::exists DSET_IN_GRP1", __LINE__, __FILE__); + verify_val(exists, false, "Group::exists DSET_IN_GRP1", __LINE__, __FILE__); // Everything will be closed as they go out of scope @@ -647,7 +647,7 @@ test_intermediate_groups() } // Failure is ignored // Create GROUP14NAME with the flag to create missing groups set - // to FALSE, should fail because group GROUP13NAME is missing + // to false, should fail because group GROUP13NAME is missing // Reset flag to not create missing groups lcpl.setCreateIntermediateGroup(false); @@ -662,7 +662,7 @@ test_intermediate_groups() catch (FileIException &expected2) { } // Failure is ignored - // Set the flag to create missing groups set to TRUE + // Set the flag to create missing groups set to true lcpl.setCreateIntermediateGroup(true); crt_int_grps = lcpl.getCreateIntermediateGroup(); verify_val(crt_int_grps, true, "LinkCreatPropList::getCreateIntermediateGroup", __LINE__, __FILE__); diff --git a/hl/test/test_lite.c b/hl/test/test_lite.c index 23508b79990..1ec81238a9d 100644 --- a/hl/test/test_lite.c +++ b/hl/test/test_lite.c @@ -2134,54 +2134,54 @@ test_valid_path(void) * CHECK ABSOLUTE PATHS **************************************/ - if ((path_valid = H5LTpath_valid(file_id, "/", TRUE)) != TRUE) { + if ((path_valid = H5LTpath_valid(file_id, "/", true)) != true) { goto out; } - if ((path_valid = H5LTpath_valid(file_id, "/", FALSE)) != TRUE) { + if ((path_valid = H5LTpath_valid(file_id, "/", false)) != true) { goto out; } - if ((path_valid = H5LTpath_valid(file_id, "/G1", TRUE)) != TRUE) { + if ((path_valid = H5LTpath_valid(file_id, "/G1", true)) != true) { goto out; } - if ((path_valid = H5LTpath_valid(file_id, "/G1/DS1", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G1/DS1", true)) != true) goto out; - if ((path_valid = H5LTpath_valid(file_id, "/G1/DS3", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G1/DS3", true)) != true) goto out; - if ((path_valid = H5LTpath_valid(file_id, "/G1/G2", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G1/G2", true)) != true) goto out; - if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/G5", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/G5", true)) != true) goto out; - if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/Gcyc/DS1", FALSE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/Gcyc/DS1", false)) != true) goto out; - if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/Gcyc/DS1", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/Gcyc/DS1", true)) != true) goto out; - if ((path_valid = H5LTpath_valid(file_id, "/G2", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G2", true)) != true) goto out; /* check soft link points to a valid object*/ - if ((path_valid = H5LTpath_valid(file_id, "/G2/DS4", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G2/DS4", true)) != true) goto out; /* check if path exist, but not the object */ - if ((path_valid = H5LTpath_valid(file_id, "/G2/G7", FALSE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G2/G7", false)) != true) goto out; /* check if path exist and if the object exists. It should fail * since it is a dangling soft link */ - if ((path_valid = H5LTpath_valid(file_id, "/G2/G7", TRUE)) == TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G2/G7", true)) == true) goto out; /* check soft links */ - if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/G5/DS4", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/G5/DS4", true)) != true) goto out; /************************************** @@ -2191,11 +2191,11 @@ test_valid_path(void) if ((group = H5Gopen2(file_id, "/", H5P_DEFAULT)) < 0) goto out; - if ((path_valid = H5LTpath_valid(group, "/", TRUE)) != TRUE) { + if ((path_valid = H5LTpath_valid(group, "/", true)) != true) { goto out; } - if ((path_valid = H5LTpath_valid(group, "/", FALSE)) != TRUE) { + if ((path_valid = H5LTpath_valid(group, "/", false)) != true) { goto out; } @@ -2207,39 +2207,39 @@ test_valid_path(void) /* The identifier (file id) is the object itself, i.e. "." */ - if ((path_valid = H5LTpath_valid(file_id, ".", FALSE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, ".", false)) != true) goto out; - if ((path_valid = H5LTpath_valid(file_id, ".", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, ".", true)) != true) goto out; /* The identifier (group id) is the object itself, i.e. "." */ - if ((path_valid = H5LTpath_valid(group, ".", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(group, ".", true)) != true) goto out; - if ((path_valid = H5LTpath_valid(group, "DS3", FALSE)) != TRUE) + if ((path_valid = H5LTpath_valid(group, "DS3", false)) != true) goto out; - if ((path_valid = H5LTpath_valid(group, "DS3", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(group, "DS3", true)) != true) goto out; - if ((path_valid = H5LTpath_valid(group, "G2/G5", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(group, "G2/G5", true)) != true) goto out; /* Check the "./" case */ - if ((path_valid = H5LTpath_valid(group, "./DS3", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(group, "./DS3", true)) != true) goto out; - if ((path_valid = H5LTpath_valid(group, "./G2/G5", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(group, "./G2/G5", true)) != true) goto out; /* Should fail, does not exist */ - if ((path_valid = H5LTpath_valid(group, "./G2/G20", FALSE)) == TRUE) + if ((path_valid = H5LTpath_valid(group, "./G2/G20", false)) == true) goto out; /* Should fail, does not exist */ - if ((path_valid = H5LTpath_valid(group, "./G2/G20", TRUE)) == TRUE) + if ((path_valid = H5LTpath_valid(group, "./G2/G20", true)) == true) goto out; if (H5Gclose(group) < 0) @@ -2250,36 +2250,36 @@ test_valid_path(void) *****************************/ /* The dangled external link path is valid */ - if ((path_valid = H5LTpath_valid(file_id, "/DangledExternalLink", FALSE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/DangledExternalLink", false)) != true) goto out; /* The file however does not exists, so the link dangles -> should return false */ - if ((path_valid = H5LTpath_valid(file_id, "/DangledExternalLink", TRUE)) == TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/DangledExternalLink", true)) == true) goto out; - if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/G6/ExternalLink", FALSE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/G6/ExternalLink", false)) != true) goto out; - if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/G6/ExternalLink", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/G6/ExternalLink", true)) != true) goto out; - if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/Gcyc/G2/G6/ExternalLink/DS1", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/Gcyc/G2/G6/ExternalLink/DS1", true)) != true) goto out; - if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/Gcyc/G2/G6/ExternalLink/G20", FALSE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/Gcyc/G2/G6/ExternalLink/G20", false)) != true) goto out; - if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/G6/ExternalLink/DS1", TRUE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/G6/ExternalLink/DS1", true)) != true) goto out; - if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/G6/ExternalLink/G20", FALSE)) != TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/G6/ExternalLink/G20", false)) != true) goto out; /* Should fail, does not exist */ - if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/G6/ExternalLink/G20", TRUE)) == TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/G6/ExternalLink/G20", true)) == true) goto out; - if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/Gcyc/G2/G6/ExternalLink/G20", TRUE)) == TRUE) + if ((path_valid = H5LTpath_valid(file_id, "/G1/G2/Gcyc/G2/G6/ExternalLink/G20", true)) == true) goto out; if (H5Fclose(file_id) < 0) diff --git a/src/H5Eint.c b/src/H5Eint.c index 333bc202c0b..2ceb96b31a5 100644 --- a/src/H5Eint.c +++ b/src/H5Eint.c @@ -160,10 +160,10 @@ static const H5E_stack_t H5E_err_stack_def = { /* H5E_auto_op_t */ #ifndef H5_NO_DEPRECATED_SYMBOLS #ifdef H5_USE_16_API_DEFAULT - {1, TRUE, (H5E_auto1_t)H5Eprint1, (H5E_auto2_t)H5E__print2, (H5E_auto1_t)H5Eprint1, + {1, true, (H5E_auto1_t)H5Eprint1, (H5E_auto2_t)H5E__print2, (H5E_auto1_t)H5Eprint1, (H5E_auto2_t)H5E__print2}, #else /* H5_USE_16_API */ - {2, TRUE, (H5E_auto1_t)H5Eprint1, (H5E_auto2_t)H5E__print2, (H5E_auto1_t)H5Eprint1, + {2, true, (H5E_auto1_t)H5Eprint1, (H5E_auto2_t)H5E__print2, (H5E_auto1_t)H5Eprint1, (H5E_auto2_t)H5E__print2}, #endif /* H5_USE_16_API_DEFAULT */ #else /* H5_NO_DEPRECATED_SYMBOLS */ diff --git a/src/H5TSmutex.c b/src/H5TSmutex.c index 5cc66efff89..710f37e74e7 100644 --- a/src/H5TSmutex.c +++ b/src/H5TSmutex.c @@ -86,7 +86,7 @@ H5TS_mutex_init(H5TS_mutex_t *mutex, int type) /*------------------------------------------------------------------------- * Function: H5TS_mutex_trylock * - * Purpose: Attempt to lock a H5TS_mutex_t, sets *acquired to TRUE if so + * Purpose: Attempt to lock a H5TS_mutex_t, sets *acquired to true if so * * Return: Non-negative on success / Negative on failure * @@ -157,7 +157,7 @@ H5TS_mutex_init(H5TS_mutex_t *mutex, int H5_ATTR_UNUSED type) /*------------------------------------------------------------------------- * Function: H5TS_mutex_trylock * - * Purpose: Attempt to lock a H5TS_mutex_t, sets *acquired to TRUE if so + * Purpose: Attempt to lock a H5TS_mutex_t, sets *acquired to true if so * * Return: Non-negative on success / Negative on failure * @@ -242,7 +242,7 @@ H5TS_mutex_init(H5TS_mutex_t *mutex, int type) /*------------------------------------------------------------------------- * Function: H5TS_mutex_trylock * - * Purpose: Attempt to lock a H5TS_mutex_t, sets *acquired to TRUE if so + * Purpose: Attempt to lock a H5TS_mutex_t, sets *acquired to true if so * * Return: Non-negative on success / Negative on failure * diff --git a/src/H5TSwin.c b/src/H5TSwin.c index 913dbff0099..48efe009da8 100644 --- a/src/H5TSwin.c +++ b/src/H5TSwin.c @@ -70,7 +70,7 @@ static herr_t H5TS__win32_thread_exit(void); * * Purpose: Per-process setup on Windows when using Win32 threads. * - * Returns: TRUE on success, FALSE on failure + * Returns: true on success, FALSE on failure * *-------------------------------------------------------------------------- */ diff --git a/src/H5VLint.c b/src/H5VLint.c index e3e2b28e1a9..81d8fe07b22 100644 --- a/src/H5VLint.c +++ b/src/H5VLint.c @@ -1012,7 +1012,7 @@ H5VL_conn_dec_rc(H5VL_connector_t *connector) * * Purpose: Determine if two connectors point to the same VOL class * - * Return: TRUE/FALSE/FAIL + * Return: true/false/FAIL * *------------------------------------------------------------------------- */ @@ -1029,7 +1029,7 @@ H5VL_conn_same_class(const H5VL_connector_t *conn1, const H5VL_connector_t *conn /* Fast check */ if (conn1 == conn2) - HGOTO_DONE(TRUE); + HGOTO_DONE(true); else { int cmp_value; /* Comparison result */ diff --git a/src/H5VLtest.c b/src/H5VLtest.c index 2c50a579e3e..c15f8295d51 100644 --- a/src/H5VLtest.c +++ b/src/H5VLtest.c @@ -99,7 +99,7 @@ H5VL__reparse_def_vol_conn_variable_test(void) * * Purpose: Check if connector is the native connector * - * Return: TRUE/FALSE/FAIL + * Return: true/false/FAIL * *------------------------------------------------------------------------- */ diff --git a/src/H5private.h b/src/H5private.h index 86799d362b6..0d2d7ed9f9e 100644 --- a/src/H5private.h +++ b/src/H5private.h @@ -376,16 +376,6 @@ #define H5_IS_KNOWN_BUFFER_OVERFLOW(skip, ptr, size, buffer_end) \ (skip ? false : H5_IS_BUFFER_OVERFLOW(ptr, size, buffer_end)) -/* - * HDF Boolean type. - */ -#ifndef FALSE -#define FALSE false -#endif -#ifndef TRUE -#define TRUE true -#endif - /* * The max value for ssize_t. * diff --git a/test/cmpd_dset.c b/test/cmpd_dset.c index 06ae2ff0799..61592165137 100644 --- a/test/cmpd_dset.c +++ b/test/cmpd_dset.c @@ -128,7 +128,7 @@ static hid_t create_stype1(void); static hid_t create_stype2(void); static hid_t create_stype3(void); static hid_t create_stype4(void); -static int compare_data(void *src_data, void *dst_data, hbool_t src_subset); +static int compare_data(void *src_data, void *dst_data, bool src_subset); static int compare_stype4_data(void *expect_buf, void *rbuf); static int compare_s1_data(void *expect_buf, void *rbuf); static int compare_s1_s3_data(void *expect_buf, void *rbuf); @@ -1211,11 +1211,11 @@ test_compounds_selection_io(void) fapl = h5_fileaccess(); h5_fixname(FILENAME[3], fapl, fname, sizeof(fname)); - for (set_cache = FALSE; set_cache <= TRUE; set_cache++) { - for (set_fillvalue = FALSE; set_fillvalue <= TRUE; set_fillvalue++) { - for (select_io = FALSE; select_io <= TRUE; select_io++) { - for (mwbuf = FALSE; mwbuf <= TRUE; mwbuf++) { - for (set_buf = FALSE; set_buf <= TRUE; set_buf++) { + for (set_cache = false; set_cache <= true; set_cache++) { + for (set_fillvalue = false; set_fillvalue <= true; set_fillvalue++) { + for (select_io = false; select_io <= true; select_io++) { + for (mwbuf = false; mwbuf <= true; mwbuf++) { + for (set_buf = false; set_buf <= true; set_buf++) { if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0) goto error; @@ -1243,7 +1243,7 @@ test_compounds_selection_io(void) if (mwbuf) { printf("with modify write buf, "); - if (H5Pset_modify_write_buf(dxpl, TRUE) < 0) + if (H5Pset_modify_write_buf(dxpl, true) < 0) goto error; } else diff --git a/test/error_test.c b/test/error_test.c index 204055097b8..b08acf63fdb 100644 --- a/test/error_test.c +++ b/test/error_test.c @@ -659,7 +659,7 @@ test_append(void) TEST_ERROR; /* Append error stack #2 to error stack #1, and close stack #2 */ - if (H5Eappend_stack(estack_id1, estack_id2, TRUE) < 0) + if (H5Eappend_stack(estack_id1, estack_id2, true) < 0) TEST_ERROR; /* Try to close error stack #2. Should fail because H5Eappend_stack @@ -700,7 +700,7 @@ test_pause(void) const char *err_msg1 = "Error message #1"; /* Error message #1 for pushing error */ ssize_t err_num; /* Number of errors on stack */ hid_t estack_id1 = H5I_INVALID_HID; /* Error stack ID */ - hbool_t is_paused; /* Whether error stack is paused */ + bool is_paused; /* Whether error stack is paused */ herr_t ret; /* Generic return value */ /* Push an error */ @@ -718,7 +718,7 @@ test_pause(void) TEST_ERROR; /* Check for bad arguments */ - is_paused = TRUE; + is_paused = true; H5E_BEGIN_TRY { ret = H5Eis_paused(H5I_INVALID_HID, &is_paused); @@ -728,17 +728,17 @@ test_pause(void) TEST_ERROR; /* Verify that default stack is not paused */ - is_paused = TRUE; + is_paused = true; if (H5Eis_paused(H5E_DEFAULT, &is_paused) < 0) TEST_ERROR; - if (FALSE != is_paused) + if (false != is_paused) TEST_ERROR; /* Verify that application stack is not paused */ - is_paused = TRUE; + is_paused = true; if (H5Eis_paused(estack_id1, &is_paused) < 0) TEST_ERROR; - if (FALSE != is_paused) + if (false != is_paused) TEST_ERROR; /* Check for bad arguments */ @@ -763,10 +763,10 @@ test_pause(void) TEST_ERROR; /* Check if stack is paused */ - is_paused = FALSE; + is_paused = false; if (H5Eis_paused(estack_id1, &is_paused) < 0) TEST_ERROR; - if (TRUE != is_paused) + if (true != is_paused) TEST_ERROR; /* Resume error stack */ @@ -774,10 +774,10 @@ test_pause(void) TEST_ERROR; /* Check if stack is paused */ - is_paused = TRUE; + is_paused = true; if (H5Eis_paused(estack_id1, &is_paused) < 0) TEST_ERROR; - if (FALSE != is_paused) + if (false != is_paused) TEST_ERROR; /* Check for resuming too many times */ @@ -790,10 +790,10 @@ test_pause(void) TEST_ERROR; /* Check if stack is paused, after trying to resume too many times */ - is_paused = TRUE; + is_paused = true; if (H5Eis_paused(estack_id1, &is_paused) < 0) TEST_ERROR; - if (FALSE != is_paused) + if (false != is_paused) TEST_ERROR; /* Close error stack */ @@ -805,10 +805,10 @@ test_pause(void) TEST_ERROR; /* Check if stack is paused */ - is_paused = FALSE; + is_paused = false; if (H5Eis_paused(H5E_DEFAULT, &is_paused) < 0) TEST_ERROR; - if (TRUE != is_paused) + if (true != is_paused) TEST_ERROR; /* Resume error stack */ @@ -816,10 +816,10 @@ test_pause(void) TEST_ERROR; /* Check if stack is paused */ - is_paused = TRUE; + is_paused = true; if (H5Eis_paused(H5E_DEFAULT, &is_paused) < 0) TEST_ERROR; - if (FALSE != is_paused) + if (false != is_paused) TEST_ERROR; /* Check for resuming too many times */ @@ -832,10 +832,10 @@ test_pause(void) TEST_ERROR; /* Check if stack is paused, after trying to resume too many times */ - is_paused = TRUE; + is_paused = true; if (H5Eis_paused(H5E_DEFAULT, &is_paused) < 0) TEST_ERROR; - if (FALSE != is_paused) + if (false != is_paused) TEST_ERROR; return 0; diff --git a/test/h5test.c b/test/h5test.c index 828d83f40f4..92e3c65c1d9 100644 --- a/test/h5test.c +++ b/test/h5test.c @@ -770,14 +770,14 @@ h5_get_vfd_fapl(hid_t fapl) } else if (!strcmp(tok, "core")) { /* In-memory driver settings (backing store on, 1 MB increment) */ - if (H5Pset_fapl_core(fapl, (size_t)H5_MB, TRUE) < 0) + if (H5Pset_fapl_core(fapl, (size_t)H5_MB, true) < 0) goto error; } else if (!strcmp(tok, "core_paged")) { /* In-memory driver with write tracking and paging on */ - if (H5Pset_fapl_core(fapl, (size_t)H5_MB, TRUE) < 0) + if (H5Pset_fapl_core(fapl, (size_t)H5_MB, true) < 0) goto error; - if (H5Pset_core_write_tracking(fapl, TRUE, 4096) < 0) + if (H5Pset_core_write_tracking(fapl, true, 4096) < 0) goto error; } else if (!strcmp(tok, "split")) { @@ -810,7 +810,7 @@ h5_get_vfd_fapl(hid_t fapl) memb_addr[mt] = (haddr_t)MAX(mt - 1, 0) * (HADDR_MAX / 10); } /* end for */ - if (H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name, memb_addr, FALSE) < 0) + if (H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name, memb_addr, false) < 0) goto error; for (mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; mt++) @@ -2394,10 +2394,10 @@ h5_check_file_locking_env_var(htri_t *use_locks, htri_t *ignore_disabled_locks) herr_t h5_using_native_vol(hid_t fapl_id, hid_t obj_id, bool *is_native_vol) { - hbool_t is_native = false; - hid_t native_id = H5I_INVALID_HID; - hid_t vol_id = H5I_INVALID_HID; - herr_t ret_value = SUCCEED; + bool is_native = false; + hid_t native_id = H5I_INVALID_HID; + hid_t vol_id = H5I_INVALID_HID; + herr_t ret_value = SUCCEED; assert((fapl_id >= 0) || (obj_id >= 0)); assert(is_native_vol); diff --git a/test/select_io_dset.c b/test/select_io_dset.c index c17d3b03a21..9ce1c636061 100644 --- a/test/select_io_dset.c +++ b/test/select_io_dset.c @@ -3214,7 +3214,7 @@ main(void) if ((fapl2 = H5Pcopy(fapl)) < 0) TEST_ERROR; - for (set_cache = FALSE; set_cache <= TRUE; set_cache++) { + for (set_cache = false; set_cache <= true; set_cache++) { /* Disable chunk caching on fapl2 */ if (set_cache) { diff --git a/test/trefer.c b/test/trefer.c index e2a09c0a21e..8847608265c 100644 --- a/test/trefer.c +++ b/test/trefer.c @@ -578,11 +578,11 @@ test_reference_obj(void) /* Check if references are equal */ htri_t is_equal = H5Requal(&wbuf[0], &wbuf_cp[0]); CHECK(is_equal, FAIL, "H5Requal"); - VERIFY(is_equal, TRUE, "H5Requal"); + VERIFY(is_equal, true, "H5Requal"); is_equal = H5Requal(&wbuf[0], &wbuf[2]); CHECK(is_equal, FAIL, "H5Requal"); - VERIFY(is_equal, FALSE, "H5Requal"); + VERIFY(is_equal, false, "H5Requal"); ret = H5Rdestroy(&wbuf_cp[0]); CHECK(ret, FAIL, "H5Rdestroy"); diff --git a/test/ttsafe_rec_rwlock.c b/test/ttsafe_rec_rwlock.c index 6fafbb4f8c8..5840cc38107 100644 --- a/test/ttsafe_rec_rwlock.c +++ b/test/ttsafe_rec_rwlock.c @@ -115,7 +115,7 @@ typedef struct rec_rwlock_test_udata_t { static H5TS_THREAD_RETURN_TYPE tts_rec_rwlock_smoke_check_test_thread(void *_udata) { - hbool_t read; + bool read; int32_t rec_lock_depth = 0; int32_t max_rec_lock_depth; int32_t rd_locks_remaining; @@ -132,14 +132,14 @@ tts_rec_rwlock_smoke_check_test_thread(void *_udata) while (rd_locks_remaining > 0 || wr_locks_remaining > 0) { if (wr_locks_remaining == 0) - read = TRUE; + read = true; else if (rd_locks_remaining == 0) - read = FALSE; + read = false; else { if ((rand() % 2) == 0) - read = TRUE; + read = true; else - read = FALSE; + read = false; } if (read) { @@ -556,7 +556,7 @@ tts_rec_rwlock_smoke_check_2(const void H5_ATTR_UNUSED *params) H5TS_thread_t threads[MAX_NUM_THREADS]; rec_rwlock_test_udata_t *udata = NULL; #if H5TS_ENABLE_REC_RWLOCK_STATS - hbool_t verbose = FALSE; + bool verbose = false; int32_t total_target_rd_lock_cycles = 0; int32_t total_target_wr_lock_cycles = 0; H5TS_rec_rwlock_stats_t stats; @@ -762,7 +762,7 @@ tts_rec_rwlock_smoke_check_3(const void H5_ATTR_UNUSED *params) H5TS_thread_t threads[MAX_NUM_THREADS]; rec_rwlock_test_udata_t *udata = NULL; #if H5TS_ENABLE_REC_RWLOCK_STATS - hbool_t verbose = FALSE; + bool verbose = false; int32_t total_target_rd_lock_cycles = 0; int32_t total_target_wr_lock_cycles = 0; H5TS_rec_rwlock_stats_t stats; @@ -968,7 +968,7 @@ tts_rec_rwlock_smoke_check_4(const void H5_ATTR_UNUSED *params) H5TS_thread_t threads[MAX_NUM_THREADS]; rec_rwlock_test_udata_t *udata = NULL; #if H5TS_ENABLE_REC_RWLOCK_STATS - hbool_t verbose = FALSE; + bool verbose = false; int32_t total_target_rd_lock_cycles = 0; int32_t total_target_wr_lock_cycles = 0; H5TS_rec_rwlock_stats_t stats; diff --git a/test/vol.c b/test/vol.c index 92b64c2532d..7d61f4f2daa 100644 --- a/test/vol.c +++ b/test/vol.c @@ -902,8 +902,8 @@ test_basic_file_operation(const char *driver_name) */ h5_check_file_locking_env_var(&use_locking_env, &ignore_disabled_env); if (use_locking_env != FAIL) { - hbool_t default_use_locking = true; - hbool_t default_ignore_disabled_locks = true; + bool default_use_locking = true; + bool default_ignore_disabled_locks = true; if (H5Pget_file_locking(H5P_DEFAULT, &default_use_locking, &default_ignore_disabled_locks) < 0) TEST_ERROR; From bfcb91652ad7dfd86ab3f3c056c6b6638ac22291 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Fri, 18 Oct 2024 07:58:43 -0700 Subject: [PATCH 014/179] Moved timer functionality to (new) H5timer.h (#4970) --- src/CMakeLists.txt | 1 + src/H5private.h | 41 ++-------------------- src/H5timer.c | 86 +++++++++------------------------------------- src/H5timer.h | 65 +++++++++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 107 deletions(-) create mode 100644 src/H5timer.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 438d60fffc7..b57e9bf27b5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -863,6 +863,7 @@ set (H5_PUBLIC_HEADERS set (H5_PRIVATE_HEADERS ${HDF5_SRC_DIR}/H5private.h + ${HDF5_SRC_DIR}/H5timer.h ${HDF5_SRC_DIR}/H5Apkg.h ${HDF5_SRC_DIR}/H5Aprivate.h diff --git a/src/H5private.h b/src/H5private.h index 0d2d7ed9f9e..42a6dccb22b 100644 --- a/src/H5private.h +++ b/src/H5private.h @@ -507,14 +507,6 @@ #endif #endif -/* KiB, MiB, GiB, TiB, PiB, EiB - Used in profiling and timing code */ -#define H5_KB (1024.0F) -#define H5_MB (1024.0F * 1024.0F) -#define H5_GB (1024.0F * 1024.0F * 1024.0F) -#define H5_TB (1024.0F * 1024.0F * 1024.0F * 1024.0F) -#define H5_PB (1024.0F * 1024.0F * 1024.0F * 1024.0F * 1024.0F) -#define H5_EB (1024.0F * 1024.0F * 1024.0F * 1024.0F * 1024.0F * 1024.0F) - #ifndef H5_HAVE_FLOCK /* flock() operations. Used in the source so we have to define them when * the call is not available (e.g.: Windows). These should NOT be used @@ -607,37 +599,10 @@ typedef _Float16 H5__Float16; typedef int (*H5_sort_func_cb_t)(const void *, const void *); /* Typedefs and functions for timing certain parts of the library. */ +#include "H5timer.h" -/* A set of elapsed/user/system times emitted as a time point by the - * platform-independent timers. - */ -typedef struct { - double user; /* User time in seconds */ - double system; /* System time in seconds */ - double elapsed; /* Elapsed (wall clock) time in seconds */ -} H5_timevals_t; - -/* Timer structure for platform-independent timers */ -typedef struct { - H5_timevals_t initial; /* Current interval start time */ - H5_timevals_t final_interval; /* Last interval elapsed time */ - H5_timevals_t total; /* Total elapsed time for all intervals */ - bool is_running; /* Whether timer is running */ -} H5_timer_t; - -/* Returns library bandwidth as a pretty string */ -H5_DLL void H5_bandwidth(char *buf /*out*/, size_t bufsize, double nbytes, double nseconds); - -/* Timer functionality */ -H5_DLL time_t H5_now(void); -H5_DLL uint64_t H5_now_usec(void); -H5_DLL herr_t H5_timer_init(H5_timer_t *timer /*in,out*/); -H5_DLL herr_t H5_timer_start(H5_timer_t *timer /*in,out*/); -H5_DLL herr_t H5_timer_stop(H5_timer_t *timer /*in,out*/); -H5_DLL herr_t H5_timer_get_times(H5_timer_t timer, H5_timevals_t *times /*in,out*/); -H5_DLL herr_t H5_timer_get_total_times(H5_timer_t timer, H5_timevals_t *times /*in,out*/); -H5_DLL char *H5_timer_get_time_string(double seconds); -H5_DLL char *H5_strcasestr(const char *haystack, const char *needle); +/* Substitute for strcasestr() when that doesn't exist on the platform */ +H5_DLL char *H5_strcasestr(const char *haystack, const char *needle); /* Depth of object copy */ typedef enum { diff --git a/src/H5timer.c b/src/H5timer.c index db609ec611e..4111cf46f20 100644 --- a/src/H5timer.c +++ b/src/H5timer.c @@ -11,26 +11,15 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*------------------------------------------------------------------------- - * Created: H5timer.c - * - * Purpose: Internal, platform-independent 'timer' support routines. + * H5timer.c * + * Internal, platform-independent 'timer' support routines *------------------------------------------------------------------------- */ -/****************/ -/* Module Setup */ -/****************/ #include "H5module.h" /* This source code file is part of the H5 module */ -/***********/ -/* Headers */ -/***********/ -#include "H5private.h" /* Generic Functions */ - -/****************/ -/* Local Macros */ -/****************/ +#include "H5private.h" /* Size of a generated time string. * Most time strings should be < 20 or so characters (max!) so this should be a @@ -43,30 +32,6 @@ #define H5_SEC_PER_HOUR (60.0 * 60.0) #define H5_SEC_PER_MIN (60.0) -/******************/ -/* Local Typedefs */ -/******************/ - -/********************/ -/* Package Typedefs */ -/********************/ - -/********************/ -/* Local Prototypes */ -/********************/ - -/*********************/ -/* Package Variables */ -/*********************/ - -/*****************************/ -/* Library Private Variables */ -/*****************************/ - -/*******************/ -/* Local Variables */ -/*******************/ - /*------------------------------------------------------------------------- * Function: H5_bandwidth * @@ -86,7 +51,6 @@ * 6.678e+106 For really big values * * Return: void - * *------------------------------------------------------------------------- */ void @@ -130,8 +94,8 @@ H5_bandwidth(char *buf /*out*/, size_t bufsize, double nbytes, double nseconds) snprintf(buf, bufsize, "%10.4e", bw); if (strlen(buf) > 10) snprintf(buf, bufsize, "%10.3e", bw); - } /* end else-if */ - } /* end else */ + } + } } /* end H5_bandwidth() */ /*------------------------------------------------------------------------- @@ -140,7 +104,6 @@ H5_bandwidth(char *buf /*out*/, size_t bufsize, double nbytes, double nseconds) * Purpose: Retrieves the current time, as seconds after the UNIX epoch. * * Return: # of seconds from the epoch (can't fail) - * *------------------------------------------------------------------------- */ time_t @@ -155,11 +118,11 @@ H5_now(void) HDgettimeofday(&now_tv, NULL); now = now_tv.tv_sec; } -#else /* H5_HAVE_GETTIMEOFDAY */ +#else now = time(NULL); -#endif /* H5_HAVE_GETTIMEOFDAY */ +#endif - return (now); + return now; } /* end H5_now() */ /*------------------------------------------------------------------------- @@ -168,7 +131,6 @@ H5_now(void) * Purpose: Retrieves the current time, as microseconds after the UNIX epoch. * * Return: # of microseconds from the epoch (can't fail) - * *------------------------------------------------------------------------- */ uint64_t @@ -197,13 +159,13 @@ H5_now_usec(void) * calculations are done in 64 bit, to prevent overflow */ now = ((uint64_t)now_tv.tv_sec * ((uint64_t)1000 * (uint64_t)1000)) + (uint64_t)now_tv.tv_usec; } -#else /* H5_HAVE_GETTIMEOFDAY */ +#else /* Cast all values in this expression to uint64_t to ensure that all intermediate calculations * are done in 64 bit, to prevent overflow */ now = ((uint64_t)time(NULL) * ((uint64_t)1000 * (uint64_t)1000)); -#endif /* H5_HAVE_GETTIMEOFDAY */ +#endif - return (now); + return now; } /* end H5_now_usec() */ /*-------------------------------------------------------------------------- @@ -213,7 +175,6 @@ H5_now_usec(void) * * Return: Success: A non-negative time value * Failure: -1.0 (in theory, can't currently fail) - * *-------------------------------------------------------------------------- */ double @@ -252,13 +213,11 @@ H5_get_time(void) * * Return: Success: 0 * Failure: -1 - * *------------------------------------------------------------------------- */ static herr_t H5__timer_get_timevals(H5_timevals_t *times /*in,out*/) { - /* Sanity check */ assert(times); /* Windows call handles both system/user and elapsed times */ @@ -269,7 +228,7 @@ H5__timer_get_timevals(H5_timevals_t *times /*in,out*/) times->user = -1.0; return -1; - } /* end if */ + } #else /* H5_HAVE_WIN32_API */ /************************* @@ -349,13 +308,11 @@ H5__timer_get_timevals(H5_timevals_t *times /*in,out*/) * * Return: Success: 0 * Failure: -1 - * *------------------------------------------------------------------------- */ herr_t H5_timer_init(H5_timer_t *timer /*in,out*/) { - /* Sanity check */ assert(timer); /* Initialize everything */ @@ -371,13 +328,11 @@ H5_timer_init(H5_timer_t *timer /*in,out*/) * * Return: Success: 0 * Failure: -1 - * *------------------------------------------------------------------------- */ herr_t H5_timer_start(H5_timer_t *timer /*in,out*/) { - /* Sanity check */ assert(timer); /* Start the timer @@ -398,13 +353,11 @@ H5_timer_start(H5_timer_t *timer /*in,out*/) * * Return: Success: 0 * Failure: -1 - * *------------------------------------------------------------------------- */ herr_t H5_timer_stop(H5_timer_t *timer /*in,out*/) { - /* Sanity check */ assert(timer); /* Stop the timer */ @@ -446,13 +399,11 @@ H5_timer_stop(H5_timer_t *timer /*in,out*/) * * Return: Success: 0 * Failure: -1 - * *------------------------------------------------------------------------- */ herr_t H5_timer_get_times(H5_timer_t timer, H5_timevals_t *times /*in,out*/) { - /* Sanity check */ assert(times); if (timer.is_running) { @@ -467,12 +418,12 @@ H5_timer_get_times(H5_timer_t timer, H5_timevals_t *times /*in,out*/) times->elapsed = now.elapsed - timer.initial.elapsed; times->system = now.system - timer.initial.system; times->user = now.user - timer.initial.user; - } /* end if */ + } else { times->elapsed = timer.final_interval.elapsed; times->system = timer.final_interval.system; times->user = timer.final_interval.user; - } /* end else */ + } return 0; } /* end H5_timer_get_times() */ @@ -498,13 +449,11 @@ H5_timer_get_times(H5_timer_t timer, H5_timevals_t *times /*in,out*/) * * Return: Success: 0 * Failure: -1 - * *------------------------------------------------------------------------- */ herr_t H5_timer_get_total_times(H5_timer_t timer, H5_timevals_t *times /*in,out*/) { - /* Sanity check */ assert(times); if (timer.is_running) { @@ -519,12 +468,12 @@ H5_timer_get_total_times(H5_timer_t timer, H5_timevals_t *times /*in,out*/) times->elapsed = timer.total.elapsed + (now.elapsed - timer.initial.elapsed); times->system = timer.total.system + (now.system - timer.initial.system); times->user = timer.total.user + (now.user - timer.initial.user); - } /* end if */ + } else { times->elapsed = timer.total.elapsed; times->system = timer.total.system; times->user = timer.total.user; - } /* end else */ + } return 0; } /* end H5_timer_get_total_times() */ @@ -548,7 +497,6 @@ H5_timer_get_total_times(H5_timer_t timer, H5_timevals_t *times /*in,out*/) * "%.f h %.f m %.f s" longer times * * Failure: NULL - * *------------------------------------------------------------------------- */ char * @@ -580,7 +528,7 @@ H5_timer_get_time_string(double seconds) remainder_sec -= (minutes * H5_SEC_PER_MIN); /* The # of seconds left is in remainder_sec */ - } /* end if */ + } /* Allocate */ if (NULL == (s = (char *)calloc(H5TIMER_TIME_STRING_LEN, sizeof(char)))) diff --git a/src/H5timer.h b/src/H5timer.h new file mode 100644 index 00000000000..459f55a9a51 --- /dev/null +++ b/src/H5timer.h @@ -0,0 +1,65 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the COPYING file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/*------------------------------------------------------------------------- + * H5timer.h + * + * Internal, platform-independent 'timer' support routines + *------------------------------------------------------------------------- + */ + +#ifndef H5timer_H +#define H5timer_H + +#include +#include +#include + +/* KiB, MiB, GiB, TiB, PiB, EiB - Used in profiling and timing code */ +#define H5_KB (1024.0F) +#define H5_MB (1024.0F * 1024.0F) +#define H5_GB (1024.0F * 1024.0F * 1024.0F) +#define H5_TB (1024.0F * 1024.0F * 1024.0F * 1024.0F) +#define H5_PB (1024.0F * 1024.0F * 1024.0F * 1024.0F * 1024.0F) +#define H5_EB (1024.0F * 1024.0F * 1024.0F * 1024.0F * 1024.0F * 1024.0F) + +/* A set of elapsed/user/system times emitted as a time point by the + * platform-independent timers. + */ +typedef struct { + double user; /* User time in seconds */ + double system; /* System time in seconds */ + double elapsed; /* Elapsed (wall clock) time in seconds */ +} H5_timevals_t; + +/* Timer structure for platform-independent timers */ +typedef struct { + H5_timevals_t initial; /* Current interval start time */ + H5_timevals_t final_interval; /* Last interval elapsed time */ + H5_timevals_t total; /* Total elapsed time for all intervals */ + bool is_running; /* Whether timer is running */ +} H5_timer_t; + +/* Returns library bandwidth as a pretty string */ +H5_DLL void H5_bandwidth(char *buf /*out*/, size_t bufsize, double nbytes, double nseconds); + +/* Timer functionality */ +H5_DLL time_t H5_now(void); +H5_DLL uint64_t H5_now_usec(void); +H5_DLL herr_t H5_timer_init(H5_timer_t *timer /*in,out*/); +H5_DLL herr_t H5_timer_start(H5_timer_t *timer /*in,out*/); +H5_DLL herr_t H5_timer_stop(H5_timer_t *timer /*in,out*/); +H5_DLL herr_t H5_timer_get_times(H5_timer_t timer, H5_timevals_t *times /*in,out*/); +H5_DLL herr_t H5_timer_get_total_times(H5_timer_t timer, H5_timevals_t *times /*in,out*/); +H5_DLL char *H5_timer_get_time_string(double seconds); + +#endif /* H5timer_H */ From 610648efd2cc132b918b20fcececda02d05deed3 Mon Sep 17 00:00:00 2001 From: Scot Breitenfeld Date: Fri, 18 Oct 2024 11:03:42 -0500 Subject: [PATCH 015/179] The h5(p)*c parser retains escaped whitespace character (#4967) --- bin/h5cc.in | 4 ++++ c++/src/h5c++.in | 4 ++++ fortran/src/h5fc.in | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/bin/h5cc.in b/bin/h5cc.in index 9938c31f098..3e6f818ed60 100644 --- a/bin/h5cc.in +++ b/bin/h5cc.in @@ -263,6 +263,10 @@ for arg in $@ ; do qarg='"'"$arg"'"' qargs="$qargs $qarg" ;; + *\ *) + qarg=$arg + qargs="$qargs $qarg" + ;; *) if test -s "$arg"; then ext=`expr "$arg" : '.*\(\..*\)'` diff --git a/c++/src/h5c++.in b/c++/src/h5c++.in index 8830f3cd9a2..c031c9d69ca 100644 --- a/c++/src/h5c++.in +++ b/c++/src/h5c++.in @@ -253,6 +253,10 @@ for arg in $@ ; do qarg='"'"$arg"'"' qargs="$qargs $qarg" ;; + *\ *) + qarg=$arg + qargs="$qargs $qarg" + ;; *) if [ -s "$arg" ] ; then ext=`expr "$arg" : '.*\(\..*\)'` diff --git a/fortran/src/h5fc.in b/fortran/src/h5fc.in index e0e35f5a1b8..562d56d2089 100644 --- a/fortran/src/h5fc.in +++ b/fortran/src/h5fc.in @@ -237,6 +237,10 @@ for arg in $@ ; do qarg='"'"$arg"'"' qargs="$qargs $qarg" ;; + *\ *) + qarg=$arg + qargs="$qargs $qarg" + ;; *) if [ -s "$arg" ] ; then ext=`expr "$arg" : '.*\(\..*\)'` From e12f51381d41edad49593ebfd5f3a64fa499fa26 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Fri, 18 Oct 2024 09:21:43 -0700 Subject: [PATCH 016/179] Move warning suppression macros to H5warnings.h (#4972) --- src/CMakeLists.txt | 1 + src/H5FDmulti.c | 38 ++++------------------- src/H5private.h | 60 ++---------------------------------- src/H5warnings.h | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 87 insertions(+), 89 deletions(-) create mode 100644 src/H5warnings.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b57e9bf27b5..5ce3b7cac18 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -864,6 +864,7 @@ set (H5_PUBLIC_HEADERS set (H5_PRIVATE_HEADERS ${HDF5_SRC_DIR}/H5private.h ${HDF5_SRC_DIR}/H5timer.h + ${HDF5_SRC_DIR}/H5warnings.h ${HDF5_SRC_DIR}/H5Apkg.h ${HDF5_SRC_DIR}/H5Aprivate.h diff --git a/src/H5FDmulti.c b/src/H5FDmulti.c index 2838ed00bff..56ee7b1a198 100644 --- a/src/H5FDmulti.c +++ b/src/H5FDmulti.c @@ -24,6 +24,8 @@ #include "hdf5.h" +#include "H5warnings.h" + #ifndef false #define false 0 #endif @@ -40,34 +42,6 @@ #define my_strdup strdup #endif -/* Macros for enabling/disabling particular GCC / clang warnings - * - * These are duplicated in H5private.h. If you make changes here, be sure to - * update those as well. - * - * (see the following web-sites for more info: - * http://www.dbp-consulting.com/tutorials/SuppressingGCCWarnings.html - * http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas - */ -#define H5_MULTI_DIAG_JOINSTR(x, y) x y -#define H5_MULTI_DIAG_DO_PRAGMA(x) _Pragma(#x) -#define H5_MULTI_DIAG_PRAGMA(x) H5_MULTI_DIAG_DO_PRAGMA(GCC diagnostic x) - -#define H5_MULTI_DIAG_OFF(x) \ - H5_MULTI_DIAG_PRAGMA(push) H5_MULTI_DIAG_PRAGMA(ignored H5_MULTI_DIAG_JOINSTR("-W", x)) -#define H5_MULTI_DIAG_ON(x) H5_MULTI_DIAG_PRAGMA(pop) - -/* Macros for enabling/disabling particular GCC / clang warnings. - * These macros should be used for warnings supported by both gcc and clang. - */ -#if (((__GNUC__ * 100) + __GNUC_MINOR__) >= 406) || defined(__clang__) -#define H5_MULTI_GCC_CLANG_DIAG_OFF(x) H5_MULTI_DIAG_OFF(x) -#define H5_MULTI_GCC_CLANG_DIAG_ON(x) H5_MULTI_DIAG_ON(x) -#else -#define H5_MULTI_GCC_CLANG_DIAG_OFF(x) -#define H5_MULTI_GCC_CLANG_DIAG_ON(x) -#endif - /* Loop through all mapped files */ #define UNIQUE_MEMBERS_CORE(MAP, ITER, SEEN, LOOPVAR) \ { \ @@ -2032,7 +2006,7 @@ compute_next(H5FD_multi_t *file) * tmp in the code below, but early (4.4.7, at least) gcc only * allows diagnostic pragmas to be toggled outside of functions. */ -H5_MULTI_GCC_CLANG_DIAG_OFF("format-nonliteral") +H5_GCC_CLANG_DIAG_OFF("format-nonliteral") static int open_members(H5FD_multi_t *file) { @@ -2070,7 +2044,7 @@ open_members(H5FD_multi_t *file) return 0; } -H5_MULTI_GCC_CLANG_DIAG_ON("format-nonliteral") +H5_GCC_CLANG_DIAG_ON("format-nonliteral") /*------------------------------------------------------------------------- * Function: H5FD_multi_delete @@ -2081,7 +2055,7 @@ H5_MULTI_GCC_CLANG_DIAG_ON("format-nonliteral") * *------------------------------------------------------------------------- */ -H5_MULTI_GCC_CLANG_DIAG_OFF("format-nonliteral") +H5_GCC_CLANG_DIAG_OFF("format-nonliteral") static herr_t H5FD_multi_delete(const char *filename, hid_t fapl_id) { @@ -2135,7 +2109,7 @@ H5FD_multi_delete(const char *filename, hid_t fapl_id) return 0; } /* end H5FD_multi_delete() */ -H5_MULTI_GCC_CLANG_DIAG_ON("format-nonliteral") +H5_GCC_CLANG_DIAG_ON("format-nonliteral") /*------------------------------------------------------------------------- * Function: H5FD_multi_ctl diff --git a/src/H5private.h b/src/H5private.h index 42a6dccb22b..a7bab99c581 100644 --- a/src/H5private.h +++ b/src/H5private.h @@ -152,6 +152,9 @@ #endif /*H5_HAVE_WIN32_API*/ +/* Macros for suppressing warnings */ +#include "H5warnings.h" + #ifndef F_OK #define F_OK 00 #define W_OK 02 @@ -519,63 +522,6 @@ #define LOCK_UN 0x08 #endif /* H5_HAVE_FLOCK */ -/* Macros for enabling/disabling particular GCC / clang warnings - * - * These are duplicated in H5FDmulti.c (we don't want to put them in the - * public header and the multi VFD can't use private headers). If you make - * changes here, be sure to update those as well. - * - * (see the following web-sites for more info: - * http://www.dbp-consulting.com/tutorials/SuppressingGCCWarnings.html - * http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas - */ -#define H5_DIAG_JOINSTR(x, y) x y -#define H5_DIAG_DO_PRAGMA(x) _Pragma(#x) -#define H5_DIAG_PRAGMA(x) H5_DIAG_DO_PRAGMA(GCC diagnostic x) - -/* Allow suppression of compiler diagnostics unless H5_SHOW_ALL_WARNINGS is - * defined (enabled with '--enable-show-all-warnings' configure option). - */ -#ifndef H5_SHOW_ALL_WARNINGS -#define H5_DIAG_OFF(x) H5_DIAG_PRAGMA(push) H5_DIAG_PRAGMA(ignored H5_DIAG_JOINSTR("-W", x)) -#define H5_DIAG_ON(x) H5_DIAG_PRAGMA(pop) -#else -#define H5_DIAG_OFF(x) -#define H5_DIAG_ON(x) -#endif - -/* Macros for enabling/disabling particular GCC-only warnings. - * These pragmas are only implemented usefully in gcc 4.6+ - */ -#if (((__GNUC__ * 100) + __GNUC_MINOR__) >= 406) -#define H5_GCC_DIAG_OFF(x) H5_DIAG_OFF(x) -#define H5_GCC_DIAG_ON(x) H5_DIAG_ON(x) -#else -#define H5_GCC_DIAG_OFF(x) -#define H5_GCC_DIAG_ON(x) -#endif - -/* Macros for enabling/disabling particular clang-only warnings. - */ -#if defined(__clang__) -#define H5_CLANG_DIAG_OFF(x) H5_DIAG_OFF(x) -#define H5_CLANG_DIAG_ON(x) H5_DIAG_ON(x) -#else -#define H5_CLANG_DIAG_OFF(x) -#define H5_CLANG_DIAG_ON(x) -#endif - -/* Macros for enabling/disabling particular GCC / clang warnings. - * These macros should be used for warnings supported by both gcc and clang. - */ -#if (((__GNUC__ * 100) + __GNUC_MINOR__) >= 406) || defined(__clang__) -#define H5_GCC_CLANG_DIAG_OFF(x) H5_DIAG_OFF(x) -#define H5_GCC_CLANG_DIAG_ON(x) H5_DIAG_ON(x) -#else -#define H5_GCC_CLANG_DIAG_OFF(x) -#define H5_GCC_CLANG_DIAG_ON(x) -#endif - /* If necessary, create a typedef for library usage of the * _Float16 type to avoid issues when compiling the library * with the -pedantic flag or similar where we get warnings diff --git a/src/H5warnings.h b/src/H5warnings.h new file mode 100644 index 00000000000..ae0027ab629 --- /dev/null +++ b/src/H5warnings.h @@ -0,0 +1,77 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the COPYING file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* + * Macros for suppressing warnings + */ + +#ifndef H5warnings_H +#define H5warnings_H + +/* Macros for enabling/disabling particular GCC / clang warnings + * + * These are duplicated in H5FDmulti.c (we don't want to put them in the + * public header and the multi VFD can't use private headers). If you make + * changes here, be sure to update those as well. + * + * (see the following web-sites for more info: + * http://www.dbp-consulting.com/tutorials/SuppressingGCCWarnings.html + * http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas + */ +#define H5_DIAG_JOINSTR(x, y) x y +#define H5_DIAG_DO_PRAGMA(x) _Pragma(#x) +#define H5_DIAG_PRAGMA(x) H5_DIAG_DO_PRAGMA(GCC diagnostic x) + +/* Allow suppression of compiler diagnostics unless H5_SHOW_ALL_WARNINGS is + * defined (enabled with '--enable-show-all-warnings' configure option). + */ +#ifndef H5_SHOW_ALL_WARNINGS +#define H5_DIAG_OFF(x) H5_DIAG_PRAGMA(push) H5_DIAG_PRAGMA(ignored H5_DIAG_JOINSTR("-W", x)) +#define H5_DIAG_ON(x) H5_DIAG_PRAGMA(pop) +#else +#define H5_DIAG_OFF(x) +#define H5_DIAG_ON(x) +#endif + +/* Macros for enabling/disabling particular GCC-only warnings. + * These pragmas are only implemented usefully in gcc 4.6+ + */ +#if (((__GNUC__ * 100) + __GNUC_MINOR__) >= 406) +#define H5_GCC_DIAG_OFF(x) H5_DIAG_OFF(x) +#define H5_GCC_DIAG_ON(x) H5_DIAG_ON(x) +#else +#define H5_GCC_DIAG_OFF(x) +#define H5_GCC_DIAG_ON(x) +#endif + +/* Macros for enabling/disabling particular clang-only warnings. + */ +#if defined(__clang__) +#define H5_CLANG_DIAG_OFF(x) H5_DIAG_OFF(x) +#define H5_CLANG_DIAG_ON(x) H5_DIAG_ON(x) +#else +#define H5_CLANG_DIAG_OFF(x) +#define H5_CLANG_DIAG_ON(x) +#endif + +/* Macros for enabling/disabling particular GCC / clang warnings. + * These macros should be used for warnings supported by both gcc and clang. + */ +#if (((__GNUC__ * 100) + __GNUC_MINOR__) >= 406) || defined(__clang__) +#define H5_GCC_CLANG_DIAG_OFF(x) H5_DIAG_OFF(x) +#define H5_GCC_CLANG_DIAG_ON(x) H5_DIAG_ON(x) +#else +#define H5_GCC_CLANG_DIAG_OFF(x) +#define H5_GCC_CLANG_DIAG_ON(x) +#endif + +#endif /* H5warnings_H */ From 4a10a0607232ce26e5b6f93f6ca211374eddbc08 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Fri, 18 Oct 2024 09:51:47 -0700 Subject: [PATCH 017/179] Switch HDoff_t from __int64 to int64_t on Windows (#4973) __int64 raises warnings when building with clang --- release_docs/RELEASE.txt | 2 +- src/H5public.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index cf9b65cc086..3520e8a6d96 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -69,7 +69,7 @@ New Features POSIX large-file support (LFS). On Windows, however, off_t is defined as a 32-bit type, even on 64-bit Windows. - HDoff_t has been added to H5public.h and is defined to be __int64 on + HDoff_t has been added to H5public.h and is defined to be int64_t on Windows and the library has been updated to use HDoff_t in place of off_t throughout. The H5Pset_external() offset parameter has also been updated to be HDoff_t. diff --git a/src/H5public.h b/src/H5public.h index 460aca5f1e1..b50f4d4652c 100644 --- a/src/H5public.h +++ b/src/H5public.h @@ -301,14 +301,14 @@ typedef long long ssize_t; typedef uint64_t hsize_t; /* off_t exists on Windows, but is always a 32-bit long, even on 64-bit Windows, - * so on Windows we define HDoff_t to be __int64, which is the type of the - * st_size field of the _stati64 struct. + * so on Windows we define HDoff_t to be int64_t, which is equivalent to __int64, + * the type of the st_size field of the _stati64 struct. */ #ifdef H5_HAVE_WIN32_API /** * Platform-independent offset */ -typedef __int64 HDoff_t; +typedef int64_t HDoff_t; #else /** * Platform-independent offset From 0559ba6881071a63141c73a76a8f6d52712e9f53 Mon Sep 17 00:00:00 2001 From: jhendersonHDF Date: Fri, 18 Oct 2024 14:02:51 -0500 Subject: [PATCH 018/179] Remove FALSE from some API tests (#4977) --- test/API/H5_api_link_test.c | 4 ++-- test/API/H5_api_object_test.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/test/API/H5_api_link_test.c b/test/API/H5_api_link_test.c index dec8387bfb6..650bdec7fa6 100644 --- a/test/API/H5_api_link_test.c +++ b/test/API/H5_api_link_test.c @@ -374,7 +374,7 @@ test_create_hard_link_many(void) hid_t file_id = H5I_INVALID_HID; hid_t container_group = H5I_INVALID_HID; hid_t group_id = H5I_INVALID_HID, group_id2 = H5I_INVALID_HID; - bool valid_name_matched = FALSE; + bool valid_name_matched = false; char objname[HARD_LINK_TEST_GROUP_MANY_NAME_BUF_SIZE]; /* Object name */ TESTING("hard link creation of many links"); @@ -1573,7 +1573,7 @@ static int test_create_soft_link_many(void) { htri_t link_exists = FAIL; - bool valid_name_matched = FALSE; + bool valid_name_matched = false; hid_t file_id = H5I_INVALID_HID; hid_t container_group = H5I_INVALID_HID; hid_t group_id = H5I_INVALID_HID; diff --git a/test/API/H5_api_object_test.c b/test/API/H5_api_object_test.c index 26977bf18dc..3e7303a1b18 100644 --- a/test/API/H5_api_object_test.c +++ b/test/API/H5_api_object_test.c @@ -5133,11 +5133,11 @@ test_object_visit(void) if (dset_dtype != H5I_INVALID_HID) H5Tclose(dset_dtype); - if ((fspace_id = generate_random_dataspace(OBJECT_VISIT_TEST_SPACE_RANK, NULL, NULL, FALSE)) < 0) { + if ((fspace_id = generate_random_dataspace(OBJECT_VISIT_TEST_SPACE_RANK, NULL, NULL, false)) < 0) { TEST_ERROR; } - if ((dset_dtype = generate_random_datatype(H5T_NO_CLASS, FALSE)) < 0) { + if ((dset_dtype = generate_random_datatype(H5T_NO_CLASS, false)) < 0) { TEST_ERROR; } @@ -5149,7 +5149,7 @@ test_object_visit(void) } while (((long unsigned int)num_elems * elem_size) > OBJECT_VISIT_TEST_TOTAL_DATA_SIZE_LIMIT); - if ((type_id = generate_random_datatype(H5T_NO_CLASS, FALSE)) < 0) { + if ((type_id = generate_random_datatype(H5T_NO_CLASS, false)) < 0) { H5_FAILED(); printf(" couldn't create datatype '%s'\n", OBJECT_VISIT_TEST_TYPE_NAME); goto error; From 478c7d166f9a153fe4c1b753965179eb10cf6741 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Fri, 18 Oct 2024 12:04:27 -0700 Subject: [PATCH 019/179] Set the C standard to 11 (#4975) Ignores some of the older Autotools platform files, since the Autotools will be dropped in the next major release (and we don't have compilers on which to test, anyway). Also drops support for the old, non-compliant MSVC preprocessor. --- config/clang-flags | 8 +------- config/cmake/HDFCompilerFlags.cmake | 4 ++-- config/gnu-flags | 11 ++++------- config/nvidia-flags | 4 ++-- config/oneapi-flags | 4 ++-- release_docs/RELEASE.txt | 15 +++++++++++++++ src/H5win32defs.h | 14 +------------- 7 files changed, 27 insertions(+), 33 deletions(-) diff --git a/config/clang-flags b/config/clang-flags index 844d6afa14e..585cb290035 100644 --- a/config/clang-flags +++ b/config/clang-flags @@ -116,14 +116,8 @@ if test "X-clang" = "X-$cc_vendor" -o "X-Apple LLVM" = "X-$cc_vendor"; then esac case "$host_os-$host_cpu" in - # cygwin needs the "-std=c99" flag removed, so make - # a specific case for Cygwin without the flag and a default - # case to add the flag everywhere else - cygwin-*) - ;; - *) - H5_CFLAGS="$H5_CFLAGS -std=c99" + H5_CFLAGS="$H5_CFLAGS -std=c11" ;; esac diff --git a/config/cmake/HDFCompilerFlags.cmake b/config/cmake/HDFCompilerFlags.cmake index e3364826ba6..2953d0e08ec 100644 --- a/config/cmake/HDFCompilerFlags.cmake +++ b/config/cmake/HDFCompilerFlags.cmake @@ -9,10 +9,10 @@ # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. # -set (CMAKE_C_STANDARD 99) +set (CMAKE_C_STANDARD 11) set (CMAKE_C_STANDARD_REQUIRED TRUE) -set (CMAKE_C_FLAGS "${CMAKE_C99_STANDARD_COMPILE_OPTION} ${CMAKE_C_FLAGS}") +set (CMAKE_C_FLAGS "${CMAKE_C11_STANDARD_COMPILE_OPTION} ${CMAKE_C_FLAGS}") set (CMAKE_C_FLAGS "${CMAKE_C_SANITIZER_FLAGS} ${CMAKE_C_FLAGS}") message (VERBOSE "Warnings Configuration: C default: ${CMAKE_C_FLAGS}") #----------------------------------------------------------------------------- diff --git a/config/gnu-flags b/config/gnu-flags index 546f601e3c0..5bf8b7a8d22 100644 --- a/config/gnu-flags +++ b/config/gnu-flags @@ -117,18 +117,15 @@ if test "X-gcc" = "X-$cc_vendor"; then esac case "$host_os-$host_cpu" in - # Cygwin needs the "-std=c99" flag removed. - cygwin-*) - ;; - # On Solaris, gcc needs the gnu99 standard to pick up certain POSIX + # On Solaris, gcc needs the gnu11 standard to pick up certain POSIX # things. Do NOT use this as the gcc norm as this encourages the use # of non-standard gcc extensions. *solaris*) - H5_CFLAGS="$H5_CFLAGS -std=gnu99" + H5_CFLAGS="$H5_CFLAGS -std=gnu11" ;; - # Everybody else gets c99 as the standard. + # Everybody else gets C11 as the standard. *) - H5_CFLAGS="$H5_CFLAGS -std=c99" + H5_CFLAGS="$H5_CFLAGS -std=c11" ;; esac diff --git a/config/nvidia-flags b/config/nvidia-flags index 39bca831314..31b2aa0bd56 100644 --- a/config/nvidia-flags +++ b/config/nvidia-flags @@ -68,8 +68,8 @@ if test "X-nvc" = "X-$cc_vendor" -o "X-nvcc" = "X-$cc_vendor"; then # General # ########### - # Default to C99 standard. - H5_CFLAGS="$H5_CFLAGS $arch -c99 -Minform=warn" + # Default to C11 standard. + H5_CFLAGS="$H5_CFLAGS $arch -std=c11 -Minform=warn" ############## # Production # diff --git a/config/oneapi-flags b/config/oneapi-flags index 629e93f02f1..32a7e7c61a7 100644 --- a/config/oneapi-flags +++ b/config/oneapi-flags @@ -80,8 +80,8 @@ if test "X-icx" = "X-$cc_vendor"; then # General # ########### - # Default to C99 standard. - H5_CFLAGS="$H5_CFLAGS $arch -std=c99" + # Default to C11 standard. + H5_CFLAGS="$H5_CFLAGS $arch -std=c11" ############## # Production # diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 3520e8a6d96..7f4571ef0df 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -47,6 +47,21 @@ New Features Configuration: ------------- + - Dropped support for the traditional MSVC preprocessor + + Visual Studio has recently started using a standards-compliant + preprocessor (In VS2019+) and this is the default in C11. + + https://learn.microsoft.com/en-us/cpp/preprocessor/preprocessor-experimental-overview?view=msvc-170 + + Because of this, we've dropped support for the traditional + MSVC preprocessor. + + - The standard for building the library is now C11 + + We have updated the build files to set the C standard to C11, though + some platforms use gnu11 to get some GNU things to work. + - Added configuration option for internal threading/concurrency support: CMake: HDF5_ENABLE_THREADS (ON/OFF) (Default: ON) diff --git a/src/H5win32defs.h b/src/H5win32defs.h index 72d0e556157..677baee3e61 100644 --- a/src/H5win32defs.h +++ b/src/H5win32defs.h @@ -43,20 +43,8 @@ struct timezone { #define HDlstat(S, B) _lstati64(S, B) #define HDmkdir(S, M) _mkdir(S) -/* Note that with the traditional MSVC preprocessor, the variadic - * HDopen macro uses an MSVC-specific extension where the comma - * is dropped if nothing is passed to the ellipsis. - * - * MinGW and the newer, conforming MSVC preprocessor do not exhibit this - * behavior. - */ -#if (defined(_MSC_VER) && !defined(_MSVC_TRADITIONAL)) || defined(_MSVC_TRADITIONAL) -/* Using the MSVC traditional preprocessor */ -#define HDopen(S, F, ...) Wopen(S, F, __VA_ARGS__) -#else -/* Using a standards conformant preprocessor */ +/* We only support the standards conformant preprocessor */ #define HDopen(S, F, ...) Wopen(S, F, ##__VA_ARGS__) -#endif #define HDremove(S) Wremove(S) #define HDsetenv(N, V, O) Wsetenv(N, V, O) From bb5661101a85984ce72835c167874f96279720f7 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Fri, 18 Oct 2024 12:09:42 -0700 Subject: [PATCH 020/179] Remove the high-level GIF tools (#4976) The high-level GIF tools, h52gif and gif2h5, have unfixed CVE issues (with no proof-of-concept files). They are not critical tools, are not well maintained, and are an odd fit for building with the library. Because of this, they have been removed. We may move them to a separate repository in the future. --- configure.ac | 25 -- hl/tools/CMakeLists.txt | 8 - hl/tools/Makefile.am | 8 +- hl/tools/gif2h5/CMakeLists.txt | 107 ------ hl/tools/gif2h5/CMakeTests.cmake | 76 ---- hl/tools/gif2h5/Makefile.am | 50 --- hl/tools/gif2h5/decompress.c | 331 ------------------ hl/tools/gif2h5/gif.h | 183 ---------- hl/tools/gif2h5/gif2hdf.c | 152 -------- hl/tools/gif2h5/gif2mem.c | 330 ------------------ hl/tools/gif2h5/gifread.c | 376 -------------------- hl/tools/gif2h5/h52gifgentst.c | 99 ------ hl/tools/gif2h5/h52giftest.sh.in | 95 ----- hl/tools/gif2h5/hdf2gif.c | 334 ------------------ hl/tools/gif2h5/hdfgifwr.c | 463 ------------------------- hl/tools/gif2h5/testfiles/README | 6 - hl/tools/gif2h5/testfiles/ex_image2.h5 | Bin 224533 -> 0 bytes hl/tools/gif2h5/testfiles/h52giftst.h5 | Bin 82816 -> 0 bytes hl/tools/gif2h5/testfiles/image1.gif | Bin 9736 -> 0 bytes hl/tools/gif2h5/writehdf.c | 115 ------ release_docs/INSTALL_Autotools.txt | 2 - release_docs/RELEASE.txt | 13 +- src/H5build_settings.autotools.c.in | 1 - src/libhdf5.settings.autotools.in | 1 - 24 files changed, 13 insertions(+), 2762 deletions(-) delete mode 100644 hl/tools/gif2h5/CMakeLists.txt delete mode 100644 hl/tools/gif2h5/CMakeTests.cmake delete mode 100644 hl/tools/gif2h5/Makefile.am delete mode 100644 hl/tools/gif2h5/decompress.c delete mode 100644 hl/tools/gif2h5/gif.h delete mode 100644 hl/tools/gif2h5/gif2hdf.c delete mode 100644 hl/tools/gif2h5/gif2mem.c delete mode 100644 hl/tools/gif2h5/gifread.c delete mode 100644 hl/tools/gif2h5/h52gifgentst.c delete mode 100644 hl/tools/gif2h5/h52giftest.sh.in delete mode 100644 hl/tools/gif2h5/hdf2gif.c delete mode 100644 hl/tools/gif2h5/hdfgifwr.c delete mode 100644 hl/tools/gif2h5/testfiles/README delete mode 100644 hl/tools/gif2h5/testfiles/ex_image2.h5 delete mode 100644 hl/tools/gif2h5/testfiles/h52giftst.h5 delete mode 100644 hl/tools/gif2h5/testfiles/image1.gif delete mode 100644 hl/tools/gif2h5/writehdf.c diff --git a/configure.ac b/configure.ac index c5bfe4276af..6f1ed6aa50e 100644 --- a/configure.ac +++ b/configure.ac @@ -1154,7 +1154,6 @@ AC_LANG_POP(C++) ## library is disabled. AC_SUBST([HDF5_HL]) AC_SUBST([HDF5_HL_TOOLS]) -AC_SUBST([HDF5_HL_GIF_TOOLS]) ## The high-level library and high-level tools are enabled unless the build mode ## is clean. @@ -1477,27 +1476,6 @@ AC_ARG_ENABLE([tools], AC_MSG_RESULT([$HDF5_TOOLS]) -## ---------------------------------------------------------------------- -## Check if they would like to disable building the high-level GIF -## tools (they have unfixed CVE issues) -## - -AC_MSG_CHECKING([if the high-level GIF tools are enabled]) -AC_ARG_ENABLE([hlgiftools], - [AS_HELP_STRING([--enable-hlgiftools], - [Enable the high-level GIF tools. NOTE: These have unfixed CVE issues! - [default=no] - ])], - [HDF5_HL_GIF_TOOLS=$enableval]) - -if test "X-$HDF5_TOOLS" = "X-yes" -a "X-$HDF5_HL" = "X-yes" -a "X-$HDF5_HL_GIF_TOOLS" = "X-yes"; then - AC_MSG_RESULT([yes]) -else - AC_MSG_RESULT([no]) - HDF5_HL_GIF_TOOLS="no" -fi - - ## ---------------------------------------------------------------------- ## Check if they would like to enable building doxygen files ## @@ -4411,7 +4389,6 @@ AM_CONDITIONAL([BUILD_HDF5_HL_CONDITIONAL], [test "X$HDF5_HL" = "Xyes"]) AM_CONDITIONAL([BUILD_TESTS_CONDITIONAL], [test "X$HDF5_TESTS" = "Xyes"]) AM_CONDITIONAL([BUILD_TESTS_PARALLEL_CONDITIONAL], [test -n "$TESTPARALLEL"]) AM_CONDITIONAL([BUILD_TOOLS_CONDITIONAL], [test "X$HDF5_TOOLS" = "Xyes"]) -AM_CONDITIONAL([BUILD_TOOLS_HL_GIF_CONDITIONAL], [test "X$HDF5_HL_GIF_TOOLS" = "Xyes"]) AM_CONDITIONAL([BUILD_DOXYGEN_CONDITIONAL], [test "X$HDF5_DOXYGEN" = "Xyes"]) ## ---------------------------------------------------------------------- @@ -4619,8 +4596,6 @@ AC_CONFIG_FILES([Makefile hl/test/Makefile hl/test/H5srcdir_str.h hl/tools/Makefile - hl/tools/gif2h5/Makefile - hl/tools/gif2h5/h52giftest.sh hl/tools/h5watch/Makefile hl/tools/h5watch/testh5watch.sh hl/examples/Makefile diff --git a/hl/tools/CMakeLists.txt b/hl/tools/CMakeLists.txt index a369d9efa18..cbff5a92157 100644 --- a/hl/tools/CMakeLists.txt +++ b/hl/tools/CMakeLists.txt @@ -1,12 +1,4 @@ cmake_minimum_required (VERSION 3.18) project (HDF5_HL_TOOLS C) -#----------------------------------------------------------------------------- -#-- Option to build the High level GIF Tools -#----------------------------------------------------------------------------- -option (HDF5_BUILD_HL_GIF_TOOLS "Build HDF5 HL GIF Tools" OFF) -if (HDF5_BUILD_HL_GIF_TOOLS) - add_subdirectory (gif2h5) -endif () - add_subdirectory (h5watch) diff --git a/hl/tools/Makefile.am b/hl/tools/Makefile.am index 9f93f676dce..620eb5dbfcc 100644 --- a/hl/tools/Makefile.am +++ b/hl/tools/Makefile.am @@ -18,13 +18,7 @@ include $(top_srcdir)/config/commence.am -if BUILD_TOOLS_HL_GIF_CONDITIONAL - TOOLS_GIF_DIR = gif2h5 -else - TOOLS_GIF_DIR = -endif - # All subdirectories -SUBDIRS=h5watch $(TOOLS_GIF_DIR) +SUBDIRS=h5watch include $(top_srcdir)/config/conclude.am diff --git a/hl/tools/gif2h5/CMakeLists.txt b/hl/tools/gif2h5/CMakeLists.txt deleted file mode 100644 index abef080910c..00000000000 --- a/hl/tools/gif2h5/CMakeLists.txt +++ /dev/null @@ -1,107 +0,0 @@ -cmake_minimum_required (VERSION 3.18) -project (HDF5_HL_TOOLS_GIF2H5 C) - -#----------------------------------------------------------------------------- -# Define Sources -#----------------------------------------------------------------------------- -set (GIF2H5_SOURCES - ${HDF5_HL_TOOLS_GIF2H5_SOURCE_DIR}/gif.h - ${HDF5_HL_TOOLS_GIF2H5_SOURCE_DIR}/decompress.c - ${HDF5_HL_TOOLS_GIF2H5_SOURCE_DIR}/gif2hdf.c - ${HDF5_HL_TOOLS_GIF2H5_SOURCE_DIR}/gif2mem.c - ${HDF5_HL_TOOLS_GIF2H5_SOURCE_DIR}/gifread.c - ${HDF5_HL_TOOLS_GIF2H5_SOURCE_DIR}/writehdf.c -) - -#-- Add gif2hdf5 program -add_executable (gif2h5 ${GIF2H5_SOURCES}) -target_compile_options(gif2h5 PRIVATE "${HDF5_CMAKE_C_FLAGS}") -target_include_directories (gif2h5 PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$:${MPI_C_INCLUDE_DIRS}>") -if (HDF5_BUILD_STATIC_TOOLS) - TARGET_C_PROPERTIES (gif2h5 STATIC) - target_link_libraries (gif2h5 PRIVATE ${HDF5_HL_LIB_TARGET} ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET}) -else () - TARGET_C_PROPERTIES (gif2h5 SHARED) - target_link_libraries (gif2h5 PRIVATE ${HDF5_HL_LIBSH_TARGET} ${HDF5_LIBSH_TARGET} ${HDF5_TOOLS_LIBSH_TARGET}) -endif () -set_target_properties (gif2h5 PROPERTIES FOLDER tools/hl) -set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};gif2h5") -set (H5_DEP_EXECUTABLES - gif2h5 -) - -#----------------------------------------------------------------------------- -# Add Target to clang-format -#----------------------------------------------------------------------------- -if (HDF5_ENABLE_FORMATTERS) - clang_format (HDF5_HL_TOOLS_GIF2H5_FORMAT gif2h5) -endif () - -#-- Add h52gif program -set (hdf2gif_SOURCES - ${HDF5_HL_TOOLS_GIF2H5_SOURCE_DIR}/hdf2gif.c - ${HDF5_HL_TOOLS_GIF2H5_SOURCE_DIR}/hdfgifwr.c -) -add_executable (h52gif ${hdf2gif_SOURCES}) -target_compile_options(h52gif PRIVATE "${HDF5_CMAKE_C_FLAGS}") -target_include_directories (h52gif PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$:${MPI_C_INCLUDE_DIRS}>") -if (HDF5_BUILD_STATIC_TOOLS) - TARGET_C_PROPERTIES (h52gif STATIC) - target_link_libraries (h52gif PRIVATE ${HDF5_HL_LIB_TARGET} ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET}) -else () - TARGET_C_PROPERTIES (h52gif SHARED) - target_link_libraries (h52gif PRIVATE ${HDF5_HL_LIBSH_TARGET} PRIVATE ${HDF5_LIBSH_TARGET} ${HDF5_TOOLS_LIBSH_TARGET}) -endif () -set_target_properties (h52gif PROPERTIES FOLDER tools/hl) -set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h52gif") -set (H5_DEP_EXECUTABLES ${H5_DEP_EXECUTABLES} - h52gif -) - -#----------------------------------------------------------------------------- -# Add Target to clang-format -#----------------------------------------------------------------------------- -if (HDF5_ENABLE_FORMATTERS) - clang_format (HDF5_HL_TOOLS_H52GIF_FORMAT h52gif) -endif () - -if (BUILD_TESTING AND HDF5_TEST_SERIAL) - # -------------------------------------------------------------------- - # This executable can generate the actual test files - Currently not - # used in the CMake Build system as we rely on the test files that are - # shipped with HDF5 source archives - # -------------------------------------------------------------------- - if (HDF5_BUILD_GENERATORS AND BUILD_STATIC_LIBS) - add_executable (hl_h52gifgentest ${HDF5_HL_TOOLS_GIF2H5_SOURCE_DIR}/h52gifgentst.c) - target_include_directories (hl_h52gifgentest PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$:${MPI_C_INCLUDE_DIRS}>") - TARGET_C_PROPERTIES (hl_h52gifgentest STATIC) - target_link_libraries (hl_h52gifgentest PRIVATE ${HDF5_HL_LIB_TARGET} ${HDF5_LIB_TARGET}) - set_target_properties (hl_h52gifgentest PROPERTIES FOLDER generator/tools/hl) - - #----------------------------------------------------------------------------- - # Add Target to clang-format - #----------------------------------------------------------------------------- - if (HDF5_ENABLE_FORMATTERS) - clang_format (HDF5_HL_TOOLS_hl_h52gifgentest_FORMAT hl_h52gifgentest) - endif () - -# add_test (NAME hl_h52gifgentest COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $) - endif () - - if (HDF5_TEST_TOOLS) - include (CMakeTests.cmake) - endif () -endif () - -#----------------------------------------------------------------------------- -# Add file(s) to CMake Install -#----------------------------------------------------------------------------- -if (HDF5_EXPORTED_TARGETS) - install ( - TARGETS - ${H5_DEP_EXECUTABLES} - EXPORT - ${HDF5_EXPORTED_TARGETS} - RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT hltoolsapplications - ) -endif () diff --git a/hl/tools/gif2h5/CMakeTests.cmake b/hl/tools/gif2h5/CMakeTests.cmake deleted file mode 100644 index be431c1507b..00000000000 --- a/hl/tools/gif2h5/CMakeTests.cmake +++ /dev/null @@ -1,76 +0,0 @@ -# -# Copyright by The HDF Group. -# All rights reserved. -# -# This file is part of HDF5. The full HDF5 copyright notice, including -# terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code -# distribution tree, or in https://www.hdfgroup.org/licenses. -# If you do not have access to either file, you may request a copy from -# help@hdfgroup.org. -# - -############################################################################## -############################################################################## -### T E S T I N G ### -############################################################################## -############################################################################## - -# Make testfiles dir under build dir -file (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles") - -# -# copy test files from source to build dir -# -HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/testfiles/image1.gif" "${PROJECT_BINARY_DIR}/testfiles/image1.gif" "gif2h5_files") -HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/testfiles/h52giftst.h5" "${PROJECT_BINARY_DIR}/testfiles/h52giftst.h5" "gif2h5_files") -HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/testfiles/ex_image2.h5" "${PROJECT_BINARY_DIR}/testfiles/ex_image2.h5" "gif2h5_files") -add_custom_target(gif2h5_files ALL COMMENT "Copying files needed by gif2h5 tests" DEPENDS ${gif2h5_files_list}) - -# Remove any output file left over from previous test run -set (HL_TOOLS_CLEANFILES - image1.gif - image1.h5 - image.gif - image24.gif -) -add_test ( - NAME HL_TOOLS-clear-objects - COMMAND ${CMAKE_COMMAND} - -E remove ${HL_TOOLS_CLEANFILES} -) -set_tests_properties (HL_TOOLS-clear-objects PROPERTIES FIXTURES_SETUP clear_tools_hl) -add_test ( - NAME HL_TOOLS-clean-objects - COMMAND ${CMAKE_COMMAND} - -E remove ${HL_TOOLS_CLEANFILES} -) -set_tests_properties (HL_TOOLS-clean-objects PROPERTIES FIXTURES_CLEANUP clear_tools_hl) - -add_test (NAME HL_TOOLS_gif2h5 COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ testfiles/image1.gif image1.h5) -set_tests_properties (HL_TOOLS_gif2h5 PROPERTIES - FIXTURES_REQUIRED clear_tools_hl -) - -add_test (NAME HL_TOOLS_h52gif COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ testfiles/h52giftst.h5 image1.gif -i image) -set_tests_properties (HL_TOOLS_h52gif PROPERTIES - FIXTURES_REQUIRED clear_tools_hl -) - -add_test (NAME HL_TOOLS_h52gif_none COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ testfiles/h52giftst.h5 image.gif -i nosuch_image) -set_tests_properties (HL_TOOLS_h52gif_none PROPERTIES - WILL_FAIL "true" - FIXTURES_REQUIRED clear_tools_hl -) - -#add_test (NAME HL_TOOLS_h52gifpal COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ testfiles/h52giftst.h5 image.gif -i palette) -#set_tests_properties (HL_TOOLS_h52gifpal PROPERTIES -# WILL_FAIL "true" -# FIXTURES_REQUIRED clear_tools_hl -#) - -add_test (NAME HL_TOOLS_h52gif24bits COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ testfiles/ex_image2.h5 image24.gif -i image24bitpixel) -set_tests_properties (HL_TOOLS_h52gif24bits PROPERTIES - WILL_FAIL "true" - FIXTURES_REQUIRED clear_tools_hl -) diff --git a/hl/tools/gif2h5/Makefile.am b/hl/tools/gif2h5/Makefile.am deleted file mode 100644 index d8786f70060..00000000000 --- a/hl/tools/gif2h5/Makefile.am +++ /dev/null @@ -1,50 +0,0 @@ -# -# Copyright by The HDF Group. -# All rights reserved. -# -# This file is part of HDF5. The full HDF5 copyright notice, including -# terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code -# distribution tree, or in https://www.hdfgroup.org/licenses. -# If you do not have access to either file, you may request a copy from -# help@hdfgroup.org. -## -## Makefile.am -## Run automake to generate a Makefile.in from this file. -# -# HDF5 Library Makefile(.in) -# - -include $(top_srcdir)/config/commence.am - -# Include src and tools/lib directories -AM_CPPFLAGS+=-I$(top_srcdir)/src -I$(top_srcdir)/tools/lib -I$(top_srcdir)/hl/src - -# These are our main targets, the tools - -bin_PROGRAMS=gif2h5 h52gif - -# Add h52gif and gif2h5 specific linker flags here -h52gif_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) -gif2h5_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS) - -gif2h5_SOURCES=gif2hdf.c gif2mem.c decompress.c gifread.c writehdf.c - -h52gif_SOURCES=hdf2gif.c hdfgifwr.c - - -# Programs all depend on the hdf5 library, the tools library, and the HL -# library. -LDADD=$(LIBH5_HL) $(LIBH5TOOLS) $(LIBHDF5) - -if BUILD_TESTS_CONDITIONAL - TEST_SCRIPT=h52giftest.sh - check_SCRIPTS=$(TEST_SCRIPT) - noinst_PROGRAMS=h52gifgentst - h52gifgentst_SOURCES=h52gifgentst.c -endif - -CHECK_CLEANFILES+=*.h5 -CHECK_CLEANFILES+=*.gif - -include $(top_srcdir)/config/conclude.am diff --git a/hl/tools/gif2h5/decompress.c b/hl/tools/gif2h5/decompress.c deleted file mode 100644 index 62a22922ff4..00000000000 --- a/hl/tools/gif2h5/decompress.c +++ /dev/null @@ -1,331 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright by The HDF Group. * - * All rights reserved. * - * * - * This file is part of HDF5. The full HDF5 copyright notice, including * - * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * - * distribution tree, or in https://www.hdfgroup.org/licenses. * - * If you do not have access to either file, you may request a copy from * - * help@hdfgroup.org. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -#include -#include - -#include "gif.h" - -GIFWORD iWIDE, iHIGH, eWIDE, eHIGH, expand, numcols, strip, nostrip; -unsigned long cols[256]; -char *cmd; - -FILE *fp; - -static GIFWORD XC = 0, YC = 0, /* Output X and Y coords of current pixel */ - InitCodeSize, /* Starting code size, used during Clear */ - CodeSize, /* Code size, read from GIF header */ - BytesPerScanline, /* Bytes per scanline in output raster */ - IWidth, IHeight; /* image dimensions */ -static int BitOffset = 0, /* Bit Offset of next code */ - Pass = 0, /* Used by output routine if GIFWORDerlaced pic */ - OutCount = 0, /* Decompressor output 'stack count' */ - Code, /* Value returned by ReadCode */ - MaxCode, /* limiting value for current code size */ - ClearCode, /* GIF clear code */ - EOFCode, /* GIF end-of-information code */ - CurCode, OldCode, InCode, /* Decompressor variables */ - FirstFree, /* First free code, generated per GIF spec */ - FreeCode, /* Decompressor, next free slot in hash table */ - FinChar, /* Decompressor variable */ - DataMask, /* AND mask for data size */ - ReadMask; /* Code AND mask for current code size */ - -/*MODIFICATIONS*/ -GIFBYTE tempbyte[10]; -GIFBYTE *tempGIFBYTEptr[10]; -GIFWORD tempint[10]; -GIFWORD ImageCount = 0; -/*END MODIFICATION*/ - -boolean Interlace, HasColormap; - -GIFBYTE *Image; /* The result array */ -GIFBYTE *RawGIF; /* The heap array to hold it, raw */ -GIFBYTE *Raster; /* The raster data stream, unblocked */ - -/* The hash table used by the decompressor */ - -static int *Prefix; -static int *Suffix; - -/* An output array used by the decompressor */ - -int *OutCode; - -/* The color map, read from the GIF header */ - -int numused; - -/* - * Fetch the next code from the raster data stream. The codes can be any - * length from 3 to 12 bits, packed into 8-bit GIFBYTEs, so we have to maintain - * our location in the Raster array as a BIT Offset. We compute the GIFBYTE - * Offset into the raster array by dividing this by 8, pick up three GIFBYTEs, - * compute the bit Offset into our 24-bit chunk, shift to bring the desired - * code to the bottom, then mask it off and return it. - */ -static int -ReadCode(void) -{ - int RawCode, ByteOffset; - - ByteOffset = BitOffset / 8; - RawCode = Raster[ByteOffset] + (0x100 * Raster[ByteOffset + 1]); - - if (CodeSize >= 8) - RawCode += (0x10000 * Raster[ByteOffset + 2]); - - RawCode >>= (BitOffset % 8); - BitOffset += (int)CodeSize; - return (RawCode & ReadMask); -} - -static void -AddToPixel(GIFBYTE Index) -{ - if (YC < IHeight) - *(Image + YC * BytesPerScanline + XC) = Index; - - /* Update the X-coordinate, and if it overflows, update the - * Y-coordinate */ - if (++XC == IWidth) { - /* - * If a non-interlaced picture, just increment YC to the next scan - * line. If it's interlaced, deal with the interlace as described - * in the GIF spec. Put the decoded scan line out to the screen if we - * haven't gone past the bottom of it. - */ - XC = 0; - - if (!Interlace) { - YC++; - } - else { - switch (Pass) { - case 0: - YC += 8; - - if (YC >= IHeight) { - Pass++; - YC = 4; - } - - break; - case 1: - YC += 8; - - if (YC >= IHeight) { - Pass++; - YC = 2; - } - - break; - case 2: - YC += 4; - - if (YC >= IHeight) { - Pass++; - YC = 1; - } - - break; - case 3: - YC += 2; - break; - default: - break; - } - } - } -} - -/* Main routine. Convert a GIF image to an HDF image */ - -GIFBYTE * -Decompress(GIFIMAGEDESC *GifImageDesc, GIFHEAD *GifHead) -{ - int i; - - if (!(Prefix = calloc(4096, sizeof(int)))) { - printf("Out of memory"); - exit(EXIT_FAILURE); - } - if (!(Suffix = calloc(4096, sizeof(int)))) { - printf("Out of memory"); - exit(EXIT_FAILURE); - } - if (!(OutCode = calloc(1024, sizeof(int)))) { - printf("Out of memory"); - exit(EXIT_FAILURE); - } - - XC = 0; - YC = 0; - Pass = 0; - OutCount = 0; - BitOffset = 0; - - DataMask = (1 << ((GifHead->PackedField & 0x07) + 1)) - 1; - Raster = GifImageDesc->GIFImage; - - /* Check for image separator */ - - /* Now read in values from the image descriptor */ - IWidth = GifImageDesc->ImageWidth; - IHeight = GifImageDesc->ImageHeight; - Interlace = (uint8_t)(GifImageDesc->PackedField & 0x40); - - /* - * Note that I ignore the possible existence of a local color map. I'm - * told there aren't many files around that use them, and the spec says - * it's defined for future use. This could lead to an error reading some - * files. - */ - - /* - * Start reading the raster data. First we get the initial code size and - * compute decompressor constant values, based on this code size. - */ - - CodeSize = GifImageDesc->CodeSize; - ClearCode = (1 << CodeSize); - EOFCode = ClearCode + 1; - FreeCode = FirstFree = ClearCode + 2; - - /* - * The GIF spec has it that the code size is the code size used to compute - * the above values is the code size given in the file, but the code size - * used in compression/decompression is the code size given in the file - * plus one. (thus the ++). - */ - - CodeSize++; - InitCodeSize = CodeSize; - MaxCode = (1 << CodeSize); - ReadMask = MaxCode - 1; - - /* - * Read the raster data. Here we just transpose it from the GIF array to - * the Raster array, turning it from a series of blocks into one long - * data stream, which makes life much easier for ReadCode(). - */ - - /* Allocate the Image */ - - if (!(Image = (GIFBYTE *)malloc((size_t)IWidth * (size_t)IHeight))) { - printf("Out of memory"); - exit(EXIT_FAILURE); - } - - BytesPerScanline = IWidth; - - /* - * Decompress the file, continuing until you see the GIF EOF code. One - * obvious enhancement is to add checking for corrupt files here. - */ - - Code = ReadCode(); - - while (Code != EOFCode) { - /* - * Clear code sets everything back to its initial value, then reads - * the immediately subsequent code as uncompressed data. - */ - if (Code == ClearCode) { - CodeSize = InitCodeSize; - MaxCode = (1 << CodeSize); - ReadMask = MaxCode - 1; - FreeCode = FirstFree; - CurCode = OldCode = Code = ReadCode(); - FinChar = CurCode & DataMask; - AddToPixel((GIFBYTE)FinChar); - } - else { - /* - * If not a clear code, then must be data: save same as CurCode - * and InCode - */ - CurCode = InCode = Code; - - /* - * If greater or equal to FreeCode, not in the hash table yet; - * repeat the last character decoded - */ - if (CurCode >= FreeCode) { - CurCode = OldCode; - OutCode[OutCount++] = FinChar; - } - - /* - * Unless this code is raw data, pursue the chain pointed to by - * CurCode through the hash table to its end; each code in the - * chain puts its associated output code on the output queue. - */ - while (CurCode > DataMask) { - if (OutCount >= 1024) { - /*return error message*/ - } - - OutCode[OutCount++] = Suffix[CurCode]; - CurCode = Prefix[CurCode]; - } - - /* The last code in the chain is treated as raw data. */ - FinChar = CurCode & DataMask; - OutCode[OutCount++] = FinChar; - - /* - * Now we put the data out to the Output routine. It's been - * stacked LIFO, so deal with it that way... - */ - for (i = OutCount - 1; i >= 0; i--) - AddToPixel((GIFBYTE)OutCode[i]); - - OutCount = 0; - - /* - * Build the hash table on-the-fly. No table is stored in the - * file. - */ - if (FreeCode >= 4096) { - printf("Error: FreeCode out of bounds\n"); - exit(EXIT_FAILURE); - } - Prefix[FreeCode] = OldCode; - Suffix[FreeCode] = FinChar; - OldCode = InCode; - - /* - * Point to the next slot in the table. If we exceed the current - * MaxCode value, increment the code size unless it's already 12. - * If it is, do nothing: the next code decompressed better be - * CLEAR - */ - FreeCode++; - - if (FreeCode >= MaxCode) - if (CodeSize < 12) { - CodeSize++; - MaxCode *= 2; - ReadMask = (1 << CodeSize) - 1; - } - } - - Code = ReadCode(); - } - - free(Prefix); - free(Suffix); - free(OutCode); - - return Image; -} diff --git a/hl/tools/gif2h5/gif.h b/hl/tools/gif2h5/gif.h deleted file mode 100644 index 62f09a5b2ee..00000000000 --- a/hl/tools/gif2h5/gif.h +++ /dev/null @@ -1,183 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright by The HDF Group. * - * All rights reserved. * - * * - * This file is part of HDF5. The full HDF5 copyright notice, including * - * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * - * distribution tree, or in https://www.hdfgroup.org/licenses. * - * If you do not have access to either file, you may request a copy from * - * help@hdfgroup.org. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* - * Title: GIF.H - * Purpose: GIF Header file - */ -#ifndef GIF_H_ -#define GIF_H_ 1 - -#include -#include -#include - -#include "hdf5.h" - -#define MAX_PAL 768 - -/* typedef H5T_NATIVE_UINT8 GIFBYTE; */ -typedef unsigned char GIFBYTE; - -/* typedef H5T_NATIVE_UINT16 GIFWORD; */ -typedef unsigned long GIFWORD; - -typedef char GIFCHAR; - -#ifndef boolean -typedef unsigned char boolean; -#endif - -#ifndef false -#define false 0 -#endif -#ifndef true -#define true 1 -#endif - -/* Set the EndianOrder. -** The GIF Reader file should do this. -** Set EndianOrder = 0 if machine is little endian -** EndianOrder = 1 if machine is big endian. -*/ -extern int EndianOrder; - -/* -** The GIF header format. -** -** This structure actually contains the header, logical screen -** descriptor, and the global color table for the GIF image. -*/ -typedef struct _GifHeader { /* Offset Description */ - GIFBYTE PackedField; /* 0Ah Color Information */ - GIFWORD TableSize; - GIFBYTE ImageCount; /* Keep a count of the number of images */ - GIFBYTE CommentCount; - GIFBYTE ApplicationCount; - GIFBYTE PlainTextCount; - GIFBYTE HDFPalette[256][3]; - GIFBYTE HeaderDump[6]; /* GIFBYTE array to dump header contents */ - GIFBYTE LSDDump[7]; /* Logical Screen Descriptor dump */ -} GIFHEAD; - -/* -** The GIF Image Descriptor. -*/ -typedef struct _GifImageDescriptor { - GIFWORD ImageWidth; /* Width of the image in pixels */ - GIFWORD ImageHeight; /* Height of the image in pixels */ - GIFBYTE PackedField; /* Image and Color Table Data Information */ - GIFWORD TableSize; - GIFWORD CodeSize; /* Minimum LZW CodeSize for image data */ - GIFBYTE HDFPalette[256][3]; - GIFBYTE GIDDump[9]; /* GifImageDescriptor dump */ - - GIFBYTE *Image; /* Decompressed Raster Image */ - GIFBYTE *GIFImage; -} GIFIMAGEDESC; - -/* -** GIF 89a Graphic Control Extension Block -*/ -typedef struct _GifGraphicControlExtension { - GIFBYTE GCEDump[5]; /* Graphic Control Extension Dump */ -} GIFGRAPHICCONTROL; - -/* -** GIF 89a Plain Text Extension Block -*/ -typedef struct _GifPlainTextExtension { - GIFBYTE PTEDump[15]; /* Plain Text Extension Dump */ - GIFBYTE *PlainTextData; /* Plain Text data sub-blocks */ - GIFWORD DataSize; -} GIFPLAINTEXT; - -/* -** GIF 89a Application Extension Block -*/ -typedef struct _GifApplicationExtension { - GIFBYTE AEDump[14]; /* Application Extension Dump */ - GIFBYTE *ApplicationData; /* Application data sub-blocks */ - GIFWORD DataSize; -} GIFAPPLICATION; - -/* -** GIF 89a Comment Extension Block -*/ -typedef struct _GifCommentExtension { - GIFBYTE CEDump[2]; /* Comment Extension Dump */ - GIFBYTE *CommentData; /* Comment data sub-blocks */ - GIFWORD DataSize; - GIFBYTE Terminator; /* Block Terminator (always 0) */ -} GIFCOMMENT; - -/* -** GIF to HDF Memory Struct -** Purpose : The gif to hdf structure is used to pass all the -** gif data to the memory, which gets caught by the hdf driver -** Its the drivers job to put the data in the appropriate places -** in the HDF file. -** I have assumed that the ImageDescriptors and GraphicControls follow -** one another, ie. I have not associated them with each other. The driver -** must assume a 1-1 correspondence. The same discussion with plain text -** extension. -*/ -typedef struct _GifToMem { - GIFHEAD *GifHeader; - GIFIMAGEDESC **GifImageDesc; - GIFGRAPHICCONTROL **GifGraphicControlExtension; - GIFPLAINTEXT **GifPlainTextExtension; - GIFAPPLICATION **GifApplicationExtension; - GIFCOMMENT **GifCommentExtension; -} GIFTOMEM; - -/* -** Function Prototypes -*/ - -/* GIF2MEM.C */ -int Gif2Mem(GIFBYTE *, GIFTOMEM *); - -/* GIFREAD.C */ -int ReadGifHeader(GIFHEAD *, GIFBYTE **); -int ReadGifImageDesc(GIFIMAGEDESC *, GIFBYTE **); -int ReadGifGraphicControl(GIFGRAPHICCONTROL *, GIFBYTE **); -int ReadGifPlainText(GIFPLAINTEXT *, GIFBYTE **); -int ReadGifApplication(GIFAPPLICATION *, GIFBYTE **); -int ReadGifComment(GIFCOMMENT *, GIFBYTE **); - -/* HDFGIFWR.C */ -int hdfWriteGIF(FILE *fp, GIFBYTE *pic, int ptype, int w, int h, const GIFBYTE *rmap, const GIFBYTE *gmap, - const GIFBYTE *bmap, const GIFBYTE *pc2ncmap, int numcols, int colorstyle, int BitsPerPixel); - -/* WRITEHDF.C */ -int WriteHDF(GIFTOMEM, GIFCHAR *); - -/* Function: ReadHDF -** Return: 0 on completion without error, -1 on error -** Input: GIFCHAR *h5_file - HDF file name -** GIFCHAR *dset_name - Name of the HDF Image dataset -** GIFCHAR *pal_name - Name of the HDF palette -** Output: GIFBYTE* data - the HDF Image to be converted -** GIFBYTE palette[256][3] - the corresponding palette -** hsize_t* image_size - the size of each dimension of the image -*/ -int ReadHDF(GIFBYTE **data, GIFBYTE palette[256][3], hsize_t *image_size, GIFCHAR *h5_file, - GIFCHAR *dset_name, GIFCHAR *pal_name); - -GIFBYTE *Decompress(GIFIMAGEDESC *, GIFHEAD *); -GIFBYTE GetByte(const GIFBYTE *); -GIFWORD GetWord(GIFBYTE *); - -void cleanup(GIFBYTE *); - -#endif /* GIF_H_ */ diff --git a/hl/tools/gif2h5/gif2hdf.c b/hl/tools/gif2h5/gif2hdf.c deleted file mode 100644 index 161761c7ee4..00000000000 --- a/hl/tools/gif2h5/gif2hdf.c +++ /dev/null @@ -1,152 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright by The HDF Group. * - * All rights reserved. * - * * - * This file is part of HDF5. The full HDF5 copyright notice, including * - * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * - * distribution tree, or in https://www.hdfgroup.org/licenses. * - * If you do not have access to either file, you may request a copy from * - * help@hdfgroup.org. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -#include -#include -#include - -#include "gif.h" -#include "h5tools.h" -#include "h5tools_utils.h" - -int -main(int argv, char *argc[]) -{ - GIFTOMEM GifMemoryStruct; - GIFIMAGEDESC gifImageDesc; - - FILE *fpGif; - - /* replacing int32 with long */ - long i, ImageCount; - HDoff_t filesize; - - GIFBYTE *MemGif; - GIFBYTE *StartPos; - - char *GIFFileName; - char *HDFFileName; - - /* - * Initialize all GifMemoryStruct pointers to null to prevent hassles - * later on - */ - GifMemoryStruct.GifHeader = NULL; - GifMemoryStruct.GifImageDesc = NULL; - GifMemoryStruct.GifGraphicControlExtension = NULL; - GifMemoryStruct.GifPlainTextExtension = NULL; - GifMemoryStruct.GifApplicationExtension = NULL; - GifMemoryStruct.GifCommentExtension = NULL; - - /* Initialize h5tools lib */ - h5tools_init(); - - if (argc[1] && (strcmp("-V", argc[1]) == 0)) { - print_version("gif2h5"); - exit(EXIT_SUCCESS); - } - - if (argv < 3) { - printf("Usage: gif2h5 \n"); - fprintf(stdout, " gif2h5 -V \n"); - fprintf(stdout, " Print HDF5 library version and exit\n"); - exit(EXIT_FAILURE); - } - - GIFFileName = argc[1]; - HDFFileName = argc[2]; - - if (!(fpGif = fopen(GIFFileName, "rb"))) { - printf("Unable to open GIF file for reading.\n"); - exit(EXIT_FAILURE); - } - - /* Get the whole file into memory. Mem's much faster than I/O */ - fseek(fpGif, 0L, 2); - filesize = HDftell(fpGif); - fseek(fpGif, 0L, 0); - - if (filesize == 0) - printf("File Size Zero"); - - if (!(MemGif = StartPos = (GIFBYTE *)malloc((size_t)filesize))) { - printf("Out of memory"); - exit(EXIT_FAILURE); - } - - if (fread(MemGif, (size_t)filesize, 1, fpGif) != 1) { - printf("Corrupted Input File"); - exit(EXIT_FAILURE); - } - - fseek(fpGif, 0L, 0); - - /* - * Call Gif2Mem and break the whole file into parts. Gif2Mem also calls - * decompresses the images so we don't have to worry about that - */ - Gif2Mem(MemGif, &GifMemoryStruct); - - if (ferror(fpGif)) { - printf("File Stream Error\n\n"); - exit(EXIT_FAILURE); - } - - fclose(fpGif); - - /* - * Call WriteHDF from here. Go ahead and change WriteHDF to write whatever - * format you want - */ - if (WriteHDF(GifMemoryStruct, HDFFileName)) - printf("HDF Write Error\n\n"); - - /* Free all buffers */ - /* replacing int32 with long */ - ImageCount = (long)((GifMemoryStruct.GifHeader)->ImageCount); - - for (i = 0; i < ImageCount; i++) { - gifImageDesc = *(GifMemoryStruct.GifImageDesc[i]); - - if (gifImageDesc.Image != NULL) - free(gifImageDesc.Image); - - if (GifMemoryStruct.GifImageDesc[i] != NULL) { - free(GifMemoryStruct.GifImageDesc[i]); - GifMemoryStruct.GifImageDesc[i] = NULL; - } - - if (GifMemoryStruct.GifGraphicControlExtension[i] != NULL) { - free(GifMemoryStruct.GifGraphicControlExtension[i]); - GifMemoryStruct.GifGraphicControlExtension[i] = NULL; - } - } - - free(StartPos); - if (GifMemoryStruct.GifHeader != NULL) { - free(GifMemoryStruct.GifHeader); - GifMemoryStruct.GifHeader = NULL; - } - if (GifMemoryStruct.GifApplicationExtension != NULL) { - free(GifMemoryStruct.GifApplicationExtension); - GifMemoryStruct.GifApplicationExtension = NULL; - } - if (GifMemoryStruct.GifImageDesc != NULL) { - free(GifMemoryStruct.GifImageDesc); - GifMemoryStruct.GifImageDesc = NULL; - } - if (GifMemoryStruct.GifGraphicControlExtension != NULL) { - free(GifMemoryStruct.GifGraphicControlExtension); - GifMemoryStruct.GifGraphicControlExtension = NULL; - } - - return EXIT_SUCCESS; -} diff --git a/hl/tools/gif2h5/gif2mem.c b/hl/tools/gif2h5/gif2mem.c deleted file mode 100644 index 1471bb7993a..00000000000 --- a/hl/tools/gif2h5/gif2mem.c +++ /dev/null @@ -1,330 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright by The HDF Group. * - * All rights reserved. * - * * - * This file is part of HDF5. The full HDF5 copyright notice, including * - * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * - * distribution tree, or in https://www.hdfgroup.org/licenses. * - * If you do not have access to either file, you may request a copy from * - * help@hdfgroup.org. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* - * This file contains snippets of code from James Murray's original file to - * display the GIF header information, but most of it has been modified to - * suit gif2hdf - */ - -/****************************************************************************\ -** Title: GIFHEAD.C ** -** Purpose: Display the data in a GIF image file. ** -** Version: 1.0 ** -** C Compilers: Borland C++ v2.0, Microsoft C v6.00a ** -** ** -** GIFHEAD displays all real information contained within a GIF image ** -** file, including all color tables and extension block information. ** -** GIFHEAD reads both GIF 87a abd 89a-format files. ** -** ** -** Copyright (C) 1991-92 by Graphics Software Labs. All rights reserved. ** -\****************************************************************************/ -#include - -#include "gif.h" - -int -Gif2Mem(GIFBYTE *MemGif, GIFTOMEM *GifMemoryStruct) -{ - /* - * The gif structure outline for passing data to memory is given in gif.h. - * These pointers are redundant, should take them out in ver. 2 - */ - GIFHEAD *gifHead; /* GIF Header structure */ - GIFIMAGEDESC **gifImageDesc; /* Logical Image Descriptor struct */ - GIFPLAINTEXT **gifPlainText; /* Plain Text Extension structure */ - GIFAPPLICATION **gifApplication; /* Application Extension structure */ - GIFCOMMENT **gifComment; /* Comment Extension structure */ - GIFGRAPHICCONTROL **gifGraphicControl; /* Graphic Control Extension strct */ - - GIFWORD i; /* Loop counter */ - GIFBYTE Identifier; /* Extension block identifier holder */ - GIFBYTE Label; /* Extension block label holder */ - GIFBYTE ImageCount; /* Count of the number of images in the file */ - GIFBYTE ImageArray; /* Keep the size of the array to store Images */ - GIFBYTE CommentCount; - GIFBYTE CommentArray; - GIFBYTE ApplicationCount; - GIFBYTE ApplicationArray; - GIFBYTE PlainTextCount; - GIFBYTE PlainTextArray; - GIFBYTE GCEflag; - GIFBYTE aTemp; - GIFBYTE j; - GIFBYTE w; /* Two more variables needed only while testing */ - GIFBYTE *b; /* Endian Ordering */ - - /* Allocate memory for the GIF structures */ - /* Plug the structs into GifMemoryStruct at the end */ - /****************************************************/ - if (!(gifHead = (GIFHEAD *)malloc(sizeof(GIFHEAD)))) { - printf("Could not allocate memory for gifHead\n"); - exit(EXIT_FAILURE); - } - - /* - * The next three have to grow dynamically so we leave them for now and - * let realloc handle it later on. - */ - gifImageDesc = NULL; - gifPlainText = NULL; - gifGraphicControl = NULL; - gifComment = NULL; - gifApplication = NULL; - - /******************************/ - /* Memory allocation complete */ - /******************************/ - - /* Carry out Endian Testing and set Endian Order */ - w = 0x0001; - b = (GIFBYTE *)&w; - EndianOrder = (b[0] ? 1 : 0); - - /* Read the GIF image file header information */ - ReadGifHeader(gifHead, &MemGif); - - /* Check for FILE stream error */ -#if 0 - if (ferror(fpGif)) - { - fputs("GIFHEAD: Error reading header information!\n", stderr); - exit(EXIT_FAILURE); - } -#endif /* 0 */ - - /* - * Identify, read, and display block information. - */ - ImageCount = ImageArray = 0; - CommentCount = CommentArray = 0; - ApplicationCount = ApplicationArray = 0; - PlainTextCount = PlainTextArray = 0; - GCEflag = 0; - - for (;;) { - Identifier = *MemGif++; - - switch (Identifier) { - case 0x3B: /* Trailer */ - /* - * The counts are stored to make it easier while putting stuff - * into the HDF file and then deallocating space. - */ - gifHead->ImageCount = ImageCount; - gifHead->CommentCount = CommentCount; - gifHead->ApplicationCount = ApplicationCount; - gifHead->PlainTextCount = PlainTextCount; - - /* putting stuff into the gif2mem structure */ - GifMemoryStruct->GifHeader = gifHead; - GifMemoryStruct->GifImageDesc = gifImageDesc; - GifMemoryStruct->GifPlainTextExtension = gifPlainText; - GifMemoryStruct->GifApplicationExtension = gifApplication; - GifMemoryStruct->GifCommentExtension = gifComment; - GifMemoryStruct->GifGraphicControlExtension = gifGraphicControl; - - /* return the struct */ - return 0; - - case 0x2C: /* Image Descriptor */ - /* - * If there was no image descriptor before this increase image - * count. If an imagedescriptor was present, reset GCEflag - */ - if (GCEflag == 0) - ImageCount++; - else - GCEflag = 0; - - if (ImageCount > ImageArray) { - aTemp = ImageArray; - ImageArray = (GIFBYTE)((ImageArray << 1) + 1); - if (!(gifImageDesc = - (GIFIMAGEDESC **)realloc(gifImageDesc, sizeof(GIFIMAGEDESC *) * ImageArray))) { - printf("Out of memory!"); - exit(EXIT_FAILURE); - } - - if (!(gifGraphicControl = (GIFGRAPHICCONTROL **)realloc( - gifGraphicControl, sizeof(GIFGRAPHICCONTROL *) * ImageArray))) { - printf("Out of memory!"); - exit(EXIT_FAILURE); - } - - for (j = aTemp; j < ImageArray; j++) { - gifGraphicControl[j] = NULL; - gifImageDesc[j] = NULL; - } - } - - if (!(gifImageDesc[ImageCount - 1] = (GIFIMAGEDESC *)malloc(sizeof(GIFIMAGEDESC)))) { - printf("Out of memory!"); - exit(EXIT_FAILURE); - } - - if (ReadGifImageDesc(gifImageDesc[ImageCount - 1], &MemGif) == -1) - fputs("Error reading Image Descriptor information\n", stderr); - - /* Decompress the Image */ - gifImageDesc[ImageCount - 1]->Image = Decompress(gifImageDesc[ImageCount - 1], gifHead); - free(gifImageDesc[ImageCount - 1]->GIFImage); - - /* - * Convert the local palette into an HDF compatible palette In - * case the local color table is present, it is written out as - * the HDFPalette If it is absent the global table is written - * as the HDFPalette. - */ - if (!((gifImageDesc[ImageCount - 1]->PackedField) & 0x80)) { - /* Check to see if the global color table exists.... */ - if (gifHead->PackedField & 0x80) { - for (i = 0; i < gifHead->TableSize; i++) { - gifImageDesc[ImageCount - 1]->HDFPalette[i][0] = gifHead->HDFPalette[i][0]; - gifImageDesc[ImageCount - 1]->HDFPalette[i][1] = gifHead->HDFPalette[i][1]; - gifImageDesc[ImageCount - 1]->HDFPalette[i][2] = gifHead->HDFPalette[i][2]; - } - } - - gifImageDesc[ImageCount - 1]->TableSize = gifHead->TableSize; - } - - break; - - case 0x21: /* Extension Block */ - Label = *MemGif++; - - switch (Label) { - case 0x01: /* Plain Text Extension */ - puts("Plain Text Extension\n"); - PlainTextCount++; - - if (PlainTextCount > PlainTextArray) - PlainTextArray = (GIFBYTE)((PlainTextArray << 1) + 1); - - if (!(gifPlainText = (GIFPLAINTEXT **)realloc(gifPlainText, sizeof(GIFPLAINTEXT *) * - PlainTextArray))) { - printf("Out of memory!"); - exit(EXIT_FAILURE); - } - - if (!(gifPlainText[PlainTextCount - 1] = - (GIFPLAINTEXT *)malloc(sizeof(GIFPLAINTEXT)))) { - printf("Out of memory!"); - exit(EXIT_FAILURE); - } - - if (ReadGifPlainText(gifPlainText[PlainTextCount - 1], &MemGif)) - fprintf(stderr, "Error reading Plain Text Extension information.\n"); - - break; - - case 0xFE: /* Comment Extension */ - CommentCount++; - - if (CommentCount > CommentArray) - CommentArray = (GIFBYTE)((CommentArray << 1) + 1); - - if (!(gifComment = - (GIFCOMMENT **)realloc(gifComment, sizeof(GIFCOMMENT *) * CommentArray))) { - printf("Out of memory!"); - exit(EXIT_FAILURE); - } - - if (!(gifComment[CommentCount - 1] = (GIFCOMMENT *)malloc(sizeof(GIFCOMMENT)))) { - printf("Out of memory!"); - exit(EXIT_FAILURE); - } - - if (ReadGifComment(gifComment[CommentCount - 1], &MemGif)) - fprintf(stderr, "Error reading Comment Extension information\n"); - - break; - - case 0xF9: /* Graphic Control Extension */ - if (GCEflag == 0) - ImageCount++; - - GCEflag = 1; - - if (ImageCount > ImageArray) { - aTemp = ImageArray; - ImageArray = (GIFBYTE)((ImageArray << 1) + 1); - - if (!(gifGraphicControl = (GIFGRAPHICCONTROL **)realloc( - gifGraphicControl, sizeof(GIFGRAPHICCONTROL *) * ImageArray))) { - printf("Out of memory!"); - exit(EXIT_FAILURE); - } - - if (!(gifImageDesc = (GIFIMAGEDESC **)realloc( - gifImageDesc, sizeof(GIFIMAGEDESC *) * ImageArray))) { - printf("Out of memory!"); - exit(EXIT_FAILURE); - } - - for (j = aTemp; j < ImageArray; j++) { - gifGraphicControl[j] = NULL; - gifImageDesc[j] = NULL; - } - } - - if (!(gifGraphicControl[ImageCount - 1] = - (GIFGRAPHICCONTROL *)malloc(sizeof(GIFGRAPHICCONTROL)))) { - printf("Out of memory!"); - exit(EXIT_FAILURE); - } - - if (ReadGifGraphicControl(gifGraphicControl[ImageCount - 1], &MemGif)) - fprintf(stderr, "Error reading Graphic Control Extension information\n"); - - (*MemGif)++; - if ((!*MemGif) == 0) - fprintf(stderr, "Error reading Graphic Control Extension\n"); - - break; - - case 0xFF: /* Application Extension */ - ApplicationCount++; - - if (ApplicationCount > ApplicationArray) - ApplicationArray = (GIFBYTE)((ApplicationArray << 1) + 1); - - if (!(gifApplication = (GIFAPPLICATION **)realloc( - gifApplication, sizeof(GIFAPPLICATION *) * ApplicationArray))) { - printf("Out of memory!"); - exit(EXIT_FAILURE); - } - - if (!(gifApplication[ApplicationCount - 1] = - (GIFAPPLICATION *)malloc(sizeof(GIFAPPLICATION)))) { - printf("Out of memory!"); - exit(EXIT_FAILURE); - } - - if (ReadGifApplication(gifApplication[ApplicationCount - 1], &MemGif)) - fprintf(stderr, "Error reading Application Extension information\n"); - - break; - - default: - printf("Unknown Extension Label: %#02x\n", Label); - break; - } - - break; - - default: - fprintf(stderr, "Unknown Block Separator Character: %#02x\n", Identifier); - } - } -} diff --git a/hl/tools/gif2h5/gifread.c b/hl/tools/gif2h5/gifread.c deleted file mode 100644 index 5fb1fd5428a..00000000000 --- a/hl/tools/gif2h5/gifread.c +++ /dev/null @@ -1,376 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright by The HDF Group. * - * All rights reserved. * - * * - * This file is part of HDF5. The full HDF5 copyright notice, including * - * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * - * distribution tree, or in https://www.hdfgroup.org/licenses. * - * If you do not have access to either file, you may request a copy from * - * help@hdfgroup.org. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -#include -#include - -#include "gif.h" - -int EndianOrder; - -static GIFBYTE *ReadDataSubBlocks(GIFBYTE **MemGif2, GIFWORD *DSize); - -GIFWORD -GetWord(GIFBYTE *MemGif) -{ - GIFWORD w; - - if (EndianOrder == 1) { - /* LittleEndian */ - w = (GIFWORD)(*MemGif++ & 0xFF); - w |= (GIFWORD)((*MemGif++ & 0xFF) << 0x08); - } - else { - w = (GIFWORD)(*MemGif++ & 0xFF); - w = ((GIFWORD)(*MemGif++ & 0xFF)) | (w << 0x08); - } - - return w; -} - -GIFBYTE -GetByte(const GIFBYTE *MemGif) -{ - return *MemGif; -} - -/* - * Read a GIF image GIFBYTE Header. - * - * This function reads the Header, Logical Screen Descriptor, and - * Global Color Table (if any) from a GIF image file. The information - * is stored in a GIFHEAD structure. - * - * Returns: -1 if a FILE stream error occurred during the read, - * otherwise 0 if no error occurred. - */ -int -ReadGifHeader(GIFHEAD *GifHead, /* Pointer to GIF header structure */ - GIFBYTE **MemGif2) /* GIF image file input FILE stream */ -{ - GIFWORD i; /* Loop counter */ - GIFWORD tableSize; /* Number of entries in the Global Color Table */ - - GifHead->TableSize = 0; - for (i = 0; i < 6; i++) { - GifHead->HeaderDump[i] = *(*MemGif2)++; - } - - if (strncmp((const char *)GifHead->HeaderDump, "GIF", (size_t)3) != 0) { - printf("The file does not appear to be a valid GIF file.\n"); - exit(EXIT_FAILURE); - } - - for (i = 0; i < 7; i++) { - GifHead->LSDDump[i] = *(*MemGif2)++; - } - - GifHead->PackedField = GifHead->LSDDump[4]; - - /* Check if a Global Color Table is present */ - if (GifHead->PackedField & 0x80) { - /* Read number of color table entries */ - tableSize = (GIFWORD)(1L << ((GifHead->PackedField & 0x07) + 1)); - GifHead->TableSize = tableSize; - - /* Read the Global Color Table */ - - /* - * There are some changes made here apart from just reading in the - * global color table as would seem intuitively obvious. The colors - * are stored in the bottom part of the palette as opposed to the top - */ - - for (i = 0; i < tableSize; i++) { - GifHead->HDFPalette[i][0] = *(*MemGif2)++; - GifHead->HDFPalette[i][1] = *(*MemGif2)++; - GifHead->HDFPalette[i][2] = *(*MemGif2)++; - } - } - - /* Check for a FILE stream error */ -#if 0 - if (ferror(FpGif)) - return -1; -#endif /* 0 */ - - return 0; /* No FILE stream error occurred */ -} - -/* -** Read a GIF Local Image Descriptor. -** -** This function reads the Local Image Descriptor, and Local Color -** Table (if any) from a GIF image file. The information is stored -** in a GIFIMAGEDESC structure. -** -** Note that the ImageSeparator field value in the GIFIMAGEDESC -** structure is assigned by the function calling ReadGifImageDesc(). -** -** Returns: -1 if a FILE stream error occurred during the read, -** otherwise 0 if no error occurred. -*/ -int -ReadGifImageDesc(GIFIMAGEDESC *GifImageDesc, /* Pointer to GIF image descriptor structure */ - GIFBYTE **MemGif2 /* GIF image file input FILE stream */ -) -{ - GIFWORD i; /* Loop counter */ - GIFWORD tableSize; /* Number of entries in the Local Color Table */ - /* GIFBYTE Interlace; */ /* PackedField & 0x20 gives information on interlacing */ - GIFBYTE *TempPtr; - int ch, ch1; - - GifImageDesc->TableSize = 0; - for (i = 0; i < 9; i++) { - GifImageDesc->GIDDump[i] = *(*MemGif2)++; - } - - /* - ** Get the relevant fields. I need ImageWidth and Height actively hence I have - ** taken information from those fields. I intend to keep the GifImageDesc data - ** structure as it is so that anyone needing the rest of the fields can do so - ** quickly. - */ - - if (EndianOrder == 1) /* LittleEndian */ - { - GifImageDesc->ImageWidth = (GIFWORD)(GifImageDesc->GIDDump[4] & 0xFF); - GifImageDesc->ImageWidth |= (GIFWORD)((GifImageDesc->GIDDump[5] & 0xFF) << 0x08); - - GifImageDesc->ImageHeight = (GIFWORD)(GifImageDesc->GIDDump[6] & 0xFF); - GifImageDesc->ImageHeight |= (GIFWORD)((GifImageDesc->GIDDump[7] & 0xFF) << 0x08); - } - else { - GifImageDesc->ImageWidth = (GIFWORD)(GifImageDesc->GIDDump[4] & 0xFF); - GifImageDesc->ImageWidth = - ((GIFWORD)(GifImageDesc->GIDDump[5] & 0xFF)) | (GifImageDesc->ImageWidth << 0x08); - - GifImageDesc->ImageHeight = (GIFWORD)(GifImageDesc->GIDDump[6] & 0xFF); - GifImageDesc->ImageHeight = - ((GIFWORD)(GifImageDesc->GIDDump[7] & 0xFF)) | (GifImageDesc->ImageWidth << 0x08); - } - - GifImageDesc->PackedField = GifImageDesc->GIDDump[8]; - - /* Interlace = GifImageDesc->PackedField & 0x20; */ - - /* Check if a Local Color Table is present */ - if (GifImageDesc->PackedField & 0x80) { - /* Read number of color table entries */ - tableSize = (GIFWORD)(1L << ((GifImageDesc->PackedField & 0x07) + 1)); - GifImageDesc->TableSize = tableSize; - /* Read the Local Color Table */ - for (i = 0; i < tableSize; i++) { - GifImageDesc->HDFPalette[i][0] = *(*MemGif2)++; - GifImageDesc->HDFPalette[i][1] = *(*MemGif2)++; - GifImageDesc->HDFPalette[i][2] = *(*MemGif2)++; - } - } - - /* - ** Get LZW minimum Code Size - */ - GifImageDesc->CodeSize = (GIFWORD) * (*MemGif2)++; - - /*GifImageDesc->GIFImage = ReadDataSubBlocks(FpGif);*/ - if (!(GifImageDesc->GIFImage = - (GIFBYTE *)malloc((GifImageDesc->ImageWidth) * (GifImageDesc->ImageHeight)))) { - printf("Out of memory"); - exit(EXIT_FAILURE); - } - - TempPtr = GifImageDesc->GIFImage; - do { - ch = ch1 = (int)*(*MemGif2)++; - while (ch--) - *TempPtr++ = *(*MemGif2)++; - } while (ch1); - - return (0); /* No FILE stream error occurred */ -} - -/* -** Read a GIF Graphic Control Extension block. -** -** Note that the Introducer and Label field values in the GIFGRAPHICCONTROL -** structure are assigned by the function calling ReadGifGraphicControl(). -** -** Returns: -1 if a FILE stream error occurred during the read, -** otherwise 0 if no error occurred. -*/ -int -ReadGifGraphicControl(GIFGRAPHICCONTROL *GifGraphicControl, /* Pointer to GC Extension structure */ - GIFBYTE **MemGif2 /* GIF image file input FILE stream */ -) -{ - int i; - - for (i = 0; i < 5; i++) { - GifGraphicControl->GCEDump[i] = *(*MemGif2)++; - } - - return (0); /* No FILE stream error occurred */ -} - -/* -** Read a GIF Plain Text Extension block. -** -** Note that the Introducer and Label field values in the GIFLPLAINTEXT -** structure are assigned by the function calling ReadGifPlainText(). -** -** Returns: -1 if a FILE stream error occurred during the read, -** otherwise 0 if no error occurred. -*/ -int -ReadGifPlainText(GIFPLAINTEXT *GifPlainText, /* Pointer to Plain Text Extension structure */ - GIFBYTE **MemGif2 /* GIF image file input FILE stream */ -) -{ - int i; - - for (i = 0; i < 13; i++) { - GifPlainText->PTEDump[i] = *(*MemGif2)++; - } - - /* Read in the Plain Text data sub-blocks */ - if (!(GifPlainText->PlainTextData = ReadDataSubBlocks(MemGif2, &(GifPlainText->DataSize)))) - return (1); - - /* - GifPlainText->Terminator = 0; - */ - - /* Check for a FILE stream error */ - /* - if (ferror(FpGif)) - return(-1); - */ - - return (0); /* No FILE stream error occurred */ -} - -/* -** Read a GIF Application Extension block. -** -** Note that the Introducer and Label field values in the GIFAPPLICATION -** structure are assigned by the function calling ReadGifApplication(). -** -** Returns: -1 if a FILE stream error occurred during the read, -** otherwise 0 if no error occurred. -*/ -int -ReadGifApplication(GIFAPPLICATION *GifApplication, /* Pointer to Application Extension structure */ - GIFBYTE **MemGif2 /* GIF image file input FILE stream */ -) -{ - int i; - - for (i = 0; i < 12; i++) { - GifApplication->AEDump[i] = *(*MemGif2)++; - } - - /* Read in the Plain Text data sub-blocks */ - if (!(GifApplication->ApplicationData = ReadDataSubBlocks(MemGif2, &(GifApplication->DataSize)))) - return (1); - /* - GifApplication->Terminator = 0; - */ - - /* Check for a FILE stream error */ - /* - if (ferror(FpGif)) - return(-1); - */ - - return (0); /* No FILE stream error occurred */ -} - -/* -** Read a GIF Comment Extension block. -** -** Note that the Introducer and Label field values in the GIFCOMMENT -** structure are assigned by the function calling ReadGifComment(). -** -** Returns: -1 if a FILE stream error occurred during the read, -** otherwise 0 if no error occurred. -*/ -int -ReadGifComment(GIFCOMMENT *GifComment, /* Pointer to GIF Comment Extension structure */ - GIFBYTE **MemGif2 /* GIF image file input FILE stream */ -) -{ - - /* Read in the Plain Text data sub-blocks */ - if (!(GifComment->CommentData = ReadDataSubBlocks(MemGif2, &(GifComment->DataSize)))) - return (1); - - GifComment->Terminator = 0; - - return (0); /* No FILE stream error occurred */ -} - -/* -** Read one or more GIF data sub-blocks and write the information -** to a buffer. -** -** A GIF "sub-block" is a single count byte followed by 1 to 255 -** additional data bytes. -** -** Returns: A NULL pointer if a memory allocation error occurred, -** otherwise a valid pointer if no error occurred. -*/ -static GIFBYTE * -ReadDataSubBlocks(GIFBYTE **MemGif2, /* GIF image file input FILE stream */ - GIFWORD *DSize) -{ - GIFBYTE *ptr1; /* Pointer used to "walk the heap" */ - GIFBYTE *ptr2; /* Pointer used to mark the top of the heap */ - GIFBYTE dataSize; /* Size of the current data sub-block being read */ - GIFWORD bufSize; /* Total size of the Plain Text data buffer */ - int tempcount = 0; - - bufSize = 0; /* The output buffer is empty */ - - dataSize = *(*MemGif2)++; /* Get the size of the first sub-block */ - - /* Allocate initial data buffer */ - if (!(ptr1 = ptr2 = (GIFBYTE *)malloc((size_t)dataSize + 1))) { - printf("Out of memory. Allocation of memory for data sub-blocks for\neither Comment, Plain Text or " - "Application Extensions failed"); - return ((GIFBYTE *)NULL); - } - for (;;) { - tempcount++; - bufSize += (dataSize); /* Running total of the buffer size */ - *DSize = bufSize; - -#ifdef COMMENTED_OUT - *ptr1++ = dataSize; /* Write the data count */ -#endif /* COMMENTED_OUT */ - while (dataSize--) /* Read/write the Plain Text data */ - *ptr1++ = *(*MemGif2)++; - - /* Check if there is another data sub-block */ - if ((dataSize = *(*MemGif2)++) == 0) - break; /* Block Terminator encountered */ - - /* Increase the buffer size to accommodate the next sub-block */ - if (!(ptr1 = ptr2 = (GIFBYTE *)realloc(ptr2, bufSize + dataSize + 1))) - return ((GIFBYTE *)NULL); - - ptr1 += bufSize; /* Move pointer to the end of the data */ - } - - *ptr1++ = '\0'; - - return (ptr2); /* Return a pointer to the sub-block data */ -} diff --git a/hl/tools/gif2h5/h52gifgentst.c b/hl/tools/gif2h5/h52gifgentst.c deleted file mode 100644 index 4851145ec45..00000000000 --- a/hl/tools/gif2h5/h52gifgentst.c +++ /dev/null @@ -1,99 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright by The HDF Group. * - * All rights reserved. * - * * - * This file is part of HDF5. The full HDF5 copyright notice, including * - * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * - * distribution tree, or in https://www.hdfgroup.org/licenses. * - * If you do not have access to either file, you may request a copy from * - * help@hdfgroup.org. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -#include -#include -#include -#include "hdf5.h" -#include "H5IMpublic.h" - -/*------------------------------------------------------------------------- - * Program: h52gifgentst - * - * Purpose: generate files for h52gif testing - * - *------------------------------------------------------------------------- - */ - -#define FILENAME "h52giftst.h5" -#define WIDTH 400 -#define HEIGHT 200 -#define PAL_ENTRIES 256 -#define IMAGE1_NAME "image" -#define PAL_NAME "palette" - -/*------------------------------------------------------------------------- - * Function: main - * - * Purpose: main program - * - *------------------------------------------------------------------------- - */ - -int -main(void) -{ - hid_t fid; - int i, j, n, space; - unsigned char *buf; - unsigned char pal[PAL_ENTRIES * 3]; /* palette array */ - hsize_t pal_dims[2] = {PAL_ENTRIES, 3}; /* palette dimensions */ - hsize_t width = WIDTH; - hsize_t height = HEIGHT; - - /* Allocate buffer */ - if (NULL == (buf = (unsigned char *)malloc(WIDTH * HEIGHT))) - return EXIT_FAILURE; - - /* create a file */ - if ((fid = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) - return EXIT_FAILURE; - - /* create an image */ - space = WIDTH * HEIGHT / PAL_ENTRIES; - for (i = 0, j = 0, n = 0; i < WIDTH * HEIGHT; i++, j++) { - buf[i] = (unsigned char)n; - if (j > space) { - n++; - j = 0; - } - } - - /* make the image */ - if (H5IMmake_image_8bit(fid, IMAGE1_NAME, width, height, buf) < 0) - return EXIT_FAILURE; - - /*------------------------------------------------------------------------- - * define a palette, blue to red tones - *------------------------------------------------------------------------- - */ - for (i = 0, n = 0; i < PAL_ENTRIES * 3; i += 3, n++) { - pal[i] = (unsigned char)n; /* red */ - pal[i + 1] = (unsigned char)0; /* green */ - pal[i + 2] = (unsigned char)(255 - n); /* blue */ - } - - /* make a palette */ - if (H5IMmake_palette(fid, PAL_NAME, pal_dims, pal) < 0) - return EXIT_FAILURE; - - /* attach the palette to the image */ - if (H5IMlink_palette(fid, IMAGE1_NAME, PAL_NAME) < 0) - return EXIT_FAILURE; - - if (H5Fclose(fid) < 0) - return EXIT_FAILURE; - - free(buf); - - return EXIT_SUCCESS; -} diff --git a/hl/tools/gif2h5/h52giftest.sh.in b/hl/tools/gif2h5/h52giftest.sh.in deleted file mode 100644 index bdc85c3f540..00000000000 --- a/hl/tools/gif2h5/h52giftest.sh.in +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/sh -# -# Copyright by The HDF Group. -# All rights reserved. -# -# This file is part of HDF5. The full HDF5 copyright notice, including -# terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code -# distribution tree, or in https://www.hdfgroup.org/licenses. -# If you do not have access to either file, you may request a copy from -# help@hdfgroup.org. -# -# HDF Utilities Test script - - -TESTFILE1="$srcdir/testfiles/h52giftst.h5" -TESTFILE2="$srcdir/testfiles/image1.gif" -TESTFILE3="$srcdir/testfiles/ex_image2.h5" - -# initialize errors variable -errors=0 - -TESTING() { - SPACES=" " - echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012' -} - - - -# Verify the test runs with success (return code is 0) -TOOLTEST() -{ - # for now, discard any error messages generated. - $RUNSERIAL $* > /dev/null 2>&1 - - RET=$? - if [ $RET = 0 ] ; then - echo " PASSED" - else - echo "*FAILED*" - errors="` expr $errors + 1 `"; - fi - -} - -# Verify the test runs with failure (return code is not 0) -# Use for testing if tool can handle error conditions like -# illegal input, bad arguments, exceeding limits, ... -TOOLTESTFAIL() -{ - # for now, discard any error messages generated. - $RUNSERIAL $* > /dev/null 2>&1 - - RET=$? - if [ $RET != 0 ] ; then - echo " PASSED" - else - echo "*FAILED*" - errors="` expr $errors + 1 `"; - fi -} - - -# Positive tests for gif2h5 -echo "**validate the gif2h5 tool processes input correctly..." -TESTING "./gif2h5 image1.gif image1.h5" -TOOLTEST ./gif2h5 $TESTFILE2 image1.h5 -echo "" - -# Positive tests for h52gif -echo "**validate the h52gif tool processes input correctly..." -TESTING "./h52gif h52giftst.h5 image1.gif -i image" -TOOLTEST ./h52gif $TESTFILE1 image1.gif -i image -echo "" - -# Negative tests. -echo "**verify that the h52gif tool handles error conditions correctly..." -# nonexisting dataset name -TESTING "./h52gif h52giftst.h5 image.gif -i nosuch_image" -TOOLTESTFAIL "./h52gif $TESTFILE1 image.gif -i nosuch_image" -# this test should have failed but it did not. Comment it out for now. -#TESTING "./h52gif h52giftst.h5 image.gif -i palette" -#TOOLTESTFAIL "./h52gif $TESTFILE1 image.gif -i palette" -TESTING "./h52gif h52giftst.h5 image24.gif -i image24bitpixel" -TOOLTESTFAIL "./h52gif $TESTFILE3 image24.gif -i image24bitpixel" -echo "" - -# all done. summarize results. -if test $errors -eq 0 ; then - echo "All gif2h5 and h52gif tests passed." - exit 0 -else - echo "Some gif2h5 or h52gif tests failed with $errors errors." - exit 1 -fi diff --git a/hl/tools/gif2h5/hdf2gif.c b/hl/tools/gif2h5/hdf2gif.c deleted file mode 100644 index 120e42e294c..00000000000 --- a/hl/tools/gif2h5/hdf2gif.c +++ /dev/null @@ -1,334 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright by The HDF Group. * - * All rights reserved. * - * * - * This file is part of HDF5. The full HDF5 copyright notice, including * - * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * - * distribution tree, or in https://www.hdfgroup.org/licenses. * - * If you do not have access to either file, you may request a copy from * - * help@hdfgroup.org. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -#include -#include -#include "gif.h" -#include "H5IMpublic.h" -#include "h5tools.h" -#include "h5tools_utils.h" - -/* Name of tool */ -#define PROGRAMNAME "hdf2gif" - -#define IMAGE_WIDTH_MAX 65535 /* unsigned 16bits integer */ -#define IMAGE_HEIGHT_MAX 65535 /* unsigned 16bits integer */ - -int EndianOrder; - -static void -putword(int w, FILE *fp) -{ - /* writes a 16-bit integer in GIF order (LSB first) */ - fputc(w & 0xff, fp); - fputc((w >> 8) & 0xff, fp); -} - -static void -usage(void) -{ - printf("Usage: h52gif -i \n"); - fprintf(stdout, " h52gif -V \n"); - fprintf(stdout, " Print HDF5 library version and exit\n"); - printf("h52gif expects *at least* one h5_image.\n"); -} - -static void -leave(int ret) -{ - h5tools_close(); - exit(ret); -} - -static FILE *fpGif = NULL; -int -main(int argc, char **argv) -{ - GIFBYTE *Image; - - /* compression structs */ - GIFCHAR *HDFName = NULL; - GIFCHAR *GIFName = NULL; - - GIFBYTE *b; - - GIFBYTE GlobalPalette[256][3]; - GIFBYTE Red[256]; - GIFBYTE Green[256]; - GIFBYTE Blue[256]; - - int RWidth, RHeight; - int ColorMapSize, InitCodeSize, Background, BitsPerPixel; - int j, nc; - int i; - int numcols = 0; - - GIFBYTE pc2nc[256], r1[256], g1[256], b1[256]; - - int arg_index = 2; - int bool_is_image = 0; /* 0 = false , 1 = true */ - char *image_name = NULL; - int idx; - - h5tools_setprogname(PROGRAMNAME); - h5tools_setstatus(EXIT_SUCCESS); - - /* Initialize h5tools lib */ - h5tools_init(); - - if (argv[1] && (strcmp("-V", argv[1]) == 0)) { - print_version("gif2h5"); - h5tools_setstatus(EXIT_SUCCESS); - } - - if (argc < 4) { - /* they didn't supply at least one image -- bail */ - usage(); - h5tools_setstatus(EXIT_FAILURE); - } - - HDFName = argv[1]; - GIFName = argv[2]; - - /* get the options */ - while (arg_index++ < argc - 1) { - if (!strcmp(argv[arg_index], "-i")) { - bool_is_image = 1; - continue; - } - - if (bool_is_image) { - /* allocate space to store the image name */ - size_t len = strlen(argv[arg_index]); - image_name = (GIFCHAR *)malloc(len + 1); - strcpy(image_name, argv[arg_index]); - - bool_is_image = 0; - continue; - } - - /* oops. This was not meant to happen */ - usage(); - - goto out; - } - - /* Do Endian Order testing and set Endian Order */ - idx = 0x0001; - b = (GIFBYTE *)&idx; - EndianOrder = (b[0] ? 1 : 0); - - if (!(fpGif = fopen(GIFName, "wb"))) { - printf("Error opening gif file for output. Aborting.\n"); - goto out; - } - - Background = 0; - { - hsize_t width, height, planes; - hid_t fid; - char interlace[20]; - hssize_t npals; - hsize_t pal_dims[2]; - unsigned char *pal; - - if ((fid = H5Fopen(HDFName, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) { - fprintf(stderr, "Unable to open HDF file for input. Aborting.\n"); - goto out; - } - - /* get image's information */ - if (H5IMget_image_info(fid, image_name, &width, &height, &planes, interlace, &npals) < 0) { - fprintf(stderr, "Unable to get information of the image. Aborting.\n"); - goto out; - } - - if (width > IMAGE_WIDTH_MAX || height > IMAGE_HEIGHT_MAX) { - fprintf(stderr, "HDF5 image is too large. Limit is %d by %d.\n", IMAGE_WIDTH_MAX, - IMAGE_HEIGHT_MAX); - goto out; - } - - /* tool can handle single plane images only. */ - if (planes > 1) { - fprintf(stderr, "Cannot handle multiple planes image\n"); - goto out; - } - - Image = (GIFBYTE *)malloc((size_t)width * (size_t)height); - - if (H5IMread_image(fid, image_name, Image) < 0) { - fprintf(stderr, "Unable to read the image. Aborting.\n"); - goto out; - } - - if (npals) { - if (H5IMget_palette_info(fid, image_name, 0, pal_dims) < 0) { - fprintf(stderr, "Unable to get information of the palette. Aborting.\n"); - goto out; - } - - pal = (GIFBYTE *)malloc((size_t)pal_dims[0] * (size_t)pal_dims[1]); - - if (H5IMget_palette(fid, image_name, 0, pal) < 0) - goto out; - - numcols = (int)pal_dims[0]; - - for (i = 0, j = 0; i < numcols; j += 3, i++) { - GlobalPalette[i][0] = pal[j]; - GlobalPalette[i][1] = pal[j + 1]; - GlobalPalette[i][2] = pal[j + 2]; - } - - free(pal); - } - - H5Fclose(fid); - - RWidth = (int)width; - RHeight = (int)height; - - /* - * If the first image does not have a palette, I make my own global - * color table Obviously this is not the best thing to do, better - * steps would be: - * - * 1. Check for either a global palette or a global attribute called - * palette - * 2. Check for palettes in any of the other images. - */ - if (!npals) { - numcols = 256; - for (i = 0; i < numcols; i++) { - Red[i] = (GIFBYTE)(255 - i); - Green[i] = (GIFBYTE)(255 - i); - Blue[i] = (GIFBYTE)(255 - i); - } - } - else { - for (i = 0; i < numcols; i++) { - Red[i] = GlobalPalette[i][0]; - Green[i] = GlobalPalette[i][1]; - Blue[i] = GlobalPalette[i][2]; - } - } - - for (i = 0; i < numcols; i++) { - pc2nc[i] = r1[i] = g1[i] = b1[i] = 0; - } - - /* compute number of unique colors */ - nc = 0; - - for (i = 0; i < numcols; i++) { - /* see if color #i is already used */ - for (j = 0; j < i; j++) { - if (Red[i] == Red[j] && Green[i] == Green[j] && Blue[i] == Blue[j]) - break; - } - - if (j == i) { - /* wasn't found */ - pc2nc[i] = (GIFBYTE)nc; - r1[nc] = Red[i]; - g1[nc] = Green[i]; - b1[nc] = Blue[i]; - nc++; - } - else { - pc2nc[i] = pc2nc[j]; - } - } - - /* figure out 'BitsPerPixel' */ - for (i = 1; i < 8; i++) { - if ((1 << i) >= nc) - break; - } - - BitsPerPixel = i; - ColorMapSize = 1 << BitsPerPixel; - - if (BitsPerPixel <= 1) - InitCodeSize = 2; - else - InitCodeSize = BitsPerPixel; - - if (!fpGif) { - fprintf(stderr, "WriteGIF: file not open for writing\n"); - goto out; - } - - fwrite("GIF87a", sizeof(char), 6, fpGif); /* the GIF magic number */ - - putword(RWidth, fpGif); /* screen descriptor */ - putword(RHeight, fpGif); - - i = 0x00; /* No, there is no color map */ - i |= (8 - 1) << 4; /* OR in the color resolution (hardwired 8) */ - i |= (BitsPerPixel - 1); /* OR in the # of bits per pixel */ - fputc(i, fpGif); - - fputc(Background, fpGif); /* background color */ - fputc(0, fpGif); /* future expansion byte */ - - /* - * Put Image Descriptor - * Hardwiring Left Offset and Top Offset to 0x00 - */ - fputc(0x2c, fpGif); - putword(0x00, fpGif); - putword(0x00, fpGif); - putword(RWidth, fpGif); - putword(RHeight, fpGif); - - /* since we always have a local color palette ... */ - fputc((0x80 | (BitsPerPixel - 1)), fpGif); - - for (i = 0; i < ColorMapSize; i++) { - /* write out Global colormap */ - fputc(r1[i], fpGif); - fputc(g1[i], fpGif); - fputc(b1[i], fpGif); - } - - fputc(InitCodeSize, fpGif); - - i = hdfWriteGIF(fpGif, Image, 0, RHeight, RWidth, r1, g1, b1, pc2nc, 256, 8, BitsPerPixel); - fputc(0x00, fpGif); - free(Image); - } - - if (fputc(';', fpGif) == EOF) { - /* Write GIF file terminator */ - fprintf(stderr, "Error!"); - goto out; - } - - if (fpGif != NULL) - fclose(fpGif); - if (image_name != NULL) - free(image_name); - - leave(h5tools_getstatus()); - -out: - - if (fpGif != NULL) - fclose(fpGif); - if (image_name != NULL) - free(image_name); - - h5tools_setstatus(EXIT_FAILURE); - leave(h5tools_getstatus()); -} diff --git a/hl/tools/gif2h5/hdfgifwr.c b/hl/tools/gif2h5/hdfgifwr.c deleted file mode 100644 index 95f75d5d85e..00000000000 --- a/hl/tools/gif2h5/hdfgifwr.c +++ /dev/null @@ -1,463 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright by The HDF Group. * - * All rights reserved. * - * * - * This file is part of HDF5. The full HDF5 copyright notice, including * - * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * - * distribution tree, or in https://www.hdfgroup.org/licenses. * - * If you do not have access to either file, you may request a copy from * - * help@hdfgroup.org. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* - * hdfgifwr.c - handles writing of GIF files. - * - * Contains: - * hdfWriteGIF(fp, pic, ptype, w, h, rmap, gmap, bmap, numcols, colorstyle, - * comment) - * - * Note: slightly brain-damaged, in that it'll only write non-interlaced - * GIF files (in the interests of speed, or something) - */ - -/***************************************************************** - * Portions of this code Copyright (C) 1989 by Michael Mauldin. - * Permission is granted to use this file in whole or in - * part for any purpose, educational, recreational or commercial, - * provided that this copyright notice is retained unchanged. - * This software is available to all free of charge by anonymous - * FTP and in the UUNET archives. - * - * - * Authors: Michael Mauldin (mlm@cs.cmu.edu) - * David Rowley (mgardi@watdcsu.waterloo.edu) - * - * Based on: compress.c - File compression ala IEEE Computer, June 1984. - * - * Spencer W. Thomas (decvax!harpo!utah-cs!utah-gr!thomas) - * Jim McKie (decvax!mcvax!jim) - * Steve Davies (decvax!vax135!petsd!peora!srd) - * Ken Turkowski (decvax!decwrl!turtlevax!ken) - * James A. Woods (decvax!ihnp4!ames!jaw) - * Joe Orost (decvax!vax135!petsd!joe) - *****************************************************************/ - -#include -#include -#include - -#include "gif.h" - -typedef GIFBYTE byte; -typedef long int count_int; - -#ifdef __STDC__ -static void compress(int, FILE *, byte *, int); -static void output(int); -static void cl_block(void); -static void cl_hash(count_int); -static void char_init(void); -static void char_out(int); -static void flush_char(void); -#else -static void compress(), output(), cl_block(), cl_hash(); -static void char_init(), char_out(), flush_char(); -#endif /* __STDC__ */ - -static byte pc2nc[256]; - -/***********************************************************************/ -static unsigned long cur_accum = 0; -static int cur_bits = 0; - -#define MAXCODE(n_bits) ((1 << (n_bits)) - 1) -#define XV_BITS 12 /* BITS was already defined on some systems */ -#define HSIZE 5003 /* 80% occupancy */ - -typedef unsigned char char_type; - -static int n_bits; /* number of bits/code */ -static int maxbits = XV_BITS; /* user settable max # bits/code */ -static int maxcode; /* maximum code, given n_bits */ -static int maxmaxcode = 1 << XV_BITS; /* NEVER generate this */ - -static count_int *htab; -static unsigned short *codetab; - -#define HashTabOf(i) htab[i] -#define CodeTabOf(i) codetab[i] - -static int hsize = HSIZE; /* for dynamic table sizing */ - -/* - * To save much memory, we overlay the table used by compress() with those - * used by decompress(). The tab_prefix table is the same size and type as - * the codetab. The tab_suffix table needs 2**BITS characters. We get this - * from the beginning of htab. The output stack uses the rest of htab, and - * contains characters. There is plenty of room for any possible stack (stack - * used to be 8000 characters). - */ - -static int free_ent = 0; /* first unused entry */ - -/* - * block compression parameters -- after all codes are used up, - * and compression rate changes, start over. - */ -static int clear_flg = 0; - -static long int in_count = 1; /* length of input */ -static long int out_count = 0; /* # of codes output (for debugging) */ - -/* - * compress stdin to stdout - * - * Algorithm: use open addressing double hashing (no chaining) on the prefix - * code / next character combination. We do a variant of Knuth's algorithm D - * (vol. 3, sec. 6.4) along with G. Knott's relatively-prime secondary probe. - * Here, the modular division first probe is gives way to a faster - * exclusive-or manipulation. Also do block compression with an adaptive - * reset, whereby the code table is cleared when the compression ratio - * decreases, but after the table fills. The variable-length output codes are - * re-sized at this point, and a special CLEAR code is generated for the - * decompressor. Late addition: construct the table according to file size - * for noticeable speed improvement on small files. Please direct questions - * about this implementation to ames!jaw. - */ - -static int g_init_bits; -static FILE *g_outfile; - -static int ClearCode; -static int EOFCode; - -/*************************************************************/ -int -hdfWriteGIF(FILE *fp, byte *pic, int ptype, int w, int h, const byte *rmap, const byte *gmap, - const byte *bmap, const byte *pc2ncmap, int numcols, int colorstyle, int BitsPerPixel) -{ - int InitCodeSize; - int i; - byte *pic8 = pic; - - if (!(htab = calloc(HSIZE, sizeof(count_int)))) { - fprintf(stderr, "Out of memory"); - return 1; - } - if (!(codetab = calloc(HSIZE, sizeof(unsigned short)))) { - fprintf(stderr, "Out of memory"); - return 1; - } - - /* Shut compiler up... */ - (void)ptype; - (void)rmap; - (void)gmap; - (void)bmap; - (void)numcols; - (void)colorstyle; - - for (i = 0; i < 256; i++) { - pc2nc[i] = pc2ncmap[i]; - } - - if (BitsPerPixel <= 1) - InitCodeSize = 2; - else - InitCodeSize = BitsPerPixel; - - if (!fp) { - fprintf(stderr, "WriteGIF: file not open for writing\n"); - return 1; - } - - compress(InitCodeSize + 1, fp, pic8, w * h); - - free(htab); - free(codetab); - - if (ferror(fp)) - return -1; - - return 0; -} - -/********************************************************/ -static void -compress(int init_bits, FILE *outfile, byte *data, int len) -{ - long fcode; - int i = 0; - int c; - int ent; - int disp; - int hsize_reg; - int hshift; - - /* - * Set up the globals: g_init_bits - initial number of bits g_outfile - - * pointer to output file - */ - g_init_bits = init_bits; - g_outfile = outfile; - - /* initialize 'compress' globals */ - maxbits = XV_BITS; - maxmaxcode = 1 << XV_BITS; - hsize = HSIZE; - free_ent = 0; - clear_flg = 0; - in_count = 1; - out_count = 0; - cur_accum = 0; - cur_bits = 0; - - /* Set up the necessary values */ - out_count = 0; - clear_flg = 0; - in_count = 1; - maxcode = MAXCODE(n_bits = g_init_bits); - - ClearCode = (1 << (init_bits - 1)); - EOFCode = ClearCode + 1; - free_ent = ClearCode + 2; - - char_init(); - ent = pc2nc[*data++]; - len--; - - hshift = 0; - for (fcode = (long)hsize; fcode < 65536L; fcode *= 2L) - hshift++; - - hshift = 8 - hshift; /* set hash code range bound */ - - hsize_reg = hsize; - cl_hash((count_int)hsize_reg); /* clear hash table */ - - output(ClearCode); - - while (len) { - c = pc2nc[*data++]; - len--; - in_count++; - - fcode = (long)(((long)c << maxbits) + ent); - i = (((int)c << hshift) ^ ent); /* xor hashing */ - - if (HashTabOf(i) == fcode) { - ent = CodeTabOf(i); - continue; - } - else if ((long)HashTabOf(i) < 0) { - /* empty slot */ - goto nomatch; - } - - disp = hsize_reg - i; /* secondary hash (after G. Knott) */ - - if (i == 0) - disp = 1; - -probe: - if ((i -= disp) < 0) - i += hsize_reg; - - if (HashTabOf(i) == fcode) { - ent = CodeTabOf(i); - continue; - } - - if ((long)HashTabOf(i) >= 0) - goto probe; - -nomatch: - output(ent); - out_count++; - ent = c; - - if (free_ent < maxmaxcode) { - CodeTabOf(i) = (unsigned short)free_ent++; /* code -> hashtable */ - HashTabOf(i) = fcode; - } - else { - cl_block(); - } - } - - /* Put out the final code */ - output(ent); - out_count++; - output(EOFCode); -} - -/***************************************************************** - * TAG( output ) - * - * Output the given code. - * Inputs: - * code: A n_bits-bit integer. If == -1, then EOF. This assumes - * that n_bits =< (long)wordsize - 1. - * Outputs: - * Outputs code to the file. - * Assumptions: - * Chars are 8 bits long. - * Algorithm: - * Maintain a BITS character long buffer (so that 8 codes will - * fit in it exactly). Use the VAX insv instruction to insert each - * code in turn. When the buffer fills up empty it and start over. - */ - -static unsigned long masks[] = {0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, - 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF}; - -static void -output(int code) -{ - cur_accum &= masks[cur_bits]; - - if (cur_bits > 0) - cur_accum |= (unsigned long)((long)code << cur_bits); - else - cur_accum = (unsigned long)code; - - cur_bits += n_bits; - - while (cur_bits >= 8) { - char_out((int)((unsigned int)cur_accum & 0xff)); - cur_accum >>= 8; - cur_bits -= 8; - } - - /* - * If the next entry is going to be too big for the code size, then - * increase it, if possible. - */ - if (free_ent > maxcode || clear_flg) { - if (clear_flg) { - maxcode = MAXCODE(n_bits = g_init_bits); - clear_flg = 0; - } - else { - n_bits++; - - if (n_bits == maxbits) - maxcode = maxmaxcode; - else - maxcode = MAXCODE(n_bits); - } - } - - if (code == EOFCode) { - /* At EOF, write the rest of the buffer */ - while (cur_bits > 0) { - char_out((int)((unsigned int)cur_accum & 0xff)); - cur_accum >>= 8; - cur_bits -= 8; - } - - flush_char(); - fflush(g_outfile); - -#ifdef FOO - if (ferror(g_outfile)) - FatalError("unable to write GIF file"); -#endif - } -} - -/********************************/ -static void -cl_block(void) /* table clear for block compress */ -{ - /* Clear out the hash table */ - cl_hash((count_int)hsize); - free_ent = ClearCode + 2; - clear_flg = 1; - output(ClearCode); -} - -/********************************/ -static void -cl_hash(count_int hashsize) /* reset code table */ -{ - count_int *htab_p = htab + hashsize; - long i, m1 = -1; - - i = hashsize - 16; - - do { /* might use Sys V memset(3) here */ - *(htab_p - 16) = m1; - *(htab_p - 15) = m1; - *(htab_p - 14) = m1; - *(htab_p - 13) = m1; - *(htab_p - 12) = m1; - *(htab_p - 11) = m1; - *(htab_p - 10) = m1; - *(htab_p - 9) = m1; - *(htab_p - 8) = m1; - *(htab_p - 7) = m1; - *(htab_p - 6) = m1; - *(htab_p - 5) = m1; - *(htab_p - 4) = m1; - *(htab_p - 3) = m1; - *(htab_p - 2) = m1; - *(htab_p - 1) = m1; - htab_p -= 16; - } while ((i -= 16) >= 0); - - for (i += 16; i > 0; i--) - *--htab_p = m1; -} - -/****************************************************************************** - * - * GIF Specific routines - * - ******************************************************************************/ - -/* - * Number of characters so far in this 'packet' - */ -static int a_count; - -/* - * Set up the 'byte output' routine - */ -static void -char_init(void) -{ - a_count = 0; -} - -/* - * Define the storage for the packet accumulator - */ -static char accum[256]; - -/* - * Add a character to the end of the current packet, and if it is 254 - * characters, flush the packet to disk. - */ -static void -char_out(int c) -{ - accum[a_count++] = (char)c; - - if (a_count >= 254) - flush_char(); -} - -/* - * Flush the packet to disk, and reset the accumulator - */ -static void -flush_char(void) -{ - if (a_count > 0) { - fputc(a_count, g_outfile); - fwrite(accum, (size_t)1, (size_t)a_count, g_outfile); - a_count = 0; - } -} diff --git a/hl/tools/gif2h5/testfiles/README b/hl/tools/gif2h5/testfiles/README deleted file mode 100644 index a428d479e66..00000000000 --- a/hl/tools/gif2h5/testfiles/README +++ /dev/null @@ -1,6 +0,0 @@ -ex_image2.h5 - Generated by hl/examples/ex_image2.c -5giftst.h5: - Generated by ../h52gifgentst.c -image1.gif: - To be determined. diff --git a/hl/tools/gif2h5/testfiles/ex_image2.h5 b/hl/tools/gif2h5/testfiles/ex_image2.h5 deleted file mode 100644 index a36df1b480f1f8e307b8996d56c1e3aa32c90079..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224533 zcmeFa2UOHqw*T90wzY#f+vZ5lITTe;fubmi3P6!5GANh>A}WX|B4Sn~qY{*yK@mj7 z9J*WEZtXBLcV_PUum7FlCGiWbG^xA#6fopTNd z`R*ToH20$qXiS*!!I%#|V|NFB{D1l}BVjaqYT)s}>mm9(AL?&2^|u#Cad$rafd2d7 zgW3A$r|3Wb?f3cm2m~MCodcggaI61kADE2c?hSm-!1E)w{~82@0#|SPOEvmG*F=AN zOD|{ohabcwghuIX!eTb+pI9FnuiLm$$31Umffv@tY}LgxnWVR@8u*95aQop0lezcm z1^h$(zxZ$z_rwwX^9K6cw;z9|m-nq>xnD5w{l|VVfqm|%QQQYjfQHaVjQ%iW0{6~q zPxT+k9!|ykY0z_1PH*s8FTeBkEks!-syY50Gf{(ZRlKqPhbfMVgV;D~+r z!6)qf?D=4oz(*mHdEs^Xccfwizthyn43B8&zYh1{1BI82|KSItKUk!HylTAu&M({y z{Od)W`S^u*y|xbz^_+h3jsKgxFd!G-(Z#|LayPh6HtgPqAACCGIw_Pq{RO7$^a=hS zxK7-46nXIl8Udd@&&k!m8{U@Jf#(M=hyH^G9*>5+(o-}Ga4&IJ@R#Lv(YJ4X1peg* zAN&@1rQe|cj1RnBJq5nLf+6xcnQ_4LL!@>1^7>1E&ujf5?U^w6duQRh4E;U>^7!Eg zA93GN|3yC>xK5+FCyvt}jqxLQ0}bKEFFikS{Zrz(cb?L}|5rGF$Ni?jLj$bnpZpfi z@76BpzwqC=`EX>65EvmaLSTfz2!Rm-BLqeWj1U+hFhXF2zzBg60wV-Q2#gRIAuvK< zgun=a5dtFwMhJ`$7$Go1V1&R3fe`{D1V#vq5EvmaLSTfz2!Rm-BLqeWj1U+hFhXF2 zzzBg60wV-Q2#gRIAuvKdPtCQleU>Ua4?{~P=gM~jtnJ{qAltScF) zlDe9FHf~t&{a1fed~9^M#$?un5z+ell8_J=8ygemFn8?Vf9t>eJK|!Zqhn$sM9W9i z@bAh(JYy9dC|EH1@4ok6{S65*QBl#cu~B~ZlgIq4v-o>||2oDhE;d57V8nI!JFt>s zB6X25aq+Pc*3(Dq`>(^=5ErS7&_&0^$7$AlI^sC|Dy+>3Q4!%0kumY{;m!-k|LR-+ zd#uj~_Q?G)`>!eaDuhSYj0! z9UmX;y70fFlQnAem~rDLPWt$>snci9o;z>e{Q2|d%$_;@vyUfD7&rQN#kFNaLS$$} zRCIJ~e3Z=Szn{edsEL!O%$T!q$tnXA3u`+EM<*u-I~xm=)k_!5nmTFxnBS4shU9gz z;i2%bV&h^1To;c2Z={8zMvt5L@$|WiSDV`N#NO(lu*lei^-0MaHf%^I0pg_DO&9UKuImzcC+ z)0VB>w`?%4O(GaLGU2H;pe4I{cGw+je{~chB z9{16wGZ(M5bP+29!=n?1VA{1Sb@%QxHd0fzZ-@=?bvIi+=d+2w$F~j+)kVif;QJ)T z$46`3R?PaZ4|Sk>lc&yGX5uVS21g|(ZQQhZ%hs*iwr$_OeFq5@(Mn6(vuDrVy?fG9 zwK3#@3Q?cN$6AhP^?>PPQA?C|ps3<-~k2-795ON`ek`Buwk{Fi#9 zqbGhgcZG#m6OoV%P$0Ew(}pBm$N2d8goMPzb!6O0(zfl`xodYC!P>WXPwLiqh11%( zpSid`GUlOY^6FyzA#!jSxm?v+<*pQSM9~T=F z6N70wj$jS4+6q`HptWc3zJ2@lrtR9GQ#c#UnDk!fM7730Fgz++7aAUy5Fe!#yV@Fm zKJmW@*60bJ&RJnE)`Z8AV*qhVh>MAe#E6QHiH%PnPJ=oL^Yt25dV2bvok`(x%O%r4 zdXH10TCLH-6^#lH)J4bW0wp{LD}$;3C62?WF_UI4HRtQ_h+Q1#QWMUp7h>qyuW`ya5QW}bYy@^<>#mHaCWdW`7fv#j{SJ9 zfjB6RNF}e2j|d403=9rI@RhhJB|ZD(`O-_5>l&L|+uAYOTAQ2dYpO1m7MwYjb1*X< z1`C39_r&P)(e^!d|Y6 zU!RtGrLn%I`ci4( z*%LX34(unnVz5#-`8h6|@_s}sBosb73STiXx?r`p)KlW&=4`)q*6-^#jF~vkSfGho zpOloe4y3gH0otIjsN@|Pxo0n2u5anM*4@+7OQWZUU|qX*wF|UJylO93lml08c2;I4 zM{Dn<5D$Zy?`1v=k06(wrsZf|u*y>?^bqiz%oa}iJz@sEl#PP^S$l=VuTNUPEw>W%ZTXy84F3#>R&Fy1JU`isG}!bM&+_ z(l%<1XT68;BPu37F)>OP83k5RVQP22n;Xy7Va@d4&tQ$8Wh{w6vL$IPDB1k#n%dghnk$#9E|#1- zs#nE*yQBHbKY8bp6&(|o09J5fqDcwe-FQ5ntE0iJ-;33#@$;-?p>gY>embpMsZ{xg zuit&7^h$FF(>(^Nq54AM>D>Lhw{J*{3J=!$LG;v`09dqmnk0`GlvPw;z6^o8P;}-P ze2GkW4?Ckh4c~eE5k;)1?iC#!85-d0!E?oMGMfECrjBc5rFy!rwl&pUDn5BQedmVg&;X^kr^rJ!lF(1FbT>8b0LE2q9&STIxwOR1?LI#B8D?Imy}R))Wm4o;Y3 zp^8OBye>+slzaQA!;<$GU1`1AL+1SY)pp3#xg-0w#s$blh$n2Ut*vNSvtfe)Yy^xa z^wzFV%Q;t8QCV4WspM>4HehA!*)Cf%<(--mgj-S3=qrkg4+Sc@x5y2w9M?>H=Z5ho z>W3#LE_TrZRbre@?IV-<1Sal1UD?J+^>lZ&H&hj$%-Rwi;O*{cXKiK427@&e*8nfR zr(evD+=B9oic1$t^N%sn+8Jaw_gzX>csMGlBwGmqKHl)#g>JA{w#z>G9sH|N<34xM zL?P1>6XqwE$$SGhX60XQy-ssqH_24#$*djm{$2v-K~jWEPwNfof;u|72s~A>I}e^N zy?F6rS>cHz2Q&BY-4f(9_Z>=BSXgLicm!E^joe!<_i~4Ecd=ObJM@8!8b8BPt&8JO zNoC5Aq{GFv?bn$z)!9;asUSNgF~mpUWM^$@L4y;l!Jiy6sN)b_^zx6{e()S|)81XuBrG%}I3z3r!Mwi@P>K0GSDv%M%y%ieKc{_oZrn6OjV>-eJ~m7v zmwNezZpgaO*wxe52Se4-bh-58f#fh>k&CSrM~dOn^WyGv519R8xFB3kJc(cIzGDSt z7s^ZWPvijB)-dCDm**u`$bFzV5vK6=7BTiBdf&|(Jy+WrtBdotN2|roHdcC4 z=H_}Dm#0wR zV!h&h<;sT0)#w@43SBHv1<1t`c~J84%2q-JpQ@qqe9q2rg@==k+Bwl#FQ@v4J}#3>UrE zl0*wOUJ{U;S5R77ayIv1dWvk>&nAoTw zg~UUsjNf0}3Q{+E;8j)R?@RO-JHb&HM5Pxhy~cqRiPLLRhTJeR0xu?oOtvWU5$kpx zEriiJaX53Q#^fDj2& zovXiolgv6C(ENkz0wm7NRB=+pS#^jQCs0FC4ak+AmZ6amM~gI(td^@ZcvIH7(vpHx zIq92}#vlLOH~CG^k;6c&qI4nQx*(z1>ILtAA=8*?hCWd-(Gfx3BB4aJ^>}sHO>!36 z>MPD?Zw-*R5GqEBnIO;_f@;7<4cwA|85tQG8ekY28X23Cfg{m^9`Yms>oU$27Z;q$ z-j}3U^G~li8ekP29TpZ5=4-NK=KC)WPFUy=91{~6q7i$Dd?F5BXuEN%ulHJeV^v|! zjtEYwfQmGV94A8chEVA-4S5c@I9djVBwL)>vPFz2RK^@QT~u6nJbPcV_ndz=tsER2 zL~@1NZWQX4VYZ8>yu0}67X*CNr)xcR_;mqtcXz3FQ$cgjty{g_a6wD+c18Oz1!OA6 zp&}U@f`vd0J{*|;@OIE5(SmRpn+%ASy`wW<8k=#dxTNsJp}kw|Xa19(Lr@S{0aZ*~ zTx3KxZQ>kc00H zLpZU!5I}CGG&eIbGB8-XcCDTkR2SW)PA;OrEjfiHMW=JpH}K~FbFhe2hz@y%xcHdJ zh{#a4B@=%^9NyW}6ITjDqoYIAUhV=}cxvI*zFY7XnrkoS?~PZx+YP|^8C0)1VII_b z3y?Cv;&c_X3_;7lz{r?;&dQd;>44-z1w{p?52xxJXZ=$Sd>~kbQX^!1LVUC?Qs-+v z^&NO3zs7acXXf&Vs7S4kSRhm<9jWQNb+h+cTYY6=?gp*c2`(t7fM#4CVTf5DKxIP4 zoYOZLa}yK2T|+jI$rdMCAjmvZz!Lkd&plUIa4K`V*7DO|`(}UdHLwZ^V`7znw7V`c zgum#Y6V$)=3qKq^$5|5@6|V6T3M8Sag&qC3`mT32UM@YcH(cgwV+p^CpqQB>fAFRT za;!`^;Q=zzT^!&@v`HTx(!tVn)81C1AMXc0riJa$el0!6}s{G$Ba zy_;?Si7K%+C?q@zsE8H>D>5=dW%befgf-@42Tiyx0wpYWQRLyvJ^i<@cQ#)sJ+UWF z!BPtp!kEHXkwy&_D(&nhT5 zlam@`^w~dbkHHF!_83&kK^J6HWRPge`^+GZn1v{E*%1@-l zDqLV}I8@BAGgJdQ2qch}wX0W=P#F!16g`c>g*C5X>5Ue%S#Z%{;GNw>%AI+DwI|AH z_CKmNfx%ej!cejPRjlaMg&KYKkAB*(K+?Z7YSJR#kchBAi9289mtEW2f4jS_zN$DI zVr5S{2dQEzNahL;ng76vkSU>BwR$ZabDAgF03^B{m^TL{%Mvz=)Q}83<>PG~UEDkZ zQ;!!G9^U0|{L$b4nm_vvup)C68yiE-z6o&AT2|xSZck$%tPuKW|MucjF0)baV ze%sCd+nr5U%FpbMlDm*=#Wc_q{sIlg0U$UoMr&5BTD67~Di$lk64}_$%!jwYIfZo^ zR7Abaf>&xn-akwhV2QNbj~5jj+NxRl4|+vG!OXOy2a_?i)MJG%zeY zSn1Ap_er?Wb?f#`xS>UPn*&8`66C~+W5vXZ3>RQCN_d8op%mKV)R!GSD;_OY#(j z#i_(9&}{lJKWo&GF`CxcjvM>yOGQUbnCloE78WQM@I?W;ntN~G>S?SlJ-Ihr>SR4& z*~zzjt%96jnHsMFs?`P%9t1U34t%L5Br<;erY+mHZQHaC309&-{uXDS$k>tRfbm+e zczmI6{E33IhqpV<`G<19Ls`*6UKsbNP`f$9O66m9?bvY`W5ZG%Unl%IABA=XBrd@9V6&aOOagHzh*{RgnB`mJQWgD|1t$H7i%FTtlw9v8koA zNUqkx%qFbguz6d`ZdwVDv1d!P#>2+Ugp3xGO0YJi$<kviY|5u5JQ%k$>8$!gDFo z<^RZB_}X4U2gzRHMkiSO>)z<7(H~7;WMJ*;E|$u?WnP{lbZx^ZBs1ftThp>VtVX$h&idAcohcPxWx8+OZ zYJY8jpBk$d0>ff9?nq1Dk81qJ2v27#QwED@(dSV<0%0^O9NIa9l~5M5|9nwawBtWg ziw@#^1}qYaLS_bzJESX8xb)ZbdDPg+vsPP@an<-E^u`JYt-nU&rwv0IjJ19%UDp0m z8!#$3a>H|SZBU@^ae36`UqyN6J$-jG{-Dn+?w z(i`eEtOw+a!nTufr^cdqq-CO`#LLJ3^5zFvVzkUstkC!eV1N}mM?$HKOGka*SYr-c zp)#ulKOae;Ea4j#7OWAw@nx}RZ}j)~HdhoJ-Wup?OFF|m296cHOwPSxtc+H#SWYSk zxiYnO6o^C~t^_jy_p9O?oRaguw{-Zj1~kF0VESFri3;QJa>^uqr(xxW6}Jxv$$vo>f3!{))F=pZZHF@*{)U%8gCGP8Dc zb91pp#7B-fhM}RcnKe(FoObZ=;r*L~JuJz4)f+q}Sn#n(u59dG+{K<^vA6C>>8ah? z)xW*2pbZX@FE#z*4r>g4F? zM9(*-Q2lB@6tw(VzuV~1ZwlzxS>}wD#BG38W7+A91O=7k2hA1Jy8*$XThp~GmoHxh zDyV9iS=rm$no}Zy8-xokr@4zVF+C^u@ZNZly#>o?(d;lFSn%krk!}!3yk(xAim3A? zC$~wa|7KW}li^q;V8rW)l}@m1^2CWh<2H<%w7^W@qt>X9|8>Qd608{RE>#9Xt}rJM zC|v~fk)$j_v;;}RQR64Ru_@=+*%o?Me6LuNtLqK$u3}^?$v2>aoRK0(`eCwW#q#Bt za*36xrM0y=(pZCo!7?y1vloZ%$<95TuJd%XfZ}p9sa~)cD_ci5kzC;|^->-xIF}i< z;*+2G3xCya1t5h?c?QT7B}Qo%l=hT!nI#uiQ(TbgbY+s^i?> zT3q#m!NRT|j8%Lr);(j9YKX()sZ)MZQXMs6nz2CUqwtZ5-MLP4v>w_yxO#Z0g9%ks zWJG9iU;q{*YO(e&R2Lb@TQX_v_$dpPEtoR6l4$HKCRgM$ct)J;>+iqbP;z`%gqW3@ z!D=8-9#lidi(|!EC-|Z)J2ePt@Q$GgKYVBQu_HS|g*NzSoM6GaW58^z~K3_aR!k$WYHkA5Hpnu9@YknFF?A%uF*y82l@#o0~ZFXy2Xw zo`#ZRDdD1@VKqduz-rm@)r=L~C1b7*ILL^l-&tPS*ex_Q_xRzhT32#8$Y7b7GFB$$ z#LCXaL*^ggr<6%I94pIDa{R3g-AYP~vY9?MHaY^+e?(N2ui2tGGY3V1Q{holjfCDZ zi3n@v&?f0hu%LseD7kz2!QkQF2CEcuZ?woORDJ$2WV?H7BVyuWqiC^=m#0K5 zk$NlC94j=F==?m)mn}DUb+cc^^;J?wExNt5a=x3pI`wM*og2+%$5Mu{B1rl%Xs*mn ziPcJEL?KJ$Bn-e>OC=p-l~=8VJzKF7*=2LS?%>g*nMpz<4u>eAu^D6Ka4e z*wl9GZeMHp@m=9UBpD!AZ-~_p9W-0Ja@n#KkQ*9+rI#y01(AYKtysQn=~8-!p_OE3 zc3#e2KQ|l3%EBB)GV(Og!e(RZB#^3+aGgc1B2noGZ;n8qCgVl102hZ8b$=Q`J z^pqp^K`jkUs9~r=_Qzl*l894A) zLN_-_NJa0x+g%l>(jp~qvtsk%Yb7*V4OT12BE6v%Ej=zy`IrJiuE6T^1q&7|UV+KdCL}dC?@)r=ffFpGX(-}mtQ_1t zRRLk}Zu}MMgujgt-y>2Ew>S25S^jcYB)i&7m~#`E2bm-T0{d5Iu##hbLVAzFwYQQh_<* z)lm~>ivvPJf@JP)0_nk~{=2=kg$EMlwu5~PW`mU(d>llBSXr1+@Vo+praSN=bB;VI z_kfJniY1>fm_Pq>nk>zIHo{_U4d5Z)#{%d9R<^bdJWr*6h%P!RSmhgZvf#`f?->Km z%r6sq{fbbHlnU}PvB>u6Fv0^Qmh+}h9+K-DJ=>BGz4O*$ABPxSXaHOTsaPoW@e9%E z!h*F*FL!5KvY;>`ti%Lb&H{;iAgD&r12NJl5Q(`NP8u_6?59qu;E-S+p&MVcy}Iw- z&4$wK4N9&$PqrOwNVJe`7{ZDKi%?+@Bm7S{Fi$iqQrFCy<%_^-!4gcCCLS@FdAYlF z@Yx6!GJceufLw8`{DQ)xqr?3bs;qP84@WNkmAvF@NcwvoYVw6b&=t(KxzU9vTvkp0 zWQcP$dV+zgNGK4g!;sy=7B9j6YG16L^9#l-5aO?t30*0YU4ujbjPF{|Lh{H4k(ZZ` zQjImqh!jyj2oKfbA9?cTel&W_1QS_cNQg=duOY7J+P(hPi$}NmJF>`0C1fDx)LTz5_-MgLDr*?(7*pQDsz)BB`>7d>NH#26^G>8k=1@$kgR8aB8 z!rW-ZB0VcZJHMT|N3)WZj--TCqhPEcR(9yNRcZo)p@bo7MO<#dxkJ3)QVJEQkg@aA zXu}{_F;Vax%@%$#e(dYq6B3ysm?yq0IGTcMl=1--GeB5qpi1a$ZL$^u1>XjwXe_0f z2>uKlWgDJQ>Mi&64~CP45vdEsGI>v<8RN!%W+4j-4wPdi^xApp_Jf{=!ps|f z78&z_G#}Y3y~P3zDiAUkfr%6pi$g^vFiT4_2-bpyBv*#kzMGF6J+vjjg(?*KEWSC` zQ-GD5#8>U74ULKl5AY4#f41PXcFoXP>@7KZ`ypQ$5a6#-D*X}Lz!-@w7f+cubnCl` z^Xw&vmEF9tLl0Q7U3wrUA=t6f$=rxY(F8?uR-Ou_+Ak%{vIIZ7IHn@P!Ba%iJ9; zjc76=pN9-A`l6VGF)xS(Y1ldyMxJd9is=x%0L$OoX5pks^Q?V>f;2LBozCmPpm#)M1hc@HCW|lZwne= zMY?Ta4ODhcd`}<5_5l>BD%G2g6cz3gEEwuZzAZ^_J_aj)e?PexBH%4{wVXc%JLe8* zP#QnaQX<8=UY>U#rJ4~VM}`IY`3UXI4B#^pC$g<<;xaLWlr4kHxRM%wFz~fa5mtCA z;b{%P@)Ma%ojlDzs11Z*^4#QG%KPv2G#2jj7uXG9MTD3t606s+SP_dOrB^`u)l9u? z%~vm7v}p12Rj^`qsx3LWhqjVjK?#{1G_$k;DtjkBG9^fRqgO6etxCu$EIO!IIsE0y zJcS>z@^Eo-wliBfcgiOp4c*vu)a2#PUQ#~xA@D-+5(W*XUFFHMF=0Jp)ObJWG*XGl za1G)%NEUn`Zmcmdwsa8qYD2<63mMapAT@u{r&AW&s{;}3yYWO(M|bR5>E^*Ww zED|QJPYtvfE5?l~r1UGuS;Ej;btZa*!PaEul0}P_kS}WN7_dF(NY>^6juk$Zc#>Gz zBOXK|#K#wNc$l9ma^LylF(r3sd-vpvBxoGQ>={OdKSLSV^+TF;%+Enm%WZ zSgZB(ap&=sTdv%{+tYA9S>Mdtz&bxk?-({t$cUC+Ot=Ip%c`Tf${q=L%eBif zwIIi3XlUlHOFMETW4+RuZRfy|22Z>VPO=w^l5Pp{rc2(fDg* zJS$W9bMvNs`o@~niHq&M?Bw+9kZTLQDjvQ};S!-C zR@8_^gM-CXa_})s6(HDIo35lp12oXk$jUo$|B;-u7;i^CD>w4+q{lzK*RmW~)_fYUDg?hHI^nm8*9kiiltp7NWIZHh+;3ia~0b8_!*n zcD291r#?I0$Hj`8&ImmDjTqc6A3ue~7;+qOfe^6US(_OwUxus=Ij1Jh+ARlOOv%L=S>;PYV=GL zO%*~{%7Jn{tCVEqNRj$+>-fM5vo^e9M@L6{$lVZF`cPzzftiz!mMX3U%gc1>q7_1= zpGG0zxp~FZ+_-zI^X&FOcUw|I0*}^VJA2q5Y>L7Sw1u!}Q*XZr9|m3{1`hT%=7y`t zPNLFdWMUzS*?suPfg}x|gUz4b&ARN8;+!y(VOOA?ycC#4{rr@k zE@=5Od}E8>QDYZ6$&|hxU|D9?4>xpU)EW{eD_D#i-_68qb*%?=V5G?*6B zWXtIx$BB}{Ok9A9>O3o{hHq?c@4qGUNY0)}nUj9|8NAyDsKCmRCzMEp?(Xj1NDBoi z)$y4nB`4x-hrJ5ZK_d6@QEG6Jg*+!aiZ@#nE!iCCi}rhYPK4$R; zu2(^-dkLHZi`^p2|rtr%-h>XrO~Lo(CuPx zICQ(rv7cB-Rcd1809KGHTsPPg7XL%4Ko1XLTp$IgKtrn7aIm#NRhaTilm#cJ9;^V% z$XYi9QZiB&uZHQA@)IGFpTK+Qfy6cv1iR zS=AjBG4)c*ErnKu%E2=qb6>ZLjv7CeG({!kIXl{!Q=yGm5h@H?u?P1G zjv$$gfkDU|?X59a5-gS(VDlldLVDNTAC49}AY~3n$qAKerBvYR>XUk*_x_#Mg54o} z@<-Xc3Y~UzLP{Ew3Jp7gMGDFUnRu~T5&o7bE(@D$N&igD>?J`PG7n|#Ns{yINUR`J zsLKHrad&VQh{QtF1o#qlU{Ij1G9sn0yeM6>c(}VPU8E~6zb8V&v4RQPISL2NDQPas$<24WEplH+R)Eu;)qs7hdB zXyGPTtGtCg7msLU8y@stIhy3}ELg^*lKGqq#z4A<+K=D+E~?&_TMs*1ZwvUIJ`ftp-E z0Wpb#lQXOz{z$#yLPj3H1->1(bO{%L3k?QIp^a1$x*;v=;J(eM(gPJo%E6IY2FR5o z^%Ri`^2N%4zyO7B$hPwr%W|TPhnpKUvcukBJh2>hNiG%GE&c3u>T1jud~XUZGM_P{5NXp6$8!ps(RjB4#g63u$(>hh(7y!hpdF5-jRH zW1%Q#qsV}gFHBnNAo5Sxot~MwCjpxl*pi*1DTh7+pTWe_Ss+A$7pPDw@C)$s@d?^| z?$U)*o1KPRpjd5!Fw5M=*brJEX+38jm%i4{){C6o#fYX+p%^*y-X zTe2@&?!xR6si6g?dQK=fTJ}t|$VkzL4>4Q#PUbdlityyr%*^zZ^?qU(pn^X^h6tU9jmy)VY@aNB3LKQ9sZCEXp}CqctE}4u~GecVK>&Dfg4LKv-Bi3AG8^_hlZ~ zw>{3^-N{ZbR3OE}ZmA?!uzHSe9u(37l|Y2KOf8oOZaP_Sc`>7RY}Mi@aQt4K_%Ph!(BDVezw` z8N4xjcVFF(z56o{q;HAz<>NiJER1k=<+-_`PX(-KhHxSkB-4)0ZJ1}3H?gX`RJc#} zM&Wqq#P`p| zpuJ^RA3W`EIiD7Y_HE{pGBbn^CI^Z6ZS>nYR)`q}q|3tAMIO37C4GM;`jBrU6Xo%%@!tsLfs|5=$hWo)U=!?KB=9a7EB7 z;_ZuiT-^Fi+jgex*t{+#KwxbGugt=9?dmn=uHI_3N+A>ST^t?7(ODHek00J_I=?MM zsxRtruvor_=6?)?EF@C64lLX;hZPj7A~x>alb*SM&$fg>Prfr^ZZhdEJdlDNCst(I z(cSF^R2~8WP+Y(ef^2I2)UQN!ZM&;`*cIP?UW4_P1(*N*5U-OBbIv=cK z;$j*?!h#z5?OeRTfx-lX9&8a>+c!d{_Gj$bnh=7W5FKG7h!kWBREQO+AbA~Vgy&eH z#~qsk`zRD(wfTHiW$EGI;huiFY{}>I=gpoqbHqUPn2y|8lSih$4YJ8v1`x%gE>b} zoIaOdP;ma->AVBGV&o1;HLqH>blGZacLgFVrH@o7aD~^ROg`3j`{Bdeb!Yd)DtW9g zS#Q39i-{Nm$AV`h4v^wh2E}Yi%{YLACw6a7LLr;yglJn&3dsa_M9BlJoLzW)vg~Mw zf{!H@d&zy|V6~;Ns;cZr#OJT$x;NzL?FWq2oH?_(F>B`ZDIZUurATAPe>8Qmjlxe0 z{f>Yk9v*(Mj zDI+#que@}jNA8gA=#y$vl*OIQ!6ny<20oURXpyAs?m!9$6%e*Q_u%FjQdW?oO71 zuCKS3EO2X4byfM%sNpV=Tef)Nym@ojn2Vo;Y}ORmuF2EqEj6%{scCV9pRdFjlaG~^ z`PyZlf4+F>vgNC&`X_)nLOLe^2RGq#+QjuZ$88&1cLkk0oO}FiL2(&&zrK8>rnauG zzMgGKUvy$mB;Ueh&GMzojU6RQKYu^9ueX$gI=u>hP&1Ka=YMUj#}7348a~*EbA~`s&gXyR`O{n_CH1 ztmLhdOVKI_{jqoQPB>K2^XTz|+uc|44{nQAdwI~38|aU_Sf&gJk6pic$L_uRv$AuJ z966G6Fe7#A`UtI3Cg!_Rj7`o3j}L1kqQPKswjGWGJTy|`;#2(Y&Y7+;s5?-ml+Q-Wi znG)m^?OeR0_7-35fAHX5Z~K*!6cZlUA~y7}K#P1&4i#k01N}X|zCKbmyn<88uUx)(GHLZNHv?I{xwK9-xCn|JKQ$x|m!9zTkW+0*ry{1n*UlN#n& z5&?V8GpB`o7IIo7V(J2B<_Q)Ggt&n_@IqlDp@kS;A*mN@E?+veVeK%FxG`L_Y~fr| zJZRrs2o|w|$(l8Lk%86i{nY?Tsmo4pB))#rU!Tb9CC-dHABIG$=sjBlCnq#&<&RdU7$K)J%2!3l}X~v~a+jJbYAW1>S%9n zBoo!x)Y8^@^*VO$#ddtX*E(7VA83{D4d$64c19g61Z}o{O1YN=LLlJ5F?Vp}`^M}( ziT&=c;oy?y`kKlMCFf6N@7)?7>gz?jHFJ<4NEkdGq)AT+#u@`w2pE`PK^66uYmgXx zV=9oK4;kI%5{Xy%zN*?Qmridn9_Eh8pG}=MeFg>?Vc^cJISZDc*0yvZ+Ao(ISvtDQ z5IZRqUP5P!)vT<91gEi$ND&Yg4R?GOChjB0PJ-0MDjfR5{e=x=(3@I2y1ILB-MRPR z(c>pi9zVL@f8$zP6RBiv{w}Q(+A$o&{vjxWY1Il6EWmQb0t0*WviL=(WF0?WT3%jK za3(i1byFNV!e!`KB{y7eePEZMaAc!pFxDu%(~lvnpoIgl28fA75-+(5jcU<4+O1kF z@ruZ(uDeokX6tYp)~3;z&W#x}XU&TY(MQiVppgXv%YUwnV&P zZoGDlktI*=7aE-imwaDlPTtA01*I3N>Y6*Rbzi^M-c(;#Q`gYk+Hv*zjazpfJbwD+ zSI;q?ef9L=og0uX2v+s!?J88{tzDIYXzE6DAX5F%Lh5ct*Sv!>^5LPe8@8vWrfl07 z7p_%#i>XirW5e`}(UHqhe)56$jX`&?pE_94>_+NECX3Nxob*2c$45;acZqQUK2p5w zrOUih4_4bur@c;azU_YweT**4d2`9Q!@SR%zYv`!+zM=C>a9Wx+G5}`cY=HFDR!r| z5*9{l3@w~Jaehc5)){9UJaXbp0VclM=FaY3?7ZGqf93KO*sPAL-Mu&a?>+kBt7l)o zc<~L57tg+Ubh8TwOEooCp4=?7Gqf>nuL@Kh-RB43+0 zvG@SB%(sTGuP@PJsF(^eQ^a5mp#>R}cmh>mSOU&~Oo9>;tEhuD#A>_QFj=7_wH)CPbwV36b7yZXhezKS zbb`g(5G~Yg5z>+W%}f%E68uOkL6;LI)sUfQMy!B}Q$R=+lPj{^dg$!FN_RX%^iVMtYbzQ}oZoPLNeL*ty;_GK$eDTGX z&t81{^3|&sUp?sSfIrb#o0llFGc$LR21L-oJpO=1?jwYV3L!}T02kxM_kc*Vl`S|H z2iA&lgZ?q?W9mmD1ye-|NQ1LqWWMx+>>2C2LhoZj(zevJJ-ZVFvHU|Ui#<|Dtag}B zAD#{}EVz`c=SF`yxfB_`GY&Insf~<6^QFcIec<{a4q24Jhy~#r%Ac+{KoXS+6pN_g(FQ3o+Ux)}iw$A|Rzw7i zXe4~>U?vUy)C(d!YB+;2i5oWW+?%mKV^f%~6s+QN>wgm~M3^jjG2r0BZ{uts1?6z| z2pCJ>S+L#Qcvyj>4UbLQzB}V!?&*Tkip!1d-Fx=&8c;%G$=xp4<2C-Ri0>D=ev~Yb8=R>#pr;-`$6gA3wZKYoG+d8lH+}?(Yi{YN2tucFcyNG9&KWJr4qr8|{ z>_LZ;veg)rzeCFfszIoEtuZvWp`I`?86u`*XkeiwYiQ&}(=%ihBN9WW)8Pqhq!62s zL|dw)9XNdCNP41H23Cp3!RpeP9mBQl`kF^ ziA28cL?g-7ux&e-V^C8yEr90+S`I?7>@tX!9r;s`g8}izS(AvAiB!g+yi@rlmuj2Z zyKg;sc)zdd%;~d5HJxzTn_2p$vF+N;ekf*7d);MBjCD;opbOsnt=o4WJp-)g4{i{w z`ilM0UiPL~0I#7HVYKOqQX%IiezMY1iHEB#myf0Tk*%|bmlE4TsO28cNcvN=1U7jx z#6BQA4~Yz`VQ~UF?R`LNw{Z^idO9T&gWV=?*syW)R-{7qq-P&HedhS?7$we5NjlZk z1XkNjhUqh`TemKe#*nK(o2+q*D5wvQR?3BhkZfaXo^{Eax9?8R%E>zeQ&rR4as4(> zb=TydI8#>F-qqRGSck&^p>wcdWbQi~sw*om*LC#vKY;Oi`uM^9M_+vX>id^p-S0un z*j!(jj!s2W3wsZ&whO>MD-<9wSBbd*Vu3TEqTDqk3kz5HQgsLxBnJ9=@*SgpQdZr!?d<7)Gj%F62c_FE6Xd;y2y+i#vfee%V#Z@>TUn=kKP zZ3nC?`RTE8I|~atZ2ACB@Rc}k32uOwRP5$xgN+urwj5GJ2REsjtrrebVZD@%1@%m< zU2AA!WskI@H&`L(2&qE;nvP*-1Ah)1bgDg$hfYPV_QZn5kHJ|B|qCh!!%%HBs0@3gM0k7oZaC8n zR;M-^43pJCHnOs^4zQzHGt&3%+q;Lz?PAn`jmGvJIQxAMOTB;;vYwY4TDz{_d;H|l z-O{|nN6)u*L8@x6VARklrZ|+cx3{OO>GGwD%Plt^zx?43fBfU0{`AK`{_zj5zWMsa ztM9-6?#2DyPMi_je5D{$=jCK+X6;1lsVT=Rp`4{e=;ma@${}#7P?e><<-iK(btP@y zvMGUJ30xddgCpOWc9)aLG3}rOKYm>j8KxaOQ`p!^SDpr*KsGYtz~Q_T=SnVID9nuY z@m6j;%UC53H-B{s<0Qt36UUDq%gf8nJ%Z}gp@Ug;f?qm;!@yb78JStgap$2VgXpiK zy0)dGyYK$frw^|eXJs8LYrBebrD`rCYh2ILd^lzJdQW$2O~s|krW;RQ0n(qi@y9>> z@ao%F-~aH#ch3k`TU$&0#q5n*p{=QzrL7C!4IPA32}RMA8gOXn^$aZp){gG-z=TaZ zQg&`i(BbGtl**h~;uy&*PZ{cv*!(jAc48}C*i?3)_<+)+?b)+;U&euhhmRaTbFQ$g zqN4ohMwO3dGqJjKV%@4?Zfa4)Mqyzgs#5vq&Yd}Z>f{MPJ4(pFj2ozz965>u&d;GJ zQ(jSB)6mj&{pS6rUp%^6mYsR5tg#D+wbUYLu4}@<-mpUyI(J`ftiE*da@YMAKY$fC zAXich=-nkB^wXLP0-xU<4hlGA{NV?n z`r(IHUq8Bat(^``uPZyYJI)7f48UPSK`45cSVtFyRje6cE!%R>&Q0nUxhXY$e@4p2 zxG+C&)=`YjzYs3Ud{kPjLq=7w}%npjuOv2kd<{X`*2P!lmZ2~@(Y(LFJG=Y zzb{0s-IhB3Bvs2!{;dQvB1Ten_Usup&YsObkLyv6+6+=tNOpGj z-hS}(t1oX~%1zHK0;-M%lB)W)?wd6GwKli3BYbYVa_PdwmU}OL90H2&{^3U&-+zlR zy0e35HC#HIiKZz!J`Zif`hcDK(WtouKj1@Qt%R#wAO)Lbb!6d4e_<2+bhJgOV+ zLf$SKod``jaEV)x{H?3KQVn3`r2tk0-NYy=E-AZEQFXZn{x=SWzt(f}_QNlqef7oV z!+ZB1ZviUUs_M(N?Y(y%JVe0?(Ox^^=a%XV7cO0W`sz)wB3PIafBfOQ7hl}H)(KWf zIpeEui&VPnH#WgWSgbXd^-QcrFE%<)1BBv(!gm$6G}T@>5<1*d z();z}_U&6Y`{Pg6uj3O1S!lj@v1pzSfQa#9a-hYfl=fl?Yw9GTjSD}Dc zs;aIucJ)7e`qfuo-n-t~1fm@sjg{r)6*r&1wpOp@i}??)UVL%88`lV71~B;}%Bh zKo%s4Ac4_wKss|4Edqr_C8f~5>KaO7Qh?7JI`7jZIA2gc>4>xtOo@oKBtsrt<}b#U-U>)FwbB z@VcfJR%5zSup=fRqqL>5ru2Yn_UnG)p(*2^+(*vxC5>;t{pRcEUw!%H(Sv(;Zr$j) z*40k=0$c=CtyWf!*2B+n-I=&|D`PeJJjQ&~ARQ;=#P zpn&U#Z`Ou9c3p8=V)B7f5Z4Q#=rgBpZ@sc_iz=z`rg(yg20I1? z>AZUF`i+|m)8i*kk>PxfZ0Gaam$FiGDq3NdYAP>Q)OYsXdrYr<{p{h5_NK;WT)n!B zC1q6)U;dO8xmxfYzJK-d`IEahuHrX9WUnFat}M*U*cwHLIm69_E?Q71NDCye`>`S@ zCV6*mSv^ii%Sw(wU57|f42VsrNdKswn{j|h5hzUBY%;n;{S=H6Fj1`%*PZ6xmWJ~E z8@6O$Y;LS6N|Oxt1hfD6+u#27pZ|#;fBV~i{LlaK@Bj8A^1M%>jd%NDzi#yQ;soKF zx4FUFRBlx?x|?I+KEHBkPYobxbu`yef{iFUpuOR_*QinN=hq#i4|R# z?_PcT>`{MD7rP$a*ROZO#1$ReyE!&kDMr(ojTOy{)X{Itld6%5O+8Z5)ZTRIWLgYP z?Uu2&6YM}4315A~=IyDdQ^MCIFYpYR@v@6F88J~JM!0sZtq>`YVzU_XvfFm%R)AGO ziu;g0^`Ge7&?o-i|L6byzy42P`k#RIpa1KB{pa8QT-^$Z&J^$S*Mc=2U%dP-*bH3T+|<)!6Stv&D|SaSWv^G7#3Q8R_=Las_K-Y22JnsA_Jwa(1)R zPqy0|3TViEh$bRC_(graD7-xR=EuMMAOHTBKmG9S^DiDhdiVh2A=Ry(J^P9V$<(tu z*XoLLcJ9nBYeQuihnp5(tnKK#_v9S6_I9Kh62QF#1d$_CU0QIAF;U5*`KBIA-%vd&-W?7P)oc4$+$$`{&) zEkzLiB_?6^+l}TK1YpNcp2;tOTV8p&ww`7eQf~bqMEXI`bhNizKCv(J%$4Sb%O}?l zdo94R;@Zv|{rAzEa+k)#FTeTW&;S0{KmXx7l=GfGfq_B==IiHA`)~B!zH_Iq{Yqi( zzTGL?Hf%do+S1+ChQqxJiYpqr`X7DyoS}O0_0zl8+fbs1qgGK;Sls=LWf&MNPN4KZ z|46J}z5Mp;r+032cXh(PUqc?}_U*oFtu+_&k7VrHye=vnr)^SiSA6pJ^rMCK*KXhG zt3J9t%3rC{keiO20z#UdsOM566Fewti$ko6LT)=uAc{#euF@bUlDtU$=;&yzIep;J z`P$}&>bw}!H^llN5Tn7?A{+PRt3UtsuYdm2_b*>Sn4W$8&CBQa zt~ZsDmvZ{hju@4Phj&ms%wp^H?lwAHF~6j$x%)m>-XdIIKDg1@M4>=kWocny%aiX& zt}q7UXATw;G++fS{OZ9i%(?`t8=l+UySI8eaJb&doXoWCn>QjQlniHlZ_c@jrW<$f z-|jfMGe)b%HYX9$Tt1EZPO>3Vro+b85SKx;tAMtBOvaDXwnmeGK*FbnwOV$Nkq@;O*7dRh1Q|4b0JvWqa=M-%jNQdQ@IB-_NJ!n*s*J0c0nb4l82A) zT`SuWrPXKxaYP0SlXs@2AIQ#y?jie8ehH2yf-7V=dN3pPQOAjX^!44KSqj{U8KkVU zv%Rh$_e5C(^4M7c%ZIxr?gmK}ee3TqzW@Haub)16@Z_66{N=BI`STxt{P9nJ`nqL< z{pxvBC!vXS+(+|GMWLJbXP+u>?d=7srpv{rPMj*NYP$`0feb%p$ZuYJ_3&m#GqJjS zq3C>Z*Hb7VivT&RMN$RpMX0`Gg7x*|0anO6!_R&6;O@<9%{7-w@{i}{WM>~eU0m7F zasAf)Cr|D+o!k_x)uKAGE_owbnbIh82OCAPOLbi%bx?p2Oz-V}$miXA_wLgcZoF{r_^}h`t2*w%_+y%6tiJjB%lqAJ zP4)F?*C{z)P)pXGvBD1$F&YqLToxLyzIpcGHjY(?dASa=`RK`0%)od1x?1Y0FP4@d zE7j{XTa%b;{e4~gcb2M^hx zd-p-?4tU+XL4jOXdqeS=!YVj6#XE$9NH(>ShZ_wSH_-IUU+IEw_=v2)eezd*;(lP6z6u&C4H8`QKqo58C3 zQc-?Eb~QAk3296BlTi^?l5*EhFcrRfvmM4q62FzwUBB2{_8G7%%2vO8~w=B6Q+4O97v%A^$_xIcjqfxPgTQ-}Y`+U#U zodFFq@4V+bU%$Wj?eBm8yI)GX6qo2%>lF8!2%WrY*@Lj~QoLd-4hojlr5Re>dY3dpp8|f|F#hdqhhO>7O(gjxZ@#!Z}(VzYd z%IbH&x!V#Te&xx>(4GURez4LfBD=f=c|VZ-9GHN-!q`w%3BjtW@BH1nH?Lg0bRESW zv|&#Sfin|OSlylV=IXjmd>;>B1)PY{e(gMpLSb7^PGb>WxJc82d}i{Y@$f1>D?Z(Y zVavJKEdY+DPbyXfWK(;>uME zR&+cCa9zK4`8oihe zJzXtzW^>)Zg*#t>R)kJC2u@$Xc>CZw?mRdNs8Cr04+r5M=ChOabQxP1t#huPpXjW} ziV6#XcbtH=S5#gLZj&7k`yD_6MuT0g4KLp~4vEl$DD8to=2ppp{v(3QI%UO9UbO8DXx#IQd482X)T zhU27)xT&_fs$t;ttTcXGvVM2@=Vmp~7k+ATev_`n4+;&rD(x zz9AukH21`(89=F4Qol<~0~q_`L%nT{HI*eO<<3Z(&C`)gR|08DFyxymvC5DchaED9 z6$-%s*0qZStIqD>F(gJp)$^ZIWIlfRgHM6dtl5B?pPT3U3ImLjl?}Lk@=2%zTWlvk(YU;^V8{;bnrw|7q zb}#}pr(kDKO^&viYiiA9rFG*s?%cXCb8Lu2PbW`e>;C}M0$5j1PYm_|tm=yL%7($K zcRmAqfz?MJLVaH)0a$n-P*W&WCSfu1Iq0t)@!2aEP95uOEXqubIT{fW85NhFYceuS%uXtL#QMmV9jC$ux`Ku zJvPuYI6gkoU$m7q|J%ccr5Y<+;BOAWC8^Ab-tH`X_m!tDlp??`S-v)=st*cf7AtrR zr)H*SrpMYFo0{s%N}G<~ymR9$N=4gSTUtAMQM-2T8Xa}Gd+XAPVN%QwZBklV(=&bb zBVtit1;R3bjX}r5W@8w@iEMxu&z>0XZ?CV&%Ore3t{8nz)_0B0oTm%N>A#0>CCaNwzk&#($bdcTOVFOb9|_y5vr-0=+u#!b0kLd(Vbfez7O_vw$z&|N=vKi zS_e;Fx`}Whd~%vZ;1Sd<4bjZR=s-8h{wqt13ZQ;cQ&1&9iUM+rD(c(&vGUHGJ$bCR zsUkls6fdoS6WM@5iIjPRpz>BXoEn}O1Tp$qd3 ze;HVvogNz)7)R2(BV4|G-l}~O<__-KvE6&q`qij4v={Mg-+SYgXRUd)^f`}|hM^g( z7dR0(uvx*rI(6#gWPevzJFsd$0jy3>47Al&nhK4^;xcn%&+ydQD+qhtxqbEQ6you1 zO|?~J*fJ}@kI@ODpNQfkTm96;*ic_rdvhJoEXvQ#&P+!+1<9zVXQCXgvK|}z#LVe4 zL>JeW8#9w)QP4q(bqpwXY3>9!&~Jbj!a>GyNudWttCXGoLwyM=SxuJD(t*b_Av&`zg9GD@V z+%z%;3Y=iDx_B9h3u3#U7$59wt0^h%IrG77npfu1{LIt@Xc6rWyD)jBeL=EAI@de4Jl{1}{x{dBC;oS%F&1Qn3MM-sA2o4|A8LovKU73&02 zO(+*@%h&yA{_1KGDX~WZGnx?n{87)h!^>U4dCh9f_G2&EmG)v8oPc|K78qT)3=f3Z z%jZr`40JbDnM(W4q6p;t)KFJlxiLF6AqM*p_Uwezf~t*0pt`rVEBPQjk}Vch;7d7<1A=sBoyAkkF$^Ip+33l&6v(Gkyz@fgMiv z2OPwMnT3i5>(Z%_){=zqK;jx5P04TUXX-G?zH;m81$4TMPaYrXGVPmhTR4N27rJz} zY~Jj1C@vu(CT!0}o$$REtpd4-fN=ZP6;!&95A;AuHK7&8Wv{zV7xmZ&(fBS+sPyt{UBZh=a}`#&qEd6Fj?m?s#uwWhKn^qT;qGn0hdc z&P|UGbT(I-^0U)uw2mA>L2GQ9v9@RW{8en&w{M}*i*ym9x&);XsFOef4;^9nBCtzc zy>#v*8V36s(&AxSq8=|gA~YyqKLUF(>4nWh({Stvp%}-G??H8Z63aUQ#vaGaoWD*V-j0WgOq8V;nyENWhVn{QVmX#D1HjJS>20PHz zOBc`~*we49d000l+TP7W)|zb(%F1@d2-&9j-G(1P6v3 zP0lhH(i0+s_U^yz?LCS!hS*9o#KF$X#-r$&35&7}od zDe=+Ry-4MBL{wr{N$b$e1%$ZZSQFFzBYOD|hvUkL-s`B@EG5(*!$$&-&C^2mfRx;ckkE{oR(i`%+0SIoIVXzLx1-qI&hYx7V0Yt(eF+iI>3d=4YA3Y z`K7h(sEJ2o;dw-z&d!YWkexFn9;MV-q+$d845?8;`*!&PDL?QVLr3DEATU;F2Z@uu8HCBt3{%~ssBHKeKM1%hcsLqbm z8KMKotrT`g5H@BPH}s86A_y@XoV$MY(&_23zV_OR;(SKaM;t-zHxdf5Xm}z;n-!In zW{e3yf6js6Y?6tk6X>_Eo(txKn;CQza|(O-91waiK}(`bD4Y1?6p zeleITDoRsA18~oYtsaV%KYV<#Rcd3&YugiZveQbs(2sQa{LFwUg@lx%qr>+4?g&cA z$xTZ_1ROp|WnF8}FdYE7iQwZUc!=%w@B&fNoCnv3wj`M50xZesgv>mo)vJJ0a|>+L z+Jd;iom;)odAenX|B>{{u~Urua)aKw=5#q(c}zI+SAgobB-exkfT1LcR4M(GS&CSO z3|1G0s#Ak#tn!*iPhUoT*xkF=&!3o_I6gBq)?KvKcAhhL<`DEfl8}^Ih|0pEI5?&8 zM}zlocN4sR-(6!KTd^%Y=V(M+HtEhN%R<;FKBKs_ywn)BcXwb~ZgxrxZGF-PRR&rp zPF{u*y?gum#S^1l_0T!|ZUwPF zGN+!TniESHi2CmygwF9!5*n z{==ruiF4PGJGuMerBf*Qnw}Z&Z3&lsO64adjY9qYbWB<>=4B>D9^C9Ke#iPgaZ8rjAIyjk4?Y}~kc9S=wCn;> z5ms%k%8w1$7n6~h936oGNN^yzAI#o;2M@;-wvL^>29NI6wKK;DI}vc93+BkO%WLb7{YTQuhfZD~iV6yS7Adfb(dSH{n=HcF1U8eI z#rYQmFz^bQf0|hzGmG%*WV0b`-=4jPVjD+JUA~1Cc>5Y+{HQWH-d~$0TR!h0_p^)8 zH##jdo5l*gDkY^Qg*hn^J3RHm*R72#7^D$Nv0*`h5wS@rsoD9=Dl*qp=ST0|AD5Yx zaP&y%;ozV^+___yAMUoZFTSL6@*0#fjAZl>cC<9n9R}6a)ud1!b@JVP$SI>7b+D(k zrXVdUXb&-{F#0RIX6PJQfA^Lj+5JGOxuRBFe1QUtIh2^BBhEBjNdEu)r=MdL&S5px zYzW`CXJ2qSS%M!BT3tjf148`6?L`6eoq9E=trjiviN>hc64VRj=b5msD#}fH$p^ew ztA$qn^CH}OSR0m_6cKPJ92q*Me6(G;5xrkJO% zfEr{W&XDTcR=QrEu9QdPLjNFY?htGn=xVGm#2?=0w{6?@o&HC28%F8fkL1pX+d>Xl zQ-JC-Vnbn*Bify)EX#2ZEkZU}4}@5ASb6PIjMf z<>Ni9wnV09=a_(1QBiqS6&fWf%1aaXZE#e+cmHaB>|M|3^u+Lx&`5MwlPp|enYpg6 zwz_1G&)%bXIVlK3$Dq3-IW8i=7k7WwyZL0dPGReT8;Jgh5yU=;Pu$ep(%y*%r?F$C z$`1Wb?X@TnJ+#}`$9LDk$l{Jk;+un1#F}Cb0u?!6HxVNg*&rw^Yp{UYEM5dZSXwY0 z=CGQm&kWn=AC%NENi;jMnCE9m?b6IhbC%!x^Q|Phht;Oglvm>70o7jEl!@Tj3};v6C_i1p5C zDwkM}YZT%iKi~i?ebLt0F9@T}&_b1lyg*4MnosI$ zOJnzL*&dOWosB3kx`hzuOpDvU3AYB4y6jHxynK^@bsgCN%pB_J!q`5NKS$}^6yEjm z;hyHo{MZoxoxV`(8P#KFkwUm1D&o%&Qyd4NLOUG|6$6bmWOL8Z7W}6leMqpnabd7B zIq1NlVJ}K0 z=+47gR7e_|zPyiFr~{z$|F;>tz1x%!7!YpkJ#pz4q1A;`_=0Apk9C(FlD|B^)~@@o zTfZ|rEuUajUR7OH0jz2onp+wQ0v%YaM}(ruJZV>-pg2QWmDx=C5&)Lj7`4H5-TtJ! z{M;O%MHT+||>V63a5G%F%t&(56( zWAdAhkp)QX&wI*>_`-CC3^mZ75~WU#*&-X%MKE~LXwlE(FoeE<_jG_UB0)Q7M=?tbz) zgA`qRL0eiVz?dz;V88-U1jR4D`1B*1R@bi#*QSRCMb?g;y@VJ2@FvQxP!u;c*i^Q4 z#n<$182CK59!fHnf+e68mS9CyLwo;Vf4eF8-Pe~{8}IkPUcB__7vGj|4ou9&G_{&K zqTfqG*Qw+#;h6;_GDO$||JxMuvLp zl2$=M)d5+7v?6ElqT`&XuKeV4QddqQ zFHD&V?1I^YwzuwsilNmFMBMAsk47YPPMt?Z`P~n$oF+?$!{@bmHg-LTl~+JY z5gM6+6)_kpkx3sI9T{pj3YIar>M}~W9onCv=x~$;=h*9S7!?$H?{Q{%X z^U<4LU6$bW-iz(I~$7hgC%joLJ*_F1e3 z+NyHn0`~a_$CY+XlL$3&m#q#G;sjQAX|;}4r_VkmYYrE4tfJ$7b67D;^HcN^0jlel zXIkT<;|m5+!;BtUgklJ-rpBAfBb{G*@WagW@y2bTS=a_?tjJ0vU=5)0sM+i7`(nut zzue--o?X5|>bfH=rJ$^;(iG?N{L{;%0r|ydv9+fhM3rGWzDG++#L_`@3L!Oi9VMcGYI3->;;7SdtKi(jAL}cg*|Z}f$5d5A zu!3V-YX-Y&x`svuJ9oeTfC~RsRaLk2j|}w$*xncLd+`6!j|p0DiPr2-G@4A= zL2o?0TS!P5)z~Q*O)`{~ZO9Wos1M41EWOaRlrTNjPbY(fQHwlYACu@_2 ziop&ggSTz~DKuX6l;`Ifdk|ef%<<;s(?Du^YNWF^H^^o_pUV0ZT3v4mPAx90L6t!@ zX`=>MHPux$orA;u;r#i%>f)u(za{lM6moDoJzjswbMLzZCZuPiB_G-C#(EBI1dl!T z#48-nj03URt#kTBZC!`7k$9?1X55{ zG*q8_g!M;Ah0)UkCB}SH+nFnX>O<685U3`{Ivb23GOO|fD-`B;xi!*IQeInM3zvn) ziqvM9+XsgGBlwRp+aK|wsOf&<)t{_<|1Bm53v*)S`dtBm0Xx>)z4-*Gj$Z<>c;4;j zNmK;&$E0%sS!`f+9K6bi2n;%sSkQKi@QPHwG8GC$zk^pKbqn22A`N#@uW$!5j_yB* z1xiQvkQSUn>g;Gsd9kT}=p5Ye+qbWy$S1C#tfKA_ScP%t zy|7W${p@qk&ZVoDJpTOqa(B-S?n;}Nmy(k2B}uo+$^EkvY)2&FaU znUO)k5lICtV`r~hu$oCpL2?r?(1`T_{bYU6dm?ceVO+pcAe_21)z@q;uWB1R zM_%xQ>*vtqJ~KH!*wvW6P59E+OL9E`m|t=+vQ;F+OH?~qgyw3(tG>XmQJ{+|c=T7y zz4GG6o_oVaWG}LLoo*xsSdYQw-dA&yB%O#&dKo<=AQov}sK`1R91@Y3*EoFo>OHI& zu;#G3O@;*HKN5~%Bc!pSRXkaHvp~%ub>Y-RPcvo*_Mof~`j6D_z*@j)uFl$=t^8N! zUmH62VXXh%onBg1ji4RDicwg=s$+1tXYY!qt$*+9T*JTq;j3@Gu^icc^4|dDV^1w} zP3pZ$EKN)tCCiW$i%t%AR2iZ|4o4)S-eBf3sih(HA+v=-G+D?Zr2QTetbh-67u}yk zUD4Vd_209<#BhofQ($x_%9MIfUAYM!qU?)6bsPme=8QeIFMKi&#vw| z4x@p=iUw=0HiTeBH2#Oo7IzaiJYzMGU@3GMQ|JNX6Q!c(r-pmbb=cH3cAk_Ippc!O zGBGha*j1b2!}&I9ou*1)cDcEx0r5?u+=+n&tF*3nxW7TW>|1^dR!js~OJ9}| z1kHokA2CX&QT<^|Kpjn7I#RIM;OD@aLyOc?(O{9%J(vR+!%0f#nMB2Gl?Mrc0w_#8 zA0O;S?^0{uBu3_v!i%dIn2U}s6gqbl9#p^aO(IrSp8=O4hVq(Pf>jNmVz4qd4UBXb z@g5zKx&MF9_YuH)cEv`+Njg1B!dX`@qDUSs^NpsIBjFLTsYY|xF|x(aGRp!M%^Oez z2f+&6xTx8p!+|6Oh&UB+B12tHqR(ppBY@BiL8b_z@Ch*>vdnRBf$sX;?b6rhf7|&l z{ZQdK<+XKV^}HB#vGl;oLX11;ql zk?37c$|-9aK=9-qSPWWpp&kPj!3wZkLK_%eJwrAk^03eN$q-S~Vpv^S6m6)Y7 zJUED{Q>b7@wI%sQ`sF7v;jX{A@Q5epxv!t#dc^07$^}+UO^x+)yfW9+507*kG*sp8CSLDAX*c8H#H<$4|_GH3t`6Hc5j8wMEt& zjTK|}Ll;eBt^?*Nk-6O?V-quHuiU^+KyMv{R1=uv)!S;=r~a;%NGz~wXlg<+H318% zy`~-$Y0CG$`3>?MUk%`rr(Tm69!Hr2wmA4Yq$zIt*g$J#T3mEA1}zwhsyl{IYfLKQ zh$_cHkivm0hF7$5njH#6Mh7rhO`rpD`Xn025&t5q54J8E70|nm3V^1O;lll;K`dND0?t4_X0ftDi|D8e=ZQy2{O^O%2Aw44Qo2`|b<|3%p2}Ic5xjScEHxD3i}L zKG0s8ofJog$7P~a0G*^$Xq_RUEass3#hl0!vjzf2EkJLPgS4{Jb&|k|Zu};%Iz2Il z3Y?Dm%tLGVuRZbIEs%tq5;KieV?B<#n!48B;f`>JdHT&39OiYg4-+EtFa_$tNh)sU*Pc-pCr*>s;+M$#KLBXb=cT7I8fsH+IRP5SpDtAOP*K8^k1hH z5llt2>4I28ZPmt%q$DyEG}BOkCgsk-@fp(6P0If1gFr+hMqe?mx+ersyfuKG?Trswzj^br>oB6jjvn9HP5%P_=#7YQ>JO_ zoY?Nf1e(MutT7odOBh&XVlG zJ_0if&7IXrd!22Ue^qW}p6~d+UrRC+SJa>x7g!;MT;JN=SsAi&p7%|=?}g^|V99f= ztreF^SP3o*R^eH!!qL9A+ER2`W{?T02KrWWKnr*LpsSimpAvn{qGtJreiEyYjEce9 zqi_F(kq|vy?G2^rA!|f$zxWL^TVMV`l5#NOAHz2ps2Vytt7F}k|GBKhm%rSf`^n?W z?L)>dlNAMG(dvEr80LaEl%sXmK&J8HzIiB6uCB*@J}`6#?UZzxEv=g@umL9W1kER? zdD2rnb!-%~b4mMVeQ|2YR_#w-e&#zdKkxfI$+#T?1}ZmV1)?~isk0%?NAS|O_Q>!1 z6ZbuM`faC*DU?ToSoA8S`G7{m8d3|7_RBmnx|rOYuePzhhcx_>i87Ya7PFl!WYIB$ zhe+QpJe(1?dWGXY} zh2r+BnAwKiuDi3N4KUHBPIY-+a`@hj3eGz(KRp*={5D_cqyKNZ5m?bFoa*YPwwkEW z;Dg)6uRrsh+9ePC<)_|TmokLDZ(@eSdxNh-++e^3KN$0OhX?w)TG2>OiYrKd7ieL? z8myX@mX_AmRt$w`ZAD)S4H7+}zrvKC5qof(n*;0hm!5t6JB=jW|IRZo8nD8Qx<_+m zU0aJ0WA{^HHwl)1`yk@|f5!UJ;%99(7o0>Yf(GjvadqJdpMWn6Zy1 zt*C78s!Po*EG;!9ZeV?vLD7fb@^iM^TTYQY3lnRCbwnItS{cy^eBg%Z!NX`KZzkZ( zLPdkcKt+&3VNWGWO!Cr6leXZ^7oYh)DMf#VY+zN{fG+Q8U_bzbB&-icJ7>Dr)A$On;&~tu&Zz! zb1*?IIx0oyqAgHi5Cl0;_yARgMM;JOj$+C()cOFX%ELJCXvf`otILgP;X6IV@4x!| zeJzjQ2{4a%k(}bv$_7j>Zt5B9smv{_!(bP*jK=${_`Wt?<~=NVS+c8Ol<9P(sYTD| zBb5#q(`PkDm5iOilcfBCsDBa$9S7AgZmzY#T$+bDx_aT;--nI<2&fjp6s>OQ!1VC( zV=X25)r}4GAd`$k((loBC+}nFE28arlekGCg1#gwMZ7vXmQK(2nH{Dx8=}HcK18eN zNvfdPB!-t_r>rf@Pd(z}DqZ=bA3XJ41wJ1IkkxY-(^=Ee-h^4%$IOMrwM~uYGT6@9 z5zg}+)NS=zU+Z$|OY9BBW0w#^ATcQt(q!Nwz>txBWW*tXXm-paG1d_d#YnY@vBBQ< zhRW>NL)+ZM@1vFd``!GkK9tc^)!5zA+&wlqT$)#0S6@|v{?U9x%*L0#PkWTSfhAA> z$T7Hd^zv*Bl#a8|Q5Gw=m?mH!0lT+eOBHXZiC_fA5>0HC83& zmhPtJzKN;s;=H1&vSRukRoSuL^Sud!)oXpt%Oy{}qwr0vokUu2HU!GVrDg#G&B(IE zK{$5dEXIm-)SC>6M-FaXtGDO8_oJ7d1Es!4)AON^Q&d{p+R@NDI62v5#6SQenYEOY zlNGyd`F9@vdFXF1e&%()`+?m0{z-K0-V5w85xm(YNmLfnrAWIrRpQ1t`+e3sEBGtl zeicAH{ueM4?t9P07~9)Y*D*YGygCojBg90=RI1FFzXVo`7CrIekHs4Ul8PHiu!1*_h9?WO0Rdi?v{rtgEu@}Ri94wg#K*yNZg zCkq4302TVR(xbL4o9_g8%S(NeizQFK@UBqjxidToITD0mdU2Zw(p^Y*HMR-Xz{(b}roA>8>WKRe5i2dv1fv$XIv-*t}O>Tlk6 zx%lyCUVQcK_iZ>rsY0W7amNiNw)$f1|KV`lv@<3;;&8wopLNa(q0L*%U%(ve|00;^ zw~T7^%JR0+vA#yADRi@8*cre|3D$q#HiHGQ#g9Gy)HBcj;Dr}oUbg(TAHDI`+dqD9 zg$?fEEU}m2-r=~fkbtw|$FDDY;hDd@g0j3v<|5xzT3XSMo7q&7=q)oyFDE-`zuot2 zi{AG(NSP##rAr@w{D~)@eCp|Eo~5ySW!duO%a^_U(hJW&bFc92zW?}_ePF=NDr-gt z+s!64wBbObRzY5NtS{>?X}H|~kx`FJ3UUd2OL06#W_{oP8~;U*4Eco>ofte^O78wy zfZOqum@q*o!t?F_QqAyR1je8FvpEH24ZUsVQcQe7lVmA|c_5*ZbwKsvU&mMZXWso^ z_Q(0An$`|;DW>BTVAc@EQy?Z&l(L<7|8$1G?0foa{cD94_06@+#7_)}C*|#xWUm+!S@?)|Eoe^{%^))Dlh;mW1*?Gq6}#Y^puuGI=;2A1RnumK~6Tos<5~M z^WrdVx4gV0Z#(bBg(dh1tPB~b5W^BQk?CjTC^kfE=}y2${PO?jPi5eiA2e22ftco8 zTxf{(TlIB@Pyc^}UkYwIgO*#=Je3lxigFY7Xv}zc z6*1ZgR?zGT8`ukq{mZ@~V3iA#0ay`Q6&%)l2R(^j_P74KKhN-r3}PZsWp7zI@9z2k z?w|bYzyBnR1Sh;I22{q}WYud6-p!YSNMlu0RE&Yeg#{UhSI%$P$Ctj`-}DcXaK9(8 zsu)libK{Vi|C|1_-|oXDCZ%Q*tVm^fW{B*&ZT9(gZ|$${e{u(U5`W^iD`Dt2uMwTHvVV8U%DgS4`G;-g~?D$;{-(;TopMCMav0uo>k>SVw z;rH57@;8E6Rz~~*-HQtm_W69B2fg*2WeZTv2dYJOHb44{Rff*%4gD4W(sNHN6!85O ze?1FtZ2^G=1QrljKwtrZ1q2olSU_L_fdvE>5LiH90f7Ys77$oKU;%*z1QrljKwtrZ z1q2olSU_L_fdvE>5LiH90f7Ys77$oKU;%*z1QrljKwtrZ1q2olSU_L_fdvE>5LiH9 z0f7Ys77$oKU;%*z1QrljKwtrZ1q2olSU_L_fdvE>5LiH90f7Ys77$oKU;%*z1Qrlj zKwtrZ1q2olSU_L_fdvE>5cp0Jps4@5i26T^ssFu%`d^Px|8ptzKOU$4^9kxdo}~W$ zDeB*zrvCLA>QB#7|MDF5&(Bl;^aJXTKcxQg1?nGOr2g;{_4hARzkh}L-7@O8%cQ_Iae)&4}i#Mphdz1S4Th!0qrhfVk^~H~=&)=m!dyo3`C)6kJQy;IOK3YlL zT}9oop+2;wZnLNl*wif!b(2fo;8EB4)HMNhRY+YCQJ2NkB?)y=N?ov{&f8Px9H_H0 z>WrK^t)NaRsgo+|gqoVsP}5p!N=HrVspF2+gcEhlnHqPY#$2gUH)_P48eUBec~FCE zsDZUq|2nE~J=N<;^=zQJH&R`jsLst)hZohpg=+JrTDMXy+o)zAs%bmb=u0*DQT02h zx}8+*E~;iXW!^(o@1?5tQI-Bw#eS;%09AI7Dh;4Y4pF8+syK)$3Z@D}DC1$OAe71v zqw>P3+#^&@1Z9Y%vX4?(QB-C$l@UXw$5Lr=RBAkxl0YRVQb|cvVltJGLdB<2acNX+ zIu(;aMQ2h`S=7;ND$+nj zD5v&UQ2v$FzA9>OHMPe~?XIDA)lxg_s2%l`UjyaaNNsPTe443kE!5Ul%Dau)(oT7G zP@6lcOsPHG`DL5Vd-kav!1GMk&`Z%4M8#K1MlBP>#nb z{UoKEqO{YLW`PNq#Ui&rm>Tjs!zonM_j(X+y)XRTQz4Qm_#ebk)_($r8 zf24l!Pt^1OOg;B6)U$u0p7~em>3^f1`giKd|Dc}uPwMgiK`s5C)MNjPTJpcC#s7y| z^nWRe&*MM@e6CQylL)vFsgMV;7ZH((I1h@D=OExh?D-rBb1lQ~(+?j$OSvpYBph3a zm~HbFBIMZcY=6RIzYpPaRtUH&g}hZFz70ewVngi29D4~D;vnV8?D#S}u2#m^Dfo^m zp|eKprWL#EB&+pO$QnlpWSw5LRwu+6vffd=!AY_~E!e6S?$(Hdb&_}|X^yLXg^NR@ zvt6%?Y|O=B%1L&{MSjjjbffq0Ki8=4s1=vAb`wh8u!aj6Qga}K8qR>4)2rchYuFuHc8iwN zpkvo+Y^$_3>kE!(8x6sdWTLKU}A#WpHgMG7J&H7!b86D=hwR;ij@s^OKYr6np! znNnD*7PRX`gN~x(j^b%Y@wl2ltQB@S+t;|tGhH1*w8BmHwtCSDr9|i;5ku@mLOX## z%I8b?9EhEe$A}c)xB$t%`noj%UZHE+$Dl6C89xA=7I4ekg@tvzBi#WrRp_9SH-OURlGkM7>Nt8mlm$n}l~ zHoEU$=i;}<)o+vMZvVX@aq%g6g~p1S^2YYshBn+-xVWGwIW{iPfB$ChEl!?moi=aq z+3dL+Vj(KHD#l0nb40afsWn$0rYQ4_HA}6D%JBAqvxsZUXAz28vs5gwg;v07e_ft)11UbPLgW9 zs8uiS)ryC;;^R8I8AsV^C&d|OtUkOEParu#j07Bf~yvynlus+wOl2t zQwch?qG3nzq#i_-OlXCpdMSun?Iurmkp*f*8y#$QVjGoIB$G-&RC}?=UPyD5Fq8Xr zi7MjIT&0OBv0*7Ve7)Fit-WloN*U>-&2V=sSnE-_$*XBsKyzTcIV`_0wjm>_Coz3I zHf3?9$p*Wy*F<2+OW&pa~F@xhA>JML}j=Ny4nfviGz@RPlzt%+VMCR!9xcD zG%9)iVUcp#5)O+IF&i3nRxD3iUx27W&Pr=V%CJ--WHCgwC{+-Z<|<{Gs5%G@WEKn6=zSaV5?5JS1%0Ji{kXcOr5Yu%P&`O>SU}|Ik#6S z9M(vWIm)J;m1i7PAL*Tbrg8o|oy)Iv&cAbX{-fUMPg=+SP&@t)x#mA*>VK7M{;1Ua zMx*&utGuC+pVdf4m0W01T9LA$O9@L=Y@$xpoK_8|S;GcV&02P)+7=qMM8kqcont8% z>eM38t`J7M7Ax5h=-3i9w?r!~RZA*WqDGYvD{EXY0ZUKlB{PopW6ts(H)VypGTB9b zKqK~)v2_x*+D@#rvr|Z=GO^e}EU*{xXB8>EZ({2t+o+HOT?!Ej*iffz0a2>fdX;EY z9#72W61{56f;ez^Dxug-BK2{w3sgJAIcYN79F6PNl>6+g@{cqHW#t~NNsaH0PZ^I$ z81)Zo+T@kJ#wpT6duWYz-#X_#p00bKRM)QF?&GsB^hk7ic2;IC?o^wVXH3s9#6`sf z`XBV(=Cj6YqsO+*KHE0!^x3$R%VAl#D&nyjuHuaCz#{enmPHtTf_@fZo_Uy}%rh1q zS|}=F*+4A+-TFezV~hAKX0NwU6fCufg{aK#?;z!<>^N!%4#QO^r4Zt*5h;)Jv6rlbC2t^RYJ{^ySRU+W$JUZ;mf{dcw2LezgyX@05Ie5_Mm(Kwvch=!G% zJ`I}@P_#!)q)W|e*Kk_Y>_!c%PGeiGVUc}bV`Ea=(u9OA1xq;$OA8dX5bJBu6~9Is z2^@x~)hc0&Mm(UC9@pES(A%BV*`0J&9CKH9d1%U3tKytxux&hKT&*2PV=qxTNC{W% z#4?xxG*>}a#=yf_BqT%yMIizqhivmgE>A#&&nJSd79tVwiP^y8F*bmd&5`j1jzZxk zJHZ~gC{$|~>m*Ncb5g3@@P!Rp^#lWcW>IV)nn5p58o|YeZ72r zz5F=z!O)e_s|;OnCKo)GMWj3%2)IP(#AR88d4{ok9zHX_Cgea>5)rU%7-9a`BhK{F zW)?Wkz|dNxA}+*E%(Iv99i##%RfUA3l(LClb>Qh_JiVMx3)fLb#9795k#iWjx~urm zvFdxM3^{S`R&ly$fjVtd zahuefIyJjS&8k$h%b*@rw%FXkK%<&lpyDu+uVg6?-8Dy?=tTm?lTe440i#wxX=wJNCA0+GJYilIo#5x>g&sR(Ak;)m^*OMYq+( z*?aZsEo;_q_T95*r~mHV2Y2oC-@a|yo$DDa1v&Q7wk) zjvWU?)!KomVi48BQmk}_r6MsQDg+dTaAApxcn~fvd?61a5D)7_;IP41 zdoJ5W%vmS4@wR8}RPgtyr9m#v(OdVX97<1$sEvyoI2w06IAUV&fnFb<`VDIeJah@` zv|&)HZpuBbs-3PnKPSDnMz>C`an`xGJFane_k_5)c{;E5bXvFB&1=g#zpWd0LcBM# z=mTtpX0_M=M72Wu%?X@wE3w6b60len!NUihvHS=Z%ulUFE)$&OUA<7Bq!4uq@4N^X@-*x+mjy*lBnIO(jq;H9B^^p|pYW#4Zm3IiW=%tx679+Nk8#skt?3 zPNkXy|DEVk!crR$HBZHXfQq?FE(Ek>#GvFDE^Bj0AV$Yzs0XPZL2*V#G3 zHy|}UFFUC-J#8u>_1uw|vq6U^_w4KS+F0qKPg$)FbyMtjk?(O*?QqulI_kElwQJ>S zSDDU9irEcdPgT3Qnkkd(^=;-rgqNepRlFU83Yw>BLPs$$+!$n3EjF zDgss?xM)6i*8W&vhi-4jvq z8dTg`4Yyj&Emw2k!au-L3sLV;RLRLwaOZ@Vsp4g+1UYI!p`)-=FKEz-yY5%bv}avu*Tz+tqgbjS8uso9mI?!I?28qhTaB?`&GuwV0&K zVNquf9va!QrPj?c%}E*TqS))G*riwb>9t!mdM}ORdX>{^7tal=w`}(G+p>A5_r@KY zH~4MZOx0j=r zavkk>&JKLg)mb5AA_MLk>3X$flS<^R5coOpcS~784%{R5oH%<{sslSu&MQ{(%hiG! z6~9$0>PFZKJG+zYqKona7uDxZ>R;;N>8pRI)Beg)`>~Viyrcc7PSBy{B1YPv<<@J+ zE)QnbD>)Ec)Tw#Z3O1}?#1=|a9JuiCmGYIgxhh+FXJ!O3AbJA;zjT5HQYsQj~QnPPCsRjg(?%3VB&Bx^7 zcEnY;SF7?>sl3&?&004vkImaR@7%pRG&nduDl#K3EHNT5I%I#ufgOi-Y}v8iXPfiR zZH{|*gOU@dy%g>66TchHFr4=f6sgeU57%at(50+xP2T=`5mW8F6 zau!&cuHb;8=}L$oRVheQ2{Sa(Os!p(PFn2ZQ08RU=%VO#*NnO8#$2?c9?pZC*7on+ z-Vy3wn-F453`vX&3JTx1&41fk?=>E4wX5BfPI^0yQmm8-?CrT?F_u>;3WArz@4B3HG{&udduSezlNrnq?ARCdu=`axRG zwdmxNq0wW9j&vUguGzjL$$MMq#?1j6wghbQJFsnkkbh)kSW4oNti*((%+!+Xg#6^l zjOehWQ2!(Qw(Z-r)m!i9t=i?IwO%qn7P0+F!r&W5d*wOR1se(5 zDc{jf;OroBk%?X95-j}H3cIyR>3X?zqfFvuC-jkW_elANq}(GCcDx-g(}9;K=bIFK zaMi39)oH|_E4=J}?6!{fXPjhL9A&qiHFsP!AGql*yQx9o9=)hu$F0_K%{m^=*y5{H zoH^lDsY#rcuvEc?0SxcSilVmJ3JBXm(KHz+RnAFM@KcBgQ&gfb zo>(r0{jb{Lw>2gvE+?zNpPQ9tHt=!mb$}$^LOH8+u07?Z8gZ6&=p;2- zeuaixq2)keh?c>-R}n2*q2!jSxFrfUbSYShcqu%3Xi;Xn&yw3fXqK|lSdXZiYzCE$wO1>s;F^MwYuwjJluLbJ-U6pIs*J!lS1kXqAM#? z3aU~wN|Iu7qJm-rb_e-x+~)4N*?ILkjgy;9<0zFY`4T&}K(vZx=_)SIhRa#S<=||? zxFO zZ0t?17|3fHDQX)mZtFBQHRjgUWY(0YR20OQXD3(ZWHlO1eU;_?Ri^H;oW{KLs_2}mEkH;q>S9JPQNZuEhGn@8PYOzeSoOe zw1h>01!8SiFid8YssmpzM^vFw1Q95Ne29_=S1lj{x@tvyorFhJt5l@77dtvgoMciL z2PsIq+Fra?!uPfl?vU~i+VR8ec=0kphC-055*k&)GL5uMEulqJtr0cqC7pUH(gExl(mj^#fl{`oZbg7(Eq~PT%h+jWzj?#)W zLuSiJs*D9mk+G9x+$0&F5LGEoR7+EI4ylgHOlM7&tGaNtw#Zdk>7s7*aB5rc(dO;h z?(f?Yd7vTpXjMg0NmFKSV`hdqHK8#6NJ?lx#J=tOHhAsuSi4#8b@4XU3Bv4>087v=ds~l;q8f_~dZ7%Gu&h9MA?lc$oN)_ z4M0dcx5YE6)k0JY10T3x6s+Y*%kNthuSK=aa+UVf7@{)d1WP$Kt1QnjEVXDue`>mGC?z0&fX#my{Q1 z&xvs0Cc%+W@pF`dVl~OF<6Nv3m*~WmI&qy|-0UcZ)e3$NIm!B+y0LlSz6OD_9V0_hiQ>Eaem^xOwu~pcA7-8Hyq-mMVj=k{xUl9XJrMG*KY}OOv$r zDSAb^vpUO7XK>T!yK9Xusxnu7?OOL%uMMp`x3wSM*OVGoZHh0gPc3LOWVL3c)}k8Rids{onDuIZ#N+Mn1v|6xzze_~Q-i+et{3=6XjmcPBnNw4q*IZUM zRMT*#x&3N)^M&q~i+!z^`kT&ol}**=3>Ief<>d_+^9S;c0|j|qhP3*Wq>9+1`C)sb zd_8wKt?`t4dP+8UN-QkJ#cbw`ww@Wf&Yl_l&m;vn*awK634$?P1qnev3l+cY!a`A- zm8&4kui+IQNmPseWLU~xwbFu^g{Z{kH`)F z8c^5?92^7=GNDW+l-moCDbNd9?gI8Ep^cx&_JEWX;=qYiaAW0&4heIVq8zm_S0l{V zfUbffwE$7pas>|w_XeG`UT;^Uvx6yHsuIGcHK`EVnl(gWi!xz+l2lS~=}n(!kQ0`| zwP!5S6d5Z?&PtToCdeTyBpu>pNIh_qR6gHIy z-o1SLCi8)v=7@tenGxoSq~eD3f{ttuHMu=Au^}zKDlx_weIzSnf5PtF(Z1UcZ{ECr z-CAE)mknBto4ryig8Pqj2}=7=cOe8zSJ|L`57j0@8zv;qFc#-o5!rGeU?zmmo)rO$ zC$`~{G8LMrYUlSi?X(Yy^Gr7G&#pL{$|7Egl2v@?nM!cN_g=l(!A-Dir5UU4&m{m5bW=V{ThtvU!#X%g) z#)gHxg=@p%t)kC199(m4SrCSb#8czgKs)0HjPGd)kr7LPw&7<3Q*iV?W{3K3T>GY+P(su3Nd%%VvcSchxQl+h4&CQuCv={6q~eLo3M95v7XwYO$PGWY57F zgfwXdB|4!=PwKBo5tN)=Cg+#Qghg^eF5;hRewvz>qUJ)fGy*&{s07(~9??-bm+|gn z9asq(5f;T^dmChOiO4zeYGJ&b2WKB{evYf!;GxZ2qf1|>&s^(d^l&TLw7z)H*8I?2 zhWLOCLuh7MTvlyLPD`etH9M!xU}(!tYtD+RPYJ7v4K9l~kbiJj`VOBM@2y8RB^ZPy%*@lMRypI04`V-C-)kIZd3YG{kh?uf`AimjN= zs6A0&o+>CkW+)g;&FYCy?~F_Bh)wTENNtNxZAnO~iHkNxgk=XEh}*OE(B?JUoZUAl z9o)Vz5pyGA`pV5q>4s_x-UA#hKM=@xeStLr)z8Ncx(t$@yGVtIQVD6bNT-$f^rI&Q&;qC+Kd3;d zA5=f90IEqYvdD$tpRAgPoKj1GQt(^7L~IcWokBsdC@?}Qj8jXKab+egFVf4a^wK$c z1(e*EGMeSIdL^M+Nh%lPkQ4Ep%|)zYv0e#UqL(iRvn5raWfb_Z0;1e{Rz8=J&t+xv zSY@NmSG}kBhyv^slBU^|q!O1@(#j%InvaW17#XM-7nQ?5g7PV=Z8i~$Y;?1Oo$uBI zs9>tg9JbYAUT8lxS7y}DFPgowa?aM-^?Mo{TNVJNOIsF$7VK`Cy{*1{)6D$!6=^H8 z6BZ^#*TqE7h>EFrn`Sz;@KUk&2W8u}r|fDgq^b`6<-|D*WqK4f?%?B%2 zo|v=#)ciFk8dm-`chR94jjdI6dn@bqR@d*Xt>05yw`=z7%`>W2lou~3$eNKJofGMf zv02_>{DG*i2<%5xtC53zgC8*aq2P&C@uT4WacCc_{Q3LSS7C+`K!t`d zL<&Dl73!~mok)jF_t`LKf zQc5w8s74IECx3Gv#!*0UfEK)&`Oc<>YrK+Ua8c8l8DI}$pq+%|unNJ~$DD7fG18SyJ5EV4)RPz{h zqaNBu>O}_aQloYWqgqPK7wMGEIvMmm=jkMkw5*YqG?6mM^nIbJ2q>LH31`vb8d_Yd zQ&v&Ra#CJK$t(0qP&q9FQ=QFd8}wMSgd-ei^b0&jh*4MCZRpXx20lsOZn_Qm9zI$&)!u%XUEK$8>=gqmle(bUq^+i znhvr*LgMdGKsU`Vjh5#VgaDlU9G#LtRUm$*P6N$i1@wS^4*C0I0B98Ry<)in1Op53 zn**-kioCT#yF;i@31v`J{znpsY~kGh5$MXr3b|OR_$g?bz^o3u@C{`U-%Irkarq~= z;j9M_1VmYw3qquN6edsPdT8t83V79HkkLa7z`HAe>SL8Z`awV`)BylggIZ=$%G^>} zm{1WFAdj3b3ki@r1>m$Yol*=g&8mbpxgbm~Op=PyWx{M+o=eKhDfLVWnMYzxB;HJ- z3kal1hc&WTqXC}>GNO$J6go%H<4f_1ZIuc$;xvQ#nd)3UXH8txi%a;`w z%+E=$O^M9)dSb0+E6&gg92EhXerXYfU%)2_LscMub_@wJFI3G-!fANPX%Q@apvKw#{jCG)@f z1|a!+6X4{~A*Hm?b>fGk{CvV>6wLCO2qnl&s^Ha#D}Y;8%gbNz_v7lTsVa18CCH#r zT2xApLKQC2#0b>UfvQk}(j|czUPU314x6jTAS;JzJZK(^H?U}fLDgVX&ST-+m%~U280kV>x(JgtBjP4h zJRfEW2=QzRyi`=F6Y-$p(i%nJT#S!M%eCTSt*F+3%rv62&BRU61tOn*Jad`kLnuZ4k z;?o0>fIv+^fHE*ZCJ;cj3-ukL7%DsP%1b1YfZ*E@%}RcqrV<5e6(S4~8I0QS7)wS` zWWmgYvIXhI%_-%}(yP{GS8mKLU7uC9A-i&GZq1H@s%?3dTl1^76;$smow2)o#_r16 zot4#F%4;@NR<0>4T~e6en3XmoF)}yU6K6J=Q5_-2G(ta|2&x33m-EY8 z5W^=;3kVrZ4m4xZ`KY83lfc9abe(2Vl3H3)t>fR!(~6qal5KADp6HNfJywe=>MZ0O zCq2VT)HtYGmu{w;ne8^z1)G7=#yD4Hc2Iedx2_~=ae4fj@|3N$*?Z=fwk)sNys~D^ z`q~xSW-r}6cj4~3#_hA}HdWWJsc2kUv|w>zM0@|5D$>4mG)3fHEWY{)3znqRUh zr+8y_*_MK;9VIopDynx>RBx@Q*icrvzM_0pN#Ww$oOv0kwF%*QK>(`J1W6xUG8O*h zlSdR+gZzjBr6iOYNra(LzgQ9l83xryo)HHxMxE3m+Ct!;h(>{Net;h*Aoe+~bG$XpLWX zAF<%8d@#WC%!dI`BV`b%KKY9Ls7jBiSwsVa#6}FUV5kj892hU?Pr=lRe|Xh`iS4+= zj*DEl*o%l_ zH9tlIqLlMUMFSzPhkhs_gTm}AN;aF8gP@@RO;Q*tSf&(jqp_QL8SS&HTVunTp-<}4 z&-Sq8cB;fp7Y8#XA#6n`TN`d_h;htG3o0%SDys@_u87@Kns_ij^>l8=#lqZ6WrgSF zRGw_AIk;-p&P{VRY@NG&>#T(vs+-nUELvK!WJ$@wWhL`hlr*d?nX|IAW<^ouvZA7< z?A*Ha%*wcg+>oevYj6;0Gb)UPSPyBYQUbXulvXryA>0C%$pazJg$x2l=n;vS5Q%jH zu|7a-o+dU12rODDT%wE!(Zxoal2RO*`61br5jis=^Xg(V>moB6BlDKT6|PDy0If*@ zP)j%G7H-TbT%TRCsi1OOS@n*psx6h}8!JlJmX@!rC|yxfurM#XAvI-2Y*@bA9dCpw z1v90FWAulM`Vi$QB{YDjpHj+4DNAF1=_w3kB!38SWeAwd4|-m?|H&sz5xM(1-FN3VkRL3}*uN@b5HJsFgzO6ym0|9#Z2*WFABkf{1yc zA}=Nm#)T0`V5U}7f=FhO>LwOnZDKdtOj{k+tuD*95XX9#X^DyCQADNlP`GuagzmsX zO504MO%$?#)PfpF%^ZktX?2b6hv5BOQr(EF7b5BvYULVXz!8T0G_z)6&5BD|sjF>l zlasBo5k)R4Cxp%l)#XI!3M1Hx81tM&S6xPMZE;9rMfkSTxRbdFHxm;dhsAY-#CCY& zJ`|QetFF2`ulCZCS%0jYb7B+TzPz|0S z#$_acRUq@fMUYyWLVxN9qB`6F2_i#+%q-;-e2IgMI?SxYOf>4l35fCuT$j{BkCGP# zjPc@uK{PPI>lc*VLC_?EV;w5bAil7mf!h;&2IouS6z~UVOrrZuvOijLMG2Ms`e_d128WGfJp&BAA`Cd9ZR-c_>$xXB6CYlQqOfyqm zi*v%3r@D?7#NR8->WGeiNxC|v=I;_)ztYvOkN)V0dl#Gjwy@-NZEeTgneFptKWVP} zdsfByIhB9aSDl(y_51v)!wV`~o2y%zt2WOm+B~yhLv_xYf|TVcG4sPcvu(y1dZwJ9 zGUci?g(_L8gsQT2`mZj9)U8$8)H1V5Vp2*W6}7+(6tT!Dm4+blXqzS}lE_FjWTu&O z3q9qvG35>Mg>$3x>Lc^!#}qA&FIkaXx;mwNZCd5}jEap}C2Mj@*AL9Cwbg5Cs#aH*E-uNRpOf2=kzJRTToVJ18kA@X3TDHc2Ctp{e<&p>L`P$c4u@Be zUWbE#QX|V#3bN>FKd5H*2de<;f6GK`jTB;}G$v95borg_r@!&U`hWpk{h;!b=Lpa0 ze}U@13eAJ6Bb5FX6L4h@ywqo;3ZV2KP=B!MW)Lvd{|43fqZI(^Px(GLDkGt`V@ju7 z93hkBphy{k&mhTpX5(BFQ*UD%?D__qZn49#F37e$*tH|by3&NgeYy<>WUCR|rc-Z1 zrJ${}0;W@73We{bn$^3kNQ(tIWFt;^%)dL`N35;tEAp0FRJ#>QXG?;WiQVQ zs?2cAPIazH^_-oZXKe=K)coSZS#lH-X ze-V@NEG4@=J@0XLL0ew&y`qvkWo5T2Dz8^n-m0B>vwFtOis~E1#Wmz+U-5)bgj|r>QLnjOkROVYLudR3h5>_dYZC6u|#&eW8YZq zcM$b$3O}P!UI}tuNsV9SU>3zXz&~>mjajMY^1`4wg&}pBj-{ENqgm0f(^7iEV!l~J zdILAA42>*&E;Us3l*#Q6nr_29wZ^-(>>*d9y#S9|gocj~8* z^p9a#-4VI(!*V-AbKVE%y!T{(^yGgFDe4O?9f+)$$e#B#wf0SX*@MWun=yG;(@XY* z#+OJ{@qvL+N=YQ431PGbLP}sl#-Mb0@Q5IFas-l|$YiCPip#@hH>S^8lwG+Xt!hzr z`NH&)g=r-VQ!5swL#e7}S$55`oH?s28aB>q-ZF3Tw&oQ(m#y8qX5GH^Yxb;PzGKDw zb&WNPtBdOMq3xSc84aKYr&_&{#;9;hbh!Ozj0)BYpwc=F5Y@A!K~I59|0VySZ#7VU z`Ej)vaGRc&%Sbs5xI>TGSrkU-tu%lNM=;L}2;RVPY=T1>!bl3@L#_W%hLiojS>qEi`|V)XB(!PoMZVK@5Dfe}L+sU^E(jkne~3ejLOMECo{Q zX$@S*fX_|{ri>B?%qN+@!jsy=)89vAyp2e`?hM+jQLKU)RGng-L4D9d|Lw3oGTLr3 z>`?>SV$s6#9JuU%m{A|msedzQj+>BUR`{lTCnelP3ieTgRzh$H2{@=0oWRl3IDH1w zokpp%wBfSD^>Mp6Wc1AKO-*{V6l?e z{itoy5IRD+2TjEklU#3+hd5-3VOVC8u`t(DTbs0CNy+@>6*CtW*DNlsU0MpNSzHKphM9{B>sOR7 zSX;AtXY;0gt9KsSyyxil1IJsAo;q~o5PV1^GeM(<(iqhVHhL*1#}-nMQTM9omtQ-RVhus}E^I z%_joIEh^zAOt72?SWOFIRn7%7{g7d9QRGoZyVs!E&#DeGs$;D74fw6z9hSL`;}0?FxzYT}?db>&f-88J+{T+>uKVHc zCr(EPYj~yAy;h@7HL@qT?6z8bht!T`B_~S=U2+~fi%9;nckUf@9fU^4p*n$-RlbNF}cBJ`%v4U#yX<3Ole#k;pOm% zNg`^3j2a_j#;N!TCUH`qGGR=gG-r>SbH_}1W2XEuW8tU?R19x8TM=i-;vD&tK}Fx3 zSs#LP-^Q1;rD;##+6=xXBhy2)-Ra9qON&m-P$cncI{n%>_p2Se;zt_;l%k1r!HRl>++Qg zmo8m8d-m*+-;eItw`1|zMb+~wvS*~nm4c%Nc{3crF@~^cV??a=XC2jFp7JMC5S{)! z`oUCzQjpc4<7J{jK&joNvzsZ9(?qz;BoC?)a~UwFUh85tknixfK4D#nPrM&eeqZH5 z{dp++1IVAg$`9c2Udr1k4=OGNP{B^kw8F-~eP@NsXQx2vKcE7uJg9C;VAL<*?kVKS#336ib?EIkgC5hWeY0VK}dJwQh0NiQ2t@yN2X80-4h+4t7xGlyO6;Bi136?amhr&?Y}<> z=}kTI!oqZ$3_Xm#htzdx&<=&79oN3J8#=>XuY;}a4E|W9c&$)%p=i5O@Pd}#ko|HS zQ~srq975&Svf}>8i(3+DoF8Lsh+r0m(EDRu_j8ipW~Ow8hV`1AJvz%z)j2oW|yM2wP=Q*<21By+}e&XhY& zrH|{f#+aO8HgA|M7|<1br}Ms3*_@+foK7A$q;Z~tad$y~aQ>Hw!q>3{T_trFlXKQM zTxA3nua!bo#A{GRx`>1jeMx%wg4%-Bi|e*-UcRSg>-Ifc*KAt1ddtQwExYy{KCtJ& z-W@GF_w3#I`|%?eFZ_Ay`uY2JF1Ovg)pqapqdRxn?%uzD^X|ZVz>$a|& zvuIZStlXrs*vJBJM2;sk(HfCti%hirY)HWya97?}eHBzl{Qb!kpGN7yMRhhK1L7$) z>v&2{I=J2la$6`~X2NB{-9`}VF(7U|q&aGMb?8+fSWyC`0knXt-|PN~A)#0VrpjOG z1z+Wb$pKNnU{TM1gX*_aKr|RaQ#kZlDQ~K@66B^8E=mrL3hO5P9V@71!Qb@-s0xNw zvN{#q81fLxLX~{C(|I;5;xuFWQ;A$qsLv_oCso20)qi&2ziy=evxffHI{M#Rm|u61 z(|4fLw;;l8m~;ms*{zWr#FQsl;twNrj71<5634r z81-3*JX?>JhC8a$;}*@V*ture!JXTW9cn#s;>58Nr}iKI?a0Z$PW*NGuM0QMU%GMW z;*IN9Znxce{Nl;8w;kyX`kF-#mT#G$0MP1K@5# zdR0nXX=H3+Xk1QkTy{`GR*)7^{v&9i^8G33OhL^bim1RUl&AQ@6b~xpM-(XaiSkiO zI<34sHo|Qsd6@~fiS&u~7#WX|25w>fqtn0>YtyNKRag(@H&sZ$q4WgFIMe~4+vRH< zK=Dcr0$gca;Y;~dMoML(Vegq1ZskL=&+j_(vFZoarBnJdDHo}B;7Z8oEvUi>MJ-GY ztv8yKQ?wkK#jH+lU=*Raq>)B1#K&HXi9UoO`{kmeDsiiPdaL@^{X{^kQMAu0*=Y&f zW(e30qJP~&{JIUcQIU#0gkldWJ4k6x7^#zH@(8PKr4>NwK2mmoQk*g4S6uqbX6jE& z@+Ug&Iwk0!W$(0-ZxYdvNIWVK4+jPgNkrcj;x8IWHzIkb6}{C6->3yIHPc^`qPwbp zJ!2HNQQ=iwdXdrorbq7QC7sKR-t9H)_vmk@#B^t-bcJ|7vz8&f1J3<-1pS1h?&|PM zwB{5dIirzX#WbB(+b71{N0>%&+XQYOL#<b_RgijJN9GSpT zsT`ZdF}WO5FwPVXvqgjY;z72w-%vDQ%9#kt=ORk`U0Gd*q|t~{E_)uAQ8$!O`7Noc zD{IE{qM28Vs`h7OE{%(t6&Lm5Z0IUA=Yn>fKA1?%ur7e(Og2 z{Tm%m?!0=@_Wr}OkKM07e|`74r}IN!_lJS*?%wwwzP;)G`ugLi7hUh$-`>A*|H8S8 zt*!f(uUT5tSd}*;E2TU!sU#+?Bs#4qDy<;Gzp4c~o=|4TP%VyW{DQU=&nm5D7*wyv zjYiyTCP6kEYqRNWHp*cmoes?9MBOgTM{WTZ1~GoI(&r_?wslC8aupQpbu3>{lZ>E!`md zD<|%xQ@;m=BU{)4DLfLm6AOS)a|b?cHx;mt6}9Sx2Wa5|Jm3&AeLp%K{=jxrxC0aI zp=1!L9x%Wq6x9K}5*GEe(vpLeUeVDDF*u^(eb7%SlV#%OxX>aXkYGnD!_LVlE#A14(zTyp%^zbLAboNowI%y6WGlfi=yqqa~l8qRn!l&pM4o-GUE~n2KB{K(!%mF%o#8f(I zujZUJoTr-el#hm#^>~XrgK|K_F_m2Ad@g=YuQ_`#qM|#Y>Pl?>#qybp;^LN<e%+1)>?8uWpwqVC(|77b+sWxIl;98}hK-RY zXvs-j^ampN9pw|H-Gpctypm$r&(o?`wi@KEtPFObL8gC{5}z|8S8VtNM)@ZuK92}* zqT;)#I+Byy94wLbLL4R3?og|fq25z;_1vCu zGp_JNPFbndwx+uD_^PHmM|OAKzt;2i`RA?=AG^PP`Ox?EZU4}_(eXE9+`CEc!zA}* zitC%48lIXM8=o8*W+ z=?|GcluzZsj1)kn$UuS?=_o!NHK1yvRs-`VaK#V!hpVPeOyyNd;>3Z4GRZ;$-(@!L zCKNkV)3z%Ay$cWAO$m8Wv0rvj0lUZm*c^3KFFm1`pVG!=6I?>9l`x zI6fMUUl{#oqY)OhwV9aP2KpkcIYGz{VWL(-bbu5ez=W_O6+nGqH@{}tZk>MEVCQVX z1A6NKYacZRO|o<=S`#{|8_rbE$Yja2Gm4Han)~GFp27Belb_y?_4bSn zj*j+E4tyCO|HyHmPaOA^Fosv!)4rhI^6AN-;xpmv;)a{)! zXU~lCwI#XD>4`IN0jl?{gCmWi>jBtu~+OtA1+@vKOcg3JLG1a$%1`@Lm=0Of&5P^6z`ve?3wCPlw`P9hzy+DcNIM4pw}d zRy}}~*IMaiL~(=Ew!>yNw;gbOX=EPL*h3b-qsOl5H1Hw%oe&@K{Z>aw=>bgu{HphD z>{FZZg@Ns4P5lI>=#)2n)|hE3T|s+}OBx z@v>7(S6*7W?8=gb=jYd-m{GZ}D1SqC+Tz66S>eG29!Ij%8f7-P8QMUi7(Z&ocTpuE z-!vBtalvOq2|meCVnESI39XF8!HAu##HIHY{2Az?@^yY+TS{vu;I_W6bbxCxQiD=j z99mI0-=U6C$}3T9wa(N+TlZnqep0cY62sXIy(HMV2d27*3~bejTCiyciNN0}@t?Hp z0wujn%5G4K8?^c|gPhf=PZRQ!s08!}CO+-c8B}~#uZ3-smoeD|Wxy3R9Qx9`TJbZD z_?24tMk9U8Cry$rtr#fnm5T=Dk|DXMPcHnT2z;yh^{M7RKeo~l>9Ww$0x@L@d--G zFYw2u=P1>6mUv)fo*4~LV*Tm}8VZW|!k8hx?K8N>?ctmwdeRa#W{e&;#*ed!d=1K+ z#~1lMKqi1%&DknAQwis(<$`O*ZH0r5yvc~NsmRj)knApN;%i&{+o&vVA!NGd-I&@?cv5Jxk+w(XmVnRn;hgg5P0bb$Bj*K6XQQ99Ro_i zQ32FpZeWP(9|lc+@9+Qk>HYJL$Ma6FoWF7V;`Mvi&R#or;`~X-q4<4S zu*%gpW)GnHFHFIeH$SVs06?YFY4`wu)i_L;+l&R-Ft3vga}r^0GSo$Ro%#@$Jti_C zFS~a3tj&v-{;_8Lt@T^lH*9&ieqG0^<&PFMUvHduZtkq#t14Owa@S;}&ySC(j0nqi zJEKi{hmK-M0wYlkL>*eKR-;7`L<4a$MaTeDqfTUDMOH>+W5ss8#BNZ)qJEnJ;X7gs z;i3r_L0D0gMYOQ2UW>vED-3BVfK^xsW>g5{G1V-Cezn!QnPInRG%chYKm|MH_e1i_ zOGU5_8WxzhV$+Y|f>VU}94@_tORf>J+l1mSrMaooULiFXapeU75|drT}i`s-8muaDK!+SCDUS|P*?k0>Ru`XxH#jo0zeroUw*Z8w)DsBCEN? z857}!AFT=f5xHHVsl92%+_DW*P0PR3HC{|i+3j}ymX&^IaZ~S^liaf>+_$gX@Gv(v zIX*hYpYY@SIS&TQQ#w8|IWfkKkMMR1uVbUUhDU+bslK6!-oDYVJ$)ZOK;`OH`-5js z?!0(*_w~yMuiiX<@&5VU_J^16T!&KL4SXWVnkCcQT<4W2nO!ADLQ^S65fJXZh;O8@6?9-ScV3zVF+2_iWkr zdHu%D)$3lYTK#z0@*7P}f7R6=t*PE#QoKAPbyidaKgn&kdM!qm(coYhCrw*Pf+cYR zem6MxjkMIvLUu2*=*4D(+-%gq=1+r>)Ejkrz1~b3t+d6;!fs8c#p*KJoQ%y1oe85& z4{cK?p~!$ade}cRs2GZ?%v>O@{#WF8c3B_;kpm9wO84Yo!6uy>BtL*=>())^@AomEHNlV(T`TzMAZVuF#2)nDLn+C&Hds?9E#5AiOhHx6yKAO+u@0R6_NBZ zBI!YN(z(>Mt8;2U?AycLyUTs-;=cECLy$F1j!$r-libJz2l><3*u?1Q=-BA+#K<5w zHpGFWLJYuz3Y7LueC-{DlEE{N+t!_*HgA8ke&gfSYi_Mr@psdLtXM%A<6KSyN zjb5uQE;uALIyNUUxga$)KQ$#QJux{WDl*Yw&ap9dq4pI~uB9$&iCzhtc3KRIL#+Ie zo`0my5xwj<43p5}BWS?yr~uOTiWv!? zN*D`D9)rk_BlAAKPux}X!1}@*4LnfSD^`K?(G}y^G9Hh<0dD3$rGIU zquk^unCZmm#P~3z{F5UC9N;<%`P2wEI5^(ZGu-{Tzq9l6ix=G;Pv1X%*!{AtxBJCt zezk*Q>a2`mjA?b#UhCrm4MvSUOh)M{8H}EASJCK#@Da5Qp zVCDoI6+jKQ|@roO3x4ql4e`xm+ZvSsw>oM-Y zaqhseiTy`M_aE-xd*I8y*6yv_JJxS_uz2x>xwDU!m2A&SUlAWOKgv5RDx@Ylq#`1y zz->!3GH!m1izEyT#>XB8t-(wHrIbNO7!5j$P45h|gy)2(&q^tc{jweYJ-_+2FeN(V#%gM#TJf`Ab*II0-(DToB#DFZtczdlm_@<=o7AtAU$2Hc!wsHdrbzX-uO zLi{(SxS~@*dIdqk(_qJ|DDR^n$0de1&k%QQrk6JBTdVnl!`TxY_T3xVa#s+JS_cVRQi>S%!8TfH z4YOepb}Z6?M>};fZgaT96B&}2o-(_7#;)e2*H>+RyK&Fp&O=kJfavesp%dKUliZP$ z+~E@whmVgOJ~p^-|K}Y$->qBM4&m#Z*=Nd&4`rusOHEjp6uBfRVnKY^?1`yT z3^VBMdcBdN2t5qOnDs^zqi0x?!5rlFMn$A%WY(9Jt*M*2xq0Ts)wLV8)vnoHykJ*S z`GM%%$upU z?=12Sk$e*W`c3%jh*ZeQrBf2|kU%h|kPT|&J&3Xkk-bz4AFBc$siuRA-XsFAk%2s` zgy1eN0#m)O72bmw0GHp@N*~ckXRxC)EaaKXcH6+5R0<$KJwpflMFpNE1JB}u^O)cw zA%W8CHJ#?B0R!)S9vS?=YlnXBIU{+?W`w`^%3*;X>*rAK*RaUX!4V%l5nqC0h9fdY z!m~z0v&X!-6W)9-w3rJmn+h%e?#desE9K&LA>X3y-{x4Y-+<*C;%$3K3Y92p!LgJ_ipb?_fhryv{{ z8Jrv&oEjaR81A1K_|6Ru0IP!^KYn`ttneBK}^O`R%TmO9BuHJ2}WBY%bI{5n(P({BoU2vkf0pL|mYcLAJAPwo%<}lic@f@9k2A|`ieOn6rls^0 z>(m=utRX~ah%q~gBID~)OV^dI-d(f%@a&djGj{w@vEh8t%8RM>=fesvSQGBL;_lkL zmuTHdL;>0HF>7h zdNk5rsSw(xV-m@PL^2|h^ooREv{q%$HDZ`WX;TK?R|nok1vd#HPu~h#@;`BeZQ4+8N~e8Xfu6Y`&51%%N`vEjGPY?CjP5%+dhoYNu+yU_xnrleJp~B z$f{23C5Opr2a#V6YNs92PWw$8aKaatULvK}DEUJcdBUO{Eb^Q|_?Qz{zd&Sw;zOC> zfiw_afz>yJ2KamfC$d%wx+nSNw(wstWb)Pke@k&sGySIQUmq=Kznz-2F%uLzAQgT8 z73NZe<8sw^sqC{{_Fe^cD(O&)o+w0*<-&)Gz=x;^j{C=ixSf(h%^#Zn&sjC-0V4X~ zGITo3ceILER!e_O9ArjqdIo;gze({WLIk?#(*<0778gOy>Y`3{&4S+zGTaF^U9nN; zj3_*U>W+)?oxXf@iY+-1QWCIo6e@I+CV z0D(CW7!!rz5ZEW?6TF8z9ctcG;o^xNgNZ(m83{3|y=E0W2PeWt#<;B!Zf|U4R$lJH zS#?L7SKe8%_1%U&-}W3D-gkKP;E~D0!0K<@k>gYF3h!GFjqhz8+0`6^|P})ib$VoB^@x@q!v8_s5H_JRQ3W_ zyuuVOQ8@q%Nz-F_z*DXG2{cSqzus2<@&FgM>7q(F}^DLn7(0 zTs4fKU$xq|YDI@q0+c?HOP(sEPZi>KnDRZYd`l?blB(B~;uWm`<~wvsNU3@vT_edc z4@u-cNqh(nd2X@6D^$#G5b`US1R7X>6Z}~KA2hI8Ums0&Nw2`)OizWmfCj^x% z*yRq@tvhx@Td@6!*WKoEK6E;txPm^$B=sg_O=OgCSydD9#eKo){qFRMpjJ+l~C-2Z+D;$v1lZ zm*ekewR2mWR$g1V<>iK5 zpZ6RX*>_<4z`@CbN4P^rK~n%NXy1X+mi@!K_V(@A)4O%&*9}{`SFeA!V%5tPD>|B* zZ`aN_Us`nxo}rmvv^hI-NlxO->cpzL$ebm?i93Vh&VQ)D;AI$Bz>`UK{ieG0h!Zbw`h0GilEBl;C8>xgGs!bz#tQPTSx<XgI+GZsCECFyUK5-cREk%W{-%N{#kQNA`Ennv}+Xnd$Me2R#8s;3@6 zIEu-xAmS^8^a>@v#P`u;XK*p!_GJ|3^{R7v)nBX(Iv4PrOGX4rTi0yNyeOn_`PK2xB1O?=G5*h&stlPQ=StAO`qg&YeP}y(bX$noIBUk);{_1Gv6K^ z8;1fa*eRq^9H0sXRj61&6?JN0Y!cc4{u=8D=j#oOeeeGE;n}CRZG*ipxN-1O&|8k{ z8Xf!8H_-L1w=>jDdtDUYTKd5%3MGBO6?*Gnt^eT4uf65(@{=gsQZX7y2pHT}G{~y* zS`^_HWw=cXMJlh&66Hx20+2-z&CstlQDGt7T|U%UJ8aiPi&C2M%%v4^167 zG!EK(U}(?&fn9sQ?`-MazW3Xgh^xbi{c(i`=QFE%VVSwDC0 zg6a)R^A~JLt=SiqeI_LFt~>g*-P^6VLr43)PWMtzK`ZBhgSz3QE?VK)psGuH<=Y7R zD;x8aLfa8_2c~T&kq5Zu8m2f;$j(x-bEFL3Kr!kPD!QTxyrK$#iqJi^=)PL;2r?bD z2ppAnPQLV{enzXFlgek99Qf=&ATAX>Q466y|4=<0j(bRm0MYw8(G7gsdDZ{9Mg-i@ zOo#ZhORF5CD2`@1lpa>2pQOq+QrT0f^obl|RP{TY_(;;dI6b67MilA+h4QOX4mH@9 zDu`XD-&Ie$uAFwCR*vN)z7KOnV_X+iNM0N#}T_zQ9=%1sZ zQ6>75k@9>pQh0xw6#PYs&r%XF)jxGA7z4QGGTaKb-SAj$x$O5muI}XYFUc7rStVTI z3^3K=jr9)ozU}++e0=CFH}PR=;@#Bb8}QZ1sV^g=pNED%MFcTn z9$lzY$NQ=k+M^i6pTH{2e?k}lSDau-p1&YZ@b@>NLS$ZPbv;EzwtuIz>ZCkzZ=DIa!w=6!qw_)3^jM>NH zOD=d*?>M4544(Ho+h@x7nbviDZ(Zb9!m(5nv3IV%j^Nnm>UO{n>WiF$#fA9VB= zlko$~KEv?4TJ>!s4o};;Zp5Gg3RN8_?_WfO7gfNj;HH`{-9OYy+O;xBpq}xPyf>gP zDJAd;dWB0t&$L2dsT~vCQU3de@;~=*0Ziy!)%dgQWhrTDc5J|n`1sNjm? zKj&rt8c2)&93Og@CEziaH%ao9+x^KK^4eyGc;Gq$0f6iZE{CK4EWtAg|JCR9;G)8l z*z`Z3#7YU_1c3pt-%#-%I^_i`aoNdUw(GCi4L2R;&g8@o2}$46a;6F@r*g~t7b`8a#_=;DRL^$k4*rISU~Tvg*>a`CIEjG+a~x#Pzl9^A2O z{rn_&v}p+L4P$bX!#6FM`~3X5fhSLgUcckML%no-656Q~|A0Ed2LUh$&^OiFH}QRx z8vs_vCcaONL)~=%Dp3o=n8%KI9ole*1{C4MqdcZ? zmpdjb1tz9u%xY;`dTIIkC+oI$?b$KZvVC;-wuxQaCwA=QcD8W4_H(-qPHf*lxE=ad zd%pmsE&F>8?C(Fcf9U^G_8v}cty%WyAMswjH#5KK>D$*PD;|X-=_m(85+HJr5IN_Z zgUQZ0;hexZ;((29Yz)R=FxljsbIzQ%kLkJHucv3KrfT0)LgrRMv9!M()>_~Fd#l$= zRxjO|J#(%1{MF_=w`yNpd-o#0=y_0LnYH%2sY91UH6$<}7AS{=ias%fd{7|i5eT|W zrC%}THxPp;_+@mXE(^t|rTK(RF(s6aW1>;MXh0zB!mt)Tw?T>lD;~bHQ6>3qDf}Ry zy=KEgiu3_BfyL-o7P%HNZloHwP))iJYCnrICSmn+OuFd%dlCInuE`ii9zgZmkv}&g zf39czxt95t8piJswG6#_mO%r{=o?MH0U<_A&<(++2@-ER!=RgK)Q=dAGAL6lWQxI< zpdw>rWSq>Lp|DoTj8zlroC#@~N}gmje81xGo2?(AE z3ttM4SP6^36H@T>+y!0eLQq0mK;-(P$K}NrbC1M%MXD`ac`7w0Cfx1znS$>xpUkv2 z=5l@Ru!fK}Ly0#>0{0%ksNp7+T4e^r!70H_=@ zInjLCm=Qp=w*-`;u=IDaRsc|49eoI(rrpUq{PD<{=Cch*2 z%ye8NpTwkN9MK>LgLK-;<1}Dsi$YW-V13~;VJ}%{C4mdXUxO}>Yw`v)2CP=G$+b*! zBLed%>Hv!|49s}}GRPwjuz+WxKg=|M?Pm|;_g3W3&7A$;IltF%^x&+oL_59!k9Lp%#g^_Gzv_v zAf0xx3|ct`O$Ws&kqN&GSU@cN z$~CFx7=Fc!D>0b=8$cp07n+ob$Up;oDWm|`3ux7^;PWV?mx*ZQB6@|C@kPd(3eqfw z`Hp$J&xiQ0M1+oedo6^7?#3kI5$Sk%>S9Rru$TX^#&gcceKKD%)WJghvTZLD>ey&D!6qq%$eNL%IWRbZ#AEa2WURLFZ*_j@nzY zoh(^;!x3r!3!6AuAFZxIaT-UaQTPqyHznKzPLwx zGF3OqtpJUEA_>Ta288gG^$F#DLISAm96_r{(jXCklZig_Ih9;Ch~4_7vf*FpbcoCE zW^>xu>_#pdvQVp;q!OdQXPLld(2!B9%y@4F)K?s%GPcnN5QCtk1~#Rg1>HS;l*^hB za61s=PKI$0%eaq8L@(Q@n`_)5Bvmo~@{#f9x6Hqkv3`gDkqE@Ff}}Sj#zur3sBByL zlsc}_S9JeZ^!GY+UlXd=%GloyvjU1i7sa@nLhhncyD8Kzl2IScq@S2~ks$p-F8#sP zhl;mFLj6SlZOmTL1TC8c1CHOgh55XLgF9Fo_{cYo$rrYMC93}s z)q98P0|x;30I!7PQUU3ifCRimLIS|2l)|qmpa9S6y^Q%;fp%-ulL6XcFW33dfYr#b zF)z<)|A3X?s9{@=d5@6!;Has)AKh5&Uzq$kH{QB5-LbaVx3xaEy}b-Y0|0do zt8Ug}!0H}c0kMwen1dN_53YdNy|6VU1gDltVoCrUKL;z+*^2FK#et>2la#`|RM6PsdKzpFZ7m=5*VcGhJuT51lU>KYwMq==x02&8bVb$IsvBJA1YB zOi}Bp3$3TlwVgcGcH($bL3a7+120QbAHR;dQSE=M!6mWD%kH#E{6ejVEjri5nI2Dha=gP5&a~O}e@ENTfqz*{DDa3L{9T&0O>cp94(J z1_kzsM|q1F!iv0FfmSNmFsA}`M>)sn6W0j3=_VevgG1}*(#J7$3aHC86Bv8K@DpfJ zK;8ps32>o1FzPq9VKvX_GiCy#A?V9K^JrBV`v-?LEfdd(`LMC-5YS=MRLvz)ZVjf_ zz&HGX8Z^-L8tHm1bi+0VsfA908UqMdP!&T4hMm-RmH`yHb(mqD5ZL~P4SdqFhi$(p zzllL@f;=o1Z#lc*aWQyw1Rfl)>ft(Ot8A5^)hxqu%5Rk%0~r3l<>jZ3zrc)?@n#V=;^a1C$fWMT^)mE_JJZzfFdbX z_vGH`vF>m9$~e9;k8c3L7Pod+peTh2)GEHdxV<#FHPyA&`(vT$`($0?RDH)xQ{Pj6_p7?t7WW({(Eho=(pE}on`h4H1i@j$qcb_b3J9@gl@OX9Zp)XnapVJRiWTm~% zjJbLu{OmpdV-=dbHtYBSiQfq3IEq;g%9J3o_-QVIAk-F8<+RXjMqoB7HE$P+p(*}h zuJ|D2JV!`hVGHkQ+bx$3NI;Y!h78;(610f-LA zo>zm;4x_eWRA}%C{RoFK#bu3gSffm2giaer=o1WNj7jUIo3v34zS9hVyHdlYePL5R zG02q+T0Ix*6^f@g*bK@ZM(ICUq&lX473=p(bl(@AUabH=1^Vy~l(Gbuk4J+g=?@MW zPWEpY8Prmhs9qJ~)+ zNwxW;z1g^f*|4LsRz#~5!9arqQ({P`FGQ3lBI+X{4de-bjb93{rvl0=38PHT1~p=@ zx67c9c0N3GIXZg8(`UrfZ(IihtN7iptv*6Kt~z{GUHNJ3d&4LvGxe+1;MmB2M;2Ae%1Z3o~1j zLks<#Gwn6wUq1|$zwIge*!%8l|Hp>G%8t>xp{eGnxt~jmy^ul|r#dDFn#Q`mPxLg* z4z|JSe}1eVrmTDC{vJyI9;lF1|Gp9c+(N)RYI7oBO5kXPxv02*1*!^z@sy*L($(JC z&m%lMI6E%(Ysy!FWO=HsWE4;}xOUGOnI z>vdwvv*_4|q2c!<0xx9;9X{=y^4KM@)+TC5;y=f621})7p4pUCF<>U`u#&c`q`l^f z5ruMIWIivn7?zpAjImB4tT&gJVaz8?QjNK|)yfpgIlw10P@R12r&s``>31a`#{PiP zieGC-Sd_ox8bAsHYR5;+uo5%+CLlHODeV}MGa+*hgM@@dn?#UF3U$(iHcv%X87R!{ z=b5Zggbv3y)UoX>qzOS9DfDIvvzsND;>l-d>{%KD{eCxt1TED!)Zi=E5Ok?koc%TI z{q=0aW*(_ii1bKU5I-gCW+kUaLWe%+BUk@3->6Dp3~kXDfHcnpbgA%h0QL*Cbzl)N zL`6D{Nv(8h6N>`Ot~M?W2!VAhW04bMb@5l4ni#-?Tn{-}bDgv#hDF zqJOk*e6nSJrW4Nn>7ka1p2qRchRN>c@vi34j^>e{P43phKf+BV_#<4c_z*yj+Kas} zA=BEMiySP7whOYTt2NI}MTDz0AO6YFO5tK-r*ro9)x`w+XT?MuPfEI+oOvtxz}<}O zX9sfM<>po87t|IM))f?fD=7Gyo&6y#wKOUIVN4{jsc!)(B|>*J$0P2Xqt|n5&n64+ zX|dZX+h&WY+~z6f#o{qjVXuX_%TfySnK3y5)H#twk3`;LD*q}G)R;+MfFu(o)!UfX zNcr^w&JQ-Tflm9uqBjeP6Cc)#pJC?DHT=v2A_wfs4azxs&?du+3Z8x?7x*DYfT9kr zNe^l=z%l{R{Un1tWo)uwOkO85b|_4oj^YT4GdMde&L)bjqWmSUaET*X<;d4i(`^J_WTtYtDXLq~>~RM>F+;276qCiMbRElaZXK&^3Q2o?M>-1pTL|4;D z%Xbh__kFMFtgULTssNP!0nWV_dzggRe~(poP5i5s$jL$o0jU+h>866%!zv$gva?F= ztg_PBxdAcNTN@SZpAi*xBo^GRlP@Kv6{lsEW@UZI$^Md?^EE%G`as%;jHFj-u@93Y zij%``CkEY!^}Cj;JCbXoJ#S|DOkvrqw40IIt@6yb*|Hs;cv&czl48RO(SWIBNFjx$ zenwJ8V;kHO8R1~|CMSC%;!287j`u7gh1+m z?$`)&R|U@i@)*4Mgc*G1=vA`z6N6BWQ3p!2P6G^MAnZ*d#w!fQE}MgM_&Ae?lM&pI z46$oM--WS~5p7YQzGlS6Ng~`>vi%!(`CqB4ztffsp^>ML(x|X4ZDE)YY$&!dDE?rv zH7a0F3DGGY6ZTM$t_QhDpP8WDlHaUAYX#Iw&`LA(K;PHEA;Uzsg-wQZ+Q&iq5qi^a zzfE(vBWwmRwVIel5HJd>XPbOu8-Iny5H%Tcwf<>m`ppc3%_*1*m12}qJ{{sQ7fMqq zAQKM##~A4$*Z3iq1lrZ7eB_6#y4zbj9T~YCpEMg5y%LqW9-W3KW#buzo2i*oVNnZ# zk$7|}9+QCw#cpbXmu$UOlpf<^=Wc6{_Q=@E^M`KT%*neHo_;YP>s;WGOHtSF9(Yl9 z_UreDt=;9{+TVO=diLa7@tuk*m*1Yd`11JKXNONb$vgbwz`@dtV`aJLKOVmF`S^{> zllQ({d|q?oef_M;ht^V9xQC|P<_1Bj#{sE-?$!dWO5kC`*AO9eRSBT+ceXNfv9@uub}vvN4`; z3AT`O#j23MAmqWcd_p1yN#=yy3~WONWo8W`;TJLYy@>rv$bgpN8R&`RoFl^OHmcH@YUyRm&r{D%CZY0G2g5m$d#{XaXt{!{# zcaxFdjfYIgJ!EpTu|XrruoIyUvXOB%bC%6sWV06O$Q*?_OCpU>N!?tekw*umz_h*P z+u#4K(qvzssqiaB|2xI7myeDs#DhHaC)K!<5dFtYy(esgXFOw=06Z7apYUj9 zGOSJG3_x9oiC;}j-Ac*^tm4TzI|-SKaVg93$vd&B1W-c~ao-r+BYeR^v!c+Os&rLeRM{^_TE^3MgIzM635PS&-O>`Ns%CvRpPyqTJLH9q-bRMN$W z)XULX*W$Bp#pOIm$a|V}_*KTKcR6R?=bbOlzg&L!M)~pLcc&hgUo8JzT>t$|cT07D z^S92gmCYaD)xLT4@#&-2B_)4D;NPA5@aF#nRFyzuMW9q`jr{>st*zMIM&@p9>S}G_ zW~mY5^1HtmH8)^ya2bRfurg1sb_$|u_ zRvV=(!xwBrs10Da`c}$qc6AsJ4W5gN1)%Px=4`}e?g4c(>u0pWoHLEBjJfTK3?<)0;OnR{Vb&ZWg?~aJR%D{_cBzq15tkK;6Tt z&Q79LOEk7}z^a>#rMs=QR&5VufYu?v+cn-#mmB1BA}aJ&T0&_~`uoDP^7AfT_Oc8@kfmLnoE1iHGxCzF2@j_uz!K>zC$i-=dwFcW+#Tia=gbzQE$dCW$c3* z6*4NE{#62#8UYD*IyF2a7dH- zH%r!^BN;A|j221cIYX0q11cQ-J9@nB|3J6?AIAE>FqZYu1uAcmDV}4AXSvc@o@|08 z93i9g2!Dx+tx~wFWORkXSfS9DsPq{o(oG``3b>tYW*^4I!-7X-l13`I9=KIJv`@_M zmtb9dHWa0>L;xW+Y`ea)4L-B=KCuldIYuCrt>V)mK%EMTl>rA;4WIFWW(b?CMj^W% zV>AiaKLwn2J_-bEn7Gzp^v_%hSP;Bq8@<7(@5Jl|2h~u3-%LdGdU86RRj`wijVEVs zCuOZ9XRIb=?8arl@SmXhX(Djfutjr^6^R=FwcpCE*2}9n+3!FmTq>as%(V&2wu{Ym zNh#2#6?i1(Xrd0dcqXfK8Ma=zj($g6!_RoeT?$CM7MyuAEa!f7{*%~4FA|TwPCEQL z>DZg(lV$0r%d$>A%{cQQ^Wwd{l1C?Bm)@u>d-V0qv#M7wUfq9q_uB2NXN&f5_+Ov@ z9Z`Zvq7o6Q6dI)#s?7_(&?`z*BD$)Kz$E1jCwf__{OaadOyY; zk%$K5qH%kxK1T}>ZUEW%J-Q!ehIX*p9Ncbk{yo4upxVd z#KTptxEAC{ZeU~zQ;TsU&WtfNMTpiF@(7kK8r&a+PkC z@*7I4rWpY;LDB_@8Waj+LN2T=Mnzoc%YYO9gO7l~wt`E3%O!zHX05duH2%}!5u2$Q zcuoPHmb)FFv6+woKwV4D#N#vZuoT=ocGn%ase$uK&4R#bUhXzvqxtOab~4Z|B21}^ zk!q4;zRBjHX|}OhPVw0;(OE7LSL$4E#zfL~!BK6q)l;gKkFW%0*_u%Z?7q`B=eq8ms^y&S_*RR|@ck;r2 zh3MWp|1D4fqL#nn7f^N9{|Qt;thEqAV~u}|snAWEIxL!7PpGU3@r6MQJCDkS8htAQxUgZg2K)PPJA#7*#qiZj8Z3JL(erRz-Fb=DT$;P z1J<8()WxdRQutL2b5z53jD0Yq`pPHQ@IWMG^n+tkPtyZV6pT+NFy;)8HN&P&(M(22 z2Cz2jLr5@3okC~}4AwG(y~^S&vv^Y!);O6xMHS4`Ws4Nk6=UT#$r@+ct?*PM4AHF6 z64wObf$_Mb?~2TRO>8&Ikk2qAGYsJbn?J%#Vvfa9;Lyw7J4f%vw}(2CqOA@-*fK%QV>cD$RPEC-1rWqz*4x&S_!r) zz_R{9CxdDR>Lp;h0)q>F>{)~k90M2&5AYB$Zvl@B!0LOjb^#@$xwKp7Iu#zem6nO; z7UJpIYq6>8@#z56^^~mL*epCW6`0kyTjZMBZ^2AEFLat!xDDBB-#OW3yGy;j`I<

rjI^&mkF%T|6OD&Gdx)%+JH1~dF-rb182hoQf#U6YX zd+`-j(xL@3;+ILuF3qG{lV(Vpd^^np6awdq{ zAiF}2g*G4j!RExuIjPy0+`Ln+sF4bxhbj}ZVBrFXehJqQfC|nb;86MvV~m?CCPX5j zSB;C&|81pXDt(Pe_yL1;^s2gRNty{a} zx=>sbvhCorX`@?~yG(E_mL%#)p0WqwHBpgo2>BC-STukc^QmAtbI*b~Cq20-+Hwh8ojFmBszDRlPE_P$Vft#sm zcwQl%k+U9`wvmvrnvw|_bvrs^CnyQ`h{0VWR&0EhEj<^-F3?PkIO<;7TPHd2JUls` zF$%9#^YASD_&irQ`qK}2!qw6T&V^?Fy09UZ|>k+*<#>qp9xGr*99QeJr~E*v*pj zKZm;&7eb@rL1@9a)spXNLBRDNfa+nx)7fI4Hkg;K@IQm^Yb^=1R0UW%`&bhNK(JS4 zeB{a0`16@DCyvD(eVBRrd*12ZjQp9Xq*cGrRXg`(q2)SNildfW5}PTpd6!7mCY83z zWKfRwOB6$5#i+=1SYp~IGi{MdtHu0sA?vk}0q1@RYH*il^pFoNEvW)_mm;)Jz#HLm zhiHsJD$>tHy12|ym0~;8YcbHhLoEZoF|dvyvDBc(-`OT0dd9)-Az%kE~-CQ!yS+I9j1CJgV6&7nVAFv# zSep%ad8{QR;{^xt?0hItx04U7r{=6BAJ~XU-SCS8HOjVA=q#Yr!fRgaJgtCYSo=t& zj8xGz9&BB-+&|qquE0Ixs87!Ez`T>e1?R#Guf!DGip{wbn^7DMK+Px#&$=51K+P)& zEhr8@csIP@K}6o8hy#y94?GRYE)CCp6`lV)HV=SWl2G(8_sN@!)zy#N8p_+7>fU{< zx&5g8)TR6G76efLhbMtjO9H5X(mkO5-O*2sr}mmDPqom?PT*xH@>UZ;VATfmwi1P? zEQ75a{A@J7&LJUw8HsVH(^4;GB%V8weENRYnW~)Q9qGBVamm|Z5j$?~8>UukOa;!f z-V&>4MOGscivfjskJPlCFYXlq1%)6@^@=5(QppdA0PO7GZ&WIxgGCt8MggS_7)N6I zHwg;41=^?q4y%_!0rkfyj}7W180kzoD)EHiDRC4NDxUHUi+TDWq=mK- z{H7k$^}tfK%g&<1TmqXrC~|rc$|RGZVb76Gwh?5PMBOog*&2Dt#AJqSJW2;@4XF)I z5CI)nG*C9c>EEGoSxQL23lHIW2Y1qQiApssZztivc1ZGuXY_`1D2P=j<(he=$28_R zEOBaAyWKFC`J0kmv@EwUk$0L!>|ssj*?|1>p#??Z2d_mRx*dP`L2};x1UU55i^EcH z2c_K($hsYneLE=oR!Huhu$+5g2OflGJ`Bu!9F+AuIOk?~U!NXU9IX}SzdU(b3qCYc9#+D=Vt|;Y+KN2v zC7$+DogH!Fd#fcrc2Zxp6w;}$l{CcCD$vr_&&J)~Jv2NdFEQm(R_?vR!iUFl?%Xc8 z^SW{QaWBthmGg|mW=vo)A+?%P*o;XmhXn-xWDt|~W1=3OpabIp ztrU1rl|0%TE~%KU|5!o;l)^6NgM?LQDyW0G7K#9?9|WYpUhZX+dpX8Ed}FYA1VfSz zj5cp?wdiI8BB^SQ@pmDmMapR6k%1gCuapi@LD7sYqry2d2bZem4H=vI2yR5g#-9v! zemBMqsJjN#`9JB;{@G}qgiid0GNq5slf*-R;o?q_BPLQ@6N-BT;jTVg4w_XP=V_%1 z2mr7ns}rDK#3*p>;0L}$|I0Y-`%55WvT+hh{uR zBP}BI4LW0o&RnC?S7}5n(I|^Fq8J!uk$bq*Rsrojq6Z#9Zv>1so$EwQ6n^a3R!$zC ze;Cg>f+yzh1g323Vs|w$n@-^%r&=`gnc}<72;KXou0K73j)*XgjBM}D*2GE!@>B_D zwP}}pGA;*XUJuT`6Mmp1BC|L=<4#!m?a;K_L8-R_({B1_-1N(U=j~8N$Gbo3tr_PdVA$;_07XC?`K?llX$c_DR(k8Z8H#7v1{+bDCZok2dp5de(X$O=4{5Sns zM6xNeZQaMf1LJV7VBF1X$4R?pZ9gWFbz<-Xvnx;%IP|_#vL6UY7pZ?fW$yXKAK%C=*vUJLXCB03a&X@yTm!o4=xvAaRjYs{x!1J7ZCa}9 zv+(?6ugMgkE;5Rph6|mPU%q9`8P~*1x`fN#DcAi0nQ3=|A&U}mD=_7zU&?h~h_vfI z={NjRZw9B`2~E2jnszTJ^}b))L!XStJ_nxqs6xe%JRz6DPRiXz03$XlAxHy-kxP5r^9w4$V+9D*|sSncNO_w$TA&V?*oh@3S3vj9JG6kDAqD}47pWbf(32KE*oii|)*4JC1Ba?7YFw?5ed6)nkw{+|EGWpAJ+wbW;LC>rP-_K@Ixe+Ezy$A< zE-}_6=KmC6Fv1#=h(Isa&*Ke=1XJenekm73h=kM&F&U$i=NWYPA=haD(Y^RbphB7Y zk*NobKk)y5xI4@wC*Y?}Zsi}`$tuKC3-PF|9p6Nd{Ns)hAWhvg_g|LiW<{DwrFWl0 zz-_Tv9Eagzia6@{x&(!PzIF5|x482ju@`lTSA0@#20$d;@F(KBPvSN2q^sUZ*Su1% zc_&}0#Mzog|0R-7h9mCn7ONMbdC<*F0Otqx*%7d zP>p|xM_{ODXsAzYL`YtAY*A8rX-59n+#_v=k98l-Z@GHt$HRl4o@W)8CmpX#InbMx zx^N(6H#T<1H(=RCvuFczD%(Z5YF?zA<4Z@_*Z|7u;-Uc5dNI37%me}kbRxv^8v0)W z?VTyF&Q1wfEn`tYjRMsj+%wXQ(SR4)g^@eh2Hk9Z5S0K$xeGA?Rq3>~bjVTwE;_&! z>6fyhLYNowCaAPI8fyjNtuuwVg%fUSvm;b2GB|_#^=GK`NfK!uLB@@ZL7~6EDa+1qzAAy19o>WSJ2JjcA}gXE(+WOuormGMJmL+dX-tb zqkWUgx>72Bh9WPytOiSSP}~ox?dDwFKozy%>Quv`*9+NAQo=B>S;Xp)a{FccK`}NV z5|42N(_8@z>*jc(aTW*G%Bw01Fe2z;(?H@4)Y%axWtu^Q(;pHk0Cg33Uo`p(m9|2q zfS>RLlibfCcZe7;_jtuJe9ooRI@!#nCIL`)^AF*fg?Li_c6j=xPyD7!#I|klmYM&i z%zIIwnUi{qsC?Vq0t*mU2$!Z&aoqi6J}H*Lg|;y#U1QH^0IQHxldkWXPh#$WSF zxat*u#WV3L5h+)__JEpvGa$LxKe^aDxx_QMM4NhFoBmLj_blMhi}1tGV-G%z$-5Jm zc{wWfXi!k5udTO(%+8Xd6ca=H|3z@MmMoo$9v{*vFaup|OkLELuC{7VXH9@- zV7PxwOkh$>KuSzNT2w$rL}*rI zB{Wc5JVcFNz*S{D+7pca)y}L{qpnfO-eR=(Tv`Q6hFk@M^NhPeNWvy;AqPQOQy|{fYFEHRt~tc2kxfBZR`gqbQmD?lgMid z1yGo}Nu*8^c~T(iqBDOYY}`ArUm*QvME^!+R_GhIVgi^^bfUZt2HFQ$MX~QxS{;+| z9mATHrakudQ=UF6L7~fjA(I|nm11F)LOkN(z8)BWM?~Vm!6Tr%7hp9^TB8tcm-B(B z0JedxeCAIcy_-p&Wnl}j=OVEeDV#YHbBe@R;_`PbEc*yzAq9X6^g=LWfeG6jlllv* z1W<`emGW1h0wrt^C4dSvtrv*iGYRGU{Fyjl1ee#ARLl z62uJzc?Eh$Mu%l3 z#~n_IJCPD~Dmn60eB|k<*fY@ymt#}!C1k!z&aO<)YsfkH^U#sbv&TCx9I7eGeQ_iE z#=V>q_tR6ZhG;L?iOZ~|V4XDJVmIO9IOkxuV5yoG$wrvGDGq;(iw*L)orLQ$2kvqL z`v_n|L1$4WVc%z&+@$P(Z!YQx&~*5^)jFEL<|DA${>U(@=h2{n0u3oRJ`JDMegT|^e zqWoZ@gI3nd-hP`w;cLF3tDZsYo}ugBA#GMxt=1Nk8n;O&hcT6E$jr2XiPSTwpx^Je zln>j0bCj$@%xUK_+Cf}EAw#y`BJ&ciV<)Ic(_o8TUhkd2@e)PX%CA~A`mxR zFsbtlDr8i!zu2JA*U7Y13T1&xoBRY0%7$j|Bfff!jP6HF(?<42C*1xN6dd^q=4 z0~41#qnGSMmKEL`Jk18`20)!M^Z9P;dCfxQ&optB(sa(^UqH1EDX@z@;hu0tmw3T5 z<%%z)O~|4#McU{~nwTO@>?LjdWe>nAkx{QhzV%MN<(*pWopMK)c*i}l*fsgCYsx*h z^n1GOhkm&aLh|p16&A-7-j2(;9FuxFI<7D>A~P%?(O+jP_^0u=-RK`nQX7CY9Qte` zY`E|Z1nJril?9`gz(!+)Y@>!Mrrp^x!i@}3q*1dvP+ylV+X;tID?CU%3<}~i? z0PJpH&$cj`%?!qXOgvj6-oVJxESKX?$&KZ3{R z>;$GRfoNJ231%s9=hPOe-R5|#2z2At{_oW8X4r!0ZI7f|n#5bKiMO1S zZabwEyJXze9eCiIb3YJft@*bj@@_@~{`l+byFcFFX{)%=`1b6N2L+EK93E+ux0I|BA?=e= z)bFgGb9P#=wwVyi;HVwt3t%w{!~Avus{x~f5~PAdtKhTV@EETJtO^@NwTr4+Yt!iG z((L2-$w~-YDxkmti4JUeU=s>J9c9u65HjeXhxm*!89FLsg2=Rwp$Ghv5waeXa1aYj z1ju;f6zU+t1e(^Gi+0sngGa=T$StPKR3InZb@v3wbz@>YB@+*goK!nB3q(~kq#YA3 zm|0F?!WoWeRcJcTk&aS03t|gg7l4N+;33hwzTqn#0c*OD9iNCDUHGb---1>Z_{mV>ZF!e`9U8hjs3L(g-093fwvQdP*r0G3llb*2Y zk1k*c%jKHs|a{@Iha@7}zq{ZiUo z_oSoYL07}=?uMH^jn_MBFLiu6-&j)cIy2z9*0eS`;AgB~xtZvv+Ir2$XTs8I1SF`i zY{Ga@0Cb@&uqp-h5Ewy!WKpW67+kva!CX}3V)@2KQt#{3=;Ki5V*W+Rg(()S%YUNO z0X7wKX&;S1Y(G(^GQsN!2q%3k!x5A;Ox-_8)t{ys!2o9#p-sUSl|>(9Guu(_C|ru? zs-3a62f1rIo4?`WiKpk_iJ5pv6z&s(`-kCvAuAfMMOV!>0NB|LH?`d0N!PiOC5CW{ z%$-DpvqH0NM;-13+yCg@fXFT1FhDHs6|vNq5z0zRgK9uRGEamLSI+y(YjSSIeDx~h$y zQwJ`X`EAJkb_BjF092dMMhD+QfykEhn}Vk=H>JR}O>Q1C_aKE&qAIGuE%Bsx;#p5< zsiM!iMxA#JJ!2ns)-L>S5W*;mRIZ{N9RG|X}R{4Jbbq}lX+ym+#Ujjt`3RGLM zzmrm@24}e0@oA_3M`vHDAh_>z{VDJs9jN9_uY0?YTAFb!+hF&925PE!7uW-d!v&%Dk8A zTYWI$TUyvlCyQoJ_toggX*c&VORGVV7-lli`4Tk%o884`!bKs_P{U=5Z`c%ArR?ha&En0GSqmigGL<`P$Qu5gJY>Y4e_z-b?xtf3RYSz0tD_Ocu6;Yg))D-x#P!AZN;SR z1|;u##IHF=EZYXHD*aa_-kSoS1*y-FI`Ea1Qv#o3h3pe@_X#A1N+s3Sp5x*p@rF7v_r^An~>ACp=Z*-zIk-~-o>m-2SV;2h%5>ByrNdV)jIZu1+B%!&3fv<`V0tulM?xqP&~%v0al?5 z049Hng!c)h5f_&T8IJ_im!_PqU`=0;dxyK~o0R%8Wy z+t&Hxz99hhRXf*lnRzc41rLEClr_QUOko(92@J64zc|ti@D(JqQQ*vm(g!#U0;PNo zFs~p+xab&{GtS|R!lsx>gMl02=LQ!BaR{LPvS&8}gX=Xq4W_9pbOsDmq45Wx!g6Ys zK>;&i!thNFyEz)%P+1Com^yDfyI?&u0nYs`mzZ^R*p_wZrow*-)6NNW6BhnWjsZn- zix583Mo1F!4KR_RshnzNMpJ9}t|5wmRCRQrd+af{sN;@d$LvCm*#sR|1)Z=AI%x%P z4Lj=qWkBRPm#Fj3ahF^HsIiwEqc1r`UbG84rwTcv3O;S+cSPw`pm5KSIL2aDK@5c_ zS>j?WbTp7@X>t#`LWh98Iq>-jZXWEFhyz^$;M{{H0Cf+se}EQv(QY;>H?@xCpK~@Zz9=KAD9Y!O zw{vNr=Z~nctwV)N@v-9??TD2%NKgT*P_mBm`F%W27oXFs5H-s%ptS>)2W5xNrxo$@(bz10+3&Ub0>{ z-3X=xFe_*mF+WiaDw(8u9vc{3eWqsp3iDy5^`y#aL9JbN@?LZHT6g!w{Uh*@m<1<~ zE{$Oc^mZgyy)tZboDdu5Ob`t3|aF?&gWRXkqdO12@8t1!YWP zoJFy4SuC0p5LoR;ksb~L-t6!bLI6;Q!0r!>HFzi}Q-EYU#6w4U9Dwc!hY6)AOr_ul z{s*8gQcYHA)MW%&Mi@{4{92^`4XEJ%295zhdU?;Fyd;rk{e$tO%=G{mVkd1nMQvGy z;AX+wVxKwGbzJ1pZx{I4)h}Nr^^>7)Hkg?y9WFq(QZh{CWGhFuy^qj4)+#jHG4ha0 z_z}C1Bep?DEd!332OhTwJYgApO0|d8h_lX+S|Ovx6gfs+u#Y%r3;z^w+`{juneP#$ zXTDsUC2>v?*hO(vL2N63wzVH>zyU%@Hz?0zUxACb}nK|{R&h%Zm z+W+v;@Z0j?+M0ou=8m4u#(}_}G!m z!#PPuV8Rs_aydHaZkXS@h@jEJoSCfj`Pk@rf8SXb*BKk@DTM;`Q}8G22dyBp6IpR|#6to%wJt+)VK>-1VaO1N z2AwjINa-d$G@};K>{ItwQTKnM?E@Rqk4%FKxJHV{YL`j66v{5CvQum}ps<~`bzgMy zf&jO0ILa5Cb-2t(gL}XnpR>s4E@9kx9tzwinDoL=MOX;(Xx)S_D*|8!$<+kP0(=f*9C(iNxL}b% zWMDQS%?6Z0B?G(B0hEv>PSA;~f`C1>#6T7p3<9n&{HOm7s6Z9#m+^o`_>oTjNN21C zgV99tMnLSkE_T%}Y#Z+N6Zztp&mzxbSn2!IJ?y@ddxApfYa#G*HFdDTEX|p==4_>c zqO@gLX*h17rv9ncVY&8U2kk-+s{)T$_#ZV3IA#`b!W@!n@F^Q8S;NmbMVxhvz2Fpc z-ZA`)UGPaO|6`Uuht0eWn(7Kn-Lj-EsUrJW%r=~36T-6#6*z~B-J)cU5hBM(0X*## zEWj!#q<-o3e$k%Qz%cn+F8w3BdOIq-oNPUue1iQ_lj4r2C0&FocoLKD#wR_ANq7M$ z^$C6gDAoEs3XFUcpI)7n-&k;@@xtZqn|FF1KOcPiVYsS#sG+{UrMauUwXLJAv7@!F z{YO<(&BwaW@4uA2eo<0#v*^N+!o1X^*woml#1Ov&A%4fg1CD#SU-oqW7!%f>95<7h zvXP#&6BD`V>$BwOFk`Nqk&7mUya7HNR2!g@YnJhP94ug2xo3U$2`+6EQ5&T6b{VTp z4DPt(9|(2QO0}ueE;`#oXWhYL5`79v1A^Ze7l9xcn_OxmmjqThAoqA;_%E*+zXRR6 z*<9Ep7uRCEIuvW*iJQ5yA#?i~C*8cO_p;W1RTnsJ@7f6?U$Jmnge{3>JEj)I%0TUk zJ7{r7k3j~nhr;TiFu=zTqza&^S!Z%!b_8maIWB9S!-f|?a-KwJ;Bf)vF<4vgnX>j` z2%P%_P?^7i!`VCZr?}iHE})t<$RawaUqB`G@J#wp;~@|u&b7AR9;f-%oz09=>o z^d&lVflf42aP)%}3|v)Ehtex(_b;xPEu+xqZQD+<@POF1YSO**>Q0iHz0F-*j zmo(jb*72gOx9mgT$BO>XpZlu6^i+N7`0}x(qO9)S^UAkRDoRVr?p(Nc_RxhxIfvpR zq7uR*V*LD){rw8Vf^$7w&-&}C5$Ex`=?OYBa;DzzDYqBaQZrD{Plo3|cu( zJ9*8!`ORs3r(M1Jtn6BZ;zlO5lSPFxaz-Rxk(#Z^E#NBBIicw=0~?^RN9jb{zQ*Qm z(3!hr1lUb;2uKJCFJHnZjYJTi!1Rx}RZYMGpc27n4DncyIVagHXq~26C(9^)7wDvUCIZ%%#J~;t{{a<#%_gQv6OUB|9}Pzr zJTh^^Cw##zXvorY&dh&@=Z({~INN(i7TBfodur<%%%XZIQ5Q>|qc!HL{{J|8@9rq? zbX)Kv%zra?rjOliK%sJe>y4Fjj#5Qcm2#Gl2m*v8lp_d9{n&``1CzJ>)u&wuUdr~?Dq2Z^Lygnx+sjr4RWVNZm@}seyKZ2#Oe*@ z9ro%~uG(Q|^_Z<{)KW2Ks+h3iWv`j^)UNf{tqnCyg`1~Bjgx`eHNMI*S8mh+mS%<= zJO&(@UPrpio?d24FLh*>x+^;T70Z3t&Ppsc04}o%+R;G=1sy+Vp+H9>pRZPy+Nxsq z%9sOO%|xBKQg2OJw6UUkY1_!M#hW{pY+uyAqpj`XMT?(kY<;S{W?v$=FH`kYb>mA- z?QbsWe1Fx@*)`KwH*CGOW!KrAkDlK5GL~pe#5yZ7D@p>><>_&+ZFkiBYA$xJ zvEr*`ZL_PE&vq`IZLR+~m-->%|H5wi%8$)e?wZ~3WvTxa@jRH5zM(GSS!yMY>LiDh z&@U~zY}NAFETzQ_^>K|HerM>%VwVGT(;Y^Ahf<=$^O0J_t4Bh442lqX$+@uZeY=v^ z8l@$NIpsTy=54L|ZIoAT-&IfWW+3`WB>s6k{Ygpeiq{V{Ncck`83tFet$jzK{#-$P zAtyhR5?`rw_m#|_)%t&urdgHlp90Nnv1(RILE7R+jrKwAQhDdRu{RMls4LuoSpP7T-`8-c~L6LREMV zhl(2cR~iIWC1x4lL2*SXzNJ9OD64;89kC#BNh?<|2cu*cnxXE9p#|wQ8la zrr%XH?5G$v=SEEBqvkwUtJipI*97V&gJ5aHq_=v)RWa(!4I?$RWrrNuL1)=2ds(+F zv(ldJbmmsLD_3}tOJF5C-C<5G)2El4EYR(@kPzq#*mWU?4z>|#uMQp5xkYF_zhzot zFOP?6$}=tX&Fw8+OEDW=w6k;BW6NM~+Pb%t?oIFQ zSbu2K>X%mc9q8-avaqGI7Cg;ls}qUFc(lDF&=d8oDeoYMSAqQaaa9p!G`9?z8i|4)H_wn)z(3oKx9FEBe_J6lN33Ynk9)Stx!6jQ&@5TCR3RZ@-3!)uKC z2BXPGROGIRpFB&!RgL-!jruc<3Y5ku3Qacr9WPVDD^&3{s_;5lcuQMwn?Nh0@SaA( z&r&t=Z`IOoHDa{jJ|~2CNbxmVeoiYri^N-Jm~C1-TfXpb(fV)Q6+igv?$L=Ksj^vp z&0h=^p9UJ9b(ZE9%(sjFWF(8+7B%$A{Z7hcRxlPB>y#NCg;sZgJ1h;S$z+2ix5Qo9 z<*V#-l@Hpo!=~Jb0dciz!iK^M6m41?Y+UQ9LyR4_SC2WWM_pAT&WZs?uFsA?Qn|`m z-fgewvR8JyD!Uz3UH05cb8-cn>gF=NCQh%`8ws14by@WRt3G1aCEegEhoh2gki|xH zS&6eE8LO?RYi?YIA?c#lbxT^eFKXT0+O)f-dPgp|BVD#Dm3p|U^67^9R~EIsyK=?J z!QM*~BR6JNf4Xt{lP&A6ZryNc+s2Q#Z@RpF!^hj!U)s9{fi>G!ux zzqfhqThpU24tMYGS+=>oX+=X-U1eEWRWja?2rn%0c1Bzi5%;!;``KjZ)mZ3oEOfRy zceSnlMn}utuBAT>56lh?{IIzFtD4H&(eT|w^oUaYwyfY?tpF6owdo-3$IU=kA;y?pjMLmM;cO1^+?gKhM5d6Ur9EM+b^l>r|YdnYm zgR9sGeN!ztq9fque9>=*3*<+T97o$hD}>w%q*F0R_(UzfFO&UQr20{y{bw;fD>6V$ zWmbTD7US%E!|X%s?1S9w1N7{J)a)P0*#-2hfcZf}eXFF=CjFGf=B@e)t@)pb3LW5I zh>F?@OAFUgNom9osRm2)M8!7a99Ii&k~~-88VpNTMA5q%A@Dg-d1dN;}1@z(bw40v;q^T_LiB24V&t#H&$fVrIIs=#Ku&5 zXDYL|w*H0YmN%DneAwM{X0ZR_=i~WzB)bm(e&imJZ4s(o1Qp3J$`Cx?8Lh9 zr}|dx?rLAVtY&F@wz?*ntW1_vCPTF`_u{ByDD2o955AF! zA5F$j#Y#V}EJtVc%EE?QOBen$+CMuwI6JUvcIC1knrpwx#okei-co{`yl4-U$MSM0 z5SoDO*eP0k0n7Xl!_gE$73!Q$20*y%sBGTHwDe;vzhNi5_pB|$B{-E|B|DpZ)4+O7V@u24C`PzR9nIDwwcUs*&ip4nN z_eAAe{iJ3tqAKsJh_BSV!3t8=PY4BH@uTCsntR$> z#@m|K)z{2q%hr^ZjzyxYOJf^TnccYxXz{(;)_!ba z2}XgxGUD4Ujr6WcffX!%A}`SXLqPvnNc~XA0DmiDe=205S;0rq`Sk2V#6RZ|e=pGf zC}w`p=)R-$m_6O3$bUmrHCW06Lw`c^saBaMDu2j;e>Acfz=}AGR6&d>`g64Qdu!SEy3DM(`X_DjA8hU$Q^g&B<2!+> zRWi=^z(WqXl#mrE)kP#N))}QngGkRUFd7zEZ3`l4d25$<&5pJWk9GEKY^v`s&8%>x zyR4Z$b8gU3K5DF9V{X8^zt+<<2uWfJHge;UQ5lW1HT!6T%syc5h9XOunb}1C~(zlfo%i_DO6rt(q~CTgSoP*x|+pJ z4XYX(M(b-Q%d=}@CBuQhU@$lli*L?W?60nWzNPKZ;*JkGyHE8FTo@d>G&Fp1bmY?5 z=!LPd(_^D2Mu$(244oMnfKKn((Y~`Iy(h=}kB{{qnHYF$V({gO!Ka3LcXxG6bvLi- zOVqB6BpOR26{%1v>rZAJ)d|b;uxXvk@@hDAI$U}=6#q0``B`=SjmE~?OBUW)+3hr0gUnEgPnJ8o-$~Tb84J(9wp_V zC~rKi5ucJ3T#^g!DCMYk{wyPZlu$p3n16`be@OH{N%jAb8GxT<##xzuR-&Jk8fJ^h zpNh3Vh_ru!Fa^QgCpp;qT-B(5B`Sdqe?Fq}Rliz|^KIa34FMI_JWn4b*(Y#&JUXcWq`? zoB2*1yYFlKD7A3L;7=Ax?ZpzkLavYs)P#uE$ylR^=H}_R2LrC+vXo}oKzMRbiH_D=HzolXr*{P*|+75EIt_!qGhk5);R7BJ~QR~M1;3^V;s(vSO z0DRUAIBN$TH3Rml0ptu$Ot>&z6)6g&YN1*yCn@;$YE2yNFfwin>vOO^JLh*Q;+mT7n(D#w+(bf#@5zClGr&;yxuKp@69Z?)2R;B%#|ICN4eaah*|K8EXlH%L zs?uCnu%sy(tSk$pD!uWXvm$L>Qfi*^SznBXPDc`#Ly6B)6`z&Y+^MbqY+=j2Wo@4> zto@;L(f953KX){JnhL_$4ss$O=OL~bILt!(6cYCWD58LY5XQL(Q%G70)qO}tBYl03 z=9N)Ta?%S1V#EXDRFoXDU90QEea+Tn-^s=u&&I;&S* z&=co%suNo22jcl>LZ9AgeUaUQ>^?HcCj3e*_wqv`^sk>m477@v!=$s zDpIpl_DgN))o}gGrPU2e$}SMuwKSttkt#VX$SFpmq35f}|6#H`P+dW<>Wl1na_PQ9 zLob}z@YIp%sV7%1nJKRt3}$<6*#Q%XTC>L1wBFUW(ciWqgbpfp0C=LVb?0+by!$*? z$9&*w&7eEa)oQSG*jYE?s2j3Z51RR$VcOfgK2R*5FH#iA)Do3Ot|ingsWEUQ?D?El z)?sDc4s$3FOeU*x<%`P8JG0r|OxbWEHX4ZllgLhM>Yi(De`iU@@fF<{yLvD8^s=3iEr>|@4$zBeaCxOo$TvAJJ54(xaY!f&sh+4tpEM7zSqY3pC0Mm zv#N7y>B8>C)lDl)lFNd@hEiWu#-Fb8CM%tlS^J`-bv$HyIvM#ep1crE+)C#7pjuva zzp3#r%iHg_)&J1ZaxEVCBpEnkArC`9j20k-zQY#2%N4!Pq2!11q>xWa2_f#L;UtB~ zd7KeLVj39&VlTw~P;H$zt8cnF98#g?`cPd6Au{|P#M?PQs)FxX@$A(?vqAth0ABT1 zufAwd!I<*0Q3Ju!GYY{Kx%3kS9%$+>gziVR?nj00?{dT6Wcu%_Byoi#;5`JQ^3zfhjeYHxgckKaL|TAv zv6Mn;K~#(?Kve#pODn`p4gMLSNjL|{vEobNQEJ}%^t|_V3y$au-ZvD#ZxG^{K>R;X z6Mv5;XUkenNRH%Zw0bL21i7xGHcWpiqomICKX}OC}>hd zu=6PMgMpNEWq)ADV+)^tcl4>FtDinLwfFD@h`M4^Rn2fPv&vf5XQ&u4)UC0!taG(* z3bbzw^R52raPzbenE=8mGEWp!JXd+5`l^TBm4i+It*yDA^IWYSv0{MLxZc;YDOf0d zs90VgQHm5QsY;~)S7}OvG{A1*EEd*oGx`0&M4~d2Yc0zzOQpK9nUPdtJRVz{N^P#G zd17JvTYMnxxw5MNX79kAfx+AT12_BnF0bl6-`9JlulGd%(6PS35BmF$;rl@E*`eMG zqrD%E_nn&(947WEgZmFnPTpDeQcuLfACF1~n@6{L?1oZNKr3&v4PC1{Ha! zADs++Eu;rX8{UI&-U5IW;XlUX$YtaQb&LiDuMarKz8EwRgDWjdaUyPc$i!*h!Vmq&H}3 zvzoHY37Zl&qXNC9&{`tQF4B)}%k6)o`owzwHZXsM^uDUbo)Wn`ZfGSpmM~5lK=Natr~Jw4%w@Q(G76aj-k{7nJo>|o~8|c ztgjTyA1ac~E0z=rq{ULXgy$-$qG&b8Y4irtVl}utZht6V601t2+S6q#|-RbSU($jOHx92R#+0*yls)2X=`oPr_ zgMFuvqmK2T8Sg(i+Vk#c&ub$+PYtcy+0(IRY0L74s+#I_tUeWNOnGZlp6W7pRR%0| z)MxE&WwtgyGZZoIP5BRHQBuXO1S9vu$sbbLA8V^VjR($ISez1{M&3m$E^xAQj0iH4 zFnq-4X_|i!QEQ+&29QG@R|&9+`Jqnsu0aM9u{Ss&G}58={Dyqq7p1Q2ZvA1|eCRVk zNQXbB=81}+T6_dOE^Q$kd7vE)DSmiE@FMCu4pX8&Tcq9B5H-(S`G zzbXyiN|^f+`o5C8r`3I`VeSwlB!)2k{D!8!)skOpwcjz^S1kJ_O(SeVG2^-xe%4SV zfNL;V%I`{jO4BH>&2x$p!|cG1to`b5TZR|K17O;$>2eO zmL}c^*Z~}(=D))gy+O}EsDAJ@s^9~Q3a61DD8#ckHz=){b(jBxOZ`O^`%W4Efvot( zT6ZVea=;#JR;zp}u~|36gV5ET?@DHdw^}*!$SEyfo#4&S_Gm>WMYL%t|7ox zCHeq5z1C>q94@;*5D7VfxpmUcfg*tx5> zV|qn<@1lm*#`0`sI$V+UmuKBoWo{6)F6C@YJDSVv3)9wRX?t(nye?*YBH=kw62OVv z_o3L&@ys{T@NJLvl8!o0$SN%X*uN!pc;dg7(cj3qucXXf1$&p!-_g)lRK!K466;=H zSxtX)+WuxSf3MeJAqum5tnJ;R2oUuKsR2KM8>IFYiJw#0X8et)U(K-;IV$F-Uy}TG z3VN+jP)9a`OTE0`G$gfwL!c-t!sqMMf#kp`#oZlu096S*cr7S!-RoCOQ6e z>*m8NcN|%@@s*XEU+&p_uy0~tN89SM_+o3Ml}oKKWx5UJgNC{ZbJMh=amJ0n$S?j) zdih6x#5_k-RP-*s>gW0Ct()-IO?dgWt6%m6tY{8^;aF8|nIo!1F;AkHFP0UGr2?5u zqEN_GYMELip%^)iss4I(Aq=V^lPrBTl%eZP%uBL>uHR)(e+1paqQiCzs%BA~$kv9|b}wh)bX&=r-%MMy_#`1?~3 z6+V)@0y)M1d&Gnkz!&KIA+x>W;y$*~nDQf*;`i`H8BzFafZ}IWa|x>87{Sl8@aW^k z$Ce-*sIg^-q6T{c*cbhVtL_*z4vJ%w@qXIg&c4@)&C zNg3|K;Oh!eO$e{O%H|=M`y$}ICJjOe06s%3ILL^eR}{UimfsCTAU623JNrEoy-$^V zWlZ05R^N74e(2Bjl2o;hi0YMggPdW-Bq2Zt)u)v?MDxR}xF&5{HJq6`uxQN-cIf$~D-^OLmwtEAh=Ej-jOCRs=Jv=^g zVeOjRGi$$`p1iwy?AFM@rQYsi-JOTKJKyZ-dcD8z^}&HRMurbfj2;>retl%%#i8ye z2UhMKSh1~V$(m)&-EGyaO}UDObfON{)Jb0|=T4Nn@!XZL+#|0pkqRPStE z<@Y7QJ4W_8p}LCG7(#*n!~kTQd7>h^Vv7$M!lxt!mVQC~!cuVco|Z*I%ZF0}JuB^X zmOoU%NjP>9-=JXBD?G>uUSI*y^PJ#0M)(|C{2X2MqCxxwS@;B5^c*8OAewhbqy9&( z=AY5ZA04T$bkWasu}_?tE5XVW!OSz!#8R6vWuyEirOT|andJsf$Px27<%34$13{ax zxxq0yUA^w{MQfj5H1SgVEXN zu+~<$7W;no$~BIv)h^7K5Kb$HP)RxJC%lbo{FtjEcdcI=z)BTLC!W%4?RC@krVZ}a zt^TEZV@viX04-TekV1kGYY3@^z`HLev@(Jefu$Ie8O%}(wz=Foug?|?_(GvjNi-af zrE{4^IP@)U-_o=4+2KKi%Cp#xo>_Zqa^lL^(AoY~@2pz+N_XcA-JKBaf1!WX!J&Z{ zM+RRQ?SFc(XYZ=zTY8pGb+->KZ|-cXYHZ46>XR|Bv_9^yPIz)zPbTN7%y{Zj?&hRt zQNq1E;a-`rcSnrFL2g^nc(BBFJnXpWFyIZnrB+>4;51LhZ*hR7D)Ds{f+yeE220VI zIY}3urg>lTISUCf8dHdqFVlh-h=Lc%BE%nz@{cf5M5I%c{4c4<1&m5HqLW6=OR5Dg z(#5ao5vBxqQs1LR$OK>rg_HnlrTn^}N{AZ&0>8GzOY39Rklzl~@++fXGwe64{!4z%TRs|JPTtZ>vE+0`5U9lkjiIxC9CCJaT z)R)?PIMv-Hb)RcF{1UG}E>JLLh4U1y8?XR&lu;gLWUr7y825mjP^5f{6+X@uKh6k% z{Y)`*|Mrqak5a<@q~w5Ha1={@b#34K%3yJF*BZa&Onww7I}%MlTT;3y5v_6a3nu}K z+Gkcc%@UKLNN<{Nw9ofOrDZj2$EwKKrs}m1H%;toUh{0*hL=}vdvSQ`(VoSFm7xl= zJ|H)R75*Gm(#VysFje)MK-Bt4Yu%KsYOSq&(owP64x*yz#JBOsT?nU5lL4?4-2ku@ zNi0^W>!#gx)6V+!&gRYTw(Wl0Q!jZm2Ix5{r;~D=g5y*uppcp(EnzsB-Xt?vBxbwR z=2E#mw9ju02A!dhBVOuCBz&2&R83Xe!sd|`%Xankyf}mz6F+`BJ2854bl^x|_bXk? zo?5qJpIL<6M#uT1licn9ThcBd7e3n9)4{y-or#17T=l?1tc!!mu zM|zYOWYGRC8M*B=LI>cOLG=<*__*p%h)$@p-qaS&Ew>b7e*o%#C$wS^70aBLX(jYY z@+|$5qcG*XtyW+U|1L}2qw!?J8pH6nKw!4KVz#vvMIT;)4>{s3g$Uvj7Z@#QhL!JI zj0XC;w{Xozs=!k0oqnRx;D`@R0N^*G@)8_c?hArOJ%xH7e{mc+Ue(cOby`f~ka->? z1<%rgC+C>Ck1c+TDSCu1e1tB3gcaCYGiZe#FpyG zJqVXWzP}=9Q^n7Rw@X3M+pBg+IfT)^iohEg)+Bn1zq1b41Opv4N=As;V2Y z)law^*YM%=w}{#_6Kq=NZ(1K{T<>Yv;A-0BYTMy!-yQ6HqHM+E>E#Df7Ngu^QelV6 zY^Ka+1~8cjlNm3*-0G0nT@sg9>Gx5gpgt0^M#Gj=!kkK3QfYrKm#eGoXj?eBV)_aEwC^-A}OCzrMFf@W_^(@bmA=C+pYOBQZk+P;2i`|3q4eeDe$ZFS8} zxm;r=UY`m#BmzxIe@imZlJWt~DPL3C*HGqb%=lX}{>54U%Cv7J?%kCMKkBzWX(C@? zl$Z@2Qx@apMHP=mBA=RqrEq~%!+EFpB3yW=f|K;T54m|Ca0@=v@g1r&Xp>TC(M#Sm zz`3UQam_Z>~r3Tdj!LEj=^0Fh>F!v5EbA(f=M-!&$+HCg$usB#4iyQEX@-YKLml1 z72qJ{vW|jQKQ#Q`fYAy03rqJhMGrH@d*~uyCsnvhCt9y9*vg4EQ-aOPqQe3A{f4Id z>FT?Ivd`VAE3VQHz2SqA@UC=dbycvtKI(ImZihCYmwB`cteQXA?ej}pxVov5?q^$i zpIg}XNbSn0c;7^P_4i9w8~KgfIzdin%D9y&F83i{aZIgaG%l&Y!0++@h#luTeK&%bZ@ll zsqBg;Gs_-NJIyMWg>YIarnyD9*@%JQ-=afB&dspEb)jj9oHoj zx>VdzmW)*9YMUFnI@+gKcI;fW;?cg9=!ibi*SUA)(rt^I*R<3PG}QFgRS(qH3^vsc zHr4es)pa!1G&hu2)o06U(vjL!pf=%cNO}-C7nb>f*0irR?Qco*U)t0DrDW! zI>87|GeWddPq30VjIyWLqQ_JZAz&V)FumdWoQy#me5a>mdVmi{o#Xa8eE6IuA+XCoBbD44e&Os02@wFTIX0 zgPyYn>LtPamn4O6Xe1x#w6J=CX4)l`OAPZF$Dw-4;|@vudS^rrf|-1ZuWG!xeKDC2LhuW|29d zj8^GtRygYVY>i{~rnPoVQLCry<&$GA`KrH>{TKayPZa3bV}{Vo%7asLHwChB8L{9I{37Ypj+Awx1^Nky$d zdD4+fIC60hmQ<_K$%b6r!ssKsq?(b|J?rtCJZXfAv?Z;1=%G;{a^%dE=Y^Exc zF3%*&$`bLicr=#?l_&gFNqzH>Dg+XDKTQ@xR~!}$SJjGZNKgr0^W-;N){0O%p&xaAZk~9C63jt# zW^SDilP2V)2X*|v)_saU9Z){>A|=GT39k?gMiEz`=zG~rUUlovIjFZe@r%m&R|B?- zF2gw+zk>3SQ-9fExN6bi)keb;oll-oG^DMyH?(S`0arNCSa*6(D-trfFUt!d)$%4I zJFHjX@DR&a*bumcycBj4EcFG&X9%e4Kgnb6wv=Z(1WZN8{iKyZ5xE858kx3I;V=)(1M!3MH$Em=5el#j8JA=&)3 zvclIqt~*UFpER``FG;-a@x9>l?+-?> zC67jz?T;_tUk1^?mMy8OwV_g<{=Y@cZ-@ts03;<-VM{t1` zpJcQ?lWs1rY^|(CS+uC8bxBmMlpmFfj0!M%=N8GZt~AN*raS z_KJiXf1T>2vnJ)JOWW(qYz-NEJv#h3Z%a*NY0|qYY}-`geJtjGD&%@TWPQR(?KjI0 zaAFA8zd?$RY2_E;eWQ{??-Wa6PqV84v=~3mM zkk`GegV(JTO6f<`LWt$UwDF3SzUenz51Oy~&6jQZ3%JH&HK!Og62gz*H%;@ic%G#s ziF6U4_>N8yEFR!AbljkQn^VJcL_#%kUS20p5)I$f4~(d&KO=Xp5d-4+jQ zOa(WTg@KKklJV+bHX{qy2+P`3%P0Mto@##Njm}Nawhr$sukUr_7Mmhf3|@9yK&y9X zD7^xEcQh+An$*~8ra2{N^GMN%`qIbmfFiotvG3{NZNR=mN^=-uDYD3D(hWX6@aNC!DZ()n8Zv0hpx2F6DDaa9^~*vj--Q1iQGa78f+`~FTRJ(2`UG9PNBO5c zsz2_h3!l@8!PR%*&W!UDW%2uJA$B${+NdjD{Y{_cBEuUxpHa!rYG5g%y{2bx>sXv= z^P?hy{!*p=OvP8|7$MDxV$qNg#Q($RG(~XA1D@3uqkH)(ZVWA&<7VQ#2_8C_;PbgC zwxRg?eXeLi+KJQ@Kz_?}m8YnRzm9>Q3rpN)z-Ek)IWd13Q7}x2ciOm@!~VBQBQFK~2b{Lu zUdPt3XHz`Dvou!N&u2BQi@rC0@sN}&e#s)7|u}vSXgcmq zl(R>YVyxsC5M<3$I!z_UZ6dp;hle~#J(o2j%(Rj~KFfUPjIK@C8_?JMM=W3p)hro87 z^l_?ax9U&ZR1fSX=RM8|UNA^s(@W4W$BI5y_%P@>f%Pg@c9zEYUUOZk{#dE}Sgi(6 zZn5m=I^JxB@4%}`oJ4)1)L<}*LDD6y23IgItBRi?ik{LGK1uLEqVgQNVYKkDQSqTk zjT9GJQm}tQsQi*7?vdL21bG)jRV^}70{EO#e@3fe&Vq=FZU88a&H&QUE08asw3jIA z0!yDauxHHNheign|4$L3hl!%?+TyK@a3doCOQ)FPHFV(wxnNv7e~2pR;e<;x^H*t# zHd*QY0mtKB`#z6-Z_u+X;My4V%q09XWq9;U0C07pCNeUR*|e|YiPu-}eQ9`d*P`~p zxGzh}jDL{m{zGLdplwplreY8|IVH`hSx!Sy61_pm>Qo>qYfyryU~-_G%`J7*54smk z2iiA)tDcsP9vt%XQ~M1OoJ+TE4Dr9jqrV<3b+vAB=imKBd&0{ei=oU%YTC3dTs7rQ z^jkwKjNT>e+!Ksf_`k;-IXzV=Z*|%?2aMqDH5o^3)`{p>m-E$S{k53@7+ar>)MbM} zZN|qV>*bO2RhId(2~RR=FA12yQlFd7Bj9C2eqAJJCKsw!2k7Em#JtVw2e)Ydw1+Ev$|OMt5<=^5WA~4e93`;?DCgrU zqyC&`ztpgIRMagMd0oTfrkcE|(!eh2a}D*GnolwzO8GHKoKPv?ngif%{tZmn8mnP()GPVR=s|oc4p#$a`Uq zc1g!VH1(X0J858HX$0GympKiTtM_P%!P3pNa6JMkD_F}2C+K1X(h;&?Si7K)Ea)>x z7OUs2P!&wu>4$^PT|V1(pM6)U4=kOEc_tISiIi_mIy94wf~ae1OD9IEH$Jj_+rCvj ztLxJZ4og_AG!!mS{@)V1P|gT7oRre5SpD2v&!}ix4x;Mx3bZsyM$YIJq*1DKD?rrp z4rjxVXYovM(ME99yKu8_;ieFlpxQQv=MZe&648M=p>Dcss{W zcWo8`lU?=Y{1Q}o+Eo^F;JFWbIrQkz{ct)6H|}lSl*h~X{9GWY4@QjP5^DtYTFir^ z*UEskv(&e%Hupkx?ocdxHXOQOG-KfhQ3YibY{DRVADqL`YVzb0l&| zj6wM}CZ+p?(cNKmH=)x@vtTTw+HX<18=USEr#nd#Z>wZ4$cvt#L};+{-a0zreolav z=03XU09o)9KVpC>r2K?Vg|Pz0zIf0vBS2978Z!c|<||SI*J-$1ea7-8>5yu_p`SD0 zGcuQqy7NZ;X#+|p{b4=*s)2ltQ=xmmOH;f>Q?!vRUdIa8vc(guV3aK$rV9tDqJC{b zAF-gDC|F4g7O5WUqJ$g##yxT0){uRj-@38HwJz?POnO%*yyN&x1*bESP1(}5HKko0 zv1NT_ZJmi|*2GxFGNu6hl(SM5r&O~Ff>pA5!eFFuXUDQ~trjcyA`lhVOj=rodP-}M zphM-)F~1RY@g{K92cm+XSb}QX9BkhjXxrj%-Q=E&r94ZQ> z(6M2Hi;`5Sr8J}ucxjK51W^Gy;G*nq+TmfGUe@8)yL|dkz#NANo6lSqvaE`G*Ohvn zjCf8bqZl*-Ah^}I+=%ck{1ndm0Ez+rn8vr!!QEppA>pfzW~fcpZ{OL6P1&L zsBnDP!wNQ%f0|VPVIB3ST}HtZX30UL>`hMg79qlI;1PKdECBH4B5Zy|=F1346P~4zz0zJaQy-hz^Csq`k^4~39^sfb zb<{JgY9B4zO^UV>#T&InGo)ZGEkG0<;{+qDaEKN3(M7#fagVl;XDP9uLp8rcQ!rps zZj4&DmAYpF=E;C%UBWXR_adB5rh>p!GO{ie-Iy#{T^?;Hx0Yl%S6I#2#e`m{!ty-i*~tmk$@%YH{!ss%1yUhHB&AfPNY8y`>)xo*BKf~<9S8} zl^)#Mzoeaqji!?%?_iFW{_pWG6wUvVCn_U9NK0Y&11@c%=C4uxKhxR=cj$}uQ1hQ= z1Sqx8KSx^?ml~IlN$RpFG6B?9FA)MbK112{96GLM9R^#U zGa3Ma^b-~`gX)_)%{7At3T78Ayx#;)U*FNwuQ9|+q~>W#wOcFMgb=DJnkI@s(KW1a zj1~-#g~Ob1fED$z!X8%8MHh9F1uKX`V3}fm4=EhClk3CgseozB!%c>)n=;|GrJkv{ zZzdU9pN_0gmuyIttdB>=p+O#Ftlnb6@E~a{)Y;J*RU?*4v{D7B(CP@2m9@L{4kv?i zX`J{mbRkCYASzav_$yJJ97M$pb)KlmQS(nfBI#tOZPy?H`V(@ zRnLLSjy#z>B+3it(4qUg95CsEjHMsJ_L2|B|{ zegl4z2O9pbDvJ+lrSMFDj23Lx&YRKvah>+Tt<=0HjYv~PuMmPmYIynKo=AJktpCzs z{oG>x-0Fa`$_L;ip?IE@KdqJSQ;RTqm?NijCn?!NiPzJjX;w7Fiq>Jc*gE#gcxYTYY!T32MN&|q~u*%b&OSi%n=w6+(OUFsD)R{H4}k*fsYKD ziw+LX+DD8eDyC;Ovi&N_UWIUn68~{YrWoN`N;E<96dh&+LyQO%MH^}*S=>qef)!-Z zGNQ0UwP2~_Ph&>)2ETdQYh3LytPNVHqpsB<`^HoVSR3_DMm!r5(RH!#Olf4g25#UQ zXHaN#7n|H-okONIh?JZ}tykdPcLdCdvOsCl<@M9hM>QIYIIaLksreiggQzCFAag|3*|Y#>B}_KbXx1343WrDIb;?7=qRtTg^5XIjDq~l( zywLrp4*M;G4qW92h@>1l?I-3go=)l{n2?@eMED7o+tD&borU}8-+vxwq#x)ts6<{f zX`xQJgP6Zw@c^(z`M_hE`Og!@*zP!O#OTTE35vJ*<)L zP>VNd#Z$C&oD+{S;$cQKNDKQJA)@FiR@}u1I~lA zMZ3{wUhCG6yL4-UmZ^wyGGw0)yEexB8>9XWC4sH!*i30?b=W^z5lNS7Vii=T-jt{| zIU@vN7N`wE)}i*t?D6toraDrZvblU(lU1nK&u4L#Lh}(7Pk+AZ*XTrfqE;?<=ZT79 z3RQnTM+H&aclz6Q@SP}>`6!?ujo$farh9+IioLm(&C!Z+S9;I_mR3#pfQm8y|6ih_ z!=FUIlt(80uS5k`{|k5mH|G2e*}48e&W9WzmvY2Q%;AvE>t-EJ$^u$i2|#ZnbQXd$ zYjjo(t&^DS3a49T)fYqzMg1xB3yZSPmAWoeCcdsJzZVIAYIEGRJ3cpAVEu_!5;jF~ zf``weyt0`9i+ude2+3bINdvGT@|EdMA z8I?!OT6mD%^w>W0*um0IY^LiLoTV5~n~f-8o?#SwS=lb5VyjiX(W+W!QB9fEYfQ>f zqkO<1?={N0jM7yGDVPHajnI6?IL3;AJayOWr5jnv7Dlw46e7cfVc&jQ3g*8|NqGYo zh-K+i@9I_W8r6r5szXNgK}HOVH&je}w4&{VXbU0UsFlvpvI#~u%!-E?Nk1d*rA0jq zk8W1Hk`XOugv%N6QcAdl6fD*jFCqj>)P=*0V#da<_nB6^xM2r7;Ww=fJElU;DZg`5 z#J?#V+*}ggoK8%~qZ7%%nohiE?j^20qzqB}R8;m&r zK|=}aA^`ktv0;Lg;5ZHM8#RC{(YZrW4MG+V9Xy+u(?XYXH;mjBBX_}S`p~R@U8jA5k?-Q9TTJo|Hr0%iSZ!60TUDbb z)qqLSYml!rNLLu7oq942B8QC62 zzMqyoLGp}!nwHK%{1hd6k`z9s6`+m3oe*pxgzL1TDN?eQlC5Ut!>km4%|1rFiV}9y zLX`6>X(3qJNsGbKWphMrCxr`%;x?^du|_a%A*UQ1!s)1k9&)l{e#>;ky&>XRAM|XA z1U3f!GhzSwRBSR6o2)I{&{aP((>gF!y|}kDUaL2UM0&q4kYy{{f>n#6sXDhW#+f|| zy;Y<$2_QPna7D;bX-1-@qPL>6ulf;DLDb(DQ!QHp3wQckwtE3g^Ldl0{V1Ty z7Vk_Vmg2=v_E{j9RD61*qUQ|Mg?RMa`kKE~Rox9mKX>}R@CIO3d)CHcI(by5#x>9x3w_?sePq{t z>@osZT_)g~+YG=B=Z4#QHyrvr61g1?T?zRwhCRULsOLu1cf;ej>9pOpf}(~yCIkOz zHQlgTK6cuUS`4po+9z4%9-VTNNimIBYFAHKc$SVBRsDK-uTIgUldsgtfNn2)TukZKotVD9KJ*yo(Ye*zV>-u5bq_*h-== zQH;8N4J90>#UnI0FX^Wxy);-VLW#7J6s**WI!VzAO0=95FQX(Kv}6e>TBs4WXaozj zqD7Qw+`&vZ*%2q#?_>t>`iE@OrC$Eg4|=yogBwGE>5|}7Ha=Wl+EKKiX3uDnUxnN7b3sAS#}I zPZ^n6Y{O&<4Sz(`d@+T!6J7#+o40AZr*&6g>0@!8rH^IXw#DkEgNZ&PVrg#JiEvu8 z8o)`l3+Gf7gMs)8XK0b>-x2k{aPK!B=Aw<|@n2EWSYFat5#mu9{000kBmB?HV|n~W z)co%RU2C!da1|rec-S2F>b)+;?V!L_t4U=r$~e2!WRnCLXQ>^y<#61zJFhq#m+W@f1AXMMz;*Pp&4gU^j?wg~$@sa+^qJWNu3k6l zE*te%opy9DQFK4WsUFd*HW}noM){;!HEvLj7!<=g#UQKbXXUFH1<=Ft=;jpNtcw5S zAPD2 z^H_;vD(2l#>YMiQPydFJ5E@gHRVmD@t4nOzGP~6;(fI^=f3Yj2ggReCSFozX4M|CF zMr#O42y3C%BIF?AXHoNAQ$_;qlz$;Awo;u*O>&_Lnmlc5eJG~T@JH33Cu-AHPs>h! z`@_+W$5LQv`_3d-njLk-SDB!anrA7r{-BhO<0(k`=lXrI<&I#x@qdq~<>5K{{hp%! z#!A5ZEATxy$H_chOF-1793OH);CyQff5+;KzdY#%S7SkAULDS5C$Mm6G)q~V2#I=$ zLA2aP?Fo3EbvT}<*ca8*yJqVlqv3tG^ICcK+l8&)HMM?`tGW|UT@L!rdn_j{dh8M5 z^ORMG!sobwI%C#j&IldI^Ap~0qp2-S)W;CK+!#oJ{%F9;UF_wLeP(6blluo^cQ%rO6wR*)ED;s0vqqJg#k`I%L zAyPF=sRw9v535?q0qVI=d{N*_CoAW{NxN8S7cE&yi4hFD2qDl%Nr53sGD1l~+O>>y z9V=bWNv5cLgH$-m2*Fam@5G2uF(HulkYfD7l^Q{(x_CJc;WCYIu~M*v5HBGmZG@;r z1)>VuX<3IsH5xDt`t+-OTyM}YP+}X2IafzrYv*#*4H4gT#J@IGGFqKzPPzhat<|kC z`sD5eRa#?)g+$FVf8}ydNu$o5mKjSVTE_x~;UVmuayAWXp-7I<(kjgQk)tA_;_26$ zHHfHSvMr{>l7DWcsb#f$;W}@gsL<`lJ!#AKz(RiQq!iaB?YrXj8$#vduH=BVY|xP% zc2)}k<}4rw$EF-%pPbn{O=PLQ8Y4#d?5WjQS;w_CFzwXo zhCOVz!@}c}s_Lt;w99_dYC_OEVb-0on*e;l+UH3NhX4zW=yO&h@=UPwirET& zUelYe8!XpM*6UX5O}qVu&4wQSO`RU4*_Q@0jLbgcbTD4IW65nDLb6f0Y;SB{{lq2)YC#jsX2s#T4U>S0FHLo2%&9-S;O$IrP>ggZRVowO8K z$w+vBu9UcomUUCI9<6khR@_er2QS3mmsv zfm1fiS%>wU%>;g)FtaCZ?E4n-11ojZ$|B4nu3j{mA+UdqGs8~zy4eEUuvmecHVbgu zYPoGT6UOH=}4HdTb=MJnM!Mu-p;sHY^F zrxLZ(h((1kp{-O_i!!rGnU#>vZl(l4G$EhUKxHKq8BHqTQipa`wtZE$^WmWFk)ZuC zzkOZ6`Aop|Y|#C5jt7T%uF3N*FAFpj*<&HKCro1(NzIa2DG+V2hiXj0xZYFBI$}yw zP)eI;DY(DL)PJGa*&0rwH!Agd3bQDf^pi6}g<6CbDx(#%I+4~W&{*bV7qKPH*7}Eo zE$c(g&yp5D8H(NzYI`Mj$-5O0uJ$W^)CG4BTUxl%hO>N2aahWuIOErg005>H(Bl1~ zLrT_=@QTCC5r(UJA%wh22!Nug_npNel%&m;iwPQ1XM(lk7^{#HIiip*%G~c z38z3fxZ_5SA~M#5`>S^~{y#Jt)W z5s^v^wW>rdG`ze3YNWEDTIsANS^z%lQlR45NDG$Oxs^f3s%-Zo0q0|W=emIV8NcV* zfEStmqdprLUY6%th|#`ke^sr!vMB&VTG;A|*4zA*I(La0yGmX8YFn5#`4t+gP^HfR zrL;OjgDrJ>8OLF7okXFQ$XSV!#TWppsbY;z#2EyfIWv&Q6ei5I9l^%OgN;vTVoq%htFn9`gcMKueCHUg;=U>P9BzsAc}$ zpf;7~G!*$01^z@)u&E-}5YMkGk5!e1D@!Adb;S$kRWDgsvvhv-g0|Ae>TpG|Gbcx5 zwTevK9FI|ytrv$>a|-CpI<35(mb5X_C9HC_Uj3BA_>$lGcGUktUhwO}*rpusmv+lH zCf#nc@u1BFcmK0qjiKVhM$J((cigH!X*D6#Bz~U=0V>gXiy5qvwyebjT`(J=^Jd*S z6Ne+#d0~CRqCaTS?KEmW=ag@#rO&8@nC&D4>Sasy(j}Y>xzY-?6riq#MO70}c}i2c z4?&bSsywClBYM9@X=y@s|9^bz{?0-DsTb<`$Qs`?f^)^%o8k$3O?Xk-C zP@uvHJ}oiI9FkkYlr79)OOz$3(m5m=vykC3X*N@>5y7Zp2PgtmjHxKKGCXHM<;WSo zT2qE6qD1uocTd+ng6&ZOfZFzIsP)yzg4c`NHx$=D69JRplUMFC6H2B4l{c#R6xMjB zV1+$zvD4pVw8mBcZcyRz8%lCOX>Cz9%2st{xpftJHI)U>yw>VRR?b`hM8~shJDz%c z$(rTOix5tKAJJ7 z>a2fkOVgl&Pk{OhqAD?*J17OBywa4;Rg1wVFWAyFr7)yCs4%2evRSpt3_OABBC7_L z^KqZ^3BPM?(6cVv3q;pN{Ez1b))WL+m4xPF&yc<& zBArKW3eeV|+Lp~4-3qk+)du)?0fS*btw^O2BI~EMa!RYDSOr)`e+u+!(C#;6Vyq=x z!C{7~=3zHLMaqvmCFi}7yYP*Y=I8TZHi0PkydPBFsDf2cnlh)hf)&o(MNV&n-cm_d zl>~TImj!`7PL2ZENNf& z#KW&`c;>ygU;g0Tm*0Eqg*P{>f8npI7c8tTtIYNVbv7r40hC6I48p?Y);LkcGAqrT z#J~s)be5jVv?}I=5TO}WPx|by`COkkY};&({T9bjqvg2Xh&%{=C0t|%0@EUVBIP$* zVPkoE@gxNSD-tfl2`hKpqD>1gaVH?IT03ab?l3YRb8^%?k(fWK5u<$Cp%X9TM9WY{ zW5wX}VN&NLpx*ECQSkh&EnTdZrnQKH*_7frpMjT`%p;VF=hCA2YAH02k<3*SwJ~C- zRV{9&#Z8n5YE%jv6oPtr7L-tA)kxavr0Ax&q~?s8Y*kCnMK~T)=NTD^z_$- zd{0LFkH&&4@&XHE*oy9}&2<)pjIpRWR%rLd3_6!wjsCtxq%dYF4Ouw+TzgauyWl9a*@M`V%1-Dosc zs{Y-eqGMHGp4(WN4_jJWp5L5^uk2W~e%<5mzWLghpMAV*$CkajckJD@^@r`>Z2$VR zuQ$H;*2`-jS>9Y(mV+Txt3$M$GL^kJ(--u^&%pUH95<~(7w!nB^Tnqe)Wb8zcs0}pD7QY)%eyZ|aFJ!wUK0967l zPLn=jfg#mmeN3l1u4hoB-ECs99p-JV9IZKv9I?#*XFpN2>Vt?y&W;%qWnNhK2A|^7e}n&Y@%Q>M`Bao}*az?2jlHoXL zQmrDOW}4h$Um;!4Vy<54L5$k|DkzP$zfSJ+tz6>+rO}0k{G}Ek3V~ISdB0MW0$^uo zzQb9sH&ihHUQkJzABG{VEzhlu7q&IlJhE!ptFOHH>8Bs>{C@k3`UtmB57jSS+N^7T4!DCGdmQ$)(Iir%} zXjz>`Zee8srL>Gztg+cY%P-nfT)r=odmxZ~*ylU$b)E7!&pK`A?PjD)7fB#GV^LA9 zf{{?pDBZ_CKOpJtYEE5{4dZrXe=m`RIV3DIiW};kx()z zC6m$QY`v6G6{&R@I(wEYhO)n@YK0ru_~Q0+P}=fxIR1nmb}}?iA6a0`TVmx^und<> zIn%-yKzNgYI@jT>)$5D@&91*R+!!ycj~CU&OIn+1R0X1z)K`F?D zA>~0Wlg_G;&jF}-&O=ZHP<@UkgU&}oo)uBwf?Quy9y!%BH^+asDx5RKw+PhMX7Z%oQnagv{f!M5Ksk_NTiTRlu{`<3`&aW z6r@^eU6#g@>4+#|4Tkt~PvcYJxf}A^UWsDz1i@!?p(%SV$AcPMWQOvWq6|eqUlUNE<%{^_Tl{N$65cJ2P* z%(=7OcX|f~hlfYTCMTzpPJ>qmzG*_ zW{cS_HrXV|un?wNHF6Uru_|N^hB0Uu9OrIT(Jo3^VX;14U9fGPN+`x%M&lFWmySI+{nlpRMJ|7FfPl4 zs^nP}k~!71s9cs&ApA?QWLA;*p;FnL7LGzDwbt)Kd8#AmT#UH1C{P)50BijTj{+6q+DPCC34|6s1s5QXE1qrNm;ONM(r_GMGvs^s-TE2c@zp6ef{WC(2Z0 z31lLnOeB&E6-qHG{|Hk7D#gt*2c?lZQ`Pcd%QFS-uM{=E6v0K4h)bjM%{gs)C^FBK zyU?1q$cAU(QfKK3FN8(@VtdgtS8<2CaET|o$z?4!YNLM+R3QB)L5+dZhWeU^SFL#K ztv7b;{QkrlLg~oFZ?a%_33Lxv z4re=nRSe;uGic7Hi2cc^-ezJyGf=Ow(x+6y-vL!aVu1TWg(3YTP#3Z?XaOq&rEMBQ zX^UFg%t-20e}^b2$XsRO0;jI@pxS1SYnwL+d*CY@8R$ONB-q6dK}p1`${ zQ+7BltAp;<(cqG(uQ}{051Io`HK!A+4N}S=0i|*dppv<0)I!k`r5OcHD`4lS3-vv3ZiN-acXfY!}12jr1DOV#pF z>$50Hm7>BQU+ahc1fM*p;dWzefrS@v1)LBl#TvL0E%XEvPHT~o&G~nMT3-={>MC<9 z%8TYNocG)d&u{!{(}BZBu65lS9Ge_ZCMS}~NdP*X0(BZoyn(j|rzdZWkDc%BJAC>2 zt|O$H7bXvv&z-yBsdd{o zescEUkKN~vj$S*R?7N=4bfWv+SGQJ_d}cE5w!6-TW2d5_pMCCqR^xt)5yX;&%WOVv zG6PrGRUTK^RqQ&!2~o#W0V-ltxPCObwwpB@jr8jp+0%>&6L)L0k`)}ur1>$OBFU^WMP`0#(PGvt_B%Vm{w1+MV~(THsq>j=okpmjNTMWR341cF z_}8E^6znQMg=DluLW|-30jh)*%5)+aRobEes1RdSVn>x+EyEoU0@)m~WR6rmM~M(Z zok4N4%>iXB;jCSm+x}c-`^%MePv;h`c7f7Jn<=MR4~1Ke(YfYWy9LUfXDwLhC|c~o zlV21ra^|+XycKpsL{GVu|GMAjzcTIp|H$?8i1N=wJg=seRL-hB7Huea_vbo|uy z+r0x5Q$uj|_gI~ro|u{*o1Pj?PLCv$1EW)&gHspojGXH1KX|@t=fN{ye6{0+*FSi8 z+3JeQgxeFKtagdrsdPEib~9tv(|)VDrnu;_j%9DX_`;@7KKyC-_ZQC`>+U>1a_4$- ztT#E_lRWwJ(8dq1KJoaE<>jB6jo)Xxe++r|1RXo=hCO!UQIGRDrUi7|5srg(J+9+U z>2;uV22{+W;w)=`YSQkv=(bz9jRxiot@2q`_M}F7AE@Gg3hKQ90C}3#1uOxTM--GM z7(yu!MOmqe%BrRXysA`!`;}m2Fr+m~ArP%mi6MXrL@Sh8C9*jMq6hITm1o2<|2G!% zy_Syr@Z3nS+G~rL)DDeYuNGn0Nu?1XZxX9B<*W#P9~FDjT4J#830->yD20&4%T-c2 zBbG8E2%w790*O`tR+UC6SY_>$#-UxW5{=o55S8whl z@yV&7@yWYmW4DJ#yN8oE2a?zNrY_$ZJKZ&St zymYqf?Ki%vE_=(Z-xxG+&-L!XCDhrDttgP{*?qWdSFb&&=ML+1NA!C1_wPxILF*$1 z%^{0^uSNfziTgy)yv8Y?)yfH|8rcf1v_p%UzZ7FpsfoV(oA{#pJ57r;n4uy{d3?ou zwH!id3O^3>2=*Yj^(sop3mjIdh~oDNFKZcD6$Lnjaiyr5mQ>M_3Wcy#npq~xDwSsy zN#+ztiNcxxQA!CHhTN^OV2Ri6)u{}$NJ|M=24{(rA!jt`L8+1zqoV|&Q;)8_f+pvm zq!9(BGBpn>as4x_vO+mW>?(3AjSahpRBEFVKSx5%k;n+BQu#wt<%2TyLueC}wnf_4 z)-HOfx#`(>{_=pcQR{2q0`-5V>_$BlX*K7~vllFILPd+*P;R>|SZ6T=b(D$8!heMS zQc!tA3Pc;@Q3#;c)h8A#U-k5huYK_4rdgM3&^?|XA{ljOwZXGyv^6MXVz5UszPpy5jxgzfK_*v|*wtBQS zpV1k#Em+v{%1h7e+`9SX&-*VNJKA~f>_AT!^0I-xp6Q9fWO6t;aW^^8oxFWLdF4#< z$ev?smws6uc*CXM7_x4SI=`}MzS7ZqoaQ|y4wL+t!a8KsV^DBL1}!MX#Na`*;RmyB zvqAg5R`m+2d{(1)l9i`GC37h$PzkPJHC-hWjZ{P44F zKOQ)G;mY;C{=Uh{{>h1<>9Nt|$ar#iGTA>qb!&9&#_-6E;o#MtfRWM6XXZgLE!^{4Ll)@^Ety%#Zm9I|W*TEF%f zwmA(uZMxkS-9C#R^ZW6(xrBK19n^LSBHDhqGEGg+M8u zHLSc&tBk88wHgJiC=hKhspq*(tqy&?$85q0QIrVzII8g~7DXqKRFNf93J94gIFbI` zQ-++*5Yux+3@M-DnSv8*A}N!ZT97IhJ_~eHVFPIg;3z8AC_#3H!W2#~hwB&1ACxh( z9U)y=TV7&iymDn}WPXmL-l8j4+2gFc8hnCMEf$ccM&qmFLe1vbTzlR;SX4K1sQme^ zK)v2pgzF@62`jGcnf0FlmGoFkG3rmorxRt7ba|?-B9y2M*T*9mk*crC2c?OcirR)| zfV$$*b#H(C`Of`^k6*mpdFSpRy#Lhr$kf=_G(a5$sFTUNlgT?%(|r@8z0>0$sy8`) zJ2}>s?7!H1>8JAtH|^N?(i_ipENUw)E%HWl-39n_+v^uSy!h>p-uQOMmnTpD+|zkw z{LY=^;9zoSWO{IDYGh=5Yy>qgSnTns!NHL`BV%`xlfB9Q%gO#r<9j!6>1e_c)*poI zn?ladEbMltez#4Jp8h@yOsjUUQM1R${%Bx-wsHq-+#VaZ#l(KZp*AIZmX)vPs7JNR zm7HQZ(&~Gl^5gyYK$W6>f4@cLi&4BG1)^<~7($x~e!rHPVYQkO^GbtyKdv*TRf*74 znqU>RYIzMKt5Hi5oT9;`s?#eQ%xt+vR;HCL2sf>G5$SUBU1yP80o(`1RX z+L1lw&2twl@aE3-cxw!%JXXdja0$x)_s~OC72!W6Oz5Q)#Sj#_qKOJJwg*1r#on5V zV0~@0p$=D3=T}ygv@|t$EPr^-lTSUn;kEZSe);{LeJ9Ud?7DqtXn1sVd~9-hYMLbb z<5Sba<5T@(lXvk%3@|p{KR(`%cy)5T2Ni&^kqced_Z>g>)i+P zb-7(Vx5&4oHviFiHIFZCz?ruwZ1M$C1f0C!)`@4Qg^-*gO(>uXfMID#H%cKCDTV1L z7Q7@%5x)@01<=g=G6xLrFKhHqt8(p zBb1|zb5(GzN-gB9&^Rm9?l|YG(S;gqu~t|9Twg)Ezo0!BY4X}jb*ztiNRl}#OY~rd z;7?JS{^FXl7`mc$W%-HnJi=;axVk)0Qk<+`U|eD~uoHtpDn zeE)K1*WLcX@d=bnlh8C=Gis*s`y*-||~O^%}l$>vp(wyPVqZ&8jV0#a11) z%c|aGrFS~%ZEp1!4*DG{^@2&Z&P+XOqnDfMr6$!9BfUtk3|0nB+nH`71=zl=7^S-qTFOlm`_+{*EL{ zG2TbLG%fOFlo%~kv05h8$`yKwGV)TOEPx)X$D5IaYgw)Pby|Y~B zs?Y;hN14W6rgoIGAU3<+5^V;kfr9p&yw;qYgwK@EQ4ZxSsc^PH@=&HI&EB6{{1((i zRj9T)hX=K`wyeFqef?9sC=C&@Zeq>$8tM9)2 z@s}SR_<7%j3+H-!Z;y@+r}>{7d|j42|OtP8DxQhm+%o6M9DX?>M<(?b9yJ zTLHs+F7>;5=_VWdbIfxv$MKy`zROJSwySr#v|l^e_l@)ho%~q?z0S%$Y-Bo&%o3w& zp@CYUS1#Zbyijq1kj|%@P3Sj4C_|++Q!+)pR7pSugkTR(KuApJed!XiByh{eqVV-l z9jic4TCJ8;X{5C}S&c~nN-Hh0N(WsRHq^vyZ8hPCmnPOfxp3LigvClB5amti{d|H< zo>DyjMNoNqQ-ytjPzIw4ODjUDKT9dhqC`SQEM}!LPNvW+5LMD13Ri<;4Xl=!ewMd0$u+|)HbQiQ`7tRgmHs$!^E^UrVWDxzA zgIZr5uB!>v)kf+P1&vMB%a(V%^7=bpZ{4+X-=QS)Tu3d_I$AMvu9s_ea-r(7q5GI z*~_o2fB&O5zWVly?LTZgckWDA7gDf6PzpXtlPfv(N1&n$HgV6S5B1$1zTKG|>r0N` zO5V9}bK6IomexPx)4l1}e;spe_UgYdtF~IyICy-wmHok?+hWsxq-S2&D4yr2XN{W2 z^z165W|={~$iU9mGwph&O|P1(Q_a;Xc%k3aqLnvmWDrXF4XlJ$y;@w$AkHKOeB}5E zm8_nYB`CrwF_rgNtxJWVK(vw;^QvN`m1=2?j;iDon8mH+WK|}4wMAKJlb6|KWlpLp ztjAr4Ew$lQ%Ny1{xuCJB2puAXoxehqC-aX$O&iSLT>#Ov2($`erb3XR5M)w5>o*xi&Un|lIb&4Rx#&Qn4=m?f!0-Q0IsfL9nvLxq1sxg&aSpZ z8@= zYu|xmXRi0&<;(l<`v@6fPNzt33M&}d(UH-<-oBeRx-VYpJaggt@f$s7x_i&w?mK&{ z@AREJCvM(6bmr8y{rf)q{=0WKefipFA8+{Ti+6Wy{c`V*JC7Vac>46on>RcA`}@Yn zN8$0)pkn>I7M1*VOiZKFFg`pqIx;Ys97REQIypEs*`1ueHFWOBT`#TKQ0jlq#lG#< zeBsxB#5rI`6SKg??a>9NB&I(2{BefK{ zQl*h9GbqbUigL5E+@>sdP}pBqD%s=Jv(_j26*I!o| zt^ug9sP(ai=8~4ViH=n(Uw!Mn&D-`Izi{=|@aR2INzW9nKLsk@8=ssU92n~Exqap8 zjnn6^9zS>W@U^a^H*Ov8x_zSi*0G+Rqc=N$zIbNW(Sw_h9{gti?yr8@x%trE9Vd?* zymaY_iSbey9ITMBb zKjr$<2J^QIAetq~Op6eU#7Zdwt30SYtHRV^0Ez}^(JD}1)r*l>$#p2b3NaZ-Tg8k^ zuJ@^oIci%(W6#rh3XGm&bEv|Z-;iD2np@nQ8;u8TQ40nM9+ds(L7mC^?@Ol8& zaQ(I6+C;RrzM!tTYW~v2NcKP8wDs_ri(UPw5hX{bP~9Y)0@N|YhbeP9Hg@;!z|F3n z3s-NPy4ZQ*(#@mSx{lnqee~w7qc^$^!<^o@4kq`UJhb)9(VeFc@4j&Cr_S@I?p(V% z(A7PTdg<5%YEU4PclZC?q5{kryX*9O$@7dSrgbDz7lpS!rvUHZ=)`VTGK8#?uiEd5t4vzAjoqGLMr>IDXMn@Qbd zfi#T-)V~wnA#WPhjRvM(N2BJ6QhW`kgzB{vKy9YwyitX9O@msl5|=ZQGFDp7$;bHFI@9>5clxB)EAS?*CvMhN2ltmRF27pC{1XLDS#S<-8m{z_oKpUlGOiL${ z>4X@&QrqNOx6z^eMJec{X zE$SbE+E5ou)J1CQBJtYX%DU3#h4Y?#{>Aq`+r0P4$tyj5Ba=xaQ)6(*GoYep1W!FQ zI(nzC|9V%?`RiS$u6AP*;6&%GBVD(Tbl*O5^X5UA)0iNe&JthsKgaD3MN*`co<{<$XQB2C;wO`p1)FBM^dQ{4 z7aQny6V+-~wOD2lZQ*{+Dv1h=>IS_k!BJoplw#4q(Zr(Cay${NLd2G)V$n)g#v@v4 zR2G|*1qOM(UKTM*b8L#dYz_z1<9ZI5(A;b$H=E9nsB^uGL1v2_tMrJEm%cyAg?N?q&_#lIua=K7`=KiEB-%%zhp`Tb3}yIv^W3N zqPjBjyQ-~-5TQ0zk(VehsISP!Fog>0c;E17&*1RQzQL>AcQ4-PJ=HgS=63(Fo;!zc-8yo! z^YGP(Pj={q7H8bEnHjo^>LmCaESCV&6CvX1z)ynEO%3V)qt6z%f-!8DdmTh>^rGCk+ z#TgV&=wz!=MAeArv!Ygwutg_rF)C7VDc!17fz>v>8fw)su(2%$b(5aq1p^DyN+{)M zRGh#kQYQqZP?bg=*T_+{FVo2jIcd3#DYG#-TA`Pj<5A7lOaE6S!1}$k%OUZ(WH6!C z70!whb2vmtqnd(ZQ$tJcf@PKEbs?=oDrEj5<1)$22`lAGsd%QXYkKjk2p03t5QXZq#uQi?Z!7u4FS zNJD*YOggMVQN355Lgvqdid4OKWDF&#&c30` z-TmipA~fwi+}ZQfwHy07JNI9`y#M0qy`c2sv4fqbPTsn3VW_if{7!#zV1$4QypS3F z>y(mT6l8H@sqdV`Uxv7UQp!bK!c&XrWH>q2Pa0U0-P45ClgaLbr#C+PW?SBq`KG7x zjnC(spO2XSnyr7-Dqmw(tTxM6nB_}M@&!ieT!R#>BKIeVawq~2L>shJBS#ZTQvpC4 zQJ7QseLT_kgn=as9fgcOZlEd*N?1`KnrDy|+UP=u%B#(?(hu5H4{_9gxZMgIX+p*w z&6ysLG(S&QT4E|LF~(xr^0*V`v}Jx#wAg{$9&!9WZ4y%)Ie4EJi2bd8-439o*i-`X z#HOL;ivYh01Hfvglqf@z!3%33Dv)P^Re*{oSXE%(kO3!)az>|)wW=`9f=GZ5ToIgT z>@vNZa!1YCMJ`YpDGj>AF0BnaT4lsU%LQ3dA#hET`K!f029@-rQ0l*DQ2}bAE?S)k z*EGaxTT80js+$(ifAskm-rl%*+rC4`&R@CRKMYU-3Nc+k3%#KvGN6I+2~yY}9J$sz zcmd}0de7l2H}+n*{Qdd!J1$(G;prPM^Ge`Eq|}_t@>b(>$ec)MNOG zlYbUeWKYoeG)h>ho)!Kgh?g-XgI^u|6-P#rhzQ7AWc*-!^y+lqiRAFvWY3|C+unI^ zMfJ*DNWBv44N957J~|zRFi?8 zXXi-PpHi(3WXfweH0a4Qu2TX|A`@LGQ zVAtziTF#|Tm969o0|s2PC9Ai%4o;SL(u({{t=@5 z`@BU>gPN!$uD_-_f;5T;wWg)GsnZjjl|D;j zlH#@^#bV{im&}1L9Qmue^VtE4#@OW0!xTXVFyu({vfDNSi z@BkZCfVxV{utqgN)q7Y->!eU(B|8Llb0pks#H&UhYY&+mVT;*sWNoC&FH%c{G`1L! zO$0osX;%L+rT8pB#ZIW-2em#@-IN<|DJpNSsF~lo>e*-C+_>qx9}gZmd!@T~XmAXb z{**-}xexDd2d0yEC#HKw#;^AcUFf`X;>ykar_XIWe*EhrhrT{`c-KUj5YElDQF6l|u<7+)SfSQ)i>A zjj7JNMOp7)>YeHa7YkJwq-DmxQ>jT>Y?2pPseBtzZb}im66q35sNXKfVO*8vo+V2v zo11gPQN0sR-y_GSIUIP1J)QtX;ZR6xGKzFKSI2iO;pE|4SFVoS8AxJR00;tM$bw)Sr%~!6wv`N= z{0XBv)5aw~g9xNzDrOY*hlz>1DC(v*8h~Yzp`qwS`U4n3#GimMn!&qM!+pu=K{78e z4Kv$0*?X@4>Y*!#zdP{lyPv=Q#7hsiJl!RbZFryXbt68j87@sD}x8R6#cta8q8lG7w;@YqJ+Eizk|**)g5fE#qtg zP|Aa9c8V-c0YJ4oGTk20e3;Xg2*Az>vTg^i@uI92xkf9*A*m&kci~s`&s3Qoq<*=0i|NOj2E&kxlW25tXek>P<38fRKZ-+>$y=inoxOwSuk;)`e{~Pc>B0S<@7?w3zFl7&+Pm${k)OLR zT^+vNpBzqwkttBY&?I`VB&Nhq{d1sB!&rjARJ4rfVT4%HfuUsI!1SFV#HAz-K#>ZT z7UcjE0!)HR{7nhGOMDNAXo--YJkv8cK!5v-|nmE>FV!g}1@iEHa| z_Z$xK*6Nk4f##*wQ@rknc81S;pJMfDUOcX8R_}j#zoo^|6Ea$kef=PI23N5tODqyd z#E>ursz@e>gi;yOqAVs;tQS&t8SA07K3e0&ftE5zX%o{9soG6xJZiOzp=`87FBh_? zbj?`QvhpBQUXfiQk)au%BRU!gVh#AoRu0#uhFlRV3|8K?`>P1527}@C@UF<9&nU zm~p)|GTJ>ld}CrX)hw9mp1ONBIdSdQxgTD6vc1?(2aOp~yBNyz$e~=X0z!$NRO$Ux zUO*M{(K$W_3ixIab$OHykHYCyx`V3he1kux(K`gJb&kO;(m69tUXj@+wg+VHY?;F= zae73tT(-8xTUp^KEwmKIOhviY;yhb!$e8VgX;tCsXL3ZOQOOx7URpg3@qFSrL$8rm zr^M=+l+o=?G%^1PTV0NG64_lNv%_fRq9h z85z_=4^satL;D{xYnI9_#S|awQSwqbW$0L8t?^PCuZp%Su}?~*!2uUSvR_*%%&+to z#C=6^e{ofyv?f$h6OPwJs%oQ^@lX|%npQ=TKZR(lt}==R0s|yabyWq4%EFq;ysGkO zWqAl+AFm5nHsqEz6qGf_o0l*B>w6!5z30&3v)3+l_4SQRk(7E0Jt6#G9-YMAld+!h ziJr01&Vj!3y|+%^>N;`h!rl{yzdLp4yPvjwvgPx)wru>{&dpyO*tzTMk&|5)Z;WG4 zASPL0=ukG8CYVi3jbq4#_~^g?m|>DwKqxg#h$0kHBwld&7&b_K@ZKLu-WZ7@#wR9+ zrzQaP)a#I8If0!?NbCivY=P#hy28fx_p$~Lt$T-(@$ApMV&&e zbv9?8Wp-s+Jy~XNh9@d7giLOnTpHIxw%{{rpt>Ni*n5XwJ2)I4;iBY zF63ohR=LeAH5()bokY(`aaN>Grz96d>h4)r0}h}d)p%aO6{RFbuTo*eR5!CG3>z5o zDLr;b(a4E#;>^ib{Gbr8h`8%6GeC^wh-}!#imju*9C$62pHZd@bbbSWYR1^VLp}&Wey!ty( zfhaFRX=-E|ULPTD>Vway@GW>XLp7KkxjS_0`kiZM2X9;$M<#`E7&bg*$YD^C&JpzS zo5F)iersTA5xCw;PTfdOUmqR5hU_6<|nAlb#^)<5Ydh9^aT1z-%Os5HISvP#W3ao-sXMw?8WN;OkFtVb_X5>~$ zmXZ`^=ZI&gK`pEa0#x*fL1|SYR$UW?aMmtFD2>PJEA#5B(AH1A8PBVY!|DGWs1-Fi zWR;lt0r+I3+6iHqkudwPc_c~FsEV@4Vir-MT`?)G20)phF1#r+pf z?>=>O`=Py?_H6xV`xkF*`S|s3KY8=}FF)G9W829C2d|#G(0#Q#4JrvQQzcnYO8EKB z$1k7~gi@f+n9~_h$)MpRVHMvBR`L7=)T!~Y{#!RMp1OE^fA{%gWDf98f;u*G37}rP zxcAYA6F8JO=#cpo+^teSI_v=lue1VEa2`f5iO=uf)%!4rPEt# zHAFd;3!4%#o-Kk=y&qJV)AD+Rnz8Eo+}b*#L`_~@H8wyI;SAn}YII8py0EAKHFeA> zv8a{t2wZ%0k}Uv))%!sugWQM{rpCtyZg*ckbM^G0 z-Ycgk`g{HasFR(^scVztSCi9S0Cml(Iv&&rY0XyI{Bo;LW)Dgbj(S7#P#&FErinM(T9yS@KU2N#<K{i^|!xoP*KZ86H%fS*tbUbg*AQHAj`fYF%C%ITs}|--;blj&cJRV&x8n#2|)? zM|!0Xs$7LefSMh5`O0hnm2$|XEI9!KO|IX93QB7l@)Gs=b&0(C+I+CegW6bCkOsA; zG8az2x+1^2B9{jhaRNXsjOXy6E`H+i^{>7A`X`&e-+%nX#cSPnN65Jo6Jz~j{k{EN zUAHe@y@u0$_8vX7ZU5e{_U`&@=hhFlZhHIMjj!+9`tjkNU!6Jl{q<9a?p(b*dZ#xv ze3IlrB?gkD-iUMws3dOu&Bu&Irpd{x)05Ye$sV|VSk!A0M+YIx@~f=O%ZU?VJ{Q)v!E0f6^RupS6oY-wy53;Hq@ZYZq)@^^u9X1rC7`ODUn$$&}Ip= znNnO_WAG5OrS;BUX*n_~&O4JJ#G T$7i<%YK@k-Z8yma3ut8V^ML@ysKH($N4$9v9w z{=4@+Uk|%8znT59^O@hsV1Hk~cyUt1fjMVq#DJS+)Bf_qR+NvyGGyPkAFpTM_`|ya z=6`^@?RWy){DW-!iyW*QVU>(Vn9j7%Z-2L)hP*MXTmSm)>__$fzb@c!^bRp!V>R1_ z+SgOGZT;AGHzXm_7ncOE*(wx&-_`lzjY4l z@-o=|CpOrh8{03i-^QQoG0N*7hfFj5XY0}Y8*OtS#5>R!7H0fqJ-S$~+cf^mYW(wh z{P`Ee@-=>Y`P23Od|u2?i}T;#BbjN2U%#K$=WnDM__qQE#R-`HbSg%`QE>t>6ekc< zaRN??6Nsfa0cXVt#8#X@9K{L5Rh)o};soL;PQX=h0`V0m;HEf%1d0<#s5pT{iW5kz zIDsUJ6G*B!fnWUxP@F(Y#R;TRoIq;D38Yb+Kw8BKcqmRFo#F)2D^4JT z;si1(P9T%w1Trg5AdBJzvMNp>o8knrD^4JX;skOkP9T@!1ad1*Adlh%@+wXspW+1a zD^8$*;sgpRPN0zD1PUuoporoGJQXKURB-~u6emzzaRMb2Cs0yx0;LouP+D;UUWya& zR-8Z?#R>Q*PQX`j0!GCN_$f}Htl|Xx6(gegv-vf>1)C{CcN;smNGPN2Ht1ZpTwpr+ykYAH^jw&DcpC{CcR z;soj`PN2Tx1R5w#prPUf8Yxa7TyX-86(FMoIsS~1bQn@ppW7N`YKMKpW+1iD^6g5;sgdNPGFGY1O_WkV2I)bhAK{A znBoM6D^6g9;si!2PGFSc1V$@PV2t7f#wt!=oZP6en<9aRN6KCva170=E<=a9eQ#cN8aZS8)RO z6en< zzQn|5Cwz*9kIwiI8}H-bU0l3%!JBw^?TT0N@zM=165x44JWGV9iSZ-}9w)`4WO(R~ z2gz|i1@5K9-Bh@f8n@HnR$AQjz>Rdco*vgS;A%!($%M<9aVZNfX2peUIG-Koa^P%E zoXLgLxp68FPUgjld^nyT#|q$RK^!TB!-a9E2%qPlSX>p0s$pSuEU1C`H8HOi=GMlXI+$G-v+7}HeavWp=?yWh5vGP?N@Glpz@#Ra z*c20*VSICpYk{#XF{Twpx5lV87}*vh+F^Km42#6j4j9rAgF9hRXAJCu0bS9*8~Sxe z-yZ1G6TN#ODhj=Nqh}xV=!@?C(5*kZ4nUWI=sXCW2BYH;bQp@rVQ4=b?M9&ONVFM+ z)}zsC3|fvwi*aZ^9?d48=|nV{gow##JO$xX(P$bPPDg_os6P|+W})tE)R}|Yb5Uy^ zYR*TE1*pCd)fS=ZVpLgz%1aTp457}L3FfpIH*x4~yS%ItvmPI&D?>D?%`2POBS#6A??k75T<^dLN=QREN`A4Z`gD0mbF zjv@bXubb&1DCgm h`wns5BlZV4e?+WLaQcjxUl8Lf9KXTgI}AU7zW{0vzm)(0 diff --git a/hl/tools/gif2h5/testfiles/image1.gif b/hl/tools/gif2h5/testfiles/image1.gif deleted file mode 100644 index b90b23aa4c495ba04b1f0b3cbdbff8b4b74713b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9736 zcmWkxXIK;V!~E5=8l+ zBa0A{09k}7vSe>UfbjOcFL&SXo_p?0ZX0W;KTQ9D2ton43jV|YYbXH6KLGv-aP%WM z6aWW;fF}g@g#lLt?EM6GPlBDF!S*SzbsB7*0UKw*x+qxt1+1O}E5CweF|c$VEQ*8g z5@10R%wGU=QeajZ%*cRmvS3;ce3b`N7s2HJz{Djm{u>xm0Hcb4qXb5j0sAsw{SKH{ z0OJopzY2!`1Vh)r;B`P#0o1<$?}J04f|oxf3XJ2A^C&sVn&C21?vP@k3DL0SX_10#A_d z1z_GF&j;lCf}F=7+Ye+t0h#{b!&8tE0Ny_X>46~aIY@m0-n|4VLEvpLNDcvSLP1g( zfQEy_2#^p7AW`6TG>DG@uVO)59Eg1dV&XycYY+tikqICo5rjiQSP}?*145EP@LLd+ z0$#oYFH*ttG!U2$p1lVF8Q|#$;GYSeWC6cy@Hhwf<^rEQ;0*&_`M|RPJSqepMc`pE za4!LFAAxHraQOtB%YaikaI63iDuF{4u>TC~s)20{u&D+2zkqvn;BGyzZU9z|z_JNg zGz0S%aHkcRwSn91z!VNlI)E_(77fSY-@46Up?RzCho_d<;>v?Uwe~& z{lk?EZ~R6`|LsnZc}J7SkGX$8nILyG&r?hOeJf{yX!$-|b-%`S0MWWMDD2T+WYO8S zG75jWG%?WGzBbwQ`e%7dBz)r=@|VkQ6lBNNJnhq+VoMZaXNleXWRimF+*_Nf;VVm8 zp^^Jr3&S;TR5a>fZ~a?;u@we=bim!}wC}=Tj*o%R<*7IUao?#|B1%ERb|#nP&XQN({)^3unwl8n? zs}QbkkyTm#TLT*NwObUOz2z;kgutKMG((A}+k>XcU$%$L)mOHMtxf*iq1)I$-C>wN zD%oK=hpz0f+@XK&vORO2?vD6Ye%a;tx3BDu2IdrYj|H)w?v01df7#&0=Qq3lvmq@Qq)(u-_lL4?ayS|2kg)0`qb^u6@;$t&zC^2@n)qn19;!7D(iTQ zwe73Cr3S*agXI=hz`+W9zV2YP;pNo9T9@$k!*#60v%?Lda{b{ZS$*wri)M2DXq&D) z*}cQ|sXy8s3tc-oIp_UmZjb;9-I!)?~H<0I~T{W1S=Z|%PX zo+<&trd=nb0%PS(OHN1-yM(mXUx}ua2q>F&pLAT0mn4@6sS~@;M6ACS6L=+JV%l>K zwhp;${_&(eu}2)So}iNQ@sy8guM}rJQN#bCNC>f4j<*iw8=NW?g_>e7No^#VnwOr- zA!3!ZHr`mLl>TC5fV<+jk?cS&6>lfvu0?FTbwBknLq=u0{$?Xvddc2LaxKm{ph2NN*liW;CGB3L%(ML4a+I*j$Ql_AMyU)yV zGb5K=rlj82XPQ0rq2yHgWs}>ad$7&SD)aIy_I)Hf#Aa4QO8Hfv+x?E!LjrJe`L)o# zeplXRPS>dl73giUhtyUs(Y)eDP9ND@>t(KTQiW>e?Eyc>Ef||zq1N6v5D>AIKXs~7 zgK(Sj0=88!X81~r)kg_IY!$AjRO-y%rbckKinx4orQTj2HHNoU48HiB6f&d5OKq2k zSXAATAkh-Fwm*u#t1?tJ8%%cGE|nap`q#E=Fg0TP)5X)DO-;;(GGNY|?>?JbA>v`2?Fx;7&z7O2;UeC4rNQZHYp5B$RBETn)S~)c&Pf|_jh)Zd@2YJo z%^1~=JJk*Y)pqS9MqR{Cjr-{u2Z9;1wr#4`*P_OeMPjxgcD@9@t8tz;V<9*@bzuWF zu6raFn#2%{J6-E8e23j5wcC(nQR^Ym&&F%*Hm1L;^;EtyLUIggyiTn3R_`C7MC>+~ zoc`i#a)&bn+ij_`_~K{Z&tW2VTgwvoul#-PjB+@;ZSa9F0ipe)6TIE_uG4ja&^u$( zQhRXX%F|QX{bO@ldmXfQbwQPP#upv;5bS}vkoNxZ)rh^$snhkrUIr7Jus!60MSTRT ze_|K0hgyGEA2okxlE>LYa|h~UCbeJld3zXerXfz)eCmWWw@bvbAzp$!C8W*m7ENt{ zD5tnfIdFR{7vqFOE5UolnynYxwOO)am*Ol>ZhH=oxU-KY5DUlr|<=k*Tusc~moN`x&I zZb|cKNtP|85(5jy+PuN^Ye8p}EWVpL@rH6KEfwkm-z_6~!zE{0t4u5w@8$F8RhF%l z!Ci}XojgWEYHO{J#ggMFj|r!=)`bo%xgPLXU1!=Fo}pfQNFT6?mTgTr1Iymp2P3r9 zww6kZ6+fo~4x7@})_(e_T-d?r)R}fT!D97A{=wLSWjlg3uo}{NFutDJj-0nx3)-8S z;8NPrdjo4R2M3ejEWAtDay?%9a7x4q-XlR-PyBgISTqfeRkqwnb~>Dvq{8v)l#SHL z!*3VQb`bd{mYW&*QQ!1UJ4p7F&Fs#@S(UU7vXA8!Z1iwWgW5p}rEC=)9L}o>$J3ye z+ojS+3#L|xp&ZI~h4#^R>of$t(sHNT>1fg6S%hdCWv4FkXvzI-C!1io+mwH_>}%D@ zVNrJ5I*(QY(>g~I4E7MCN2_7f&WSzB9{S*DE$%FGO4y3qBh6n=vO-QD>p}3^{EhT9 zwiiB{;%9O~hm_VGR~4ZU4yb+q`$qzIde-fibok5(g( z52nsyxCATyX8!Tvf)$3xqVjh;V-HP|Fo*M2$Gp*FK9`E&?@^EW2miIOWZVgjI01(^ zp|H3^sK7~h+$nb48E%}Y-vYXeEhEe(jF1H?ECVwwvv zgG0>O5KAt^S~B5Y803z1f?ZgGLvDg2Ji(cr;L1&KmrV4~Nc40_^bSk(%}w-!C%O{_ z0=S8RlF%0#&>#nBNEkFM7a9SFMzNtWTxgtRQoKeIBo}HCn8Z)YO-hC*rLdDyxk>4g zZ!$FAWIDXb4ttZE`vwMoQ^0<)nOv%oT;`Bm5tdw)n_LY~u4O0Jag!S)-!^Hy zZE<+p22Zw1e~W;>MY7+bxo^89Q+hN~unsBsuoPl$3JIPS)CKmtyA7$!?9^3m>bhjwrbgPfL)vaw8aFqM z2Twa>r}4RI;6nQDWkG=l=|bV@B6;a2JJL^$q@USO7rpTQoaTG62k*th-%IAbm)cLi zPkS%7|Ni2Ij7yps3J)@r!ZR-CWnAgVxH^(?Z9hZh0{_De%@3Dv3#x^G(8&9s)$u`R ziA7mPbXPV|^nssEFU&ypw&$Pafbx$+P=0TQSc$Pz6mSabj^GKHK zewO=%Y!A(B&j;C#j|F}6vi&-;{YSC`_Ok;oXety@5f*#ER?1KV) zcmXl50R35zJW@c}FQ8p09MUYLKPY5|7qasTIsA^ov5~@w{lcjWMbqJhPS!wSX!{bC?hazd*_z_COqqC^B%auQK; zic@liS0XC)@toF2F<6O9;73W=M=8Wd8O}#J-p7klrI)ly6&y>IB1$jAO0OVFuX0K+ zEefhgeY&CbN!9U_TEr&}*e5N-CmqfwJ>Dk+sj^#IWrmJr#)waD>1Ae!GILIuC9lj{ zs{Ec-xs7AFT|~J9tlSY%?#wB7<(1o<6!Orj@N}&3j;Qd3Rrnz){5cf?yox}n$`@Ld zL5`In5tU(_iiZuAQJl&cUS*tARlHUeAL3Y*7*Ul3t4c;xrEscJc~$9BpA)YLWjcP& zj`*Al`wT;TF5rAF;(acWsxH;4E_1A|h^VfDRaf&qKcZFF@v0l7YMQiaS{!TIB5L5U z8U&&S$*Do}YPzIqd$eldW(!S z7q9g%Q&M%)T6Hsyb#oDQ3$VIHMBOr{Zk1QJE>*v&Rln_6zvw5#h1K&A^@p7Q7Ggb+ zZaAUcAmG#>6xkq>-*B?C;nZlu8SMri(Z+MyjbcuX;*pJ#`HfPYjWVN+atDnUrJF8k zHz_zZDMdEPycN3A*>rW3-*oMuNkzK(hIX^6Q?puRvqpZiR%f%$XtUlyvw>6dW0e*| zrxxSL7SsF|v(6Ut(H6^t7HjF&d)lowPOWy4tq%FEmNi1oqphw7t?tro9@=f5PHoVuK=XWAHJCUQEO-n*u(#RfdB-ROuk3d9 zL)s|16N<_2L_SMLaXL|Bqo|1k)RZ)OS{ps%gr18;FXW>aJJHLd=+y)C%+JD`+L&!8 z%x)xxn~&jjVh%?!`~wV-={lj)CE(m86xAg%hI!u5b!x2Z%wd@u+Ue zf^I2fx6D|#++p`cnI7@0!V1nkN>M$R3wo{~d#;Z4Ts!Phk?Fmm)2r&-s}|L(QP8V( z*z=Ost9RIIAcMW7gEe%<8b@JG3$SKLtoaz$@(^n+gS)4LGc^~si^4e+;2e=S=P{h? zAkuK%#0Y=kqyl0xl9)0^Og$u~%k*XF^kq8tWk>bp7WBc8eFbBEMLK<csQb;?AqMaJ2ojIb3$_}2> z9TamJ6ptR1EF6?V4T=s3%N-3~lpVUHJEY(;q!c}LxsX3}1vPYaeCXQIkc#Z^4c%eY z!lCHEVU5CJE!42i_^{s5uz@W7mM-1Ug>D>8H!Y-_q3Gu0^jj;!*0PLyx(pi^hFvtn zp^)K-VmOa8T#p#;vP=(Mrl$+j8^wrCXZoR-{^QJmBW9p1>xC{W$b}UW%?c}IMW9$w z_RkoZ4|t-4UljcC_M8krtQHw&+oK;V1$%iX0zBAB}d&j`iq{ zVO_@X(PPBIG1AfKYuXs)XpAO1KE&4@r@M?ZqsQ5W;~doZ*!cLw(fE|?#I)`N+d^b6 zdSan)Vi7g5JU+2{G_fu_xv4w3?J~I=J;^PcG8iA$j#i+n=y2qF^-whNfj|e&zMil zSn_AANF9H%L2ju@Z>hy~ zsV!y+UbKWjFCizE(EOz?x#b?cWo*&XyTD~)(J~3WOrBV#@Rw$cD$(~zjZ@@OVw>lEp|(zcuNbjr8Bvucf4gF zzpZxtCquVw``CSkF zT~D`N@7P`6;$1(?uK(n2!0~RN{N4-wJzuMzLSpyAiuWQgdr^~nF~@sx^4xfRF2s$S z7|Ts6<|bpfDe~N`b#A)+eun;jrrUmY?0#EE7j+fx$$7neyS?w zRbzOylf1fPUW5EWlm0=A+d*6G0lfGCfjK}<9-#FPazqb%^bfIahxph-V(}pfb4Z>% zr0|aqY4S%y`bTuPBWCOoIqfG7=4fp4XyW*2N}fNh&!2JQ&&Bc=iusEe{_-S$^_aiz z#?MnZ-gZ0QjXmZTAM-HBhm*(r|GvQc+fxSdf~VySbFIJLN<1yA2a&uxZTJRu)fJn2 z_nUF5tZt0Jg?lrm8HyG~hI#j9&9eWej)GjcKW7fR`E&xCcYofpNH>})U1}8k z;ug&2`@IT_LcIhj+eMpd+b^y-nC+5XoeRoxMa*v5p~-8Y$SB`##j)+_I66Vve$^Qf zyfWdnbbHMe9eu`6dMNAVc-BzmA3+JvhJSvz{YvH5Ps(Ktw|>5kRr&X{`b@*WXY~dCGW^9vq0#VH z^{a|T=j}ZkjU?P4e;Hr!DQh&Aeun+aL^gD$(L_GBY*6ffP=zMb-_i_k+*Zu-Y`U#n z47p+Udu3UZ*&p@TroQ`aGfj7{V+8&-|BIl|Z2mXZ@NbKoEYD^O^-0LzmVe*<$ZxjP zUc>%vrMoxNY^8rJplbb(uwsk#zh{k9?;0JOm)|v!Pf)#gTe-aD-ks|>)%zCevn}_n z^aXF)+%>`3oWE~nbko+>-mBHt-Ywy#-2xSRGap|dxcwlRWg4iBMck3GV*->>TTSf`m8xAyht5!{d!|1>EE9b-c!- zcj|NSM``*(9n<#4N*$gbtc*3ivh2M(ymH(UHNEqEDmuLLpW!uqavpx|@G1V!eJ$UQ zP$h)#r!-@&$K^TRh{u)1iCTW2(^AX*YU=S?PrkIzA)eG@gtYw|2}+&*%~WIUr>!g@ zC-L^lMD2i%`HIef&NaODGt}N(=QGT)kWOH?u(HnDgEJ;N&v6ny$maxksLqQ% z{_6ytmjmka$d`SOf6xsYG*Lzc4O^M$1~cq^P{AxWsBXxJPbDg3)V^LZbUbt(6*?I! ztQYnbs*Dc%mS&L?@dDWWA^7OF);^g1pU~fy?IRR@v*QwSb_e0LYx*SZ0LT1e;#fiq(*yn7UC|T zsPWH9J6gO1)?Mf(x63(*_F7)xp@@;jt#jElh_d0sleX|%;%&5q>yU@1yfpq5TkJ_x z$38q04F6Ydmj=}r@DNSVFuWu_m}Fw;aV`sPs3i1U!V2OcR<2=m#cnX!9_u0A3OBkI zGWga_;E^Ow!}vz_-M2`CM^X&9v0B^UyJwI`GP4>cTFk-JQ0ybQ9k_|!?qJ%>WuuFN znx?nJhti>jo|n#dm>R1My-$O9Dky5+HnSVb$nh+@uG(?iGGypOv4GcQBTch=*+ZF? zhF(`}JIw6bhO+7*Ucblwb;pr8l--W?x)$7V$8~oo2P5FElEBwA_Yfb>B^Y|&i2mu6 zx7u(X72>U0u4&y;! zrd0%UxM&aSqqoyx6?U?>_*lT#Kv2s%UYuScY~*|EJiX*4<>KAV~?F zuklU9-P92JCwalgrbb%#GP3Dq%0`dPY!Uae+ic3PagWWtwC=;0^a^#{W6NN~{i0oZ zrM{q_b%K^nsW_ub`%mM0SqPg7HO6PF1V5W{E!%24MzuZ8&#o0=TNlEpaVxL>3#(<< zl+CF1F?!<2K-jglF}^%Yc;Y;(WshJo>Oyf(oYETk_UK(keXO9ryP&p1k2tddYUJ;6 zzS9A(#%xSW@b^6Z_7usE*_4Cx_rBTrfD*!NE*5<1YozTsl+A3ZG zVBrEnT0316m=e+v}gB7-~$tHA|IX!W%tSpJx?;y z@i>>m#wyP>{B48u5N~JWt|vZE@zQz3mtwK;>iFlW!N^B)du)Qf(2IA)e|cV#7$KS% zzsSf!dMc@p^jRgo$Sl|Kx?(>o6yT#oR0U6oDs5*@k8;j2 zGVm<%Wx;IJoG*QZ5{iFWw1f1~+Z&iXW2;LxDPL8a$Wz6N)C2h$RR$`o}U zo7r=Qa_~VFH&Kr*Lpj66Lcvu=x_>pu0fALaDd8Mn2fo(6=Dj!p`N z!g0C*FLFl5=8Z!U3{*e}zkPIkO{x9njPA1t*673@J`}x!dKR-cI(aM<)+MMH7%wq4 zC2SIgsc#HSR3H0#78-_C)O((6KQ=8v2*ck*KTi!E`z9|OPW&_VbVknDjIv2M$rk-0 zyM1i-Iy9W@rS}rX8kkc^Od>f9bVwUCTKX9@a%@&F6u}x_4JAZQ z?4U!@d*f@d!ckL#`e8j1u4`ikQPbx!VR-e4jWlS~jG}%x$$nxphY&S)6BAAeo!I)Y zX1rjeA2F1}pV+Q6iC(nDL@?VYcIu(g%U=4C9M;5cyAMh|2opK6H?fBij#*F8kD8X4 zK^XHghHq=S^aHsIzBw z+b56Kps|Ou`msFLB!7<(%iqDo^7khHYvC>+)^+eR^n_~HkA__WHeG_AT|z-!!jLYJ z%&woxx=yxq{fzB8MejNdF?hb-bylETRIK|Kh3<2z-M<=ki`jIa_v{uA>Xv|XOJ;Uo zDC-uJfl6b$W$4|qGu?9A-SPrG7sY!1r_ggrwdXg(9tE2oMb923v0E?VdM;=7{9e{` zrG?+~2e#)bz30!Fo@?7Z*9Cf2#Crcy=)IxZ`{z}ts!i`r&tA2lUUf*XMrN;OS+7=0 zuQs+0*8F75Xw%`#u=< zW!m&*dG=)o^}Y9p=4STgmG!||`tq@T1@ykcnZBa!zG4AVi5Tgl0;yD$^l9dHs5PnF zlT;Bzs)UfLGD)AyNYyQ*8Z4=nPWm!Ks@o>j3-nhz@Wmwkm|s&;Q*g*Gr$nA2oD@!K?c~F10!VvoR)!6 z?7$d(V0>m^VtZgxfHEaU`Kmw}D}a78q|De*W<4o$L6mt2Wg(ODy^ONhLRrF6mg$t0 z8Omy=WdxwEi%~ZesGF+PEko+I4Ryzpx*J5@gHXAd)crCluZ6l(3q7P$k7lU+ZR)WA z4VrU@%rN2b$$DyN-nrTvVfonp{V&(hB9(9Q}Dik=_* zMRD-l&B0%d2G5|N=e-8Sg9jxN1|_owFO&~TwGK+-24xt7va^G7JA?9qLl;}`MqM1b zbaUu8qag*`Aw{ntrQjjugrUn>{Gs2=hpw~^{ec_0${11}fL_}fx-K}Za(?(P#o-$_ zhyOMjR<#|z={2ktJglBDtdTXWX>>ojVOSeCtiu@AogLQO8P*r18=R;Aqe#DXlm4#} z-O!e9KVhk8IwhUV@ zhTVVDFM;8Z#duK8aBO8b;TX;ghRZC&b%*g_1?qmD`B0JRag+JTi0Ns|^zveQ2Qz&V zn7&!e$K_1FR^}5gyI30Y=`1r~hxts96?mTYT#@zSChMgUE6A1=?8OQRW`!oOUK~Ng i%UKbvtVkRyiouE&on^)Buwn(-ap&2uc35!$X#XFr{@4Kk diff --git a/hl/tools/gif2h5/writehdf.c b/hl/tools/gif2h5/writehdf.c deleted file mode 100644 index 8f0cc0d6182..00000000000 --- a/hl/tools/gif2h5/writehdf.c +++ /dev/null @@ -1,115 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright by The HDF Group. * - * All rights reserved. * - * * - * This file is part of HDF5. The full HDF5 copyright notice, including * - * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * - * distribution tree, or in https://www.hdfgroup.org/licenses. * - * If you do not have access to either file, you may request a copy from * - * help@hdfgroup.org. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -#include -#include -#include - -#include "gif.h" -#include "H5IMpublic.h" - -#define PAL_NAME "global" - -/*------------------------------------------------------------------------- - * Function: WriteHDF - * - * Purpose: Write the GIF image with the HDF5 Image API - * - *------------------------------------------------------------------------- - */ - -int -WriteHDF(GIFTOMEM GifMemoryStruct, char *HDFName) -{ - GIFHEAD gifHead; /* GIF Header structure */ - GIFIMAGEDESC *gifImageDesc; /* Logical Image Descriptor struct */ - int has_pal = 0; - - long ImageCount; /* number of images */ -#ifdef UNUSED - long CommentCount, /* number of comments */ - ApplicationCount, /* number of application extensions */ - PlainTextCount; /* number of plain text extensions */ -#endif /* UNUSED */ - - char ImageName[256]; /* Image name for the Image */ - - /* H5 variables */ - hid_t file_id; /* H5 file id */ - - /* temp counter */ - int i; - - /* get the GIFMem stuff */ - gifHead = *(GifMemoryStruct.GifHeader); - - /* get some data from gifHead */ - ImageCount = gifHead.ImageCount; -#ifdef UNUSED - CommentCount = (GIFWORD)gifHead.CommentCount; - ApplicationCount = (GIFWORD)gifHead.ApplicationCount; - PlainTextCount = (GIFWORD)gifHead.PlainTextCount; -#endif /* UNUSED */ - - if ((file_id = H5Fcreate(HDFName, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) { - /* error occurred opening the HDF File for write */ - fprintf(stderr, "HDF file could not be opened for writing\n"); - fprintf(stderr, - "NOTE: GIF file must be present in the same directory as the binary on UNIX systems.\n"); - exit(1); - } - - /* first create the global palette if there is one */ - if (gifHead.PackedField & 0x80) { /* global palette exists */ - hsize_t dims[2]; /* specify the dimensions of the palette */ - - /* size of the palette is tablesize (rows) X 3 (columns) */ - dims[0] = gifHead.TableSize; - dims[1] = 3; - - /* make a palette */ - if (H5IMmake_palette(file_id, PAL_NAME, dims, (unsigned char *)gifHead.HDFPalette) < 0) - return -1; - - has_pal = 1; - } - - for (i = 0; i < ImageCount; i++) { - hsize_t dims[2]; /* dimensions for the dataset */ - /* get the gifImageDesc */ - gifImageDesc = GifMemoryStruct.GifImageDesc[i]; - - /* set the dimensions */ - dims[0] = gifImageDesc->ImageHeight; - dims[1] = gifImageDesc->ImageWidth; - - /* create the image name */ - snprintf(ImageName, sizeof(ImageName), "Image%d", i); - - /* write image */ - if (H5IMmake_image_8bit(file_id, ImageName, dims[1], dims[0], (gifImageDesc->Image)) < 0) - return -1; - - /* attach the palette to the image dataset */ - if (has_pal) { - if (H5IMlink_palette(file_id, ImageName, PAL_NAME) < 0) - return -1; - } - } - - /* close the H5 file */ - if (H5Fclose(file_id) < 0) { - fprintf(stderr, "Could not close HDF5 file. Aborting...\n"); - return -1; - } - - return 0; -} diff --git a/release_docs/INSTALL_Autotools.txt b/release_docs/INSTALL_Autotools.txt index 325090aadd4..5a5f1fec31e 100644 --- a/release_docs/INSTALL_Autotools.txt +++ b/release_docs/INSTALL_Autotools.txt @@ -484,8 +484,6 @@ III. Full installation instructions for source distributions ./tools/misc/h5debug (low-level file debugging) ./tools/h5import/h5import (imports data to HDF5 file) ./tools/h5diff/h5diff (compares two HDF5 files) - ./tools/gifconv/h52gif (HDF5 to GIF converter) - ./tools/gifconv/gif2h5 (GIF to HDF5 converter) ======================================================================== diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 7f4571ef0df..5fabb8dafbe 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -116,8 +116,19 @@ New Features Tools: ------ - - + - Remove the high-level GIF tools + + The high-level GIF tools, h52gif and gif2h5, have unfixed CVE issues + (with no proof-of-concept files). They are not critical tools, are not + well maintained, and are an odd fit for building with the library. + Because of this, they have been removed. We may move them to a separate + repository in the future. + + This also removes the following configure options: + + Autotools: --(dis|en)able-hlgiftools + CMake: HDF5_BUILD_HL_GIF_TOOLS High-Level APIs: ---------------- diff --git a/src/H5build_settings.autotools.c.in b/src/H5build_settings.autotools.c.in index 67bd023b961..70eb34b8123 100644 --- a/src/H5build_settings.autotools.c.in +++ b/src/H5build_settings.autotools.c.in @@ -93,7 +93,6 @@ const char H5build_settings[]= "Dimension scales w/ new references: @DIMENSION_SCALES_WITH_NEW_REF@\n" " Build HDF5 Tests: @HDF5_TESTS@\n" " Build HDF5 Tools: @HDF5_TOOLS@\n" - " Build GIF Tools: @HDF5_HL_GIF_TOOLS@\n" " Threads: @THREADS@\n" " Threadsafety: @THREADSAFE@\n" " Default API mapping: @DEFAULT_API_VERSION@\n" diff --git a/src/libhdf5.settings.autotools.in b/src/libhdf5.settings.autotools.in index f04cca78e23..e7900a19dfc 100644 --- a/src/libhdf5.settings.autotools.in +++ b/src/libhdf5.settings.autotools.in @@ -75,7 +75,6 @@ Features: Dimension scales w/ new references: @DIMENSION_SCALES_WITH_NEW_REF@ Build HDF5 Tests: @HDF5_TESTS@ Build HDF5 Tools: @HDF5_TOOLS@ - Build GIF Tools: @HDF5_HL_GIF_TOOLS@ Threads: @THREADS@ Threadsafety: @THREADSAFE@ Default API mapping: @DEFAULT_API_VERSION@ From 7f1e49206d978bb788d12ed372439d70e66c67e3 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Fri, 18 Oct 2024 21:13:04 -0700 Subject: [PATCH 021/179] Renamed COPYING to LICENSE (#4978) This is where most people will expect to find license information. The COPYING_LBNL_HDF5 file has also been renamed to LICENSE_LBNL_HDF5. The licenses are unchanged. --- CMakeFilters.cmake | 2 +- CMakeInstallation.cmake | 12 ++++++------ CMakePlugins.cmake | 2 +- CMakeTests.cmake | 2 +- CMakeVOL.cmake | 2 +- CONTRIBUTING.md | 2 +- CTestConfig.cmake | 2 +- HDF5Examples/C/H5D/Makefile.am | 2 +- HDF5Examples/C/H5D/test-pc.sh | 2 +- HDF5Examples/C/H5D/test.sh.in | 2 +- HDF5Examples/C/H5FLT/h5ex_d_blosc.c | 2 +- HDF5Examples/C/H5FLT/h5ex_d_blosc2.c | 2 +- HDF5Examples/C/H5FLT/h5ex_d_bshuf.c | 2 +- HDF5Examples/C/H5FLT/h5ex_d_bzip2.c | 2 +- HDF5Examples/C/H5FLT/h5ex_d_jpeg.c | 2 +- HDF5Examples/C/H5FLT/h5ex_d_lz4.c | 2 +- HDF5Examples/C/H5FLT/h5ex_d_lzf.c | 2 +- HDF5Examples/C/H5FLT/h5ex_d_mafisc.c | 2 +- HDF5Examples/C/H5FLT/h5ex_d_zfp.c | 2 +- HDF5Examples/C/H5FLT/h5ex_d_zstd.c | 2 +- HDF5Examples/C/H5G/Makefile.am | 2 +- HDF5Examples/C/H5G/test-pc.sh | 2 +- HDF5Examples/C/H5G/test.sh.in | 2 +- HDF5Examples/C/H5PAR/ph5_filtered_writes.c | 2 +- .../C/H5PAR/ph5_filtered_writes_no_sel.c | 2 +- HDF5Examples/C/H5PAR/ph5_subfiling.c | 2 +- HDF5Examples/C/H5PAR/ph5example.c | 2 +- HDF5Examples/C/H5T/Makefile.am | 2 +- HDF5Examples/C/H5T/test-pc.sh | 2 +- HDF5Examples/C/H5T/test.sh.in | 2 +- HDF5Examples/C/H5VDS/Makefile.am | 2 +- HDF5Examples/C/H5VDS/h5ex_vds-eiger.c | 2 +- HDF5Examples/C/H5VDS/h5ex_vds-exc.c | 2 +- HDF5Examples/C/H5VDS/h5ex_vds-exclim.c | 2 +- .../C/H5VDS/h5ex_vds-percival-unlim-maxmin.c | 2 +- HDF5Examples/C/H5VDS/h5ex_vds-percival-unlim.c | 2 +- HDF5Examples/C/H5VDS/h5ex_vds-percival.c | 2 +- HDF5Examples/C/H5VDS/h5ex_vds-simpleIO.c | 2 +- HDF5Examples/C/H5VDS/h5ex_vds.c | 2 +- HDF5Examples/C/H5VDS/test-pc.sh | 2 +- HDF5Examples/C/H5VDS/test.sh.in | 2 +- HDF5Examples/C/Makefile.am | 2 +- HDF5Examples/C/TUTR/Makefile.am | 2 +- HDF5Examples/C/TUTR/h5_attribute.c | 2 +- HDF5Examples/C/TUTR/h5_chunk_read.c | 2 +- HDF5Examples/C/TUTR/h5_cmprss.c | 2 +- HDF5Examples/C/TUTR/h5_compound.c | 2 +- HDF5Examples/C/TUTR/h5_crtatt.c | 2 +- HDF5Examples/C/TUTR/h5_crtdat.c | 2 +- HDF5Examples/C/TUTR/h5_crtgrp.c | 2 +- HDF5Examples/C/TUTR/h5_crtgrpar.c | 2 +- HDF5Examples/C/TUTR/h5_crtgrpd.c | 2 +- HDF5Examples/C/TUTR/h5_debug_trace.c | 2 +- HDF5Examples/C/TUTR/h5_drivers.c | 2 +- HDF5Examples/C/TUTR/h5_dtransform.c | 2 +- HDF5Examples/C/TUTR/h5_elink_unix2win.c | 2 +- HDF5Examples/C/TUTR/h5_extend.c | 2 +- HDF5Examples/C/TUTR/h5_extend_write.c | 2 +- HDF5Examples/C/TUTR/h5_extlink.c | 2 +- HDF5Examples/C/TUTR/h5_group.c | 2 +- HDF5Examples/C/TUTR/h5_interm_group.c | 2 +- HDF5Examples/C/TUTR/h5_mount.c | 2 +- HDF5Examples/C/TUTR/h5_rdwt.c | 2 +- HDF5Examples/C/TUTR/h5_read.c | 2 +- HDF5Examples/C/TUTR/h5_ref2reg_deprec.c | 2 +- HDF5Examples/C/TUTR/h5_ref_compat.c | 2 +- HDF5Examples/C/TUTR/h5_ref_extern.c | 2 +- HDF5Examples/C/TUTR/h5_reference_deprec.c | 2 +- HDF5Examples/C/TUTR/h5_select.c | 2 +- HDF5Examples/C/TUTR/h5_shared_mesg.c | 2 +- HDF5Examples/C/TUTR/h5_subset.c | 2 +- HDF5Examples/C/TUTR/h5_write.c | 2 +- HDF5Examples/C/TUTR/run-all-ex.sh | 2 +- HDF5Examples/C/TUTR/run-c-ex.sh.in | 2 +- HDF5Examples/C/TUTR/testh5cc.sh.in | 2 +- HDF5Examples/CTestConfig.cmake | 2 +- HDF5Examples/CXX/H5D/Makefile.am | 2 +- HDF5Examples/CXX/H5D/chunks.cpp | 2 +- HDF5Examples/CXX/H5D/compound.cpp | 2 +- HDF5Examples/CXX/H5D/create.cpp | 2 +- HDF5Examples/CXX/H5D/extend_ds.cpp | 2 +- HDF5Examples/CXX/H5D/h5group.cpp | 2 +- HDF5Examples/CXX/H5D/readdata.cpp | 2 +- HDF5Examples/CXX/H5D/testh5c++.sh.in | 2 +- HDF5Examples/CXX/H5D/writedata.cpp | 2 +- HDF5Examples/CXX/Makefile.am | 2 +- HDF5Examples/CXX/TUTR/Makefile.am | 2 +- HDF5Examples/CXX/TUTR/h5tutr_cmprss.cpp | 2 +- HDF5Examples/CXX/TUTR/h5tutr_crtatt.cpp | 2 +- HDF5Examples/CXX/TUTR/h5tutr_crtdat.cpp | 2 +- HDF5Examples/CXX/TUTR/h5tutr_crtgrp.cpp | 2 +- HDF5Examples/CXX/TUTR/h5tutr_crtgrpar.cpp | 2 +- HDF5Examples/CXX/TUTR/h5tutr_crtgrpd.cpp | 2 +- HDF5Examples/CXX/TUTR/h5tutr_extend.cpp | 2 +- HDF5Examples/CXX/TUTR/h5tutr_rdwt.cpp | 2 +- HDF5Examples/CXX/TUTR/h5tutr_subset.cpp | 2 +- HDF5Examples/CXX/TUTR/testh5c++.sh.in | 2 +- HDF5Examples/FORTRAN/H5D/Makefile.am | 2 +- HDF5Examples/FORTRAN/H5D/test-pc.sh | 2 +- HDF5Examples/FORTRAN/H5D/test.sh.in | 2 +- HDF5Examples/FORTRAN/H5G/Makefile.am | 2 +- HDF5Examples/FORTRAN/H5G/test-pc.sh | 2 +- HDF5Examples/FORTRAN/H5G/test.sh.in | 2 +- HDF5Examples/FORTRAN/H5T/Makefile.am | 2 +- HDF5Examples/FORTRAN/H5T/test-pc.sh | 2 +- HDF5Examples/FORTRAN/H5T/test.sh.in | 2 +- HDF5Examples/FORTRAN/Makefile.am | 2 +- HDF5Examples/FORTRAN/TUTR/Makefile.am | 2 +- HDF5Examples/FORTRAN/TUTR/compound.f90 | 2 +- .../TUTR/compound_complex_fortran2003.f90 | 2 +- .../FORTRAN/TUTR/compound_fortran2003.f90 | 2 +- HDF5Examples/FORTRAN/TUTR/h5_cmprss.f90 | 2 +- HDF5Examples/FORTRAN/TUTR/h5_crtatt.f90 | 2 +- HDF5Examples/FORTRAN/TUTR/h5_crtdat.f90 | 2 +- HDF5Examples/FORTRAN/TUTR/h5_crtgrp.f90 | 2 +- HDF5Examples/FORTRAN/TUTR/h5_crtgrpar.f90 | 2 +- HDF5Examples/FORTRAN/TUTR/h5_crtgrpd.f90 | 2 +- HDF5Examples/FORTRAN/TUTR/h5_extend.f90 | 2 +- HDF5Examples/FORTRAN/TUTR/h5_rdwt.f90 | 2 +- HDF5Examples/FORTRAN/TUTR/h5_subset.f90 | 2 +- HDF5Examples/FORTRAN/TUTR/hyperslab.f90 | 2 +- HDF5Examples/FORTRAN/TUTR/mountexample.f90 | 2 +- .../FORTRAN/TUTR/nested_derived_type.f90 | 2 +- HDF5Examples/FORTRAN/TUTR/refobjexample.f90 | 2 +- HDF5Examples/FORTRAN/TUTR/refregexample.f90 | 2 +- HDF5Examples/FORTRAN/TUTR/run-fortran-ex.sh.in | 2 +- HDF5Examples/FORTRAN/TUTR/rwdset_fortran2003.f90 | 2 +- HDF5Examples/FORTRAN/TUTR/selectele.f90 | 2 +- HDF5Examples/FORTRAN/TUTR/testh5fc.sh.in | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_Alloc.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_Checksum.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_Chunk.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_Compact.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_External.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_FillValue.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_Gzip.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_Hyperslab.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_Nbit.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_ReadWrite.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_Shuffle.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_Sofloat.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_Soint.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_Szip.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_Transform.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_UnlimitedAdd.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_UnlimitedGzip.java | 2 +- HDF5Examples/JAVA/H5D/H5Ex_D_UnlimitedMod.java | 2 +- HDF5Examples/JAVA/H5D/JavaDatasetExample.sh.in | 2 +- HDF5Examples/JAVA/H5D/Makefile.am | 2 +- .../JAVA/H5G/110/H5Ex_G_Intermediate.java | 2 +- HDF5Examples/JAVA/H5G/110/H5Ex_G_Iterate.java | 2 +- HDF5Examples/JAVA/H5G/110/H5Ex_G_Traverse.java | 2 +- HDF5Examples/JAVA/H5G/110/H5Ex_G_Visit.java | 2 +- HDF5Examples/JAVA/H5G/H5Ex_G_Compact.java | 2 +- HDF5Examples/JAVA/H5G/H5Ex_G_Corder.java | 2 +- HDF5Examples/JAVA/H5G/H5Ex_G_Create.java | 2 +- HDF5Examples/JAVA/H5G/H5Ex_G_Intermediate.java | 2 +- HDF5Examples/JAVA/H5G/H5Ex_G_Iterate.java | 2 +- HDF5Examples/JAVA/H5G/H5Ex_G_Phase.java | 2 +- HDF5Examples/JAVA/H5G/H5Ex_G_Traverse.java | 2 +- HDF5Examples/JAVA/H5G/H5Ex_G_Visit.java | 2 +- HDF5Examples/JAVA/H5G/JavaGroupExample.sh.in | 2 +- HDF5Examples/JAVA/H5G/Makefile.am | 2 +- .../JAVA/H5T/110/H5Ex_T_ObjectReference.java | 2 +- .../H5T/110/H5Ex_T_ObjectReferenceAttribute.java | 2 +- HDF5Examples/JAVA/H5T/H5Ex_T_Array.java | 2 +- HDF5Examples/JAVA/H5T/H5Ex_T_ArrayAttribute.java | 2 +- HDF5Examples/JAVA/H5T/H5Ex_T_Bit.java | 2 +- HDF5Examples/JAVA/H5T/H5Ex_T_BitAttribute.java | 2 +- HDF5Examples/JAVA/H5T/H5Ex_T_Commit.java | 2 +- HDF5Examples/JAVA/H5T/H5Ex_T_Compound.java | 2 +- .../JAVA/H5T/H5Ex_T_CompoundAttribute.java | 2 +- HDF5Examples/JAVA/H5T/H5Ex_T_Float.java | 2 +- HDF5Examples/JAVA/H5T/H5Ex_T_FloatAttribute.java | 2 +- HDF5Examples/JAVA/H5T/H5Ex_T_Integer.java | 2 +- .../JAVA/H5T/H5Ex_T_IntegerAttribute.java | 2 +- .../JAVA/H5T/H5Ex_T_ObjectReference.java | 2 +- .../H5T/H5Ex_T_ObjectReferenceAttribute.java | 2 +- HDF5Examples/JAVA/H5T/H5Ex_T_Opaque.java | 2 +- .../JAVA/H5T/H5Ex_T_OpaqueAttribute.java | 2 +- .../JAVA/H5T/H5Ex_T_RegionReference.java | 2 +- .../H5T/H5Ex_T_RegionReferenceAttribute.java | 2 +- HDF5Examples/JAVA/H5T/H5Ex_T_String.java | 2 +- .../JAVA/H5T/H5Ex_T_StringAttribute.java | 2 +- HDF5Examples/JAVA/H5T/H5Ex_T_VLString.java | 2 +- HDF5Examples/JAVA/H5T/JavaDatatypeExample.sh.in | 2 +- HDF5Examples/JAVA/H5T/Makefile.am | 2 +- HDF5Examples/JAVA/Makefile.am | 2 +- .../JAVA/TUTR/110/HDF5FileStructure.java | 2 +- HDF5Examples/JAVA/TUTR/HDF5AttributeCreate.java | 2 +- HDF5Examples/JAVA/TUTR/HDF5DatasetCreate.java | 2 +- HDF5Examples/JAVA/TUTR/HDF5DatasetRead.java | 2 +- HDF5Examples/JAVA/TUTR/HDF5FileCreate.java | 2 +- HDF5Examples/JAVA/TUTR/HDF5FileStructure.java | 2 +- .../TUTR/HDF5GroupAbsoluteRelativeCreate.java | 2 +- HDF5Examples/JAVA/TUTR/HDF5GroupCreate.java | 2 +- .../JAVA/TUTR/HDF5GroupDatasetCreate.java | 2 +- HDF5Examples/JAVA/TUTR/HDF5SubsetSelect.java | 2 +- HDF5Examples/JAVA/TUTR/Makefile.am | 2 +- HDF5Examples/JAVA/TUTR/runExample.sh.in | 2 +- HDF5Examples/Makefile.am | 2 +- HDF5Examples/config/cmake/HDFExampleMacros.cmake | 2 +- HDF5Examples/config/cmake/HDFMacros.cmake | 2 +- HDF5Examples/config/cmake/grepTest.cmake | 2 +- HDF5Examples/config/cmake/jrunTest.cmake | 2 +- HDF5Examples/config/cmake/runTest.cmake | 2 +- HDF5Examples/configure.ac | 2 +- COPYING => LICENSE | 5 ++--- COPYING_LBNL_HDF5 => LICENSE_LBNL_HDF5 | 2 ++ Makefile.am | 2 +- Makefile.dist | 2 +- README.md | 2 +- UserMacros.cmake | 2 +- acsite.m4 | 2 +- autogen.sh | 2 +- bin/Makefile.am | 2 +- bin/buildhdf5 | 2 +- bin/checkapi | 2 +- bin/chkcopyright | 16 ++++++++-------- bin/debug-ohdr | 2 +- bin/genparser | 2 +- bin/h5cc.in | 2 +- bin/h5redeploy.in | 2 +- bin/h5vers | 2 +- bin/iostats | 2 +- bin/make_err | 4 ++-- bin/make_overflow | 4 ++-- bin/make_vers | 4 ++-- bin/output_filter.sh | 2 +- bin/pkgscrpts/h5rmflags | 2 +- bin/pkgscrpts/makeHDF5BinaryTarfiles.pl | 2 +- bin/release | 2 +- bin/restore.sh | 2 +- bin/runbkgprog | 2 +- bin/switch_maint_mode | 2 +- bin/trace | 2 +- bin/warnhist | 2 +- c++/Makefile.am | 2 +- c++/src/H5AbstractDs.cpp | 2 +- c++/src/H5AbstractDs.h | 2 +- c++/src/H5Alltypes.h | 2 +- c++/src/H5ArrayType.cpp | 2 +- c++/src/H5ArrayType.h | 2 +- c++/src/H5AtomType.cpp | 2 +- c++/src/H5AtomType.h | 2 +- c++/src/H5Attribute.cpp | 2 +- c++/src/H5Attribute.h | 2 +- c++/src/H5Classes.h | 2 +- c++/src/H5CommonFG.cpp | 2 +- c++/src/H5CommonFG.h | 2 +- c++/src/H5CompType.cpp | 2 +- c++/src/H5CompType.h | 2 +- c++/src/H5Cpp.h | 2 +- c++/src/H5CppDoc.h | 2 +- c++/src/H5DaccProp.cpp | 2 +- c++/src/H5DaccProp.h | 2 +- c++/src/H5DataSet.cpp | 2 +- c++/src/H5DataSet.h | 2 +- c++/src/H5DataSpace.cpp | 2 +- c++/src/H5DataSpace.h | 2 +- c++/src/H5DataType.cpp | 2 +- c++/src/H5DataType.h | 2 +- c++/src/H5DcreatProp.cpp | 2 +- c++/src/H5DcreatProp.h | 2 +- c++/src/H5DxferProp.cpp | 2 +- c++/src/H5DxferProp.h | 2 +- c++/src/H5EnumType.cpp | 2 +- c++/src/H5EnumType.h | 2 +- c++/src/H5Exception.cpp | 2 +- c++/src/H5Exception.h | 2 +- c++/src/H5FaccProp.cpp | 2 +- c++/src/H5FaccProp.h | 2 +- c++/src/H5FcreatProp.cpp | 2 +- c++/src/H5FcreatProp.h | 2 +- c++/src/H5File.cpp | 2 +- c++/src/H5File.h | 2 +- c++/src/H5FloatType.cpp | 2 +- c++/src/H5FloatType.h | 2 +- c++/src/H5Group.cpp | 2 +- c++/src/H5Group.h | 2 +- c++/src/H5IdComponent.cpp | 2 +- c++/src/H5IdComponent.h | 2 +- c++/src/H5Include.h | 2 +- c++/src/H5IntType.cpp | 2 +- c++/src/H5IntType.h | 2 +- c++/src/H5LaccProp.cpp | 2 +- c++/src/H5LaccProp.h | 2 +- c++/src/H5LcreatProp.cpp | 2 +- c++/src/H5LcreatProp.h | 2 +- c++/src/H5Library.cpp | 2 +- c++/src/H5Library.h | 2 +- c++/src/H5Location.cpp | 2 +- c++/src/H5Location.h | 2 +- c++/src/H5Object.cpp | 2 +- c++/src/H5Object.h | 2 +- c++/src/H5OcreatProp.cpp | 2 +- c++/src/H5OcreatProp.h | 2 +- c++/src/H5PredType.cpp | 2 +- c++/src/H5PredType.h | 2 +- c++/src/H5PropList.cpp | 2 +- c++/src/H5PropList.h | 2 +- c++/src/H5StrType.cpp | 2 +- c++/src/H5StrType.h | 2 +- c++/src/H5VarLenType.cpp | 2 +- c++/src/H5VarLenType.h | 2 +- c++/src/Makefile.am | 2 +- c++/src/h5c++.in | 2 +- c++/test/CMakeTests.cmake | 2 +- c++/test/CMakeVFDTests.cmake | 2 +- c++/test/H5srcdir_str.h.in | 2 +- c++/test/Makefile.am | 2 +- c++/test/dsets.cpp | 2 +- c++/test/h5cpputil.cpp | 2 +- c++/test/h5cpputil.h | 2 +- c++/test/tarray.cpp | 2 +- c++/test/tattr.cpp | 2 +- c++/test/tcompound.cpp | 2 +- c++/test/tdspl.cpp | 2 +- c++/test/testhdf5.cpp | 2 +- c++/test/tfile.cpp | 2 +- c++/test/tfilter.cpp | 2 +- c++/test/th5s.cpp | 2 +- c++/test/titerate.cpp | 2 +- c++/test/tlinks.cpp | 2 +- c++/test/tobject.cpp | 2 +- c++/test/trefer.cpp | 2 +- c++/test/ttypes.cpp | 2 +- c++/test/tvlstr.cpp | 2 +- config/BlankForm | 2 +- config/Makefile.am.blank | 2 +- config/apple | 2 +- config/cce-fflags | 2 +- config/cce-flags | 2 +- config/clang-cxxflags | 2 +- config/clang-fflags | 2 +- config/clang-flags | 2 +- config/cmake/CTestCustom.cmake | 2 +- config/cmake/ConfigureChecks.cmake | 2 +- config/cmake/ConversionTests.c | 2 +- config/cmake/FindMFU.cmake | 2 +- config/cmake/GetTimeOfDayTest.cpp | 2 +- config/cmake/H5pubconf.h.in | 2 +- config/cmake/HDF5DeveloperBuild.cmake | 2 +- config/cmake/HDF5Macros.cmake | 2 +- config/cmake/HDF5PluginMacros.cmake | 2 +- config/cmake/HDF5UseFortran.cmake | 2 +- config/cmake/HDFCXXCompilerFlags.cmake | 2 +- config/cmake/HDFCompilerFlags.cmake | 2 +- config/cmake/HDFFortranCompilerFlags.cmake | 2 +- config/cmake/HDFLibMacros.cmake | 2 +- config/cmake/HDFMacros.cmake | 2 +- config/cmake/HDFTests.c | 2 +- config/cmake/HDFUseFortran.cmake | 2 +- config/cmake/README.md.cmake.in | 2 +- config/cmake/UserMacros/Windows_MT.cmake | 2 +- config/cmake/cacheinit.cmake | 2 +- config/cmake/examples/CTestScript.cmake | 2 +- config/cmake/examples/HDF5_Examples.cmake.in | 2 +- .../cmake/examples/HDF5_Examples_options.cmake | 2 +- config/cmake/fileCompareTest.cmake | 2 +- config/cmake/grepTest.cmake | 2 +- config/cmake/hdf5-config-version.cmake.in | 2 +- config/cmake/hdf5-config.cmake.in | 2 +- config/cmake/jrunTest.cmake | 2 +- config/cmake/libh5cc.in | 2 +- config/cmake/mccacheinit.cmake | 2 +- config/cmake/runTest.cmake | 2 +- config/cmake/scripts/CTestScript.cmake | 2 +- config/cmake/scripts/HDF5config.cmake | 2 +- config/cmake/scripts/HDF5options.cmake | 2 +- config/cmake/scripts/HPC/bsub-HDF5options.cmake | 2 +- config/cmake/scripts/HPC/qsub-HDF5options.cmake | 2 +- .../cmake/scripts/HPC/raybsub-HDF5options.cmake | 2 +- .../cmake/scripts/HPC/sbatch-HDF5options.cmake | 2 +- config/cmake/userblockTest.cmake | 2 +- config/cmake/vfdTest.cmake | 2 +- config/cmake/volTest.cmake | 2 +- config/commence.am | 2 +- config/conclude.am | 2 +- config/conclude_fc.am | 2 +- config/cygwin | 2 +- config/examples.am | 2 +- config/freebsd | 2 +- config/gnu-cxxflags | 2 +- config/gnu-fflags | 2 +- config/gnu-flags | 2 +- config/ibm-aix | 2 +- config/ibm-flags | 2 +- config/intel-cxxflags | 2 +- config/intel-fflags | 2 +- config/intel-flags | 2 +- config/linux-gnu | 2 +- config/lt_vers.am | 2 +- config/netbsd | 2 +- config/nvidia-cxxflags | 2 +- config/nvidia-fflags | 2 +- config/nvidia-flags | 2 +- config/oneapi-cxxflags | 2 +- config/oneapi-fflags | 2 +- config/oneapi-flags | 2 +- config/pgi-cxxflags | 2 +- config/pgi-fflags | 2 +- config/pgi-flags | 2 +- config/site-specific/BlankForm | 2 +- config/solaris | 2 +- configure.ac | 2 +- doxygen/examples/H5.format.html | 2 +- doxygen/examples/VFL.html | 2 +- doxygen/examples/h5_attribute.c | 2 +- doxygen/examples/h5_extlink.c | 2 +- fortran/Makefile.am | 2 +- fortran/src/H5Af.c | 2 +- fortran/src/H5Aff.F90 | 2 +- fortran/src/H5Df.c | 2 +- fortran/src/H5Dff.F90 | 2 +- fortran/src/H5ESff.F90 | 2 +- fortran/src/H5Ef.c | 2 +- fortran/src/H5Eff.F90 | 2 +- fortran/src/H5Ff.c | 2 +- fortran/src/H5Fff.F90 | 2 +- fortran/src/H5Gf.c | 2 +- fortran/src/H5Gff.F90 | 2 +- fortran/src/H5If.c | 2 +- fortran/src/H5Iff.F90 | 2 +- fortran/src/H5Lf.c | 2 +- fortran/src/H5Lff.F90 | 2 +- fortran/src/H5Of.c | 2 +- fortran/src/H5Off.F90 | 2 +- fortran/src/H5Pf.c | 2 +- fortran/src/H5Pff.F90 | 2 +- fortran/src/H5Rf.c | 2 +- fortran/src/H5Rff.F90 | 2 +- fortran/src/H5Sf.c | 2 +- fortran/src/H5Sff.F90 | 2 +- fortran/src/H5Tf.c | 2 +- fortran/src/H5Tff.F90 | 2 +- fortran/src/H5VLff.F90 | 2 +- fortran/src/H5Zf.c | 2 +- fortran/src/H5Zff.F90 | 2 +- fortran/src/H5_buildiface.F90 | 4 ++-- fortran/src/H5_f.c | 2 +- fortran/src/H5_ff.F90 | 2 +- fortran/src/H5config_f.inc.cmake | 2 +- fortran/src/H5config_f.inc.in | 2 +- fortran/src/H5f90.h | 2 +- fortran/src/H5f90global.F90 | 2 +- fortran/src/H5f90i.h | 2 +- fortran/src/H5f90kit.c | 2 +- fortran/src/H5f90proto.h | 2 +- fortran/src/H5fort_type_defines.h.cmake | 2 +- fortran/src/H5fort_type_defines.h.in | 2 +- fortran/src/H5fortkit.F90 | 2 +- fortran/src/H5match_types.c | 6 +++--- fortran/src/HDF5.F90 | 2 +- fortran/src/Makefile.am | 2 +- fortran/src/h5fc.in | 2 +- fortran/test/CMakeTests.cmake | 2 +- fortran/test/H5_test_buildiface.F90 | 4 ++-- fortran/test/Makefile.am | 2 +- fortran/test/fflush1.F90 | 2 +- fortran/test/fflush2.F90 | 2 +- fortran/test/fortranlib_test.F90 | 2 +- fortran/test/fortranlib_test_1_8.F90 | 2 +- fortran/test/fortranlib_test_F03.F90 | 2 +- fortran/test/t.c | 2 +- fortran/test/t.h | 2 +- fortran/test/tH5A.F90 | 2 +- fortran/test/tH5A_1_8.F90 | 2 +- fortran/test/tH5D.F90 | 2 +- fortran/test/tH5E.F90 | 2 +- fortran/test/tH5E_F03.F90 | 2 +- fortran/test/tH5F.F90 | 2 +- fortran/test/tH5G.F90 | 2 +- fortran/test/tH5G_1_8.F90 | 2 +- fortran/test/tH5I.F90 | 2 +- fortran/test/tH5L_F03.F90 | 2 +- fortran/test/tH5MISC_1_8.F90 | 2 +- fortran/test/tH5O.F90 | 2 +- fortran/test/tH5O_F03.F90 | 2 +- fortran/test/tH5P.F90 | 2 +- fortran/test/tH5P_F03.F90 | 2 +- fortran/test/tH5R.F90 | 4 ++-- fortran/test/tH5S.F90 | 2 +- fortran/test/tH5Sselect.F90 | 2 +- fortran/test/tH5T.F90 | 2 +- fortran/test/tH5T_F03.F90 | 2 +- fortran/test/tH5VL.F90 | 2 +- fortran/test/tH5Z.F90 | 2 +- fortran/test/tHDF5.F90 | 2 +- fortran/test/tHDF5_1_8.F90 | 2 +- fortran/test/tHDF5_F03.F90 | 2 +- fortran/test/tf.F90 | 2 +- fortran/test/vol_connector.F90 | 2 +- fortran/testpar/CMakeTests.cmake | 2 +- fortran/testpar/Makefile.am | 2 +- fortran/testpar/async.F90 | 2 +- fortran/testpar/hyper.F90 | 2 +- fortran/testpar/mdset.F90 | 2 +- fortran/testpar/mpi_param.F90 | 2 +- fortran/testpar/multidsetrw.F90 | 2 +- fortran/testpar/ptest.F90 | 2 +- fortran/testpar/subfiling.F90 | 2 +- hl/Makefile.am | 2 +- hl/c++/Makefile.am | 2 +- hl/c++/examples/CMakeTests.cmake | 2 +- hl/c++/examples/Makefile.am | 2 +- hl/c++/examples/ptExampleFL.cpp | 2 +- hl/c++/examples/run-hlc++-ex.sh.in | 2 +- hl/c++/src/H5PacketTable.cpp | 2 +- hl/c++/src/H5PacketTable.h | 2 +- hl/c++/src/Makefile.am | 2 +- hl/c++/test/CMakeTests.cmake | 2 +- hl/c++/test/Makefile.am | 2 +- hl/c++/test/ptableTest.cpp | 2 +- hl/c++/test/ptableTest.h | 2 +- hl/examples/CMakeTests.cmake | 2 +- hl/examples/Makefile.am | 2 +- hl/examples/ex_ds1.c | 2 +- hl/examples/ex_image1.c | 2 +- hl/examples/ex_image2.c | 2 +- hl/examples/ex_lite1.c | 2 +- hl/examples/ex_lite2.c | 2 +- hl/examples/ex_lite3.c | 2 +- hl/examples/ex_table_01.c | 2 +- hl/examples/ex_table_02.c | 2 +- hl/examples/ex_table_03.c | 2 +- hl/examples/ex_table_04.c | 2 +- hl/examples/ex_table_05.c | 2 +- hl/examples/ex_table_06.c | 2 +- hl/examples/ex_table_07.c | 2 +- hl/examples/ex_table_08.c | 2 +- hl/examples/ex_table_09.c | 2 +- hl/examples/ex_table_10.c | 2 +- hl/examples/ex_table_11.c | 2 +- hl/examples/ex_table_12.c | 2 +- hl/examples/pal_rgb.h | 2 +- hl/examples/ptExampleFL.c | 2 +- hl/examples/run-hl-ex.sh | 2 +- hl/examples/run-hlc-ex.sh.in | 2 +- hl/fortran/Makefile.am | 2 +- hl/fortran/examples/CMakeTests.cmake | 2 +- hl/fortran/examples/Makefile.am | 2 +- hl/fortran/examples/ex_ds1.f90 | 2 +- hl/fortran/examples/exlite.f90 | 2 +- hl/fortran/examples/run-hlfortran-ex.sh.in | 2 +- hl/fortran/src/H5DOff.F90 | 2 +- hl/fortran/src/H5DSfc.c | 2 +- hl/fortran/src/H5DSff.F90 | 2 +- hl/fortran/src/H5HL_buildiface.F90 | 6 +++--- hl/fortran/src/H5IMcc.c | 2 +- hl/fortran/src/H5IMcc.h | 2 +- hl/fortran/src/H5IMfc.c | 2 +- hl/fortran/src/H5IMff.F90 | 2 +- hl/fortran/src/H5LTf90proto.h | 2 +- hl/fortran/src/H5LTfc.c | 2 +- hl/fortran/src/H5LTff.F90 | 2 +- hl/fortran/src/H5TBfc.c | 2 +- hl/fortran/src/H5TBff.F90 | 2 +- hl/fortran/src/Makefile.am | 2 +- hl/fortran/test/CMakeTests.cmake | 2 +- hl/fortran/test/Makefile.am | 2 +- hl/fortran/test/tstds.F90 | 2 +- hl/fortran/test/tstimage.F90 | 2 +- hl/fortran/test/tstlite.F90 | 2 +- hl/fortran/test/tsttable.F90 | 2 +- hl/src/H5DO.c | 2 +- hl/src/H5DOpublic.h | 2 +- hl/src/H5DS.c | 2 +- hl/src/H5DSprivate.h | 2 +- hl/src/H5DSpublic.h | 2 +- hl/src/H5HLprivate2.h | 2 +- hl/src/H5IM.c | 2 +- hl/src/H5IMprivate.h | 2 +- hl/src/H5IMpublic.h | 2 +- hl/src/H5LD.c | 2 +- hl/src/H5LDprivate.h | 2 +- hl/src/H5LDpublic.h | 2 +- hl/src/H5LT.c | 2 +- hl/src/H5LTanalyze.c | 2 +- hl/src/H5LTanalyze.l | 2 +- hl/src/H5LTparse.y | 2 +- hl/src/H5LTprivate.h | 2 +- hl/src/H5LTpublic.h | 2 +- hl/src/H5PT.c | 2 +- hl/src/H5PTprivate.h | 2 +- hl/src/H5PTpublic.h | 2 +- hl/src/H5TB.c | 2 +- hl/src/H5TBprivate.h | 2 +- hl/src/H5TBpublic.h | 2 +- hl/src/Makefile.am | 2 +- hl/src/hdf5_hl.h | 2 +- hl/test/CMakeTests.cmake | 2 +- hl/test/H5srcdir_str.h.in | 2 +- hl/test/Makefile.am | 2 +- hl/test/gen_test_ds.c | 2 +- hl/test/gen_test_ld.c | 2 +- hl/test/h5hltest.h | 2 +- hl/test/pal_rgb.h | 2 +- hl/test/test_ds.c | 2 +- hl/test/test_dset_append.c | 2 +- hl/test/test_file_image.c | 2 +- hl/test/test_h5do_compat.c | 2 +- hl/test/test_image.c | 2 +- hl/test/test_ld.c | 2 +- hl/test/test_lite.c | 2 +- hl/test/test_packet.c | 2 +- hl/test/test_packet_vlen.c | 2 +- hl/test/test_table.c | 2 +- hl/tools/Makefile.am | 2 +- hl/tools/h5watch/CMakeTests.cmake | 2 +- hl/tools/h5watch/Makefile.am | 2 +- hl/tools/h5watch/extend_dset.c | 2 +- hl/tools/h5watch/h5watch.c | 2 +- hl/tools/h5watch/h5watch.h | 2 +- hl/tools/h5watch/h5watchgentest.c | 2 +- hl/tools/h5watch/testh5watch.sh.in | 2 +- java/Makefile.am | 2 +- java/src/Makefile.am | 2 +- java/src/hdf/hdf5lib/H5.java | 2 +- java/src/hdf/hdf5lib/HDF5Constants.java | 2 +- java/src/hdf/hdf5lib/HDFArray.java | 2 +- java/src/hdf/hdf5lib/HDFNativeData.java | 2 +- java/src/hdf/hdf5lib/callbacks/Callbacks.java | 2 +- .../hdf/hdf5lib/callbacks/H5A_iterate_cb.java | 2 +- .../src/hdf/hdf5lib/callbacks/H5A_iterate_t.java | 2 +- .../src/hdf/hdf5lib/callbacks/H5D_append_cb.java | 2 +- java/src/hdf/hdf5lib/callbacks/H5D_append_t.java | 2 +- .../hdf/hdf5lib/callbacks/H5D_iterate_cb.java | 2 +- .../src/hdf/hdf5lib/callbacks/H5D_iterate_t.java | 2 +- java/src/hdf/hdf5lib/callbacks/H5E_walk_cb.java | 2 +- java/src/hdf/hdf5lib/callbacks/H5E_walk_t.java | 2 +- .../hdf5lib/callbacks/H5L_iterate_opdata_t.java | 2 +- .../src/hdf/hdf5lib/callbacks/H5L_iterate_t.java | 2 +- .../hdf5lib/callbacks/H5O_iterate_opdata_t.java | 2 +- .../src/hdf/hdf5lib/callbacks/H5O_iterate_t.java | 2 +- .../hdf5lib/callbacks/H5P_cls_close_func_cb.java | 2 +- .../hdf5lib/callbacks/H5P_cls_close_func_t.java | 2 +- .../hdf5lib/callbacks/H5P_cls_copy_func_cb.java | 2 +- .../hdf5lib/callbacks/H5P_cls_copy_func_t.java | 2 +- .../callbacks/H5P_cls_create_func_cb.java | 2 +- .../hdf5lib/callbacks/H5P_cls_create_func_t.java | 2 +- .../hdf/hdf5lib/callbacks/H5P_iterate_cb.java | 2 +- .../src/hdf/hdf5lib/callbacks/H5P_iterate_t.java | 2 +- .../hdf5lib/callbacks/H5P_prp_close_func_cb.java | 2 +- .../callbacks/H5P_prp_compare_func_cb.java | 2 +- .../hdf5lib/callbacks/H5P_prp_copy_func_cb.java | 2 +- .../callbacks/H5P_prp_create_func_cb.java | 2 +- .../callbacks/H5P_prp_delete_func_cb.java | 2 +- .../hdf5lib/callbacks/H5P_prp_get_func_cb.java | 2 +- .../hdf5lib/callbacks/H5P_prp_set_func_cb.java | 2 +- java/src/hdf/hdf5lib/callbacks/package-info.java | 2 +- .../exceptions/HDF5AttributeException.java | 2 +- .../hdf5lib/exceptions/HDF5BtreeException.java | 2 +- .../exceptions/HDF5DataFiltersException.java | 2 +- .../exceptions/HDF5DataStorageException.java | 2 +- .../HDF5DatasetInterfaceException.java | 2 +- .../HDF5DataspaceInterfaceException.java | 2 +- .../HDF5DatatypeInterfaceException.java | 2 +- .../hdf/hdf5lib/exceptions/HDF5Exception.java | 2 +- .../HDF5ExternalFileListException.java | 2 +- .../exceptions/HDF5FileInterfaceException.java | 2 +- .../HDF5FunctionArgumentException.java | 2 +- .../HDF5FunctionEntryExitException.java | 2 +- .../hdf5lib/exceptions/HDF5HeapException.java | 2 +- .../hdf/hdf5lib/exceptions/HDF5IdException.java | 2 +- .../exceptions/HDF5InternalErrorException.java | 2 +- .../hdf5lib/exceptions/HDF5JavaException.java | 2 +- .../hdf5lib/exceptions/HDF5LibraryException.java | 2 +- .../exceptions/HDF5LowLevelIOException.java | 2 +- .../exceptions/HDF5MetaDataCacheException.java | 2 +- .../exceptions/HDF5ObjectHeaderException.java | 2 +- .../HDF5PropertyListInterfaceException.java | 2 +- .../exceptions/HDF5ReferenceException.java | 2 +- .../HDF5ResourceUnavailableException.java | 2 +- .../exceptions/HDF5SymbolTableException.java | 2 +- .../src/hdf/hdf5lib/exceptions/package-info.java | 2 +- java/src/hdf/hdf5lib/package-info.java | 2 +- .../hdf/hdf5lib/structs/H5AC_cache_config_t.java | 2 +- java/src/hdf/hdf5lib/structs/H5A_info_t.java | 2 +- java/src/hdf/hdf5lib/structs/H5E_error2_t.java | 2 +- .../hdf/hdf5lib/structs/H5FD_hdfs_fapl_t.java | 2 +- .../hdf/hdf5lib/structs/H5FD_ros3_fapl_t.java | 2 +- java/src/hdf/hdf5lib/structs/H5F_info2_t.java | 2 +- java/src/hdf/hdf5lib/structs/H5G_info_t.java | 2 +- java/src/hdf/hdf5lib/structs/H5L_info_t.java | 2 +- java/src/hdf/hdf5lib/structs/H5O_hdr_info_t.java | 2 +- java/src/hdf/hdf5lib/structs/H5O_info_t.java | 2 +- .../hdf/hdf5lib/structs/H5O_native_info_t.java | 2 +- java/src/hdf/hdf5lib/structs/H5O_token_t.java | 2 +- java/src/hdf/hdf5lib/structs/H5_ih_info_t.java | 2 +- java/src/hdf/hdf5lib/structs/package-info.java | 2 +- java/src/jni/Makefile.am | 2 +- java/src/jni/exceptionImp.c | 2 +- java/src/jni/exceptionImp.h | 2 +- java/src/jni/h5Constants.c | 2 +- java/src/jni/h5Imp.c | 2 +- java/src/jni/h5Imp.h | 2 +- java/src/jni/h5aImp.c | 2 +- java/src/jni/h5aImp.h | 2 +- java/src/jni/h5dImp.c | 2 +- java/src/jni/h5dImp.h | 2 +- java/src/jni/h5eImp.c | 2 +- java/src/jni/h5eImp.h | 2 +- java/src/jni/h5fImp.c | 2 +- java/src/jni/h5fImp.h | 2 +- java/src/jni/h5gImp.c | 2 +- java/src/jni/h5gImp.h | 2 +- java/src/jni/h5iImp.c | 2 +- java/src/jni/h5iImp.h | 2 +- java/src/jni/h5jni.h | 2 +- java/src/jni/h5lImp.c | 2 +- java/src/jni/h5lImp.h | 2 +- java/src/jni/h5oImp.c | 2 +- java/src/jni/h5oImp.h | 2 +- java/src/jni/h5pACPLImp.c | 2 +- java/src/jni/h5pACPLImp.h | 2 +- java/src/jni/h5pDAPLImp.c | 2 +- java/src/jni/h5pDAPLImp.h | 2 +- java/src/jni/h5pDCPLImp.c | 2 +- java/src/jni/h5pDCPLImp.h | 2 +- java/src/jni/h5pDXPLImp.c | 2 +- java/src/jni/h5pDXPLImp.h | 2 +- java/src/jni/h5pFAPLImp.c | 2 +- java/src/jni/h5pFAPLImp.h | 2 +- java/src/jni/h5pFCPLImp.c | 2 +- java/src/jni/h5pFCPLImp.h | 2 +- java/src/jni/h5pGAPLImp.c | 2 +- java/src/jni/h5pGAPLImp.h | 2 +- java/src/jni/h5pGCPLImp.c | 2 +- java/src/jni/h5pGCPLImp.h | 2 +- java/src/jni/h5pImp.c | 2 +- java/src/jni/h5pImp.h | 2 +- java/src/jni/h5pLAPLImp.c | 2 +- java/src/jni/h5pLAPLImp.h | 2 +- java/src/jni/h5pLCPLImp.c | 2 +- java/src/jni/h5pLCPLImp.h | 2 +- java/src/jni/h5pOCPLImp.c | 2 +- java/src/jni/h5pOCPLImp.h | 2 +- java/src/jni/h5pOCpyPLImp.c | 2 +- java/src/jni/h5pOCpyPLImp.h | 2 +- java/src/jni/h5pStrCPLImp.c | 2 +- java/src/jni/h5pStrCPLImp.h | 2 +- java/src/jni/h5plImp.c | 2 +- java/src/jni/h5plImp.h | 2 +- java/src/jni/h5rImp.c | 2 +- java/src/jni/h5rImp.h | 2 +- java/src/jni/h5sImp.c | 2 +- java/src/jni/h5sImp.h | 2 +- java/src/jni/h5tImp.c | 2 +- java/src/jni/h5tImp.h | 2 +- java/src/jni/h5util.c | 2 +- java/src/jni/h5util.h | 2 +- java/src/jni/h5vlImp.c | 2 +- java/src/jni/h5vlImp.h | 2 +- java/src/jni/h5zImp.c | 2 +- java/src/jni/h5zImp.h | 2 +- java/src/jni/nativeData.c | 2 +- java/src/jni/nativeData.h | 2 +- java/test/Makefile.am | 2 +- java/test/TestAll.java | 2 +- java/test/TestH5.java | 2 +- java/test/TestH5A.java | 2 +- java/test/TestH5Arw.java | 2 +- java/test/TestH5D.java | 2 +- java/test/TestH5Dparams.java | 2 +- java/test/TestH5Dplist.java | 2 +- java/test/TestH5Drw.java | 2 +- java/test/TestH5E.java | 2 +- java/test/TestH5Edefault.java | 2 +- java/test/TestH5Eparams.java | 2 +- java/test/TestH5Eregister.java | 2 +- java/test/TestH5F.java | 2 +- java/test/TestH5Fbasic.java | 2 +- java/test/TestH5Fparams.java | 2 +- java/test/TestH5Fswmr.java | 2 +- java/test/TestH5G.java | 2 +- java/test/TestH5Gbasic.java | 2 +- java/test/TestH5Giterate.java | 2 +- java/test/TestH5Lbasic.java | 2 +- java/test/TestH5Lcreate.java | 2 +- java/test/TestH5Lparams.java | 2 +- java/test/TestH5Obasic.java | 2 +- java/test/TestH5Ocopy.java | 2 +- java/test/TestH5OcopyOld.java | 2 +- java/test/TestH5Ocreate.java | 2 +- java/test/TestH5Oparams.java | 2 +- java/test/TestH5P.java | 2 +- java/test/TestH5PData.java | 2 +- java/test/TestH5PL.java | 2 +- java/test/TestH5Pfapl.java | 2 +- java/test/TestH5Pfaplhdfs.java | 2 +- java/test/TestH5Pfapls3.java | 2 +- java/test/TestH5Plist.java | 2 +- java/test/TestH5Pvirtual.java | 2 +- java/test/TestH5R.java | 2 +- java/test/TestH5Rref.java | 2 +- java/test/TestH5S.java | 2 +- java/test/TestH5Sbasic.java | 2 +- java/test/TestH5T.java | 2 +- java/test/TestH5Tbasic.java | 2 +- java/test/TestH5Tparams.java | 2 +- java/test/TestH5VL.java | 2 +- java/test/TestH5Z.java | 2 +- java/test/junit.sh.in | 2 +- m4/aclocal_fc.f90 | 2 +- m4/aclocal_fc.m4 | 2 +- release_docs/RELEASE.txt | 8 ++++++-- release_docs/RELEASE_PROCESS.md | 4 ++-- src/H5.c | 2 +- src/H5A.c | 2 +- src/H5AC.c | 2 +- src/H5ACdbg.c | 2 +- src/H5ACmodule.h | 2 +- src/H5ACmpio.c | 2 +- src/H5ACpkg.h | 2 +- src/H5ACprivate.h | 2 +- src/H5ACproxy_entry.c | 2 +- src/H5ACpublic.h | 2 +- src/H5Abtree2.c | 2 +- src/H5Adense.c | 2 +- src/H5Adeprec.c | 2 +- src/H5Aint.c | 2 +- src/H5Amodule.h | 2 +- src/H5Apkg.h | 2 +- src/H5Aprivate.h | 2 +- src/H5Apublic.h | 2 +- src/H5Atest.c | 2 +- src/H5B.c | 2 +- src/H5B2.c | 2 +- src/H5B2cache.c | 2 +- src/H5B2dbg.c | 2 +- src/H5B2hdr.c | 2 +- src/H5B2int.c | 2 +- src/H5B2internal.c | 2 +- src/H5B2leaf.c | 2 +- src/H5B2module.h | 2 +- src/H5B2pkg.h | 2 +- src/H5B2private.h | 2 +- src/H5B2stat.c | 2 +- src/H5B2test.c | 2 +- src/H5Bcache.c | 2 +- src/H5Bdbg.c | 2 +- src/H5Bmodule.h | 2 +- src/H5Bpkg.h | 2 +- src/H5Bprivate.h | 2 +- src/H5C.c | 2 +- src/H5CX.c | 2 +- src/H5CXmodule.h | 2 +- src/H5CXprivate.h | 2 +- src/H5Cdbg.c | 2 +- src/H5Centry.c | 2 +- src/H5Cepoch.c | 2 +- src/H5Cimage.c | 2 +- src/H5Cint.c | 2 +- src/H5Clog.c | 2 +- src/H5Clog.h | 2 +- src/H5Clog_json.c | 2 +- src/H5Clog_trace.c | 2 +- src/H5Cmodule.h | 2 +- src/H5Cmpio.c | 2 +- src/H5Cpkg.h | 2 +- src/H5Cprefetched.c | 2 +- src/H5Cprivate.h | 2 +- src/H5Cpublic.h | 2 +- src/H5Cquery.c | 2 +- src/H5Ctag.c | 2 +- src/H5Ctest.c | 2 +- src/H5D.c | 2 +- src/H5Dbtree.c | 2 +- src/H5Dbtree2.c | 2 +- src/H5Dchunk.c | 2 +- src/H5Dcompact.c | 2 +- src/H5Dcontig.c | 2 +- src/H5Ddbg.c | 2 +- src/H5Ddeprec.c | 2 +- src/H5Dearray.c | 2 +- src/H5Defl.c | 2 +- src/H5Dfarray.c | 2 +- src/H5Dfill.c | 2 +- src/H5Dint.c | 2 +- src/H5Dio.c | 2 +- src/H5Dlayout.c | 2 +- src/H5Dmodule.h | 2 +- src/H5Dmpio.c | 2 +- src/H5Dnone.c | 2 +- src/H5Doh.c | 2 +- src/H5Dpkg.h | 2 +- src/H5Dprivate.h | 2 +- src/H5Dpublic.h | 2 +- src/H5Dscatgath.c | 2 +- src/H5Dselect.c | 2 +- src/H5Dsingle.c | 2 +- src/H5Dtest.c | 2 +- src/H5Dvirtual.c | 2 +- src/H5E.c | 2 +- src/H5EA.c | 2 +- src/H5EAcache.c | 2 +- src/H5EAdbg.c | 2 +- src/H5EAdblkpage.c | 2 +- src/H5EAdblock.c | 2 +- src/H5EAhdr.c | 2 +- src/H5EAiblock.c | 2 +- src/H5EAint.c | 2 +- src/H5EAmodule.h | 2 +- src/H5EApkg.h | 2 +- src/H5EAprivate.h | 2 +- src/H5EAsblock.c | 2 +- src/H5EAstat.c | 2 +- src/H5EAtest.c | 2 +- src/H5ES.c | 2 +- src/H5ESdevelop.h | 2 +- src/H5ESevent.c | 2 +- src/H5ESint.c | 2 +- src/H5ESlist.c | 2 +- src/H5ESmodule.h | 2 +- src/H5ESpkg.h | 2 +- src/H5ESprivate.h | 2 +- src/H5ESpublic.h | 2 +- src/H5Edeprec.c | 2 +- src/H5Eint.c | 2 +- src/H5Emodule.h | 2 +- src/H5Epkg.h | 2 +- src/H5Eprivate.h | 2 +- src/H5Epublic.h | 2 +- src/H5F.c | 2 +- src/H5FA.c | 2 +- src/H5FAcache.c | 2 +- src/H5FAdbg.c | 2 +- src/H5FAdblkpage.c | 2 +- src/H5FAdblock.c | 2 +- src/H5FAhdr.c | 2 +- src/H5FAint.c | 2 +- src/H5FAmodule.h | 2 +- src/H5FApkg.h | 2 +- src/H5FAprivate.h | 2 +- src/H5FAstat.c | 2 +- src/H5FAtest.c | 2 +- src/H5FD.c | 2 +- src/H5FDcore.c | 2 +- src/H5FDcore.h | 2 +- src/H5FDdevelop.h | 2 +- src/H5FDdirect.c | 2 +- src/H5FDdirect.h | 2 +- src/H5FDdrvr_module.h | 2 +- src/H5FDfamily.c | 2 +- src/H5FDfamily.h | 2 +- src/H5FDhdfs.c | 2 +- src/H5FDhdfs.h | 2 +- src/H5FDint.c | 2 +- src/H5FDlog.c | 2 +- src/H5FDlog.h | 2 +- src/H5FDmirror.c | 2 +- src/H5FDmirror.h | 2 +- src/H5FDmirror_priv.h | 2 +- src/H5FDmodule.h | 2 +- src/H5FDmpi.c | 2 +- src/H5FDmpi.h | 2 +- src/H5FDmpio.c | 2 +- src/H5FDmpio.h | 2 +- src/H5FDmulti.c | 2 +- src/H5FDmulti.h | 2 +- src/H5FDonion.c | 2 +- src/H5FDonion.h | 2 +- src/H5FDonion_header.c | 2 +- src/H5FDonion_header.h | 2 +- src/H5FDonion_history.c | 2 +- src/H5FDonion_history.h | 2 +- src/H5FDonion_index.c | 2 +- src/H5FDonion_index.h | 2 +- src/H5FDonion_priv.h | 2 +- src/H5FDperform.c | 2 +- src/H5FDpkg.h | 2 +- src/H5FDprivate.h | 2 +- src/H5FDpublic.h | 2 +- src/H5FDros3.c | 2 +- src/H5FDros3.h | 2 +- src/H5FDs3comms.c | 2 +- src/H5FDs3comms.h | 2 +- src/H5FDsec2.c | 2 +- src/H5FDsec2.h | 2 +- src/H5FDspace.c | 2 +- src/H5FDsplitter.c | 2 +- src/H5FDsplitter.h | 2 +- src/H5FDstdio.c | 2 +- src/H5FDstdio.h | 2 +- src/H5FDsubfiling/H5FDioc.c | 2 +- src/H5FDsubfiling/H5FDioc.h | 2 +- src/H5FDsubfiling/H5FDioc_int.c | 2 +- src/H5FDsubfiling/H5FDioc_priv.h | 2 +- src/H5FDsubfiling/H5FDioc_threads.c | 2 +- src/H5FDsubfiling/H5FDsubfile_int.c | 2 +- src/H5FDsubfiling/H5FDsubfiling.c | 2 +- src/H5FDsubfiling/H5FDsubfiling.h | 2 +- src/H5FDsubfiling/H5FDsubfiling_priv.h | 2 +- src/H5FDsubfiling/H5subfiling_common.c | 2 +- src/H5FDsubfiling/H5subfiling_common.h | 2 +- src/H5FDtest.c | 2 +- src/H5FDwindows.c | 2 +- src/H5FDwindows.h | 2 +- src/H5FL.c | 2 +- src/H5FLmodule.h | 2 +- src/H5FLprivate.h | 2 +- src/H5FO.c | 2 +- src/H5FOprivate.h | 2 +- src/H5FS.c | 2 +- src/H5FScache.c | 2 +- src/H5FSdbg.c | 2 +- src/H5FSint.c | 2 +- src/H5FSmodule.h | 2 +- src/H5FSpkg.h | 2 +- src/H5FSprivate.h | 2 +- src/H5FSsection.c | 2 +- src/H5FSstat.c | 2 +- src/H5FStest.c | 2 +- src/H5Faccum.c | 2 +- src/H5Fcwfs.c | 2 +- src/H5Fdbg.c | 2 +- src/H5Fdeprec.c | 2 +- src/H5Fefc.c | 2 +- src/H5Ffake.c | 2 +- src/H5Fint.c | 2 +- src/H5Fio.c | 2 +- src/H5Fmodule.h | 2 +- src/H5Fmount.c | 2 +- src/H5Fmpi.c | 2 +- src/H5Fpkg.h | 2 +- src/H5Fprivate.h | 2 +- src/H5Fpublic.h | 2 +- src/H5Fquery.c | 2 +- src/H5Fsfile.c | 2 +- src/H5Fspace.c | 2 +- src/H5Fsuper.c | 2 +- src/H5Fsuper_cache.c | 2 +- src/H5Ftest.c | 2 +- src/H5G.c | 2 +- src/H5Gbtree2.c | 2 +- src/H5Gcache.c | 2 +- src/H5Gcompact.c | 2 +- src/H5Gdense.c | 2 +- src/H5Gdeprec.c | 2 +- src/H5Gent.c | 2 +- src/H5Gint.c | 2 +- src/H5Glink.c | 2 +- src/H5Gloc.c | 2 +- src/H5Gmodule.h | 2 +- src/H5Gname.c | 2 +- src/H5Gnode.c | 2 +- src/H5Gobj.c | 2 +- src/H5Goh.c | 2 +- src/H5Gpkg.h | 2 +- src/H5Gprivate.h | 2 +- src/H5Gpublic.h | 2 +- src/H5Groot.c | 2 +- src/H5Gstab.c | 2 +- src/H5Gtest.c | 2 +- src/H5Gtraverse.c | 2 +- src/H5HF.c | 2 +- src/H5HFbtree2.c | 2 +- src/H5HFcache.c | 2 +- src/H5HFdbg.c | 2 +- src/H5HFdblock.c | 2 +- src/H5HFdtable.c | 2 +- src/H5HFhdr.c | 2 +- src/H5HFhuge.c | 2 +- src/H5HFiblock.c | 2 +- src/H5HFiter.c | 2 +- src/H5HFman.c | 2 +- src/H5HFmodule.h | 2 +- src/H5HFpkg.h | 2 +- src/H5HFprivate.h | 2 +- src/H5HFsection.c | 2 +- src/H5HFspace.c | 2 +- src/H5HFstat.c | 2 +- src/H5HFtest.c | 2 +- src/H5HFtiny.c | 2 +- src/H5HG.c | 2 +- src/H5HGcache.c | 2 +- src/H5HGdbg.c | 2 +- src/H5HGmodule.h | 2 +- src/H5HGpkg.h | 2 +- src/H5HGprivate.h | 2 +- src/H5HGquery.c | 2 +- src/H5HL.c | 2 +- src/H5HLcache.c | 2 +- src/H5HLdbg.c | 2 +- src/H5HLdblk.c | 2 +- src/H5HLint.c | 2 +- src/H5HLmodule.h | 2 +- src/H5HLpkg.h | 2 +- src/H5HLprfx.c | 2 +- src/H5HLprivate.h | 2 +- src/H5I.c | 2 +- src/H5Idbg.c | 2 +- src/H5Idevelop.h | 2 +- src/H5Iint.c | 2 +- src/H5Imodule.h | 2 +- src/H5Ipkg.h | 2 +- src/H5Iprivate.h | 2 +- src/H5Ipublic.h | 2 +- src/H5Itest.c | 2 +- src/H5L.c | 2 +- src/H5Ldeprec.c | 2 +- src/H5Ldevelop.h | 2 +- src/H5Lexternal.c | 2 +- src/H5Lint.c | 2 +- src/H5Lmodule.h | 2 +- src/H5Lpkg.h | 2 +- src/H5Lprivate.h | 2 +- src/H5Lpublic.h | 2 +- src/H5M.c | 2 +- src/H5MF.c | 2 +- src/H5MFaggr.c | 2 +- src/H5MFdbg.c | 2 +- src/H5MFmodule.h | 2 +- src/H5MFpkg.h | 2 +- src/H5MFprivate.h | 2 +- src/H5MFsection.c | 2 +- src/H5MM.c | 2 +- src/H5MMprivate.h | 2 +- src/H5MMpublic.h | 2 +- src/H5Mmodule.h | 2 +- src/H5Mpkg.h | 2 +- src/H5Mprivate.h | 2 +- src/H5Mpublic.h | 2 +- src/H5O.c | 2 +- src/H5Oainfo.c | 2 +- src/H5Oalloc.c | 2 +- src/H5Oattr.c | 2 +- src/H5Oattribute.c | 2 +- src/H5Obogus.c | 2 +- src/H5Obtreek.c | 2 +- src/H5Ocache.c | 2 +- src/H5Ocache_image.c | 2 +- src/H5Ochunk.c | 2 +- src/H5Ocont.c | 2 +- src/H5Ocopy.c | 2 +- src/H5Ocopy_ref.c | 2 +- src/H5Odbg.c | 2 +- src/H5Odeprec.c | 2 +- src/H5Odrvinfo.c | 2 +- src/H5Odtype.c | 2 +- src/H5Oefl.c | 2 +- src/H5Ofill.c | 2 +- src/H5Oflush.c | 2 +- src/H5Ofsinfo.c | 2 +- src/H5Oginfo.c | 2 +- src/H5Oint.c | 2 +- src/H5Olayout.c | 2 +- src/H5Olinfo.c | 2 +- src/H5Olink.c | 2 +- src/H5Omessage.c | 2 +- src/H5Omodule.h | 2 +- src/H5Omtime.c | 2 +- src/H5Oname.c | 2 +- src/H5Onull.c | 2 +- src/H5Opkg.h | 2 +- src/H5Opline.c | 2 +- src/H5Oprivate.h | 2 +- src/H5Opublic.h | 2 +- src/H5Orefcount.c | 2 +- src/H5Osdspace.c | 2 +- src/H5Oshared.c | 2 +- src/H5Oshared.h | 2 +- src/H5Oshmesg.c | 2 +- src/H5Ostab.c | 2 +- src/H5Otest.c | 2 +- src/H5Ounknown.c | 2 +- src/H5P.c | 2 +- src/H5PB.c | 2 +- src/H5PBmodule.h | 2 +- src/H5PBpkg.h | 2 +- src/H5PBprivate.h | 2 +- src/H5PL.c | 2 +- src/H5PLextern.h | 2 +- src/H5PLint.c | 2 +- src/H5PLmodule.h | 2 +- src/H5PLpath.c | 2 +- src/H5PLpkg.h | 2 +- src/H5PLplugin_cache.c | 2 +- src/H5PLprivate.h | 2 +- src/H5PLpublic.h | 2 +- src/H5Pacpl.c | 2 +- src/H5Pdapl.c | 2 +- src/H5Pdcpl.c | 2 +- src/H5Pdeprec.c | 2 +- src/H5Pdxpl.c | 2 +- src/H5Pencdec.c | 2 +- src/H5Pfapl.c | 2 +- src/H5Pfcpl.c | 2 +- src/H5Pfmpl.c | 2 +- src/H5Pgcpl.c | 2 +- src/H5Pint.c | 2 +- src/H5Plapl.c | 2 +- src/H5Plcpl.c | 2 +- src/H5Pmapl.c | 2 +- src/H5Pmcpl.c | 2 +- src/H5Pmodule.h | 2 +- src/H5Pocpl.c | 2 +- src/H5Pocpypl.c | 2 +- src/H5Ppkg.h | 2 +- src/H5Pprivate.h | 2 +- src/H5Ppublic.h | 2 +- src/H5Pstrcpl.c | 2 +- src/H5Ptest.c | 2 +- src/H5R.c | 2 +- src/H5RS.c | 2 +- src/H5RSmodule.h | 2 +- src/H5RSprivate.h | 2 +- src/H5Rdeprec.c | 2 +- src/H5Rint.c | 2 +- src/H5Rmodule.h | 2 +- src/H5Rpkg.h | 2 +- src/H5Rprivate.h | 2 +- src/H5Rpublic.h | 2 +- src/H5S.c | 2 +- src/H5SL.c | 2 +- src/H5SLmodule.h | 2 +- src/H5SLprivate.h | 2 +- src/H5SM.c | 2 +- src/H5SMbtree2.c | 2 +- src/H5SMcache.c | 2 +- src/H5SMmessage.c | 2 +- src/H5SMmodule.h | 2 +- src/H5SMpkg.h | 2 +- src/H5SMprivate.h | 2 +- src/H5SMtest.c | 2 +- src/H5Sall.c | 2 +- src/H5Sdbg.c | 2 +- src/H5Sdeprec.c | 2 +- src/H5Shyper.c | 2 +- src/H5Smodule.h | 2 +- src/H5Smpio.c | 2 +- src/H5Snone.c | 2 +- src/H5Spkg.h | 2 +- src/H5Spoint.c | 2 +- src/H5Sprivate.h | 2 +- src/H5Spublic.h | 2 +- src/H5Sselect.c | 2 +- src/H5Stest.c | 2 +- src/H5T.c | 2 +- src/H5TS.c | 2 +- src/H5TSatomic.c | 2 +- src/H5TSatomic.h | 2 +- src/H5TSbarrier.c | 2 +- src/H5TSbarrier.h | 2 +- src/H5TSc11.c | 2 +- src/H5TScond.c | 2 +- src/H5TScond.h | 2 +- src/H5TSdevelop.h | 2 +- src/H5TSint.c | 2 +- src/H5TSkey.c | 2 +- src/H5TSkey.h | 2 +- src/H5TSmodule.h | 2 +- src/H5TSmutex.c | 2 +- src/H5TSmutex.h | 2 +- src/H5TSonce.c | 2 +- src/H5TSpkg.h | 2 +- src/H5TSpool.c | 2 +- src/H5TSpool.h | 2 +- src/H5TSprivate.h | 2 +- src/H5TSpthread.c | 2 +- src/H5TSrec_rwlock.c | 2 +- src/H5TSrwlock.c | 2 +- src/H5TSrwlock.h | 2 +- src/H5TSsemaphore.c | 2 +- src/H5TSsemaphore.h | 2 +- src/H5TSthread.c | 2 +- src/H5TSwin.c | 2 +- src/H5Tarray.c | 2 +- src/H5Tbit.c | 2 +- src/H5Tcommit.c | 2 +- src/H5Tcompound.c | 2 +- src/H5Tconv.c | 2 +- src/H5Tconv.h | 2 +- src/H5Tconv_array.c | 2 +- src/H5Tconv_array.h | 2 +- src/H5Tconv_bitfield.c | 2 +- src/H5Tconv_bitfield.h | 2 +- src/H5Tconv_compound.c | 2 +- src/H5Tconv_compound.h | 2 +- src/H5Tconv_enum.c | 2 +- src/H5Tconv_enum.h | 2 +- src/H5Tconv_float.c | 2 +- src/H5Tconv_float.h | 2 +- src/H5Tconv_integer.c | 2 +- src/H5Tconv_integer.h | 2 +- src/H5Tconv_macros.h | 2 +- src/H5Tconv_reference.c | 2 +- src/H5Tconv_reference.h | 2 +- src/H5Tconv_string.c | 2 +- src/H5Tconv_string.h | 2 +- src/H5Tconv_vlen.c | 2 +- src/H5Tconv_vlen.h | 2 +- src/H5Tcset.c | 2 +- src/H5Tdbg.c | 2 +- src/H5Tdeprec.c | 2 +- src/H5Tdevelop.h | 2 +- src/H5Tenum.c | 2 +- src/H5Tfields.c | 2 +- src/H5Tfixed.c | 2 +- src/H5Tfloat.c | 2 +- src/H5Tinit_float.c | 2 +- src/H5Tmodule.h | 2 +- src/H5Tnative.c | 2 +- src/H5Toffset.c | 2 +- src/H5Toh.c | 2 +- src/H5Topaque.c | 2 +- src/H5Torder.c | 2 +- src/H5Tpad.c | 2 +- src/H5Tpkg.h | 2 +- src/H5Tprecis.c | 2 +- src/H5Tprivate.h | 2 +- src/H5Tpublic.h | 2 +- src/H5Tref.c | 2 +- src/H5Tstrpad.c | 2 +- src/H5Tvisit.c | 2 +- src/H5Tvlen.c | 2 +- src/H5UC.c | 2 +- src/H5UCprivate.h | 2 +- src/H5VL.c | 2 +- src/H5VLcallback.c | 2 +- src/H5VLconnector.h | 2 +- src/H5VLconnector_passthru.h | 2 +- src/H5VLdyn_ops.c | 2 +- src/H5VLint.c | 2 +- src/H5VLmodule.h | 2 +- src/H5VLnative.c | 2 +- src/H5VLnative.h | 2 +- src/H5VLnative_attr.c | 2 +- src/H5VLnative_blob.c | 2 +- src/H5VLnative_dataset.c | 2 +- src/H5VLnative_datatype.c | 2 +- src/H5VLnative_file.c | 2 +- src/H5VLnative_group.c | 2 +- src/H5VLnative_introspect.c | 2 +- src/H5VLnative_link.c | 2 +- src/H5VLnative_object.c | 2 +- src/H5VLnative_private.h | 2 +- src/H5VLnative_token.c | 2 +- src/H5VLpassthru.c | 2 +- src/H5VLpassthru.h | 2 +- src/H5VLpassthru_int.c | 2 +- src/H5VLpassthru_private.h | 2 +- src/H5VLpkg.h | 2 +- src/H5VLprivate.h | 2 +- src/H5VLpublic.h | 2 +- src/H5VLquery.c | 2 +- src/H5VLtest.c | 2 +- src/H5VM.c | 2 +- src/H5VMprivate.h | 2 +- src/H5WB.c | 2 +- src/H5WBprivate.h | 2 +- src/H5Z.c | 2 +- src/H5Zdeflate.c | 2 +- src/H5Zdevelop.h | 2 +- src/H5Zfletcher32.c | 2 +- src/H5Zmodule.h | 2 +- src/H5Znbit.c | 2 +- src/H5Zpkg.h | 2 +- src/H5Zprivate.h | 2 +- src/H5Zpublic.h | 2 +- src/H5Zscaleoffset.c | 2 +- src/H5Zshuffle.c | 2 +- src/H5Zszip.c | 2 +- src/H5Ztrans.c | 2 +- src/H5api_adpt.h | 2 +- src/H5build_settings.autotools.c.in | 2 +- src/H5build_settings.cmake.c.in | 2 +- src/H5build_settings.off.c.in | 2 +- src/H5checksum.c | 2 +- src/H5dbg.c | 2 +- src/H5encode.h | 2 +- src/H5err.txt | 2 +- src/H5module.h | 2 +- src/H5mpi.c | 2 +- src/H5overflow.txt | 2 +- src/H5private.h | 2 +- src/H5public.h | 2 +- src/H5system.c | 2 +- src/H5timer.c | 2 +- src/H5timer.h | 2 +- src/H5trace.c | 2 +- src/H5vers.txt | 2 +- src/H5warnings.h | 2 +- src/H5win32defs.h | 2 +- src/Makefile.am | 2 +- src/hdf5.h | 2 +- test/API/CMakeLists.txt | 2 +- test/API/H5_api_async_test.c | 2 +- test/API/H5_api_async_test.h | 2 +- test/API/H5_api_attribute_test.c | 2 +- test/API/H5_api_attribute_test.h | 2 +- test/API/H5_api_dataset_test.c | 2 +- test/API/H5_api_dataset_test.h | 2 +- test/API/H5_api_datatype_test.c | 2 +- test/API/H5_api_datatype_test.h | 2 +- test/API/H5_api_file_test.c | 2 +- test/API/H5_api_file_test.h | 2 +- test/API/H5_api_group_test.c | 2 +- test/API/H5_api_group_test.h | 2 +- test/API/H5_api_link_test.c | 2 +- test/API/H5_api_link_test.h | 2 +- test/API/H5_api_misc_test.c | 2 +- test/API/H5_api_misc_test.h | 2 +- test/API/H5_api_object_test.c | 2 +- test/API/H5_api_object_test.h | 2 +- test/API/H5_api_test.c | 2 +- test/API/H5_api_test.h | 2 +- test/API/H5_api_test_config.h.in | 2 +- test/API/H5_api_test_util.c | 2 +- test/API/H5_api_test_util.h | 2 +- test/API/driver/h5_api_test_driver.cxx | 2 +- test/API/driver/h5_api_test_driver.hxx | 2 +- test/CMakePassthroughVOLTests.cmake | 2 +- test/CMakeTests.cmake | 2 +- test/CMakeVFDTests.cmake | 2 +- test/H5srcdir.h | 2 +- test/H5srcdir_str.h.in | 2 +- test/Makefile.am | 2 +- test/ShellTests.cmake | 2 +- test/accum.c | 2 +- test/accum_swmr_reader.c | 2 +- test/app_ref.c | 2 +- test/atomic_reader.c | 2 +- test/atomic_writer.c | 2 +- test/big.c | 2 +- test/bittests.c | 2 +- test/btree2.c | 2 +- test/cache.c | 2 +- test/cache_api.c | 2 +- test/cache_common.c | 2 +- test/cache_common.h | 2 +- test/cache_image.c | 2 +- test/cache_logging.c | 2 +- test/cache_tagging.c | 2 +- test/chunk_info.c | 2 +- test/cmpd_dset.c | 2 +- test/cmpd_dtransform.c | 2 +- test/cork.c | 2 +- test/cross_read.c | 2 +- test/dangle.c | 2 +- test/del_many_dense_attrs.c | 2 +- test/direct_chunk.c | 2 +- test/dsets.c | 2 +- test/dt_arith.c | 2 +- test/dtransform.c | 2 +- test/dtypes.c | 2 +- test/earray.c | 2 +- test/efc.c | 2 +- test/enc_dec_plist.c | 2 +- test/enc_dec_plist_cross_platform.c | 2 +- test/enum.c | 2 +- test/err_compat.c | 2 +- test/error_test.c | 2 +- test/event_set.c | 2 +- test/evict_on_close.c | 2 +- test/extend.c | 2 +- test/external.c | 2 +- test/external_common.c | 2 +- test/external_common.h | 2 +- test/external_env.c | 2 +- test/external_fname.h | 2 +- test/farray.c | 2 +- test/fheap.c | 2 +- test/file_image.c | 2 +- test/filenotclosed.c | 2 +- test/fillval.c | 2 +- test/filter_fail.c | 2 +- test/filter_plugin.c | 2 +- test/filter_plugin1_dsets.c | 2 +- test/filter_plugin2_dsets.c | 2 +- test/filter_plugin3_dsets.c | 2 +- test/filter_plugin4_groups.c | 2 +- test/flush1.c | 2 +- test/flush2.c | 2 +- test/flushrefresh.c | 2 +- test/flushrefreshTest.cmake | 2 +- test/freespace.c | 2 +- test/gen_bad_compound.c | 2 +- test/gen_bad_offset.c | 2 +- test/gen_bad_ohdr.c | 2 +- test/gen_bogus.c | 2 +- test/gen_bounds.c | 2 +- test/gen_cross.c | 2 +- test/gen_deflate.c | 2 +- test/gen_file_image.c | 2 +- test/gen_filespace.c | 2 +- test/gen_filters.c | 2 +- test/gen_mergemsg.c | 2 +- test/gen_new_array.c | 2 +- test/gen_new_fill.c | 2 +- test/gen_new_group.c | 2 +- test/gen_new_mtime.c | 2 +- test/gen_new_super.c | 2 +- test/gen_noencoder.c | 2 +- test/gen_nullspace.c | 2 +- test/gen_old_array.c | 2 +- test/gen_old_group.c | 2 +- test/gen_old_layout.c | 2 +- test/gen_old_mtime.c | 2 +- test/gen_plist.c | 2 +- test/gen_sizes_lheap.c | 2 +- test/gen_specmetaread.c | 2 +- test/gen_udlinks.c | 2 +- test/genall5.c | 2 +- test/genall5.h | 2 +- test/getname.c | 2 +- test/gheap.c | 2 +- test/h5test.c | 2 +- test/h5test.h | 2 +- test/hdfs.c | 2 +- test/hyperslab.c | 2 +- test/istore.c | 2 +- test/lheap.c | 2 +- test/links.c | 2 +- test/links_env.c | 2 +- test/mdset.c | 2 +- test/mf.c | 2 +- test/mirror_vfd.c | 2 +- test/mount.c | 2 +- test/mtime.c | 2 +- test/ntypes.c | 2 +- test/null_vfd_plugin.c | 2 +- test/null_vfd_plugin.h | 2 +- test/null_vol_connector.c | 2 +- test/null_vol_connector.h | 2 +- test/objcopy.c | 2 +- test/objcopy_ref.c | 2 +- test/ohdr.c | 2 +- test/onion.c | 2 +- test/page_buffer.c | 2 +- test/reserved.c | 2 +- test/ros3.c | 2 +- test/s3comms.c | 2 +- test/select_io_dset.c | 2 +- test/set_extent.c | 2 +- test/space_overflow.c | 2 +- test/stab.c | 2 +- test/swmr.c | 2 +- test/swmr_addrem_writer.c | 2 +- test/swmr_common.c | 2 +- test/swmr_common.h | 2 +- test/swmr_generator.c | 2 +- test/swmr_reader.c | 2 +- test/swmr_remove_reader.c | 2 +- test/swmr_remove_writer.c | 2 +- test/swmr_sparse_reader.c | 2 +- test/swmr_sparse_writer.c | 2 +- test/swmr_start_write.c | 2 +- test/swmr_writer.c | 2 +- test/tarray.c | 2 +- test/tattr.c | 2 +- test/tcheck_version.c | 2 +- test/tchecksum.c | 2 +- test/tconfig.c | 2 +- test/tcoords.c | 2 +- test/test_abort_fail.sh.in | 2 +- test/test_check_version.sh.in | 2 +- test/test_error.sh.in | 2 +- test/test_external_env.sh.in | 2 +- test/test_flush_refresh.sh.in | 2 +- test/test_libinfo.sh.in | 2 +- test/test_links_env.sh.in | 2 +- test/test_mirror.sh.in | 2 +- test/test_plugin.sh.in | 2 +- test/test_swmr.pwsh.in | 2 +- test/test_swmr.sh.in | 2 +- test/test_use_cases.sh.in | 2 +- test/test_vds_env.sh.in | 2 +- test/test_vds_swmr.pwsh.in | 2 +- test/test_vds_swmr.sh.in | 2 +- test/testframe.c | 2 +- test/testframe.h | 2 +- test/testhdf5.c | 2 +- test/testhdf5.h | 2 +- test/testmeta.c | 2 +- test/tfile.c | 2 +- test/tgenprop.c | 2 +- test/th5_system.c | 2 +- test/th5o.c | 2 +- test/th5s.c | 2 +- test/tid.c | 2 +- test/timer.c | 2 +- test/titerate.c | 2 +- test/tmeta.c | 2 +- test/tmisc.c | 2 +- test/trefer.c | 2 +- test/trefer_deprec.c | 2 +- test/trefstr.c | 2 +- test/tselect.c | 2 +- test/tskiplist.c | 2 +- test/tsohm.c | 2 +- test/ttime.c | 2 +- test/ttsafe.c | 2 +- test/ttsafe.h | 2 +- test/ttsafe_acreate.c | 2 +- test/ttsafe_atomic.c | 2 +- test/ttsafe_attr_vlen.c | 2 +- test/ttsafe_cancel.c | 2 +- test/ttsafe_dcreate.c | 2 +- test/ttsafe_develop.c | 2 +- test/ttsafe_error.c | 2 +- test/ttsafe_error_stacks.c | 2 +- test/ttsafe_rec_rwlock.c | 2 +- test/ttsafe_rwlock.c | 2 +- test/ttsafe_semaphore.c | 2 +- test/ttsafe_thread_id.c | 2 +- test/ttsafe_thread_pool.c | 2 +- test/tunicode.c | 2 +- test/tvlstr.c | 2 +- test/tvltypes.c | 2 +- test/twriteorder.c | 2 +- test/unlink.c | 2 +- test/unregister.c | 2 +- test/use.h | 2 +- test/use_append_chunk.c | 2 +- test/use_append_chunk_mirror.c | 2 +- test/use_append_mchunks.c | 2 +- test/use_common.c | 2 +- test/use_disable_mdc_flushes.c | 2 +- test/vds.c | 2 +- test/vds_env.c | 2 +- test/vds_swmr.h | 2 +- test/vds_swmr_gen.c | 2 +- test/vds_swmr_reader.c | 2 +- test/vds_swmr_writer.c | 2 +- test/vfd.c | 2 +- test/vfd_plugin.c | 2 +- test/vol.c | 2 +- test/vol_plugin.c | 2 +- testpar/API/CMakeLists.txt | 2 +- testpar/API/H5_api_async_test_parallel.c | 2 +- testpar/API/H5_api_async_test_parallel.h | 2 +- testpar/API/H5_api_attribute_test_parallel.c | 2 +- testpar/API/H5_api_attribute_test_parallel.h | 2 +- testpar/API/H5_api_dataset_test_parallel.c | 2 +- testpar/API/H5_api_dataset_test_parallel.h | 2 +- testpar/API/H5_api_datatype_test_parallel.c | 2 +- testpar/API/H5_api_datatype_test_parallel.h | 2 +- testpar/API/H5_api_file_test_parallel.c | 2 +- testpar/API/H5_api_file_test_parallel.h | 2 +- testpar/API/H5_api_group_test_parallel.c | 2 +- testpar/API/H5_api_group_test_parallel.h | 2 +- testpar/API/H5_api_link_test_parallel.c | 2 +- testpar/API/H5_api_link_test_parallel.h | 2 +- testpar/API/H5_api_misc_test_parallel.c | 2 +- testpar/API/H5_api_misc_test_parallel.h | 2 +- testpar/API/H5_api_object_test_parallel.c | 2 +- testpar/API/H5_api_object_test_parallel.h | 2 +- testpar/API/H5_api_test_parallel.c | 2 +- testpar/API/H5_api_test_parallel.h | 2 +- testpar/CMakeTests.cmake | 2 +- testpar/CMakeVFDTests.cmake | 2 +- testpar/Makefile.am | 2 +- testpar/t_2Gio.c | 2 +- testpar/t_bigio.c | 2 +- testpar/t_cache.c | 2 +- testpar/t_cache_image.c | 2 +- testpar/t_chunk_alloc.c | 2 +- testpar/t_coll_chunk.c | 2 +- testpar/t_coll_md.c | 2 +- testpar/t_dset.c | 2 +- testpar/t_file.c | 2 +- testpar/t_file_image.c | 2 +- testpar/t_filter_read.c | 2 +- testpar/t_filters_parallel.c | 2 +- testpar/t_filters_parallel.h | 2 +- testpar/t_init_term.c | 2 +- testpar/t_mdset.c | 2 +- testpar/t_mpi.c | 2 +- testpar/t_oflush.c | 2 +- testpar/t_pflush1.c | 2 +- testpar/t_pflush2.c | 2 +- testpar/t_ph5basic.c | 2 +- testpar/t_pmulti_dset.c | 2 +- testpar/t_pread.c | 2 +- testpar/t_prestart.c | 2 +- testpar/t_prop.c | 2 +- testpar/t_pshutdown.c | 2 +- testpar/t_select_io_dset.c | 2 +- testpar/t_shapesame.c | 2 +- testpar/t_span_tree.c | 2 +- testpar/t_subfiling_vfd.c | 2 +- testpar/t_vfd.c | 2 +- testpar/testpar.c | 2 +- testpar/testpar.h | 2 +- testpar/testpflush.sh.in | 2 +- testpar/testphdf5.c | 2 +- testpar/testphdf5.h | 2 +- tools/Makefile.am | 2 +- tools/lib/Makefile.am | 2 +- tools/lib/h5diff.c | 2 +- tools/lib/h5diff.h | 2 +- tools/lib/h5diff_array.c | 2 +- tools/lib/h5diff_attr.c | 2 +- tools/lib/h5diff_dset.c | 2 +- tools/lib/h5diff_util.c | 2 +- tools/lib/h5tools.c | 2 +- tools/lib/h5tools.h | 2 +- tools/lib/h5tools_dump.c | 2 +- tools/lib/h5tools_dump.h | 2 +- tools/lib/h5tools_error.h | 2 +- tools/lib/h5tools_filters.c | 2 +- tools/lib/h5tools_ref.c | 2 +- tools/lib/h5tools_ref.h | 2 +- tools/lib/h5tools_str.c | 2 +- tools/lib/h5tools_str.h | 2 +- tools/lib/h5tools_type.c | 2 +- tools/lib/h5tools_utils.c | 2 +- tools/lib/h5tools_utils.h | 2 +- tools/lib/h5trav.c | 2 +- tools/lib/h5trav.h | 2 +- tools/lib/io_timer.c | 2 +- tools/lib/io_timer.h | 2 +- tools/lib/ph5diff.h | 2 +- tools/libtest/CMakeTests.cmake | 2 +- tools/libtest/Makefile.am | 2 +- tools/libtest/h5tools_test_utils.c | 2 +- tools/src/Makefile.am | 2 +- tools/src/h5copy/Makefile.am | 2 +- tools/src/h5copy/h5copy.c | 2 +- tools/src/h5copy/h5copy.h | 2 +- tools/src/h5diff/Makefile.am | 2 +- tools/src/h5diff/h5diff_common.c | 2 +- tools/src/h5diff/h5diff_common.h | 2 +- tools/src/h5diff/h5diff_main.c | 2 +- tools/src/h5diff/h5diff_main.h | 2 +- tools/src/h5diff/ph5diff_main.c | 2 +- tools/src/h5dump/Makefile.am | 2 +- tools/src/h5dump/h5dump.c | 2 +- tools/src/h5dump/h5dump.h | 2 +- tools/src/h5dump/h5dump_ddl.c | 2 +- tools/src/h5dump/h5dump_ddl.h | 2 +- tools/src/h5dump/h5dump_defines.h | 2 +- tools/src/h5dump/h5dump_extern.h | 2 +- tools/src/h5dump/h5dump_xml.c | 2 +- tools/src/h5dump/h5dump_xml.h | 2 +- tools/src/h5format_convert/Makefile.am | 2 +- tools/src/h5format_convert/h5format_convert.c | 2 +- tools/src/h5format_convert/h5format_convert.h | 2 +- tools/src/h5import/Makefile.am | 2 +- tools/src/h5import/h5import.c | 2 +- tools/src/h5import/h5import.h | 2 +- tools/src/h5jam/Makefile.am | 2 +- tools/src/h5jam/h5jam.c | 2 +- tools/src/h5jam/h5jam.h | 2 +- tools/src/h5jam/h5unjam.c | 2 +- tools/src/h5ls/Makefile.am | 2 +- tools/src/h5ls/h5ls.c | 2 +- tools/src/h5ls/h5ls.h | 2 +- tools/src/h5perf/Makefile.am | 2 +- tools/src/h5perf/pio_engine.c | 2 +- tools/src/h5perf/pio_perf.c | 2 +- tools/src/h5perf/pio_perf.h | 2 +- tools/src/h5perf/sio_engine.c | 2 +- tools/src/h5perf/sio_perf.c | 2 +- tools/src/h5perf/sio_perf.h | 2 +- tools/src/h5repack/Makefile.am | 2 +- tools/src/h5repack/h5repack.c | 2 +- tools/src/h5repack/h5repack.h | 2 +- tools/src/h5repack/h5repack_copy.c | 2 +- tools/src/h5repack/h5repack_filters.c | 2 +- tools/src/h5repack/h5repack_main.c | 2 +- tools/src/h5repack/h5repack_opttable.c | 2 +- tools/src/h5repack/h5repack_parse.c | 2 +- tools/src/h5repack/h5repack_refs.c | 2 +- tools/src/h5repack/h5repack_verify.c | 2 +- tools/src/h5stat/Makefile.am | 2 +- tools/src/h5stat/h5stat.c | 2 +- tools/src/h5stat/h5stat.h | 2 +- tools/src/misc/Makefile.am | 2 +- tools/src/misc/h5clear.c | 2 +- tools/src/misc/h5clear.h | 2 +- tools/src/misc/h5debug.c | 2 +- tools/src/misc/h5debug.h | 2 +- tools/src/misc/h5delete.c | 2 +- tools/src/misc/h5delete.h | 2 +- tools/src/misc/h5mkgrp.c | 2 +- tools/src/misc/h5mkgrp.h | 2 +- tools/src/misc/h5repart.c | 2 +- tools/src/misc/h5repart.h | 2 +- tools/test/Makefile.am | 2 +- tools/test/h5copy/CMakeTests.cmake | 2 +- tools/test/h5copy/Makefile.am | 2 +- tools/test/h5copy/dynlib_copy.c | 2 +- tools/test/h5copy/h5copygentest.c | 2 +- tools/test/h5copy/testh5copy.sh.in | 2 +- tools/test/h5diff/CMakeTests.cmake | 2 +- tools/test/h5diff/Makefile.am | 2 +- tools/test/h5diff/dynlib_diff.c | 2 +- tools/test/h5diff/h5diff_plugin.sh.in | 2 +- tools/test/h5diff/h5diffgentest.c | 2 +- tools/test/h5diff/testh5diff.sh.in | 2 +- tools/test/h5diff/testph5diff.sh.in | 2 +- tools/test/h5dump/CMakeTests.cmake | 2 +- tools/test/h5dump/CMakeTestsPBITS.cmake | 2 +- tools/test/h5dump/CMakeTestsVDS.cmake | 2 +- tools/test/h5dump/CMakeTestsXML.cmake | 2 +- tools/test/h5dump/CMakeVFDTests.cmake | 2 +- tools/test/h5dump/Makefile.am | 2 +- tools/test/h5dump/binread.c | 2 +- tools/test/h5dump/dynlib_dump.c | 2 +- tools/test/h5dump/h5dump_plugin.sh.in | 2 +- tools/test/h5dump/h5dumpgentest.c | 2 +- tools/test/h5dump/testh5dump.sh.in | 2 +- tools/test/h5dump/testh5dumppbits.sh.in | 2 +- tools/test/h5dump/testh5dumpvds.sh.in | 2 +- tools/test/h5dump/testh5dumpxml.sh.in | 2 +- tools/test/h5format_convert/CMakeTests.cmake | 2 +- tools/test/h5format_convert/Makefile.am | 2 +- tools/test/h5format_convert/h5fc_chk_idx.c | 2 +- tools/test/h5format_convert/h5fc_gentest.c | 2 +- tools/test/h5format_convert/testh5fc.sh.in | 2 +- tools/test/h5import/CMakeTests.cmake | 2 +- tools/test/h5import/Makefile.am | 2 +- tools/test/h5import/h5importtest.c | 2 +- tools/test/h5import/h5importtestutil.sh.in | 2 +- tools/test/h5jam/CMakeTests.cmake | 2 +- tools/test/h5jam/Makefile.am | 2 +- tools/test/h5jam/getub.c | 2 +- tools/test/h5jam/h5jamgentest.c | 2 +- tools/test/h5jam/tellub.c | 2 +- tools/test/h5jam/testh5jam.sh.in | 2 +- tools/test/h5ls/CMakeTests.cmake | 2 +- tools/test/h5ls/CMakeTestsVDS.cmake | 2 +- tools/test/h5ls/Makefile.am | 2 +- tools/test/h5ls/dynlib_ls.c | 2 +- tools/test/h5ls/h5ls_plugin.sh.in | 2 +- tools/test/h5ls/testh5ls.sh.in | 2 +- tools/test/h5ls/testh5lsvds.sh.in | 2 +- tools/test/h5repack/CMakeTests.cmake | 2 +- tools/test/h5repack/CMakeVFDTests.cmake | 2 +- tools/test/h5repack/Makefile.am | 2 +- tools/test/h5repack/dynlib_rpk.c | 2 +- tools/test/h5repack/dynlib_vrpk.c | 2 +- tools/test/h5repack/h5repack.sh.in | 2 +- tools/test/h5repack/h5repack_plugin.sh.in | 2 +- tools/test/h5repack/h5repackgentest.c | 2 +- tools/test/h5repack/h5repacktst.c | 2 +- tools/test/h5repack/testh5repack_detect_szip.c | 2 +- tools/test/h5stat/CMakeTests.cmake | 2 +- tools/test/h5stat/Makefile.am | 2 +- tools/test/h5stat/h5stat_gentest.c | 2 +- tools/test/h5stat/testh5stat.sh.in | 2 +- tools/test/misc/CMakeTestsClear.cmake | 2 +- tools/test/misc/CMakeTestsMkgrp.cmake | 2 +- tools/test/misc/CMakeTestsRepart.cmake | 2 +- tools/test/misc/Makefile.am | 2 +- tools/test/misc/clear_open_chk.c | 2 +- tools/test/misc/h5clear_gentest.c | 2 +- tools/test/misc/h5perf_gentest.c | 2 +- tools/test/misc/h5repart_gentest.c | 2 +- tools/test/misc/repart_test.c | 2 +- tools/test/misc/talign.c | 2 +- tools/test/misc/testh5clear.sh.in | 2 +- tools/test/misc/testh5mkgrp.sh.in | 2 +- tools/test/misc/testh5repart.sh.in | 2 +- tools/test/misc/vds/Makefile.am | 2 +- tools/test/misc/vds/UC_1.h | 2 +- tools/test/misc/vds/UC_1_one_dim_gen.c | 2 +- tools/test/misc/vds/UC_2.h | 2 +- tools/test/misc/vds/UC_2_two_dims_gen.c | 2 +- tools/test/misc/vds/UC_3.h | 2 +- tools/test/misc/vds/UC_3_gaps_gen.c | 2 +- tools/test/misc/vds/UC_4.h | 2 +- tools/test/misc/vds/UC_4_printf_gen.c | 2 +- tools/test/misc/vds/UC_5.h | 2 +- tools/test/misc/vds/UC_5_stride_gen.c | 2 +- tools/test/misc/vds/UC_common.h | 2 +- tools/test/perform/CMakeTests.cmake | 2 +- tools/test/perform/Makefile.am | 2 +- tools/test/perform/chunk.c | 2 +- tools/test/perform/chunk_cache.c | 2 +- tools/test/perform/direct_write_perf.c | 2 +- tools/test/perform/gen_report.pl | 2 +- tools/test/perform/iopipe.c | 2 +- tools/test/perform/overhead.c | 2 +- tools/test/perform/perf_meta.c | 2 +- tools/test/perform/zip_perf.c | 2 +- utils/Makefile.am | 2 +- utils/mirror_vfd/Makefile.am | 2 +- utils/mirror_vfd/mirror_remote.c | 2 +- utils/mirror_vfd/mirror_remote.h | 2 +- utils/mirror_vfd/mirror_server.c | 2 +- utils/mirror_vfd/mirror_server_stop.c | 2 +- utils/mirror_vfd/mirror_writer.c | 2 +- utils/subfiling_vfd/h5fuse.in | 2 +- utils/test/Makefile.am | 2 +- utils/test/swmr_check_compat_vfd.c | 2 +- utils/tools/Makefile.am | 2 +- utils/tools/h5dwalk/Makefile.am | 2 +- utils/tools/h5dwalk/h5dwalk.c | 2 +- utils/tools/test/Makefile.am | 2 +- utils/tools/test/h5dwalk/CMakeTests.cmake | 2 +- utils/tools/test/h5dwalk/Makefile.am | 2 +- utils/tools/test/h5dwalk/copy_demo_files.sh.in | 2 +- utils/tools/test/h5dwalk/testh5dwalk.sh.in | 2 +- 1897 files changed, 1927 insertions(+), 1922 deletions(-) rename COPYING => LICENSE (96%) rename COPYING_LBNL_HDF5 => LICENSE_LBNL_HDF5 (98%) diff --git a/CMakeFilters.cmake b/CMakeFilters.cmake index 57c51edceaf..9f4955c3d52 100644 --- a/CMakeFilters.cmake +++ b/CMakeFilters.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/CMakeInstallation.cmake b/CMakeInstallation.cmake index a2564e68ad5..6211c959e99 100644 --- a/CMakeInstallation.cmake +++ b/CMakeInstallation.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. @@ -180,10 +180,10 @@ endif () HDF_README_PROPERTIES(HDF5_BUILD_FORTRAN) #----------------------------------------------------------------------------- -# Configure the COPYING.txt file for the windows binary package +# Configure the LICENSE.txt file for the windows binary package #----------------------------------------------------------------------------- if (WIN32) - configure_file (${HDF5_SOURCE_DIR}/COPYING ${HDF5_BINARY_DIR}/COPYING.txt @ONLY) + configure_file (${HDF5_SOURCE_DIR}/LICENSE ${HDF5_BINARY_DIR}/LICENSE.txt @ONLY) endif () #----------------------------------------------------------------------------- @@ -191,7 +191,7 @@ endif () #----------------------------------------------------------------------------- if (NOT HDF5_EXTERNALLY_CONFIGURED) install ( - FILES ${HDF5_SOURCE_DIR}/COPYING + FILES ${HDF5_SOURCE_DIR}/LICENSE DESTINATION ${HDF5_INSTALL_DATA_DIR} COMPONENT hdfdocuments ) @@ -255,7 +255,7 @@ if (NOT HDF5_EXTERNALLY_CONFIGURED AND NOT HDF5_NO_PACKAGES) set (CPACK_PACKAGE_VERSION_MAJOR "${HDF5_PACKAGE_VERSION_MAJOR}") set (CPACK_PACKAGE_VERSION_MINOR "${HDF5_PACKAGE_VERSION_MINOR}") set (CPACK_PACKAGE_VERSION_PATCH "") - set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") + set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") if (EXISTS "${HDF5_SOURCE_DIR}/release_docs") set (CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/release_docs/RELEASE.txt") set (CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/release_docs/RELEASE.txt") @@ -321,7 +321,7 @@ if (NOT HDF5_EXTERNALLY_CONFIGURED AND NOT HDF5_NO_PACKAGES) # With CPACK_WIX_LICENSE_RTF you can override the license file used by the # WiX Generator in case CPACK_RESOURCE_FILE_LICENSE is in an unsupported # format or the .txt -> .rtf conversion does not work as expected. - set (CPACK_RESOURCE_FILE_LICENSE "${HDF5_BINARY_DIR}/COPYING.txt") + set (CPACK_RESOURCE_FILE_LICENSE "${HDF5_BINARY_DIR}/LICENSE.txt") # .. variable:: CPACK_WIX_PRODUCT_ICON # The Icon shown next to the program name in Add/Remove programs. set(CPACK_WIX_PRODUCT_ICON "${HDF_RESOURCES_DIR}\\\\hdf.ico") diff --git a/CMakePlugins.cmake b/CMakePlugins.cmake index f607c2cfb39..5fccb375224 100644 --- a/CMakePlugins.cmake +++ b/CMakePlugins.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/CMakeTests.cmake b/CMakeTests.cmake index 66199010680..6b83d5652c1 100644 --- a/CMakeTests.cmake +++ b/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/CMakeVOL.cmake b/CMakeVOL.cmake index a6bd3b4adca..17550a49147 100644 --- a/CMakeVOL.cmake +++ b/CMakeVOL.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8810c9282b9..5770b65670a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,7 +7,7 @@ process enjoyable and straightforward. This document describes guiding principles for the HDF5 code contributors and does not pretend to address any possible contribution. If in doubt, please do not hesitate to ask us for guidance. ***Note that no contribution may be accepted unless the donor agrees with the HDF Group software license terms -found in the COPYING file in every branch's top source directory.*** +found in the LICENSE file in every branch's top source directory.*** > We will assume that you are familiar with `git` and `GitHub`. If not, you may go through the GitHub tutorial found at diff --git a/CTestConfig.cmake b/CTestConfig.cmake index 62beafc0c12..ec018229b40 100644 --- a/CTestConfig.cmake +++ b/CTestConfig.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/H5D/Makefile.am b/HDF5Examples/C/H5D/Makefile.am index dfccb4b72f9..a0298e0d239 100644 --- a/HDF5Examples/C/H5D/Makefile.am +++ b/HDF5Examples/C/H5D/Makefile.am @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/H5D/test-pc.sh b/HDF5Examples/C/H5D/test-pc.sh index e0cda25152a..e0a03223c8f 100755 --- a/HDF5Examples/C/H5D/test-pc.sh +++ b/HDF5Examples/C/H5D/test-pc.sh @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/H5D/test.sh.in b/HDF5Examples/C/H5D/test.sh.in index ece230353e1..0dfd8b82993 100755 --- a/HDF5Examples/C/H5D/test.sh.in +++ b/HDF5Examples/C/H5D/test.sh.in @@ -6,7 +6,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/H5FLT/h5ex_d_blosc.c b/HDF5Examples/C/H5FLT/h5ex_d_blosc.c index 3fc13654c15..ac87984bd67 100644 --- a/HDF5Examples/C/H5FLT/h5ex_d_blosc.c +++ b/HDF5Examples/C/H5FLT/h5ex_d_blosc.c @@ -5,7 +5,7 @@ * This file is part of the HDF5 BLOSC filter plugin source. The full * * copyright notice, including terms governing use, modification, and * * terms governing use, modification, and redistribution, is contained in * - * the file COPYING, which can be found at the root of the BLOSC source code * + * the file LICENSE, which can be found at the root of the BLOSC source code * * distribution tree. If you do not have access to this file, you may * * request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ diff --git a/HDF5Examples/C/H5FLT/h5ex_d_blosc2.c b/HDF5Examples/C/H5FLT/h5ex_d_blosc2.c index dae0becb4a2..fc5a0e60541 100644 --- a/HDF5Examples/C/H5FLT/h5ex_d_blosc2.c +++ b/HDF5Examples/C/H5FLT/h5ex_d_blosc2.c @@ -5,7 +5,7 @@ * This file is part of the HDF5 BLOSC2 filter plugin source. The full * * copyright notice, including terms governing use, modification, and * * terms governing use, modification, and redistribution, is contained in * - * the file COPYING, which can be found at the root of the BLOSC2 source code * + * the file LICENSE, which can be found at the root of the BLOSC2 source code * * distribution tree. If you do not have access to this file, you may * * request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ diff --git a/HDF5Examples/C/H5FLT/h5ex_d_bshuf.c b/HDF5Examples/C/H5FLT/h5ex_d_bshuf.c index 7b666da094c..696211a0582 100644 --- a/HDF5Examples/C/H5FLT/h5ex_d_bshuf.c +++ b/HDF5Examples/C/H5FLT/h5ex_d_bshuf.c @@ -5,7 +5,7 @@ * This file is part of the HDF5 BSHUF filter plugin source. The full * * copyright notice, including terms governing use, modification, and * * terms governing use, modification, and redistribution, is contained in * - * the file COPYING, which can be found at the root of the BSHUF source code * + * the file LICENSE, which can be found at the root of the BSHUF source code * * distribution tree. If you do not have access to this file, you may * * request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ diff --git a/HDF5Examples/C/H5FLT/h5ex_d_bzip2.c b/HDF5Examples/C/H5FLT/h5ex_d_bzip2.c index 421a1bf954e..43095271286 100644 --- a/HDF5Examples/C/H5FLT/h5ex_d_bzip2.c +++ b/HDF5Examples/C/H5FLT/h5ex_d_bzip2.c @@ -5,7 +5,7 @@ * This file is part of the HDF5 BZIP2 filter plugin source. The full * * copyright notice, including terms governing use, modification, and * * terms governing use, modification, and redistribution, is contained in * - * the file COPYING, which can be found at the root of the BZIP2 source code * + * the file LICENSE, which can be found at the root of the BZIP2 source code * * distribution tree. If you do not have access to this file, you may * * request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ diff --git a/HDF5Examples/C/H5FLT/h5ex_d_jpeg.c b/HDF5Examples/C/H5FLT/h5ex_d_jpeg.c index a3931bb32e0..f48270a87ba 100644 --- a/HDF5Examples/C/H5FLT/h5ex_d_jpeg.c +++ b/HDF5Examples/C/H5FLT/h5ex_d_jpeg.c @@ -5,7 +5,7 @@ * This file is part of the HDF5 JPEG filter plugin source. The full * * copyright notice, including terms governing use, modification, and * * terms governing use, modification, and redistribution, is contained in * - * the file COPYING, which can be found at the root of the JPEG source code * + * the file LICENSE, which can be found at the root of the JPEG source code * * distribution tree. If you do not have access to this file, you may * * request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ diff --git a/HDF5Examples/C/H5FLT/h5ex_d_lz4.c b/HDF5Examples/C/H5FLT/h5ex_d_lz4.c index 0bcfc876cf3..0369bb668c0 100644 --- a/HDF5Examples/C/H5FLT/h5ex_d_lz4.c +++ b/HDF5Examples/C/H5FLT/h5ex_d_lz4.c @@ -5,7 +5,7 @@ * This file is part of the HDF5 LZ4 filter plugin source. The full * * copyright notice, including terms governing use, modification, and * * terms governing use, modification, and redistribution, is contained in * - * the file COPYING, which can be found at the root of the LZ4 source code * + * the file LICENSE, which can be found at the root of the LZ4 source code * * distribution tree. If you do not have access to this file, you may * * request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ diff --git a/HDF5Examples/C/H5FLT/h5ex_d_lzf.c b/HDF5Examples/C/H5FLT/h5ex_d_lzf.c index a860d67e16c..037999dac86 100644 --- a/HDF5Examples/C/H5FLT/h5ex_d_lzf.c +++ b/HDF5Examples/C/H5FLT/h5ex_d_lzf.c @@ -5,7 +5,7 @@ * This file is part of the HDF5 LZF filter plugin source. The full * * copyright notice, including terms governing use, modification, and * * terms governing use, modification, and redistribution, is contained in * - * the file COPYING, which can be found at the root of the LZF source code * + * the file LICENSE, which can be found at the root of the LZF source code * * distribution tree. If you do not have access to this file, you may * * request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ diff --git a/HDF5Examples/C/H5FLT/h5ex_d_mafisc.c b/HDF5Examples/C/H5FLT/h5ex_d_mafisc.c index 5cee4a07ce0..c0e96e10f83 100644 --- a/HDF5Examples/C/H5FLT/h5ex_d_mafisc.c +++ b/HDF5Examples/C/H5FLT/h5ex_d_mafisc.c @@ -5,7 +5,7 @@ * This file is part of the HDF5 MAFISC filter plugin source. The full * * copyright notice, including terms governing use, modification, and * * terms governing use, modification, and redistribution, is contained in * - * the file COPYING, which can be found at the root of the MAFISC source code * + * the file LICENSE, which can be found at the root of the MAFISC source code * * distribution tree. If you do not have access to this file, you may * * request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ diff --git a/HDF5Examples/C/H5FLT/h5ex_d_zfp.c b/HDF5Examples/C/H5FLT/h5ex_d_zfp.c index dd0a9366da9..7e3e7e2ecbe 100644 --- a/HDF5Examples/C/H5FLT/h5ex_d_zfp.c +++ b/HDF5Examples/C/H5FLT/h5ex_d_zfp.c @@ -5,7 +5,7 @@ * This file is part of the HDF5 ZFP filter plugin source. The full * * copyright notice, including terms governing use, modification, and * * terms governing use, modification, and redistribution, is contained in * - * the file COPYING, which can be found at the root of the ZFP source code * + * the file LICENSE, which can be found at the root of the ZFP source code * * distribution tree. If you do not have access to this file, you may * * request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ diff --git a/HDF5Examples/C/H5FLT/h5ex_d_zstd.c b/HDF5Examples/C/H5FLT/h5ex_d_zstd.c index 28f084d90dd..881c55f826c 100644 --- a/HDF5Examples/C/H5FLT/h5ex_d_zstd.c +++ b/HDF5Examples/C/H5FLT/h5ex_d_zstd.c @@ -5,7 +5,7 @@ * This file is part of the HDF5 ZSTD filter plugin source. The full * * copyright notice, including terms governing use, modification, and * * terms governing use, modification, and redistribution, is contained in * - * the file COPYING, which can be found at the root of the ZSTD source code * + * the file LICENSE, which can be found at the root of the ZSTD source code * * distribution tree. If you do not have access to this file, you may * * request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ diff --git a/HDF5Examples/C/H5G/Makefile.am b/HDF5Examples/C/H5G/Makefile.am index 8ab2b8ac047..cc87d860a6f 100644 --- a/HDF5Examples/C/H5G/Makefile.am +++ b/HDF5Examples/C/H5G/Makefile.am @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/H5G/test-pc.sh b/HDF5Examples/C/H5G/test-pc.sh index 4cff7780fe7..b8af1cffa16 100755 --- a/HDF5Examples/C/H5G/test-pc.sh +++ b/HDF5Examples/C/H5G/test-pc.sh @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/H5G/test.sh.in b/HDF5Examples/C/H5G/test.sh.in index ea05ca3bd2b..a461d66eb68 100755 --- a/HDF5Examples/C/H5G/test.sh.in +++ b/HDF5Examples/C/H5G/test.sh.in @@ -6,7 +6,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/H5PAR/ph5_filtered_writes.c b/HDF5Examples/C/H5PAR/ph5_filtered_writes.c index 34ed2fbb0cf..c631696c82c 100644 --- a/HDF5Examples/C/H5PAR/ph5_filtered_writes.c +++ b/HDF5Examples/C/H5PAR/ph5_filtered_writes.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/H5PAR/ph5_filtered_writes_no_sel.c b/HDF5Examples/C/H5PAR/ph5_filtered_writes_no_sel.c index d4f171ff1f8..280df1c42d6 100644 --- a/HDF5Examples/C/H5PAR/ph5_filtered_writes_no_sel.c +++ b/HDF5Examples/C/H5PAR/ph5_filtered_writes_no_sel.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/H5PAR/ph5_subfiling.c b/HDF5Examples/C/H5PAR/ph5_subfiling.c index 7d7244878b8..b2a40f6612d 100644 --- a/HDF5Examples/C/H5PAR/ph5_subfiling.c +++ b/HDF5Examples/C/H5PAR/ph5_subfiling.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/H5PAR/ph5example.c b/HDF5Examples/C/H5PAR/ph5example.c index 37d5d68ed72..7a694ad933a 100644 --- a/HDF5Examples/C/H5PAR/ph5example.c +++ b/HDF5Examples/C/H5PAR/ph5example.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/H5T/Makefile.am b/HDF5Examples/C/H5T/Makefile.am index bc0d5d5392d..1d08dcb7a45 100644 --- a/HDF5Examples/C/H5T/Makefile.am +++ b/HDF5Examples/C/H5T/Makefile.am @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/H5T/test-pc.sh b/HDF5Examples/C/H5T/test-pc.sh index 69c948759d2..5b43873fb1d 100755 --- a/HDF5Examples/C/H5T/test-pc.sh +++ b/HDF5Examples/C/H5T/test-pc.sh @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/H5T/test.sh.in b/HDF5Examples/C/H5T/test.sh.in index d5c453b5010..7da139cfc20 100755 --- a/HDF5Examples/C/H5T/test.sh.in +++ b/HDF5Examples/C/H5T/test.sh.in @@ -6,7 +6,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/H5VDS/Makefile.am b/HDF5Examples/C/H5VDS/Makefile.am index d9a5116afc7..acc69f8b8b1 100644 --- a/HDF5Examples/C/H5VDS/Makefile.am +++ b/HDF5Examples/C/H5VDS/Makefile.am @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/H5VDS/h5ex_vds-eiger.c b/HDF5Examples/C/H5VDS/h5ex_vds-eiger.c index 8a41de6f269..6bc20ceb2f8 100644 --- a/HDF5Examples/C/H5VDS/h5ex_vds-eiger.c +++ b/HDF5Examples/C/H5VDS/h5ex_vds-eiger.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/H5VDS/h5ex_vds-exc.c b/HDF5Examples/C/H5VDS/h5ex_vds-exc.c index de26911b342..b2525892415 100644 --- a/HDF5Examples/C/H5VDS/h5ex_vds-exc.c +++ b/HDF5Examples/C/H5VDS/h5ex_vds-exc.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/H5VDS/h5ex_vds-exclim.c b/HDF5Examples/C/H5VDS/h5ex_vds-exclim.c index 61b3078cdbc..d498612fd00 100644 --- a/HDF5Examples/C/H5VDS/h5ex_vds-exclim.c +++ b/HDF5Examples/C/H5VDS/h5ex_vds-exclim.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/H5VDS/h5ex_vds-percival-unlim-maxmin.c b/HDF5Examples/C/H5VDS/h5ex_vds-percival-unlim-maxmin.c index 9ca030a4052..82b953c4fbf 100644 --- a/HDF5Examples/C/H5VDS/h5ex_vds-percival-unlim-maxmin.c +++ b/HDF5Examples/C/H5VDS/h5ex_vds-percival-unlim-maxmin.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/H5VDS/h5ex_vds-percival-unlim.c b/HDF5Examples/C/H5VDS/h5ex_vds-percival-unlim.c index 71a8ddaac9a..e205b1463d6 100644 --- a/HDF5Examples/C/H5VDS/h5ex_vds-percival-unlim.c +++ b/HDF5Examples/C/H5VDS/h5ex_vds-percival-unlim.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/H5VDS/h5ex_vds-percival.c b/HDF5Examples/C/H5VDS/h5ex_vds-percival.c index 75e1653da95..45a98919385 100644 --- a/HDF5Examples/C/H5VDS/h5ex_vds-percival.c +++ b/HDF5Examples/C/H5VDS/h5ex_vds-percival.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/H5VDS/h5ex_vds-simpleIO.c b/HDF5Examples/C/H5VDS/h5ex_vds-simpleIO.c index 52be8f5da77..657c6499b63 100644 --- a/HDF5Examples/C/H5VDS/h5ex_vds-simpleIO.c +++ b/HDF5Examples/C/H5VDS/h5ex_vds-simpleIO.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/H5VDS/h5ex_vds.c b/HDF5Examples/C/H5VDS/h5ex_vds.c index 77219e87f03..bace773c8ea 100644 --- a/HDF5Examples/C/H5VDS/h5ex_vds.c +++ b/HDF5Examples/C/H5VDS/h5ex_vds.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/H5VDS/test-pc.sh b/HDF5Examples/C/H5VDS/test-pc.sh index e0ee85eab53..d323473ebee 100644 --- a/HDF5Examples/C/H5VDS/test-pc.sh +++ b/HDF5Examples/C/H5VDS/test-pc.sh @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/H5VDS/test.sh.in b/HDF5Examples/C/H5VDS/test.sh.in index 983ef426d1c..5e2a061996e 100644 --- a/HDF5Examples/C/H5VDS/test.sh.in +++ b/HDF5Examples/C/H5VDS/test.sh.in @@ -6,7 +6,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/Makefile.am b/HDF5Examples/C/Makefile.am index 778f802246c..9a3e8d008e6 100644 --- a/HDF5Examples/C/Makefile.am +++ b/HDF5Examples/C/Makefile.am @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/TUTR/Makefile.am b/HDF5Examples/C/TUTR/Makefile.am index 508664b8773..0135ca51f10 100644 --- a/HDF5Examples/C/TUTR/Makefile.am +++ b/HDF5Examples/C/TUTR/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/TUTR/h5_attribute.c b/HDF5Examples/C/TUTR/h5_attribute.c index 6d3523d5b9e..c8144c63913 100644 --- a/HDF5Examples/C/TUTR/h5_attribute.c +++ b/HDF5Examples/C/TUTR/h5_attribute.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_chunk_read.c b/HDF5Examples/C/TUTR/h5_chunk_read.c index 9e5332e43af..1fb6050c41a 100644 --- a/HDF5Examples/C/TUTR/h5_chunk_read.c +++ b/HDF5Examples/C/TUTR/h5_chunk_read.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_cmprss.c b/HDF5Examples/C/TUTR/h5_cmprss.c index ffd319174d2..17f77caa342 100644 --- a/HDF5Examples/C/TUTR/h5_cmprss.c +++ b/HDF5Examples/C/TUTR/h5_cmprss.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_compound.c b/HDF5Examples/C/TUTR/h5_compound.c index 3ae19613f56..257af6c29db 100644 --- a/HDF5Examples/C/TUTR/h5_compound.c +++ b/HDF5Examples/C/TUTR/h5_compound.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_crtatt.c b/HDF5Examples/C/TUTR/h5_crtatt.c index 8534703feea..f9c4242c237 100644 --- a/HDF5Examples/C/TUTR/h5_crtatt.c +++ b/HDF5Examples/C/TUTR/h5_crtatt.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_crtdat.c b/HDF5Examples/C/TUTR/h5_crtdat.c index d8ac072bba7..69693238d6f 100644 --- a/HDF5Examples/C/TUTR/h5_crtdat.c +++ b/HDF5Examples/C/TUTR/h5_crtdat.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_crtgrp.c b/HDF5Examples/C/TUTR/h5_crtgrp.c index 3517bf3bc03..524135a1917 100644 --- a/HDF5Examples/C/TUTR/h5_crtgrp.c +++ b/HDF5Examples/C/TUTR/h5_crtgrp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_crtgrpar.c b/HDF5Examples/C/TUTR/h5_crtgrpar.c index 1b474299dec..3c3f984e8da 100644 --- a/HDF5Examples/C/TUTR/h5_crtgrpar.c +++ b/HDF5Examples/C/TUTR/h5_crtgrpar.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_crtgrpd.c b/HDF5Examples/C/TUTR/h5_crtgrpd.c index f1750d6e03e..f373a8bbb96 100644 --- a/HDF5Examples/C/TUTR/h5_crtgrpd.c +++ b/HDF5Examples/C/TUTR/h5_crtgrpd.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_debug_trace.c b/HDF5Examples/C/TUTR/h5_debug_trace.c index ebc5c543f3b..cb16d5b5d67 100644 --- a/HDF5Examples/C/TUTR/h5_debug_trace.c +++ b/HDF5Examples/C/TUTR/h5_debug_trace.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_drivers.c b/HDF5Examples/C/TUTR/h5_drivers.c index 1c0ae37a827..b0b9adb009a 100644 --- a/HDF5Examples/C/TUTR/h5_drivers.c +++ b/HDF5Examples/C/TUTR/h5_drivers.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_dtransform.c b/HDF5Examples/C/TUTR/h5_dtransform.c index c93b073465e..a0964167cdd 100644 --- a/HDF5Examples/C/TUTR/h5_dtransform.c +++ b/HDF5Examples/C/TUTR/h5_dtransform.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_elink_unix2win.c b/HDF5Examples/C/TUTR/h5_elink_unix2win.c index 24525ff6f68..6225e8ff5fd 100644 --- a/HDF5Examples/C/TUTR/h5_elink_unix2win.c +++ b/HDF5Examples/C/TUTR/h5_elink_unix2win.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_extend.c b/HDF5Examples/C/TUTR/h5_extend.c index 0dde217db30..65ba0f4f6d3 100644 --- a/HDF5Examples/C/TUTR/h5_extend.c +++ b/HDF5Examples/C/TUTR/h5_extend.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_extend_write.c b/HDF5Examples/C/TUTR/h5_extend_write.c index 6c7afeb9c31..2f21f2a4dbf 100644 --- a/HDF5Examples/C/TUTR/h5_extend_write.c +++ b/HDF5Examples/C/TUTR/h5_extend_write.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_extlink.c b/HDF5Examples/C/TUTR/h5_extlink.c index e1f02cf4cfd..a35172059f8 100644 --- a/HDF5Examples/C/TUTR/h5_extlink.c +++ b/HDF5Examples/C/TUTR/h5_extlink.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_group.c b/HDF5Examples/C/TUTR/h5_group.c index b84fe10d7ea..4e718cdf5ef 100644 --- a/HDF5Examples/C/TUTR/h5_group.c +++ b/HDF5Examples/C/TUTR/h5_group.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_interm_group.c b/HDF5Examples/C/TUTR/h5_interm_group.c index 315e7825e9a..00ffaededa5 100644 --- a/HDF5Examples/C/TUTR/h5_interm_group.c +++ b/HDF5Examples/C/TUTR/h5_interm_group.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_mount.c b/HDF5Examples/C/TUTR/h5_mount.c index 4be0b5a9900..6a592d6044a 100644 --- a/HDF5Examples/C/TUTR/h5_mount.c +++ b/HDF5Examples/C/TUTR/h5_mount.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_rdwt.c b/HDF5Examples/C/TUTR/h5_rdwt.c index 9947f595199..89c35408c69 100644 --- a/HDF5Examples/C/TUTR/h5_rdwt.c +++ b/HDF5Examples/C/TUTR/h5_rdwt.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_read.c b/HDF5Examples/C/TUTR/h5_read.c index ad8e2d7033e..2d89910c9ea 100644 --- a/HDF5Examples/C/TUTR/h5_read.c +++ b/HDF5Examples/C/TUTR/h5_read.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_ref2reg_deprec.c b/HDF5Examples/C/TUTR/h5_ref2reg_deprec.c index a668e4b750c..522d64111a1 100644 --- a/HDF5Examples/C/TUTR/h5_ref2reg_deprec.c +++ b/HDF5Examples/C/TUTR/h5_ref2reg_deprec.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_ref_compat.c b/HDF5Examples/C/TUTR/h5_ref_compat.c index cce755bb429..3a07728dfee 100644 --- a/HDF5Examples/C/TUTR/h5_ref_compat.c +++ b/HDF5Examples/C/TUTR/h5_ref_compat.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_ref_extern.c b/HDF5Examples/C/TUTR/h5_ref_extern.c index 691d2358fb2..35746706d59 100644 --- a/HDF5Examples/C/TUTR/h5_ref_extern.c +++ b/HDF5Examples/C/TUTR/h5_ref_extern.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_reference_deprec.c b/HDF5Examples/C/TUTR/h5_reference_deprec.c index 2f72cdbfeab..d279fd9b943 100644 --- a/HDF5Examples/C/TUTR/h5_reference_deprec.c +++ b/HDF5Examples/C/TUTR/h5_reference_deprec.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_select.c b/HDF5Examples/C/TUTR/h5_select.c index 12ea9518959..69252c78cf5 100644 --- a/HDF5Examples/C/TUTR/h5_select.c +++ b/HDF5Examples/C/TUTR/h5_select.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_shared_mesg.c b/HDF5Examples/C/TUTR/h5_shared_mesg.c index 03a1f8067e7..97c705977fc 100644 --- a/HDF5Examples/C/TUTR/h5_shared_mesg.c +++ b/HDF5Examples/C/TUTR/h5_shared_mesg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_subset.c b/HDF5Examples/C/TUTR/h5_subset.c index 4df20910a41..45c4fde85e7 100644 --- a/HDF5Examples/C/TUTR/h5_subset.c +++ b/HDF5Examples/C/TUTR/h5_subset.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/h5_write.c b/HDF5Examples/C/TUTR/h5_write.c index 2f6de3afcf8..715c9742f12 100644 --- a/HDF5Examples/C/TUTR/h5_write.c +++ b/HDF5Examples/C/TUTR/h5_write.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/C/TUTR/run-all-ex.sh b/HDF5Examples/C/TUTR/run-all-ex.sh index afd4308d17b..250e2b3a3c0 100755 --- a/HDF5Examples/C/TUTR/run-all-ex.sh +++ b/HDF5Examples/C/TUTR/run-all-ex.sh @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/TUTR/run-c-ex.sh.in b/HDF5Examples/C/TUTR/run-c-ex.sh.in index b51c5d607de..a67930b44bc 100644 --- a/HDF5Examples/C/TUTR/run-c-ex.sh.in +++ b/HDF5Examples/C/TUTR/run-c-ex.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/C/TUTR/testh5cc.sh.in b/HDF5Examples/C/TUTR/testh5cc.sh.in index 4b888c1d2a0..c4cda211291 100644 --- a/HDF5Examples/C/TUTR/testh5cc.sh.in +++ b/HDF5Examples/C/TUTR/testh5cc.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/CTestConfig.cmake b/HDF5Examples/CTestConfig.cmake index aef6da8f657..3f5875e59c9 100644 --- a/HDF5Examples/CTestConfig.cmake +++ b/HDF5Examples/CTestConfig.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/CXX/H5D/Makefile.am b/HDF5Examples/CXX/H5D/Makefile.am index b97b5d14cd1..6103485cfaa 100644 --- a/HDF5Examples/CXX/H5D/Makefile.am +++ b/HDF5Examples/CXX/H5D/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/CXX/H5D/chunks.cpp b/HDF5Examples/CXX/H5D/chunks.cpp index cc5d7c9fa65..2b4b09ff050 100644 --- a/HDF5Examples/CXX/H5D/chunks.cpp +++ b/HDF5Examples/CXX/H5D/chunks.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/CXX/H5D/compound.cpp b/HDF5Examples/CXX/H5D/compound.cpp index f9397a9151f..7585c9e3574 100644 --- a/HDF5Examples/CXX/H5D/compound.cpp +++ b/HDF5Examples/CXX/H5D/compound.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/CXX/H5D/create.cpp b/HDF5Examples/CXX/H5D/create.cpp index bd179f34318..1731e4c5383 100644 --- a/HDF5Examples/CXX/H5D/create.cpp +++ b/HDF5Examples/CXX/H5D/create.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/CXX/H5D/extend_ds.cpp b/HDF5Examples/CXX/H5D/extend_ds.cpp index 8449c757da7..093bf259532 100644 --- a/HDF5Examples/CXX/H5D/extend_ds.cpp +++ b/HDF5Examples/CXX/H5D/extend_ds.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/CXX/H5D/h5group.cpp b/HDF5Examples/CXX/H5D/h5group.cpp index 0779aa910c2..2afa5edd6c3 100644 --- a/HDF5Examples/CXX/H5D/h5group.cpp +++ b/HDF5Examples/CXX/H5D/h5group.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/CXX/H5D/readdata.cpp b/HDF5Examples/CXX/H5D/readdata.cpp index bfc03eeed25..a9f7d5db275 100644 --- a/HDF5Examples/CXX/H5D/readdata.cpp +++ b/HDF5Examples/CXX/H5D/readdata.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/CXX/H5D/testh5c++.sh.in b/HDF5Examples/CXX/H5D/testh5c++.sh.in index f3a973cabc9..ef8a1407f45 100644 --- a/HDF5Examples/CXX/H5D/testh5c++.sh.in +++ b/HDF5Examples/CXX/H5D/testh5c++.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/CXX/H5D/writedata.cpp b/HDF5Examples/CXX/H5D/writedata.cpp index 3f9d70b61d6..f446b2f390e 100644 --- a/HDF5Examples/CXX/H5D/writedata.cpp +++ b/HDF5Examples/CXX/H5D/writedata.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/CXX/Makefile.am b/HDF5Examples/CXX/Makefile.am index 1cbae2e1c5e..a0dd701b156 100644 --- a/HDF5Examples/CXX/Makefile.am +++ b/HDF5Examples/CXX/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/CXX/TUTR/Makefile.am b/HDF5Examples/CXX/TUTR/Makefile.am index b97b5d14cd1..6103485cfaa 100644 --- a/HDF5Examples/CXX/TUTR/Makefile.am +++ b/HDF5Examples/CXX/TUTR/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/CXX/TUTR/h5tutr_cmprss.cpp b/HDF5Examples/CXX/TUTR/h5tutr_cmprss.cpp index 6d9c109f4ed..aafd0aa91da 100644 --- a/HDF5Examples/CXX/TUTR/h5tutr_cmprss.cpp +++ b/HDF5Examples/CXX/TUTR/h5tutr_cmprss.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/CXX/TUTR/h5tutr_crtatt.cpp b/HDF5Examples/CXX/TUTR/h5tutr_crtatt.cpp index 0b18de1f1e9..23ce84060d2 100644 --- a/HDF5Examples/CXX/TUTR/h5tutr_crtatt.cpp +++ b/HDF5Examples/CXX/TUTR/h5tutr_crtatt.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/CXX/TUTR/h5tutr_crtdat.cpp b/HDF5Examples/CXX/TUTR/h5tutr_crtdat.cpp index d23675f5f2c..5db56233c89 100644 --- a/HDF5Examples/CXX/TUTR/h5tutr_crtdat.cpp +++ b/HDF5Examples/CXX/TUTR/h5tutr_crtdat.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/CXX/TUTR/h5tutr_crtgrp.cpp b/HDF5Examples/CXX/TUTR/h5tutr_crtgrp.cpp index 5b13dc3b005..1d157f876ca 100644 --- a/HDF5Examples/CXX/TUTR/h5tutr_crtgrp.cpp +++ b/HDF5Examples/CXX/TUTR/h5tutr_crtgrp.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/CXX/TUTR/h5tutr_crtgrpar.cpp b/HDF5Examples/CXX/TUTR/h5tutr_crtgrpar.cpp index a1a74277794..81050d44380 100644 --- a/HDF5Examples/CXX/TUTR/h5tutr_crtgrpar.cpp +++ b/HDF5Examples/CXX/TUTR/h5tutr_crtgrpar.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/CXX/TUTR/h5tutr_crtgrpd.cpp b/HDF5Examples/CXX/TUTR/h5tutr_crtgrpd.cpp index 19bf99d2d29..81d970b9d89 100644 --- a/HDF5Examples/CXX/TUTR/h5tutr_crtgrpd.cpp +++ b/HDF5Examples/CXX/TUTR/h5tutr_crtgrpd.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/CXX/TUTR/h5tutr_extend.cpp b/HDF5Examples/CXX/TUTR/h5tutr_extend.cpp index 53588abc72a..36392b8192b 100644 --- a/HDF5Examples/CXX/TUTR/h5tutr_extend.cpp +++ b/HDF5Examples/CXX/TUTR/h5tutr_extend.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/CXX/TUTR/h5tutr_rdwt.cpp b/HDF5Examples/CXX/TUTR/h5tutr_rdwt.cpp index 3f441099631..b13a782dd05 100644 --- a/HDF5Examples/CXX/TUTR/h5tutr_rdwt.cpp +++ b/HDF5Examples/CXX/TUTR/h5tutr_rdwt.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/CXX/TUTR/h5tutr_subset.cpp b/HDF5Examples/CXX/TUTR/h5tutr_subset.cpp index 1f278f04f87..15ea6fffd7d 100644 --- a/HDF5Examples/CXX/TUTR/h5tutr_subset.cpp +++ b/HDF5Examples/CXX/TUTR/h5tutr_subset.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/CXX/TUTR/testh5c++.sh.in b/HDF5Examples/CXX/TUTR/testh5c++.sh.in index f3a973cabc9..ef8a1407f45 100644 --- a/HDF5Examples/CXX/TUTR/testh5c++.sh.in +++ b/HDF5Examples/CXX/TUTR/testh5c++.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/FORTRAN/H5D/Makefile.am b/HDF5Examples/FORTRAN/H5D/Makefile.am index c76ce8590de..472be0696c4 100644 --- a/HDF5Examples/FORTRAN/H5D/Makefile.am +++ b/HDF5Examples/FORTRAN/H5D/Makefile.am @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/FORTRAN/H5D/test-pc.sh b/HDF5Examples/FORTRAN/H5D/test-pc.sh index 8d77d9782ff..95edf49d52b 100755 --- a/HDF5Examples/FORTRAN/H5D/test-pc.sh +++ b/HDF5Examples/FORTRAN/H5D/test-pc.sh @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/FORTRAN/H5D/test.sh.in b/HDF5Examples/FORTRAN/H5D/test.sh.in index e67eccd5351..40b82854430 100755 --- a/HDF5Examples/FORTRAN/H5D/test.sh.in +++ b/HDF5Examples/FORTRAN/H5D/test.sh.in @@ -6,7 +6,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/FORTRAN/H5G/Makefile.am b/HDF5Examples/FORTRAN/H5G/Makefile.am index cdf1647fcb7..5040378affc 100644 --- a/HDF5Examples/FORTRAN/H5G/Makefile.am +++ b/HDF5Examples/FORTRAN/H5G/Makefile.am @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/FORTRAN/H5G/test-pc.sh b/HDF5Examples/FORTRAN/H5G/test-pc.sh index 29781f3565d..4f04ef3f7ac 100755 --- a/HDF5Examples/FORTRAN/H5G/test-pc.sh +++ b/HDF5Examples/FORTRAN/H5G/test-pc.sh @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/FORTRAN/H5G/test.sh.in b/HDF5Examples/FORTRAN/H5G/test.sh.in index d0906df8b6e..a1b6ef6bf7a 100755 --- a/HDF5Examples/FORTRAN/H5G/test.sh.in +++ b/HDF5Examples/FORTRAN/H5G/test.sh.in @@ -6,7 +6,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/FORTRAN/H5T/Makefile.am b/HDF5Examples/FORTRAN/H5T/Makefile.am index 7d9d96a89b6..00ed8d24f81 100644 --- a/HDF5Examples/FORTRAN/H5T/Makefile.am +++ b/HDF5Examples/FORTRAN/H5T/Makefile.am @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/FORTRAN/H5T/test-pc.sh b/HDF5Examples/FORTRAN/H5T/test-pc.sh index 12163a6f1f4..b8fb2b35b93 100755 --- a/HDF5Examples/FORTRAN/H5T/test-pc.sh +++ b/HDF5Examples/FORTRAN/H5T/test-pc.sh @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/FORTRAN/H5T/test.sh.in b/HDF5Examples/FORTRAN/H5T/test.sh.in index dc1f434923d..8050fbce837 100755 --- a/HDF5Examples/FORTRAN/H5T/test.sh.in +++ b/HDF5Examples/FORTRAN/H5T/test.sh.in @@ -6,7 +6,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/FORTRAN/Makefile.am b/HDF5Examples/FORTRAN/Makefile.am index 778f802246c..9a3e8d008e6 100644 --- a/HDF5Examples/FORTRAN/Makefile.am +++ b/HDF5Examples/FORTRAN/Makefile.am @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/FORTRAN/TUTR/Makefile.am b/HDF5Examples/FORTRAN/TUTR/Makefile.am index e9a0fac041f..227f781cdac 100644 --- a/HDF5Examples/FORTRAN/TUTR/Makefile.am +++ b/HDF5Examples/FORTRAN/TUTR/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/FORTRAN/TUTR/compound.f90 b/HDF5Examples/FORTRAN/TUTR/compound.f90 index 47cbaa521f4..996b532c832 100644 --- a/HDF5Examples/FORTRAN/TUTR/compound.f90 +++ b/HDF5Examples/FORTRAN/TUTR/compound.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/compound_complex_fortran2003.f90 b/HDF5Examples/FORTRAN/TUTR/compound_complex_fortran2003.f90 index c45c778a409..a3b666cbbcd 100644 --- a/HDF5Examples/FORTRAN/TUTR/compound_complex_fortran2003.f90 +++ b/HDF5Examples/FORTRAN/TUTR/compound_complex_fortran2003.f90 @@ -5,7 +5,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/compound_fortran2003.f90 b/HDF5Examples/FORTRAN/TUTR/compound_fortran2003.f90 index 50261f77af7..600b26ae3a7 100644 --- a/HDF5Examples/FORTRAN/TUTR/compound_fortran2003.f90 +++ b/HDF5Examples/FORTRAN/TUTR/compound_fortran2003.f90 @@ -5,7 +5,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/h5_cmprss.f90 b/HDF5Examples/FORTRAN/TUTR/h5_cmprss.f90 index 45c0d71b8a2..d4cbd036e99 100644 --- a/HDF5Examples/FORTRAN/TUTR/h5_cmprss.f90 +++ b/HDF5Examples/FORTRAN/TUTR/h5_cmprss.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/h5_crtatt.f90 b/HDF5Examples/FORTRAN/TUTR/h5_crtatt.f90 index c8d313a40f6..ab145ac5b87 100644 --- a/HDF5Examples/FORTRAN/TUTR/h5_crtatt.f90 +++ b/HDF5Examples/FORTRAN/TUTR/h5_crtatt.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/h5_crtdat.f90 b/HDF5Examples/FORTRAN/TUTR/h5_crtdat.f90 index 6840bc7a72f..d27d4f5c702 100644 --- a/HDF5Examples/FORTRAN/TUTR/h5_crtdat.f90 +++ b/HDF5Examples/FORTRAN/TUTR/h5_crtdat.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/h5_crtgrp.f90 b/HDF5Examples/FORTRAN/TUTR/h5_crtgrp.f90 index 4c63caae063..05e3ec19eb6 100644 --- a/HDF5Examples/FORTRAN/TUTR/h5_crtgrp.f90 +++ b/HDF5Examples/FORTRAN/TUTR/h5_crtgrp.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/h5_crtgrpar.f90 b/HDF5Examples/FORTRAN/TUTR/h5_crtgrpar.f90 index e6ece17cfeb..73ad24cbb51 100644 --- a/HDF5Examples/FORTRAN/TUTR/h5_crtgrpar.f90 +++ b/HDF5Examples/FORTRAN/TUTR/h5_crtgrpar.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/h5_crtgrpd.f90 b/HDF5Examples/FORTRAN/TUTR/h5_crtgrpd.f90 index 7d754cdad22..e5c8977af93 100644 --- a/HDF5Examples/FORTRAN/TUTR/h5_crtgrpd.f90 +++ b/HDF5Examples/FORTRAN/TUTR/h5_crtgrpd.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/h5_extend.f90 b/HDF5Examples/FORTRAN/TUTR/h5_extend.f90 index 47f767ee638..41d342d545f 100644 --- a/HDF5Examples/FORTRAN/TUTR/h5_extend.f90 +++ b/HDF5Examples/FORTRAN/TUTR/h5_extend.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/h5_rdwt.f90 b/HDF5Examples/FORTRAN/TUTR/h5_rdwt.f90 index 69678823c64..b9df071bcdb 100644 --- a/HDF5Examples/FORTRAN/TUTR/h5_rdwt.f90 +++ b/HDF5Examples/FORTRAN/TUTR/h5_rdwt.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/h5_subset.f90 b/HDF5Examples/FORTRAN/TUTR/h5_subset.f90 index d5564ad5c8e..6d47420730c 100644 --- a/HDF5Examples/FORTRAN/TUTR/h5_subset.f90 +++ b/HDF5Examples/FORTRAN/TUTR/h5_subset.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/hyperslab.f90 b/HDF5Examples/FORTRAN/TUTR/hyperslab.f90 index 46d345d8f45..25eb1d1ad1b 100644 --- a/HDF5Examples/FORTRAN/TUTR/hyperslab.f90 +++ b/HDF5Examples/FORTRAN/TUTR/hyperslab.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/mountexample.f90 b/HDF5Examples/FORTRAN/TUTR/mountexample.f90 index b74364b4499..58cbd70bb6a 100644 --- a/HDF5Examples/FORTRAN/TUTR/mountexample.f90 +++ b/HDF5Examples/FORTRAN/TUTR/mountexample.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/nested_derived_type.f90 b/HDF5Examples/FORTRAN/TUTR/nested_derived_type.f90 index 1b8168fcf56..0941b428ecc 100644 --- a/HDF5Examples/FORTRAN/TUTR/nested_derived_type.f90 +++ b/HDF5Examples/FORTRAN/TUTR/nested_derived_type.f90 @@ -5,7 +5,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/refobjexample.f90 b/HDF5Examples/FORTRAN/TUTR/refobjexample.f90 index a8314402f99..729524accea 100644 --- a/HDF5Examples/FORTRAN/TUTR/refobjexample.f90 +++ b/HDF5Examples/FORTRAN/TUTR/refobjexample.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/refregexample.f90 b/HDF5Examples/FORTRAN/TUTR/refregexample.f90 index 7e9616f4ad8..fe5adbff556 100644 --- a/HDF5Examples/FORTRAN/TUTR/refregexample.f90 +++ b/HDF5Examples/FORTRAN/TUTR/refregexample.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/run-fortran-ex.sh.in b/HDF5Examples/FORTRAN/TUTR/run-fortran-ex.sh.in index d5411155e66..5a9c0e43c47 100644 --- a/HDF5Examples/FORTRAN/TUTR/run-fortran-ex.sh.in +++ b/HDF5Examples/FORTRAN/TUTR/run-fortran-ex.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/FORTRAN/TUTR/rwdset_fortran2003.f90 b/HDF5Examples/FORTRAN/TUTR/rwdset_fortran2003.f90 index e7853ab6f2b..294bd3ea4c2 100644 --- a/HDF5Examples/FORTRAN/TUTR/rwdset_fortran2003.f90 +++ b/HDF5Examples/FORTRAN/TUTR/rwdset_fortran2003.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/selectele.f90 b/HDF5Examples/FORTRAN/TUTR/selectele.f90 index 4c375a849c8..6982fb28ed1 100644 --- a/HDF5Examples/FORTRAN/TUTR/selectele.f90 +++ b/HDF5Examples/FORTRAN/TUTR/selectele.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/HDF5Examples/FORTRAN/TUTR/testh5fc.sh.in b/HDF5Examples/FORTRAN/TUTR/testh5fc.sh.in index f8f3706a4e7..7b265eea7d9 100644 --- a/HDF5Examples/FORTRAN/TUTR/testh5fc.sh.in +++ b/HDF5Examples/FORTRAN/TUTR/testh5fc.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_Alloc.java b/HDF5Examples/JAVA/H5D/H5Ex_D_Alloc.java index 09bb1804c8a..0264c944903 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_Alloc.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_Alloc.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_Checksum.java b/HDF5Examples/JAVA/H5D/H5Ex_D_Checksum.java index f4716ad3ecb..42e10b21116 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_Checksum.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_Checksum.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_Chunk.java b/HDF5Examples/JAVA/H5D/H5Ex_D_Chunk.java index 6ca26088be2..de5ff3e4fd4 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_Chunk.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_Chunk.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_Compact.java b/HDF5Examples/JAVA/H5D/H5Ex_D_Compact.java index cd70926e7db..c6243b29fd3 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_Compact.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_Compact.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_External.java b/HDF5Examples/JAVA/H5D/H5Ex_D_External.java index ebccc7a603b..8eefbafcff4 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_External.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_External.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_FillValue.java b/HDF5Examples/JAVA/H5D/H5Ex_D_FillValue.java index 84de8443f1c..c062320a075 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_FillValue.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_FillValue.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_Gzip.java b/HDF5Examples/JAVA/H5D/H5Ex_D_Gzip.java index da910154c54..f91c5ea2efe 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_Gzip.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_Gzip.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_Hyperslab.java b/HDF5Examples/JAVA/H5D/H5Ex_D_Hyperslab.java index 3803f1fa815..cbaee4c7fdd 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_Hyperslab.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_Hyperslab.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_Nbit.java b/HDF5Examples/JAVA/H5D/H5Ex_D_Nbit.java index e26894f46d8..c58f3c28a1e 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_Nbit.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_Nbit.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_ReadWrite.java b/HDF5Examples/JAVA/H5D/H5Ex_D_ReadWrite.java index f850252bffb..73d8547ca87 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_ReadWrite.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_ReadWrite.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_Shuffle.java b/HDF5Examples/JAVA/H5D/H5Ex_D_Shuffle.java index 13f5eeda3e8..d77bf259988 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_Shuffle.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_Shuffle.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_Sofloat.java b/HDF5Examples/JAVA/H5D/H5Ex_D_Sofloat.java index 17f6e3042f8..84fec74c469 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_Sofloat.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_Sofloat.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_Soint.java b/HDF5Examples/JAVA/H5D/H5Ex_D_Soint.java index 5691a8c2f23..80cf9f5afa0 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_Soint.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_Soint.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_Szip.java b/HDF5Examples/JAVA/H5D/H5Ex_D_Szip.java index 158df2c2cc6..a40ca484d73 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_Szip.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_Szip.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_Transform.java b/HDF5Examples/JAVA/H5D/H5Ex_D_Transform.java index 9ad7e791052..c576d91518a 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_Transform.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_Transform.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_UnlimitedAdd.java b/HDF5Examples/JAVA/H5D/H5Ex_D_UnlimitedAdd.java index 13b929591ea..853d56536c5 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_UnlimitedAdd.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_UnlimitedAdd.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_UnlimitedGzip.java b/HDF5Examples/JAVA/H5D/H5Ex_D_UnlimitedGzip.java index d15bbf8a101..66a9f853893 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_UnlimitedGzip.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_UnlimitedGzip.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/H5Ex_D_UnlimitedMod.java b/HDF5Examples/JAVA/H5D/H5Ex_D_UnlimitedMod.java index 3adc116b6b1..d453096f51b 100644 --- a/HDF5Examples/JAVA/H5D/H5Ex_D_UnlimitedMod.java +++ b/HDF5Examples/JAVA/H5D/H5Ex_D_UnlimitedMod.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5D/JavaDatasetExample.sh.in b/HDF5Examples/JAVA/H5D/JavaDatasetExample.sh.in index c2699a357f3..1969766be17 100644 --- a/HDF5Examples/JAVA/H5D/JavaDatasetExample.sh.in +++ b/HDF5Examples/JAVA/H5D/JavaDatasetExample.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/JAVA/H5D/Makefile.am b/HDF5Examples/JAVA/H5D/Makefile.am index abcf64b5b83..7fbcea697a4 100644 --- a/HDF5Examples/JAVA/H5D/Makefile.am +++ b/HDF5Examples/JAVA/H5D/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/JAVA/H5G/110/H5Ex_G_Intermediate.java b/HDF5Examples/JAVA/H5G/110/H5Ex_G_Intermediate.java index cf6d1b42319..1e8987330c3 100644 --- a/HDF5Examples/JAVA/H5G/110/H5Ex_G_Intermediate.java +++ b/HDF5Examples/JAVA/H5G/110/H5Ex_G_Intermediate.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5G/110/H5Ex_G_Iterate.java b/HDF5Examples/JAVA/H5G/110/H5Ex_G_Iterate.java index 9359483b066..77f69c6cd84 100644 --- a/HDF5Examples/JAVA/H5G/110/H5Ex_G_Iterate.java +++ b/HDF5Examples/JAVA/H5G/110/H5Ex_G_Iterate.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5G/110/H5Ex_G_Traverse.java b/HDF5Examples/JAVA/H5G/110/H5Ex_G_Traverse.java index 0ef0e3945bd..62dc20ef869 100644 --- a/HDF5Examples/JAVA/H5G/110/H5Ex_G_Traverse.java +++ b/HDF5Examples/JAVA/H5G/110/H5Ex_G_Traverse.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5G/110/H5Ex_G_Visit.java b/HDF5Examples/JAVA/H5G/110/H5Ex_G_Visit.java index 8e81ff37b2b..441fb3f6d25 100644 --- a/HDF5Examples/JAVA/H5G/110/H5Ex_G_Visit.java +++ b/HDF5Examples/JAVA/H5G/110/H5Ex_G_Visit.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5G/H5Ex_G_Compact.java b/HDF5Examples/JAVA/H5G/H5Ex_G_Compact.java index 865040ea603..119c204e72e 100644 --- a/HDF5Examples/JAVA/H5G/H5Ex_G_Compact.java +++ b/HDF5Examples/JAVA/H5G/H5Ex_G_Compact.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5G/H5Ex_G_Corder.java b/HDF5Examples/JAVA/H5G/H5Ex_G_Corder.java index 23d18404e6a..a92b6a4d65c 100644 --- a/HDF5Examples/JAVA/H5G/H5Ex_G_Corder.java +++ b/HDF5Examples/JAVA/H5G/H5Ex_G_Corder.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5G/H5Ex_G_Create.java b/HDF5Examples/JAVA/H5G/H5Ex_G_Create.java index b842af6622d..0e28fc3d4ea 100644 --- a/HDF5Examples/JAVA/H5G/H5Ex_G_Create.java +++ b/HDF5Examples/JAVA/H5G/H5Ex_G_Create.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5G/H5Ex_G_Intermediate.java b/HDF5Examples/JAVA/H5G/H5Ex_G_Intermediate.java index 54617255d44..5aaebc2af2c 100644 --- a/HDF5Examples/JAVA/H5G/H5Ex_G_Intermediate.java +++ b/HDF5Examples/JAVA/H5G/H5Ex_G_Intermediate.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5G/H5Ex_G_Iterate.java b/HDF5Examples/JAVA/H5G/H5Ex_G_Iterate.java index 86d9eb48996..5a82eff55d9 100644 --- a/HDF5Examples/JAVA/H5G/H5Ex_G_Iterate.java +++ b/HDF5Examples/JAVA/H5G/H5Ex_G_Iterate.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5G/H5Ex_G_Phase.java b/HDF5Examples/JAVA/H5G/H5Ex_G_Phase.java index b21fc09e89f..4d2345118dd 100644 --- a/HDF5Examples/JAVA/H5G/H5Ex_G_Phase.java +++ b/HDF5Examples/JAVA/H5G/H5Ex_G_Phase.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5G/H5Ex_G_Traverse.java b/HDF5Examples/JAVA/H5G/H5Ex_G_Traverse.java index ba1955b5693..6a976e15157 100644 --- a/HDF5Examples/JAVA/H5G/H5Ex_G_Traverse.java +++ b/HDF5Examples/JAVA/H5G/H5Ex_G_Traverse.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5G/H5Ex_G_Visit.java b/HDF5Examples/JAVA/H5G/H5Ex_G_Visit.java index 7d37c591d04..d7ecd54bd33 100644 --- a/HDF5Examples/JAVA/H5G/H5Ex_G_Visit.java +++ b/HDF5Examples/JAVA/H5G/H5Ex_G_Visit.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5G/JavaGroupExample.sh.in b/HDF5Examples/JAVA/H5G/JavaGroupExample.sh.in index 933f35ece16..a7d7765757a 100644 --- a/HDF5Examples/JAVA/H5G/JavaGroupExample.sh.in +++ b/HDF5Examples/JAVA/H5G/JavaGroupExample.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/JAVA/H5G/Makefile.am b/HDF5Examples/JAVA/H5G/Makefile.am index d3b59cf3a8e..650dfca7217 100644 --- a/HDF5Examples/JAVA/H5G/Makefile.am +++ b/HDF5Examples/JAVA/H5G/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/JAVA/H5T/110/H5Ex_T_ObjectReference.java b/HDF5Examples/JAVA/H5T/110/H5Ex_T_ObjectReference.java index 0e147d8383d..0174fd91401 100644 --- a/HDF5Examples/JAVA/H5T/110/H5Ex_T_ObjectReference.java +++ b/HDF5Examples/JAVA/H5T/110/H5Ex_T_ObjectReference.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/110/H5Ex_T_ObjectReferenceAttribute.java b/HDF5Examples/JAVA/H5T/110/H5Ex_T_ObjectReferenceAttribute.java index 9818dbaa8a4..0673dddab39 100644 --- a/HDF5Examples/JAVA/H5T/110/H5Ex_T_ObjectReferenceAttribute.java +++ b/HDF5Examples/JAVA/H5T/110/H5Ex_T_ObjectReferenceAttribute.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_Array.java b/HDF5Examples/JAVA/H5T/H5Ex_T_Array.java index 489367babf9..ed1197dccba 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_Array.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_Array.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_ArrayAttribute.java b/HDF5Examples/JAVA/H5T/H5Ex_T_ArrayAttribute.java index 9a2aca5ff98..b6d9d02fe64 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_ArrayAttribute.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_ArrayAttribute.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_Bit.java b/HDF5Examples/JAVA/H5T/H5Ex_T_Bit.java index 54a467eb6f3..ef786be02be 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_Bit.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_Bit.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_BitAttribute.java b/HDF5Examples/JAVA/H5T/H5Ex_T_BitAttribute.java index 5be1b914f12..1958ee3ed07 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_BitAttribute.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_BitAttribute.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_Commit.java b/HDF5Examples/JAVA/H5T/H5Ex_T_Commit.java index 379522cd5d2..efeba28be37 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_Commit.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_Commit.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_Compound.java b/HDF5Examples/JAVA/H5T/H5Ex_T_Compound.java index 5bccd641127..8bb3089d89a 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_Compound.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_Compound.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_CompoundAttribute.java b/HDF5Examples/JAVA/H5T/H5Ex_T_CompoundAttribute.java index 86933ae6684..c67a36e1bca 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_CompoundAttribute.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_CompoundAttribute.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_Float.java b/HDF5Examples/JAVA/H5T/H5Ex_T_Float.java index e062588a265..1c71181e224 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_Float.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_Float.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_FloatAttribute.java b/HDF5Examples/JAVA/H5T/H5Ex_T_FloatAttribute.java index ffb8467ebdf..777b5f689f8 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_FloatAttribute.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_FloatAttribute.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_Integer.java b/HDF5Examples/JAVA/H5T/H5Ex_T_Integer.java index afae2b07c8d..06ce6561fbb 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_Integer.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_Integer.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_IntegerAttribute.java b/HDF5Examples/JAVA/H5T/H5Ex_T_IntegerAttribute.java index be4a878aac9..d597eb790d8 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_IntegerAttribute.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_IntegerAttribute.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_ObjectReference.java b/HDF5Examples/JAVA/H5T/H5Ex_T_ObjectReference.java index 2b61794e80e..4b3888e5545 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_ObjectReference.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_ObjectReference.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_ObjectReferenceAttribute.java b/HDF5Examples/JAVA/H5T/H5Ex_T_ObjectReferenceAttribute.java index d2117bd4c11..1f8744d7e26 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_ObjectReferenceAttribute.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_ObjectReferenceAttribute.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_Opaque.java b/HDF5Examples/JAVA/H5T/H5Ex_T_Opaque.java index c9628d685c9..aca76ea07be 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_Opaque.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_Opaque.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_OpaqueAttribute.java b/HDF5Examples/JAVA/H5T/H5Ex_T_OpaqueAttribute.java index 02f7bd5c865..bd19d8ad8e7 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_OpaqueAttribute.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_OpaqueAttribute.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_RegionReference.java b/HDF5Examples/JAVA/H5T/H5Ex_T_RegionReference.java index 0c7f6abab1e..9d82541749f 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_RegionReference.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_RegionReference.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_RegionReferenceAttribute.java b/HDF5Examples/JAVA/H5T/H5Ex_T_RegionReferenceAttribute.java index f09f15f2064..495816401e8 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_RegionReferenceAttribute.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_RegionReferenceAttribute.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_String.java b/HDF5Examples/JAVA/H5T/H5Ex_T_String.java index fa164646d91..8827913fb75 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_String.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_String.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_StringAttribute.java b/HDF5Examples/JAVA/H5T/H5Ex_T_StringAttribute.java index 62f4aa0c778..9c13ab29909 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_StringAttribute.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_StringAttribute.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_VLString.java b/HDF5Examples/JAVA/H5T/H5Ex_T_VLString.java index d4d74e7c1f5..9adcf0b37f6 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_VLString.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_VLString.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/H5T/JavaDatatypeExample.sh.in b/HDF5Examples/JAVA/H5T/JavaDatatypeExample.sh.in index 7683798b880..32fdb4871b3 100644 --- a/HDF5Examples/JAVA/H5T/JavaDatatypeExample.sh.in +++ b/HDF5Examples/JAVA/H5T/JavaDatatypeExample.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/JAVA/H5T/Makefile.am b/HDF5Examples/JAVA/H5T/Makefile.am index 2e744ab220f..b8a220dfc9f 100644 --- a/HDF5Examples/JAVA/H5T/Makefile.am +++ b/HDF5Examples/JAVA/H5T/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/JAVA/Makefile.am b/HDF5Examples/JAVA/Makefile.am index 691c81ca621..f9cb0e4687c 100644 --- a/HDF5Examples/JAVA/Makefile.am +++ b/HDF5Examples/JAVA/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/JAVA/TUTR/110/HDF5FileStructure.java b/HDF5Examples/JAVA/TUTR/110/HDF5FileStructure.java index 326d94924cf..8bc54267a03 100644 --- a/HDF5Examples/JAVA/TUTR/110/HDF5FileStructure.java +++ b/HDF5Examples/JAVA/TUTR/110/HDF5FileStructure.java @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/TUTR/HDF5AttributeCreate.java b/HDF5Examples/JAVA/TUTR/HDF5AttributeCreate.java index faa241898ec..f6b0be3dcd4 100644 --- a/HDF5Examples/JAVA/TUTR/HDF5AttributeCreate.java +++ b/HDF5Examples/JAVA/TUTR/HDF5AttributeCreate.java @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/TUTR/HDF5DatasetCreate.java b/HDF5Examples/JAVA/TUTR/HDF5DatasetCreate.java index 05fea5f1e6f..b6cac9fa494 100644 --- a/HDF5Examples/JAVA/TUTR/HDF5DatasetCreate.java +++ b/HDF5Examples/JAVA/TUTR/HDF5DatasetCreate.java @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/TUTR/HDF5DatasetRead.java b/HDF5Examples/JAVA/TUTR/HDF5DatasetRead.java index e0771a8badf..da56041d133 100644 --- a/HDF5Examples/JAVA/TUTR/HDF5DatasetRead.java +++ b/HDF5Examples/JAVA/TUTR/HDF5DatasetRead.java @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/TUTR/HDF5FileCreate.java b/HDF5Examples/JAVA/TUTR/HDF5FileCreate.java index fbfc2473f2d..64935a0ef21 100644 --- a/HDF5Examples/JAVA/TUTR/HDF5FileCreate.java +++ b/HDF5Examples/JAVA/TUTR/HDF5FileCreate.java @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/TUTR/HDF5FileStructure.java b/HDF5Examples/JAVA/TUTR/HDF5FileStructure.java index 1370340be1b..b70a8d99044 100644 --- a/HDF5Examples/JAVA/TUTR/HDF5FileStructure.java +++ b/HDF5Examples/JAVA/TUTR/HDF5FileStructure.java @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/TUTR/HDF5GroupAbsoluteRelativeCreate.java b/HDF5Examples/JAVA/TUTR/HDF5GroupAbsoluteRelativeCreate.java index 9061c31c44f..3cdffde6b73 100644 --- a/HDF5Examples/JAVA/TUTR/HDF5GroupAbsoluteRelativeCreate.java +++ b/HDF5Examples/JAVA/TUTR/HDF5GroupAbsoluteRelativeCreate.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/TUTR/HDF5GroupCreate.java b/HDF5Examples/JAVA/TUTR/HDF5GroupCreate.java index 4a31c8f05e0..28b5d832e33 100644 --- a/HDF5Examples/JAVA/TUTR/HDF5GroupCreate.java +++ b/HDF5Examples/JAVA/TUTR/HDF5GroupCreate.java @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/TUTR/HDF5GroupDatasetCreate.java b/HDF5Examples/JAVA/TUTR/HDF5GroupDatasetCreate.java index b89cd9c5039..95147fa346e 100644 --- a/HDF5Examples/JAVA/TUTR/HDF5GroupDatasetCreate.java +++ b/HDF5Examples/JAVA/TUTR/HDF5GroupDatasetCreate.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/TUTR/HDF5SubsetSelect.java b/HDF5Examples/JAVA/TUTR/HDF5SubsetSelect.java index e302cd18a0d..dda51d71bc8 100644 --- a/HDF5Examples/JAVA/TUTR/HDF5SubsetSelect.java +++ b/HDF5Examples/JAVA/TUTR/HDF5SubsetSelect.java @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/HDF5Examples/JAVA/TUTR/Makefile.am b/HDF5Examples/JAVA/TUTR/Makefile.am index fedb82f9d19..d68f5998c31 100644 --- a/HDF5Examples/JAVA/TUTR/Makefile.am +++ b/HDF5Examples/JAVA/TUTR/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/JAVA/TUTR/runExample.sh.in b/HDF5Examples/JAVA/TUTR/runExample.sh.in index 709613d1590..d5038a981c3 100644 --- a/HDF5Examples/JAVA/TUTR/runExample.sh.in +++ b/HDF5Examples/JAVA/TUTR/runExample.sh.in @@ -6,7 +6,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/Makefile.am b/HDF5Examples/Makefile.am index d8019c9558c..a3f09b2aafe 100644 --- a/HDF5Examples/Makefile.am +++ b/HDF5Examples/Makefile.am @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/config/cmake/HDFExampleMacros.cmake b/HDF5Examples/config/cmake/HDFExampleMacros.cmake index dd2c46fba67..b4a5b36b1de 100644 --- a/HDF5Examples/config/cmake/HDFExampleMacros.cmake +++ b/HDF5Examples/config/cmake/HDFExampleMacros.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/config/cmake/HDFMacros.cmake b/HDF5Examples/config/cmake/HDFMacros.cmake index b9ef2df03a7..a2d0fbbb53d 100644 --- a/HDF5Examples/config/cmake/HDFMacros.cmake +++ b/HDF5Examples/config/cmake/HDFMacros.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/config/cmake/grepTest.cmake b/HDF5Examples/config/cmake/grepTest.cmake index 4031a1bde03..07791c652a5 100644 --- a/HDF5Examples/config/cmake/grepTest.cmake +++ b/HDF5Examples/config/cmake/grepTest.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/config/cmake/jrunTest.cmake b/HDF5Examples/config/cmake/jrunTest.cmake index d7d83d4f709..95b2648dc48 100644 --- a/HDF5Examples/config/cmake/jrunTest.cmake +++ b/HDF5Examples/config/cmake/jrunTest.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/config/cmake/runTest.cmake b/HDF5Examples/config/cmake/runTest.cmake index cc433b1e518..07b2110eba8 100644 --- a/HDF5Examples/config/cmake/runTest.cmake +++ b/HDF5Examples/config/cmake/runTest.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/HDF5Examples/configure.ac b/HDF5Examples/configure.ac index babfdecc624..30141afc402 100644 --- a/HDF5Examples/configure.ac +++ b/HDF5Examples/configure.ac @@ -7,7 +7,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/COPYING b/LICENSE similarity index 96% rename from COPYING rename to LICENSE index 9bd04025250..38061fb7854 100644 --- a/COPYING +++ b/LICENSE @@ -46,10 +46,9 @@ works thereof, in binary and source code form. ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- -Limited portions of HDF5 were developed by Lawrence Berkeley National +Limited portions of HDF5 1.12.0 were developed by Lawrence Berkeley National Laboratory (LBNL). LBNL's Copyright Notice and Licensing Terms can be -found here: COPYING_LBNL_HDF5 file in this directory or at -https://raw.githubusercontent.com/hdfgroup/hdf5/develop/COPYING_LBNL_HDF5. +found in the LICENSE_LBNL_HDF5 file in this directory. ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- diff --git a/COPYING_LBNL_HDF5 b/LICENSE_LBNL_HDF5 similarity index 98% rename from COPYING_LBNL_HDF5 rename to LICENSE_LBNL_HDF5 index ebc00df1b0c..bac90424d0d 100644 --- a/COPYING_LBNL_HDF5 +++ b/LICENSE_LBNL_HDF5 @@ -1,3 +1,5 @@ +See the LICENSE file for an explanation of why this file exists. + **************************** *** Copyright Notice *** Hierarchical Data Format 5 (HDF5) v1.12.0 Copyright (c) 2020, HDF Group and The diff --git a/Makefile.am b/Makefile.am index 4805b91f7ab..7b02f879491 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/Makefile.dist b/Makefile.dist index 5ae99040d34..ccf25384f47 100644 --- a/Makefile.dist +++ b/Makefile.dist @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/README.md b/README.md index e5c4d917305..ab51d912acc 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ HDF5 version 1.17.0 currently under development [![HDF5 VFD build status](https://img.shields.io/github/actions/workflow/status/HDFGroup/hdf5/vfd.yml?branch=develop&label=HDF5-VFD)](https://github.com/HDFGroup/hdf5/actions/workflows/vfd.yml?query=branch%3Adevelop) [![1.14 cmake build status](https://img.shields.io/github/actions/workflow/status/HDFGroup/hdf5/cmake.yml?branch=hdf5_1_14&label=HDF5%201.14%20CMake%20CI)](https://github.com/HDFGroup/hdf5/actions/workflows/cmake.yml?query=branch%3Ahdf5_1_14) [![1.14 autotools build status](https://img.shields.io/github/actions/workflow/status/HDFGroup/hdf5/autotools.yml?branch=hdf5_1_14&label=HDF5%201.14%20Autotools%20CI)](https://github.com/HDFGroup/hdf5/actions/workflows/autotools.yml?query=branch%3Ahdf5_1_14) -[![BSD](https://img.shields.io/badge/License-BSD-blue.svg)](https://github.com/HDFGroup/hdf5/blob/develop/COPYING) +[![BSD](https://img.shields.io/badge/License-BSD-blue.svg)](https://github.com/HDFGroup/hdf5/blob/develop/LICENSE) [HPC configure/build/test results](https://my.cdash.org/index.php?project=HDF5) diff --git a/UserMacros.cmake b/UserMacros.cmake index c9162236a8a..822d330f360 100644 --- a/UserMacros.cmake +++ b/UserMacros.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/acsite.m4 b/acsite.m4 index 1782033dc84..54ded2cce53 100644 --- a/acsite.m4 +++ b/acsite.m4 @@ -6,7 +6,7 @@ dnl All rights reserved. dnl dnl This file is part of HDF5. The full HDF5 copyright notice, including dnl terms governing use, modification, and redistribution, is contained in -dnl the COPYING file, which can be found at the root of the source code +dnl the LICENSE file, which can be found at the root of the source code dnl dnl distribution tree, or in https://www.hdfgroup.org/licenses. dnl dnl If you do not have access to either file, you may request a copy from dnl dnl help@hdfgroup.org. diff --git a/autogen.sh b/autogen.sh index 31d117cf8ed..1c7d6fb5a26 100755 --- a/autogen.sh +++ b/autogen.sh @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/Makefile.am b/bin/Makefile.am index 96a4969ab01..3f10bef4fc4 100644 --- a/bin/Makefile.am +++ b/bin/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/buildhdf5 b/bin/buildhdf5 index 8dfb82115e8..4b4dec0909b 100755 --- a/bin/buildhdf5 +++ b/bin/buildhdf5 @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/checkapi b/bin/checkapi index 619f93394e4..63a711ce9b2 100755 --- a/bin/checkapi +++ b/bin/checkapi @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/chkcopyright b/bin/chkcopyright index 34649277267..ac509b7fe0b 100755 --- a/bin/chkcopyright +++ b/bin/chkcopyright @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. @@ -109,7 +109,7 @@ BUILDCOPYRIGHT() * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * @@ -122,7 +122,7 @@ EOF ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * @@ -135,7 +135,7 @@ EOF * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * @@ -148,7 +148,7 @@ EOF # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. @@ -161,7 +161,7 @@ EOF ## ## This file is part of HDF5. The full HDF5 copyright notice, including ## terms governing use, modification, and redistribution, is contained in -## the COPYING file, which can be found at the root of the source code +## the LICENSE file, which can be found at the root of the source code ## distribution tree, or in https://www.hdfgroup.org/licenses. ## If you do not have access to either file, you may request a copy from ## help@hdfgroup.org. @@ -174,7 +174,7 @@ EOF @REM @REM This file is part of HDF5. The full HDF5 copyright notice, including @REM terms governing use, modification, and redistribution, is contained in -@REM the COPYING file, which can be found at the root of the source code +@REM the LICENSE file, which can be found at the root of the source code @REM distribution tree, or in https://www.hdfgroup.org/licenses. @REM If you do not have access to either file, you may request a copy from @REM help@hdfgroup.org. @@ -187,7 +187,7 @@ dnl All rights reserved. dnl dnl This file is part of HDF5. The full HDF5 copyright notice, including dnl terms governing use, modification, and redistribution, is contained in -dnl the COPYING file, which can be found at the root of the source code +dnl the LICENSE file, which can be found at the root of the source code dnl distribution tree, or in https://www.hdfgroup.org/licenses. dnl If you do not have access to either file, you may request a copy from dnl help@hdfgroup.org. diff --git a/bin/debug-ohdr b/bin/debug-ohdr index 1106af3d6a2..5cf90fe63ba 100755 --- a/bin/debug-ohdr +++ b/bin/debug-ohdr @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/genparser b/bin/genparser index 3e113739447..cb200619fa5 100755 --- a/bin/genparser +++ b/bin/genparser @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/h5cc.in b/bin/h5cc.in index 3e6f818ed60..737431b6882 100644 --- a/bin/h5cc.in +++ b/bin/h5cc.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/h5redeploy.in b/bin/h5redeploy.in index d73cca71eb7..f4f518af6f1 100644 --- a/bin/h5redeploy.in +++ b/bin/h5redeploy.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/h5vers b/bin/h5vers index 129ad1bf526..8eaac1140ff 100755 --- a/bin/h5vers +++ b/bin/h5vers @@ -11,7 +11,7 @@ use strict; # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/iostats b/bin/iostats index d8a8933470a..93321082b45 100755 --- a/bin/iostats +++ b/bin/iostats @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/make_err b/bin/make_err index 58722a4fd82..51ab22df07b 100755 --- a/bin/make_err +++ b/bin/make_err @@ -9,7 +9,7 @@ use warnings; # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. @@ -33,7 +33,7 @@ sub print_copyright ($) { print $fh " * *\n"; print $fh " * This file is part of HDF5. The full HDF5 copyright notice, including *\n"; print $fh " * terms governing use, modification, and redistribution, is contained in *\n"; - print $fh " * the COPYING file, which can be found at the root of the source code *\n"; + print $fh " * the LICENSE file, which can be found at the root of the source code *\n"; print $fh " * distribution tree, or in https://www.hdfgroup.org/licenses. *\n"; print $fh " * If you do not have access to either file, you may request a copy from *\n"; print $fh " * help\@hdfgroup.org. *\n"; diff --git a/bin/make_overflow b/bin/make_overflow index 1cb5104901a..65b17687a61 100755 --- a/bin/make_overflow +++ b/bin/make_overflow @@ -14,7 +14,7 @@ my @ctypes = ( () ); # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. @@ -62,7 +62,7 @@ sub print_copyright ($) { print $fh " * *\n"; print $fh " * This file is part of HDF5. The full HDF5 copyright notice, including *\n"; print $fh " * terms governing use, modification, and redistribution, is contained in *\n"; - print $fh " * the COPYING file, which can be found at the root of the source code *\n"; + print $fh " * the LICENSE file, which can be found at the root of the source code *\n"; print $fh " * distribution tree, or in https://www.hdfgroup.org/licenses. *\n"; print $fh " * If you do not have access to either file, you may request a copy from *\n"; print $fh " * help\@hdfgroup.org. *\n"; diff --git a/bin/make_vers b/bin/make_vers index 0fc5fb91ab3..fe1cc08cf57 100755 --- a/bin/make_vers +++ b/bin/make_vers @@ -23,7 +23,7 @@ $indent = 2; # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. @@ -47,7 +47,7 @@ sub print_copyright ($) { print $fh " * *\n"; print $fh " * This file is part of HDF5. The full HDF5 copyright notice, including *\n"; print $fh " * terms governing use, modification, and redistribution, is contained in *\n"; - print $fh " * the COPYING file, which can be found at the root of the source code *\n"; + print $fh " * the LICENSE file, which can be found at the root of the source code *\n"; print $fh " * distribution tree, or in https://www.hdfgroup.org/licenses. *\n"; print $fh " * If you do not have access to either file, you may request a copy from *\n"; print $fh " * help\@hdfgroup.org. *\n"; diff --git a/bin/output_filter.sh b/bin/output_filter.sh index 1b7175c9185..a2ec6a1f2bb 100644 --- a/bin/output_filter.sh +++ b/bin/output_filter.sh @@ -3,7 +3,7 @@ ## ## This file is part of HDF5. The full HDF5 copyright notice, including ## terms governing use, modification, and redistribution, is contained in -## the COPYING file, which can be found at the root of the source code +## the LICENSE file, which can be found at the root of the source code ## distribution tree, or in https://www.hdfgroup.org/licenses. ## If you do not have access to either file, you may request a copy from ## help@hdfgroup.org. diff --git a/bin/pkgscrpts/h5rmflags b/bin/pkgscrpts/h5rmflags index 39c4281c2a4..75c49841a8e 100755 --- a/bin/pkgscrpts/h5rmflags +++ b/bin/pkgscrpts/h5rmflags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/pkgscrpts/makeHDF5BinaryTarfiles.pl b/bin/pkgscrpts/makeHDF5BinaryTarfiles.pl index 820403f4d8d..2ba5345ddc0 100755 --- a/bin/pkgscrpts/makeHDF5BinaryTarfiles.pl +++ b/bin/pkgscrpts/makeHDF5BinaryTarfiles.pl @@ -6,7 +6,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/release b/bin/release index f72390cda08..6190631558e 100755 --- a/bin/release +++ b/bin/release @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/restore.sh b/bin/restore.sh index 85ebd1c77a7..3709fda6c03 100755 --- a/bin/restore.sh +++ b/bin/restore.sh @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/runbkgprog b/bin/runbkgprog index 945f5f3aa34..7bd605a8cb2 100755 --- a/bin/runbkgprog +++ b/bin/runbkgprog @@ -9,7 +9,7 @@ $indent=4; # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/switch_maint_mode b/bin/switch_maint_mode index 7f894ffff87..ece35acbf36 100755 --- a/bin/switch_maint_mode +++ b/bin/switch_maint_mode @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/trace b/bin/trace index 4585adcf70f..fd344a25a2b 100755 --- a/bin/trace +++ b/bin/trace @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/bin/warnhist b/bin/warnhist index b77202f9504..230a03ac09e 100755 --- a/bin/warnhist +++ b/bin/warnhist @@ -8,7 +8,7 @@ use warnings; # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/c++/Makefile.am b/c++/Makefile.am index ef7c285a5ee..8189b296e3f 100644 --- a/c++/Makefile.am +++ b/c++/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/c++/src/H5AbstractDs.cpp b/c++/src/H5AbstractDs.cpp index ab3fabaeb69..97b6194113c 100644 --- a/c++/src/H5AbstractDs.cpp +++ b/c++/src/H5AbstractDs.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5AbstractDs.h b/c++/src/H5AbstractDs.h index d831bd65791..d5b154d7078 100644 --- a/c++/src/H5AbstractDs.h +++ b/c++/src/H5AbstractDs.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5Alltypes.h b/c++/src/H5Alltypes.h index b18add8d1fb..813824458a2 100644 --- a/c++/src/H5Alltypes.h +++ b/c++/src/H5Alltypes.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5ArrayType.cpp b/c++/src/H5ArrayType.cpp index 3a2da2bf39f..8e7adcbfbe3 100644 --- a/c++/src/H5ArrayType.cpp +++ b/c++/src/H5ArrayType.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5ArrayType.h b/c++/src/H5ArrayType.h index e02a3a2a0e8..6fc865e659a 100644 --- a/c++/src/H5ArrayType.h +++ b/c++/src/H5ArrayType.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5AtomType.cpp b/c++/src/H5AtomType.cpp index f2e037a98bc..b18cc22576f 100644 --- a/c++/src/H5AtomType.cpp +++ b/c++/src/H5AtomType.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5AtomType.h b/c++/src/H5AtomType.h index 327604ddd56..4c942859093 100644 --- a/c++/src/H5AtomType.h +++ b/c++/src/H5AtomType.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5Attribute.cpp b/c++/src/H5Attribute.cpp index a79d7c3a024..5324e7da2a7 100644 --- a/c++/src/H5Attribute.cpp +++ b/c++/src/H5Attribute.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5Attribute.h b/c++/src/H5Attribute.h index 970110274b4..b50195bc172 100644 --- a/c++/src/H5Attribute.h +++ b/c++/src/H5Attribute.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5Classes.h b/c++/src/H5Classes.h index b4a0670d468..373e0106c8d 100644 --- a/c++/src/H5Classes.h +++ b/c++/src/H5Classes.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5CommonFG.cpp b/c++/src/H5CommonFG.cpp index d26c83fade0..7fe299f8f72 100644 --- a/c++/src/H5CommonFG.cpp +++ b/c++/src/H5CommonFG.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5CommonFG.h b/c++/src/H5CommonFG.h index 6eb01db3bd1..93468b8340a 100644 --- a/c++/src/H5CommonFG.h +++ b/c++/src/H5CommonFG.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5CompType.cpp b/c++/src/H5CompType.cpp index 70bbe66556e..b369d3ae8cf 100644 --- a/c++/src/H5CompType.cpp +++ b/c++/src/H5CompType.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5CompType.h b/c++/src/H5CompType.h index a642b0d5143..11033bd21ec 100644 --- a/c++/src/H5CompType.h +++ b/c++/src/H5CompType.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5Cpp.h b/c++/src/H5Cpp.h index 34fdef2032d..8a23fb61108 100644 --- a/c++/src/H5Cpp.h +++ b/c++/src/H5Cpp.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5CppDoc.h b/c++/src/H5CppDoc.h index 37bd8a5cd07..dc902962c06 100644 --- a/c++/src/H5CppDoc.h +++ b/c++/src/H5CppDoc.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5DaccProp.cpp b/c++/src/H5DaccProp.cpp index ba4c8ef60b0..e91c3f8c1a6 100644 --- a/c++/src/H5DaccProp.cpp +++ b/c++/src/H5DaccProp.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5DaccProp.h b/c++/src/H5DaccProp.h index 3f101f3aa70..69a55cfc4d8 100644 --- a/c++/src/H5DaccProp.h +++ b/c++/src/H5DaccProp.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5DataSet.cpp b/c++/src/H5DataSet.cpp index 40b40f2f21e..d4839bb1e2d 100644 --- a/c++/src/H5DataSet.cpp +++ b/c++/src/H5DataSet.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5DataSet.h b/c++/src/H5DataSet.h index 399235086f6..ea2a59ab0c3 100644 --- a/c++/src/H5DataSet.h +++ b/c++/src/H5DataSet.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5DataSpace.cpp b/c++/src/H5DataSpace.cpp index 403f9ece67b..b59be4b3cd1 100644 --- a/c++/src/H5DataSpace.cpp +++ b/c++/src/H5DataSpace.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5DataSpace.h b/c++/src/H5DataSpace.h index 136a8ea63b8..21510cf8b22 100644 --- a/c++/src/H5DataSpace.h +++ b/c++/src/H5DataSpace.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5DataType.cpp b/c++/src/H5DataType.cpp index 98b7920b0a0..e864ed54bb9 100644 --- a/c++/src/H5DataType.cpp +++ b/c++/src/H5DataType.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5DataType.h b/c++/src/H5DataType.h index 7cc1d315793..240c018f855 100644 --- a/c++/src/H5DataType.h +++ b/c++/src/H5DataType.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5DcreatProp.cpp b/c++/src/H5DcreatProp.cpp index bbe00e744f8..54ccea00bcb 100644 --- a/c++/src/H5DcreatProp.cpp +++ b/c++/src/H5DcreatProp.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5DcreatProp.h b/c++/src/H5DcreatProp.h index 1621375eda3..9637ca6917b 100644 --- a/c++/src/H5DcreatProp.h +++ b/c++/src/H5DcreatProp.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5DxferProp.cpp b/c++/src/H5DxferProp.cpp index 1b9d6510580..d3ba22c395e 100644 --- a/c++/src/H5DxferProp.cpp +++ b/c++/src/H5DxferProp.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5DxferProp.h b/c++/src/H5DxferProp.h index b86202da254..8f0f5a965a0 100644 --- a/c++/src/H5DxferProp.h +++ b/c++/src/H5DxferProp.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5EnumType.cpp b/c++/src/H5EnumType.cpp index 569e56abf47..978d22d7d86 100644 --- a/c++/src/H5EnumType.cpp +++ b/c++/src/H5EnumType.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5EnumType.h b/c++/src/H5EnumType.h index a5096fcf905..5a3258dd9cc 100644 --- a/c++/src/H5EnumType.h +++ b/c++/src/H5EnumType.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5Exception.cpp b/c++/src/H5Exception.cpp index 906bd27e594..8dabaee41b7 100644 --- a/c++/src/H5Exception.cpp +++ b/c++/src/H5Exception.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5Exception.h b/c++/src/H5Exception.h index 6bf51ef893b..12bfe319c63 100644 --- a/c++/src/H5Exception.h +++ b/c++/src/H5Exception.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5FaccProp.cpp b/c++/src/H5FaccProp.cpp index 12af96db666..82a8d550f02 100644 --- a/c++/src/H5FaccProp.cpp +++ b/c++/src/H5FaccProp.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5FaccProp.h b/c++/src/H5FaccProp.h index 67394f1c3a5..1ebba76f330 100644 --- a/c++/src/H5FaccProp.h +++ b/c++/src/H5FaccProp.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5FcreatProp.cpp b/c++/src/H5FcreatProp.cpp index 66e4ceb886b..733bf4c3bc2 100644 --- a/c++/src/H5FcreatProp.cpp +++ b/c++/src/H5FcreatProp.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5FcreatProp.h b/c++/src/H5FcreatProp.h index 76c2ae5b952..0094c354464 100644 --- a/c++/src/H5FcreatProp.h +++ b/c++/src/H5FcreatProp.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5File.cpp b/c++/src/H5File.cpp index 9c390f9c73f..ab01e4d12c4 100644 --- a/c++/src/H5File.cpp +++ b/c++/src/H5File.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5File.h b/c++/src/H5File.h index 617adaadb4d..aebe0a6913d 100644 --- a/c++/src/H5File.h +++ b/c++/src/H5File.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5FloatType.cpp b/c++/src/H5FloatType.cpp index 41ee8a850bc..9e22dc351fd 100644 --- a/c++/src/H5FloatType.cpp +++ b/c++/src/H5FloatType.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5FloatType.h b/c++/src/H5FloatType.h index b804892b0a8..e0b9ec570f8 100644 --- a/c++/src/H5FloatType.h +++ b/c++/src/H5FloatType.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5Group.cpp b/c++/src/H5Group.cpp index 48358b3a5cb..1dc6f9b6494 100644 --- a/c++/src/H5Group.cpp +++ b/c++/src/H5Group.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5Group.h b/c++/src/H5Group.h index 9c89dd1599a..ea7719f8f82 100644 --- a/c++/src/H5Group.h +++ b/c++/src/H5Group.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5IdComponent.cpp b/c++/src/H5IdComponent.cpp index 0d15aac7fb9..c4ce6097e76 100644 --- a/c++/src/H5IdComponent.cpp +++ b/c++/src/H5IdComponent.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5IdComponent.h b/c++/src/H5IdComponent.h index 2fef96f4137..d54efdbdd83 100644 --- a/c++/src/H5IdComponent.h +++ b/c++/src/H5IdComponent.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5Include.h b/c++/src/H5Include.h index a55cbe4f4ce..2cfa1a1ac7b 100644 --- a/c++/src/H5Include.h +++ b/c++/src/H5Include.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5IntType.cpp b/c++/src/H5IntType.cpp index 7c8b7d36ff9..6717aa29a8a 100644 --- a/c++/src/H5IntType.cpp +++ b/c++/src/H5IntType.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5IntType.h b/c++/src/H5IntType.h index 1ca0ab147d2..99b728453d0 100644 --- a/c++/src/H5IntType.h +++ b/c++/src/H5IntType.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5LaccProp.cpp b/c++/src/H5LaccProp.cpp index 7a66c13d323..4134ab84be3 100644 --- a/c++/src/H5LaccProp.cpp +++ b/c++/src/H5LaccProp.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5LaccProp.h b/c++/src/H5LaccProp.h index 6f4b9190f06..8ac3d968f8c 100644 --- a/c++/src/H5LaccProp.h +++ b/c++/src/H5LaccProp.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5LcreatProp.cpp b/c++/src/H5LcreatProp.cpp index 0dbb0b275c0..1002221a383 100644 --- a/c++/src/H5LcreatProp.cpp +++ b/c++/src/H5LcreatProp.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5LcreatProp.h b/c++/src/H5LcreatProp.h index 272f260b253..060a4a3ce92 100644 --- a/c++/src/H5LcreatProp.h +++ b/c++/src/H5LcreatProp.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5Library.cpp b/c++/src/H5Library.cpp index c16bd819268..c336ba5ee0f 100644 --- a/c++/src/H5Library.cpp +++ b/c++/src/H5Library.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5Library.h b/c++/src/H5Library.h index 10e5536bc14..408b525c74d 100644 --- a/c++/src/H5Library.h +++ b/c++/src/H5Library.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5Location.cpp b/c++/src/H5Location.cpp index 87eac679238..069e96c4e12 100644 --- a/c++/src/H5Location.cpp +++ b/c++/src/H5Location.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5Location.h b/c++/src/H5Location.h index f10a00531f0..02099a981ac 100644 --- a/c++/src/H5Location.h +++ b/c++/src/H5Location.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5Object.cpp b/c++/src/H5Object.cpp index 54114378e85..901d750bf03 100644 --- a/c++/src/H5Object.cpp +++ b/c++/src/H5Object.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5Object.h b/c++/src/H5Object.h index b2905842ad7..f2e6f5bb375 100644 --- a/c++/src/H5Object.h +++ b/c++/src/H5Object.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5OcreatProp.cpp b/c++/src/H5OcreatProp.cpp index 0f1da1c5a8d..832e1db28ac 100644 --- a/c++/src/H5OcreatProp.cpp +++ b/c++/src/H5OcreatProp.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5OcreatProp.h b/c++/src/H5OcreatProp.h index fbe399197fe..d96f2896819 100644 --- a/c++/src/H5OcreatProp.h +++ b/c++/src/H5OcreatProp.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5PredType.cpp b/c++/src/H5PredType.cpp index 0338a01e016..8574f2ea6ea 100644 --- a/c++/src/H5PredType.cpp +++ b/c++/src/H5PredType.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5PredType.h b/c++/src/H5PredType.h index 85b6e96fb0a..49d7cc8d946 100644 --- a/c++/src/H5PredType.h +++ b/c++/src/H5PredType.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5PropList.cpp b/c++/src/H5PropList.cpp index a116494a401..2c13b25205c 100644 --- a/c++/src/H5PropList.cpp +++ b/c++/src/H5PropList.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5PropList.h b/c++/src/H5PropList.h index beef474f65e..d61fdf7cae8 100644 --- a/c++/src/H5PropList.h +++ b/c++/src/H5PropList.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5StrType.cpp b/c++/src/H5StrType.cpp index 1b45814f4e7..2692877529f 100644 --- a/c++/src/H5StrType.cpp +++ b/c++/src/H5StrType.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5StrType.h b/c++/src/H5StrType.h index 0f51e759aaf..76cd72b3a14 100644 --- a/c++/src/H5StrType.h +++ b/c++/src/H5StrType.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5VarLenType.cpp b/c++/src/H5VarLenType.cpp index 49f2cbdd22b..c6ce391de03 100644 --- a/c++/src/H5VarLenType.cpp +++ b/c++/src/H5VarLenType.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/H5VarLenType.h b/c++/src/H5VarLenType.h index d7f0ff1aefe..7a4cbd2ebdc 100644 --- a/c++/src/H5VarLenType.h +++ b/c++/src/H5VarLenType.h @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/src/Makefile.am b/c++/src/Makefile.am index 41815cd2b26..e94e46619c7 100644 --- a/c++/src/Makefile.am +++ b/c++/src/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/c++/src/h5c++.in b/c++/src/h5c++.in index c031c9d69ca..3ef6a3e0ae8 100644 --- a/c++/src/h5c++.in +++ b/c++/src/h5c++.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/c++/test/CMakeTests.cmake b/c++/test/CMakeTests.cmake index 224b09974d0..ce82c6cbd2a 100644 --- a/c++/test/CMakeTests.cmake +++ b/c++/test/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/c++/test/CMakeVFDTests.cmake b/c++/test/CMakeVFDTests.cmake index 52f8069f390..8fd75c693f4 100644 --- a/c++/test/CMakeVFDTests.cmake +++ b/c++/test/CMakeVFDTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/c++/test/H5srcdir_str.h.in b/c++/test/H5srcdir_str.h.in index 55280cd641c..3e161381abb 100644 --- a/c++/test/H5srcdir_str.h.in +++ b/c++/test/H5srcdir_str.h.in @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/Makefile.am b/c++/test/Makefile.am index d513d954748..59bf76fd74f 100644 --- a/c++/test/Makefile.am +++ b/c++/test/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/c++/test/dsets.cpp b/c++/test/dsets.cpp index 625e97f0d72..d61389b0842 100644 --- a/c++/test/dsets.cpp +++ b/c++/test/dsets.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/h5cpputil.cpp b/c++/test/h5cpputil.cpp index 933aa7da264..bb16e8cbeca 100644 --- a/c++/test/h5cpputil.cpp +++ b/c++/test/h5cpputil.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/h5cpputil.h b/c++/test/h5cpputil.h index 6c8560d5c8d..9288bd1e96a 100644 --- a/c++/test/h5cpputil.h +++ b/c++/test/h5cpputil.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/tarray.cpp b/c++/test/tarray.cpp index 3ee94d24f59..9be2e5c85c8 100644 --- a/c++/test/tarray.cpp +++ b/c++/test/tarray.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/tattr.cpp b/c++/test/tattr.cpp index a01833802a4..750e8bb6a7e 100644 --- a/c++/test/tattr.cpp +++ b/c++/test/tattr.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/tcompound.cpp b/c++/test/tcompound.cpp index dada2c075a8..29d3120bc53 100644 --- a/c++/test/tcompound.cpp +++ b/c++/test/tcompound.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/tdspl.cpp b/c++/test/tdspl.cpp index 90b558fdbbf..fc261db1505 100644 --- a/c++/test/tdspl.cpp +++ b/c++/test/tdspl.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/testhdf5.cpp b/c++/test/testhdf5.cpp index 1df73baaf19..434183126ce 100644 --- a/c++/test/testhdf5.cpp +++ b/c++/test/testhdf5.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/tfile.cpp b/c++/test/tfile.cpp index 94742f3c447..3f1f8115239 100644 --- a/c++/test/tfile.cpp +++ b/c++/test/tfile.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/tfilter.cpp b/c++/test/tfilter.cpp index d66a7b5894c..9d426c1e2e0 100644 --- a/c++/test/tfilter.cpp +++ b/c++/test/tfilter.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/th5s.cpp b/c++/test/th5s.cpp index 34fb32d4cea..8b18ec011fe 100644 --- a/c++/test/th5s.cpp +++ b/c++/test/th5s.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/titerate.cpp b/c++/test/titerate.cpp index 2f989ae40f0..593ba507973 100644 --- a/c++/test/titerate.cpp +++ b/c++/test/titerate.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/tlinks.cpp b/c++/test/tlinks.cpp index 355a4282651..ec6f8eee210 100644 --- a/c++/test/tlinks.cpp +++ b/c++/test/tlinks.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/tobject.cpp b/c++/test/tobject.cpp index a7ac635de07..adf7c58abde 100644 --- a/c++/test/tobject.cpp +++ b/c++/test/tobject.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/trefer.cpp b/c++/test/trefer.cpp index 627330f4660..ecc6de6c972 100644 --- a/c++/test/trefer.cpp +++ b/c++/test/trefer.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/ttypes.cpp b/c++/test/ttypes.cpp index c504635b6ca..1959331c59e 100644 --- a/c++/test/ttypes.cpp +++ b/c++/test/ttypes.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/c++/test/tvlstr.cpp b/c++/test/tvlstr.cpp index ba39620334a..db616cd0571 100644 --- a/c++/test/tvlstr.cpp +++ b/c++/test/tvlstr.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/config/BlankForm b/config/BlankForm index e297cc385bc..d7669b7999a 100644 --- a/config/BlankForm +++ b/config/BlankForm @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/Makefile.am.blank b/config/Makefile.am.blank index 18afb605b1c..f94cacd9d35 100644 --- a/config/Makefile.am.blank +++ b/config/Makefile.am.blank @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/apple b/config/apple index 39ed454a11f..d3f69bccb55 100644 --- a/config/apple +++ b/config/apple @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cce-fflags b/config/cce-fflags index 813d4c75cea..b15f3e5dc79 100644 --- a/config/cce-fflags +++ b/config/cce-fflags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cce-flags b/config/cce-flags index 0903dec920c..f07495008a6 100644 --- a/config/cce-flags +++ b/config/cce-flags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/clang-cxxflags b/config/clang-cxxflags index 2dcd0cbcf81..61a0c1f7e26 100644 --- a/config/clang-cxxflags +++ b/config/clang-cxxflags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/clang-fflags b/config/clang-fflags index 786c729ca91..7820aa698c9 100644 --- a/config/clang-fflags +++ b/config/clang-fflags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/clang-flags b/config/clang-flags index 585cb290035..1454629455f 100644 --- a/config/clang-flags +++ b/config/clang-flags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/CTestCustom.cmake b/config/cmake/CTestCustom.cmake index b688421f328..f29416ac833 100644 --- a/config/cmake/CTestCustom.cmake +++ b/config/cmake/CTestCustom.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/ConfigureChecks.cmake b/config/cmake/ConfigureChecks.cmake index c13334c5f8c..e0b02618658 100644 --- a/config/cmake/ConfigureChecks.cmake +++ b/config/cmake/ConfigureChecks.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/ConversionTests.c b/config/cmake/ConversionTests.c index b5d2af2ff38..21cd645b997 100644 --- a/config/cmake/ConversionTests.c +++ b/config/cmake/ConversionTests.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/config/cmake/FindMFU.cmake b/config/cmake/FindMFU.cmake index 8bbc870f5f8..d1fd41ad2ed 100644 --- a/config/cmake/FindMFU.cmake +++ b/config/cmake/FindMFU.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/GetTimeOfDayTest.cpp b/config/cmake/GetTimeOfDayTest.cpp index b35efa5c39a..7a33d79ea1d 100644 --- a/config/cmake/GetTimeOfDayTest.cpp +++ b/config/cmake/GetTimeOfDayTest.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/config/cmake/H5pubconf.h.in b/config/cmake/H5pubconf.h.in index 9f0d0bc1505..910bd129227 100644 --- a/config/cmake/H5pubconf.h.in +++ b/config/cmake/H5pubconf.h.in @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/config/cmake/HDF5DeveloperBuild.cmake b/config/cmake/HDF5DeveloperBuild.cmake index 07c9acab301..0bd5b527eb0 100644 --- a/config/cmake/HDF5DeveloperBuild.cmake +++ b/config/cmake/HDF5DeveloperBuild.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/HDF5Macros.cmake b/config/cmake/HDF5Macros.cmake index e17d6bc46b2..e1bb13315f5 100644 --- a/config/cmake/HDF5Macros.cmake +++ b/config/cmake/HDF5Macros.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/HDF5PluginMacros.cmake b/config/cmake/HDF5PluginMacros.cmake index b361917bcf2..3cb03ea2699 100644 --- a/config/cmake/HDF5PluginMacros.cmake +++ b/config/cmake/HDF5PluginMacros.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/HDF5UseFortran.cmake b/config/cmake/HDF5UseFortran.cmake index ce33c7036e3..9a5d8c76709 100644 --- a/config/cmake/HDF5UseFortran.cmake +++ b/config/cmake/HDF5UseFortran.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/HDFCXXCompilerFlags.cmake b/config/cmake/HDFCXXCompilerFlags.cmake index 5f977f534f6..b6c14efd931 100644 --- a/config/cmake/HDFCXXCompilerFlags.cmake +++ b/config/cmake/HDFCXXCompilerFlags.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/HDFCompilerFlags.cmake b/config/cmake/HDFCompilerFlags.cmake index 2953d0e08ec..78aa3c37027 100644 --- a/config/cmake/HDFCompilerFlags.cmake +++ b/config/cmake/HDFCompilerFlags.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/HDFFortranCompilerFlags.cmake b/config/cmake/HDFFortranCompilerFlags.cmake index 8ac3f490cc3..f238c7e82cc 100644 --- a/config/cmake/HDFFortranCompilerFlags.cmake +++ b/config/cmake/HDFFortranCompilerFlags.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/HDFLibMacros.cmake b/config/cmake/HDFLibMacros.cmake index 09f40680b72..1907931bb34 100644 --- a/config/cmake/HDFLibMacros.cmake +++ b/config/cmake/HDFLibMacros.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/HDFMacros.cmake b/config/cmake/HDFMacros.cmake index 3be3e6a6a60..a8ce9bb2c5b 100644 --- a/config/cmake/HDFMacros.cmake +++ b/config/cmake/HDFMacros.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/HDFTests.c b/config/cmake/HDFTests.c index ae646ee051b..f55555c6138 100644 --- a/config/cmake/HDFTests.c +++ b/config/cmake/HDFTests.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/config/cmake/HDFUseFortran.cmake b/config/cmake/HDFUseFortran.cmake index 44d3e7cfd2b..50b1dc48294 100644 --- a/config/cmake/HDFUseFortran.cmake +++ b/config/cmake/HDFUseFortran.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/README.md.cmake.in b/config/cmake/README.md.cmake.in index 40294c15255..82cb082c444 100644 --- a/config/cmake/README.md.cmake.in +++ b/config/cmake/README.md.cmake.in @@ -13,7 +13,7 @@ It was built with the following options: The contents of this directory are: - COPYING - Copyright notice + LICENSE - Copyright notice README.md - This file @HDF5_PACKAGE_NAME@-@HDF5_PACKAGE_VERSION@-@BINARY_SYSTEM_NAME@.@BINARY_INSTALL_ENDING@ - HDF5 Install Package OR diff --git a/config/cmake/UserMacros/Windows_MT.cmake b/config/cmake/UserMacros/Windows_MT.cmake index 351c99108e7..a6e451bef6c 100644 --- a/config/cmake/UserMacros/Windows_MT.cmake +++ b/config/cmake/UserMacros/Windows_MT.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/cacheinit.cmake b/config/cmake/cacheinit.cmake index 75936d1d298..2206b94f39d 100644 --- a/config/cmake/cacheinit.cmake +++ b/config/cmake/cacheinit.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/examples/CTestScript.cmake b/config/cmake/examples/CTestScript.cmake index 5e7259d7cf9..7f50564b454 100644 --- a/config/cmake/examples/CTestScript.cmake +++ b/config/cmake/examples/CTestScript.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/examples/HDF5_Examples.cmake.in b/config/cmake/examples/HDF5_Examples.cmake.in index c929df7b802..bef5aae8e89 100644 --- a/config/cmake/examples/HDF5_Examples.cmake.in +++ b/config/cmake/examples/HDF5_Examples.cmake.in @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/examples/HDF5_Examples_options.cmake b/config/cmake/examples/HDF5_Examples_options.cmake index 2fe145c4704..9cf2c0663bf 100644 --- a/config/cmake/examples/HDF5_Examples_options.cmake +++ b/config/cmake/examples/HDF5_Examples_options.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/fileCompareTest.cmake b/config/cmake/fileCompareTest.cmake index 5cd56ee06e1..3483b15cefd 100644 --- a/config/cmake/fileCompareTest.cmake +++ b/config/cmake/fileCompareTest.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/grepTest.cmake b/config/cmake/grepTest.cmake index 44aa1975510..05014142ec3 100644 --- a/config/cmake/grepTest.cmake +++ b/config/cmake/grepTest.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/hdf5-config-version.cmake.in b/config/cmake/hdf5-config-version.cmake.in index 20ce630351a..b1b71cd64e9 100644 --- a/config/cmake/hdf5-config-version.cmake.in +++ b/config/cmake/hdf5-config-version.cmake.in @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/hdf5-config.cmake.in b/config/cmake/hdf5-config.cmake.in index 325492ca9ec..5ac036d26f0 100644 --- a/config/cmake/hdf5-config.cmake.in +++ b/config/cmake/hdf5-config.cmake.in @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/jrunTest.cmake b/config/cmake/jrunTest.cmake index d7d83d4f709..95b2648dc48 100644 --- a/config/cmake/jrunTest.cmake +++ b/config/cmake/jrunTest.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/libh5cc.in b/config/cmake/libh5cc.in index 9bdce64f7df..2608f49423a 100644 --- a/config/cmake/libh5cc.in +++ b/config/cmake/libh5cc.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/mccacheinit.cmake b/config/cmake/mccacheinit.cmake index caa1fe034fe..cc2c604afe2 100644 --- a/config/cmake/mccacheinit.cmake +++ b/config/cmake/mccacheinit.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/runTest.cmake b/config/cmake/runTest.cmake index 8eed074ecb6..3ab9e940d28 100644 --- a/config/cmake/runTest.cmake +++ b/config/cmake/runTest.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/scripts/CTestScript.cmake b/config/cmake/scripts/CTestScript.cmake index 45ca77b73d9..7861c5d69f0 100644 --- a/config/cmake/scripts/CTestScript.cmake +++ b/config/cmake/scripts/CTestScript.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/scripts/HDF5config.cmake b/config/cmake/scripts/HDF5config.cmake index 485871c5816..874207a30a8 100644 --- a/config/cmake/scripts/HDF5config.cmake +++ b/config/cmake/scripts/HDF5config.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/scripts/HDF5options.cmake b/config/cmake/scripts/HDF5options.cmake index 179c91f59e9..aedbaa19242 100644 --- a/config/cmake/scripts/HDF5options.cmake +++ b/config/cmake/scripts/HDF5options.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/scripts/HPC/bsub-HDF5options.cmake b/config/cmake/scripts/HPC/bsub-HDF5options.cmake index 37fdb8b66d2..167915dcd66 100644 --- a/config/cmake/scripts/HPC/bsub-HDF5options.cmake +++ b/config/cmake/scripts/HPC/bsub-HDF5options.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/scripts/HPC/qsub-HDF5options.cmake b/config/cmake/scripts/HPC/qsub-HDF5options.cmake index fe335467c61..8c716be46a9 100644 --- a/config/cmake/scripts/HPC/qsub-HDF5options.cmake +++ b/config/cmake/scripts/HPC/qsub-HDF5options.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/scripts/HPC/raybsub-HDF5options.cmake b/config/cmake/scripts/HPC/raybsub-HDF5options.cmake index 89ce4f06b5d..60010584131 100644 --- a/config/cmake/scripts/HPC/raybsub-HDF5options.cmake +++ b/config/cmake/scripts/HPC/raybsub-HDF5options.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/scripts/HPC/sbatch-HDF5options.cmake b/config/cmake/scripts/HPC/sbatch-HDF5options.cmake index ddf4858170a..2c8f89f6c2f 100644 --- a/config/cmake/scripts/HPC/sbatch-HDF5options.cmake +++ b/config/cmake/scripts/HPC/sbatch-HDF5options.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/userblockTest.cmake b/config/cmake/userblockTest.cmake index dde66c9edb7..48a9ee2c55a 100644 --- a/config/cmake/userblockTest.cmake +++ b/config/cmake/userblockTest.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/vfdTest.cmake b/config/cmake/vfdTest.cmake index fadc67f94ca..7ab39d1b0d6 100644 --- a/config/cmake/vfdTest.cmake +++ b/config/cmake/vfdTest.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/cmake/volTest.cmake b/config/cmake/volTest.cmake index a47c3e94f34..9a29e1a6390 100644 --- a/config/cmake/volTest.cmake +++ b/config/cmake/volTest.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/commence.am b/config/commence.am index 11db41f133e..392356b59e0 100644 --- a/config/commence.am +++ b/config/commence.am @@ -6,7 +6,7 @@ ## ## This file is part of HDF5. The full HDF5 copyright notice, including ## terms governing use, modification, and redistribution, is contained in -## the COPYING file, which can be found at the root of the source code +## the LICENSE file, which can be found at the root of the source code ## distribution tree, or in https://www.hdfgroup.org/licenses. ## If you do not have access to either file, you may request a copy from ## help@hdfgroup.org. diff --git a/config/conclude.am b/config/conclude.am index 9b73ae77792..5ef0fc7e355 100644 --- a/config/conclude.am +++ b/config/conclude.am @@ -6,7 +6,7 @@ ## ## This file is part of HDF5. The full HDF5 copyright notice, including ## terms governing use, modification, and redistribution, is contained in -## the COPYING file, which can be found at the root of the source code +## the LICENSE file, which can be found at the root of the source code ## distribution tree, or in https://www.hdfgroup.org/licenses. ## If you do not have access to either file, you may request a copy from ## help@hdfgroup.org. diff --git a/config/conclude_fc.am b/config/conclude_fc.am index d26016a03c7..f87c1f07991 100644 --- a/config/conclude_fc.am +++ b/config/conclude_fc.am @@ -6,7 +6,7 @@ ## ## This file is part of HDF5. The full HDF5 copyright notice, including ## terms governing use, modification, and redistribution, is contained in -## the COPYING file, which can be found at the root of the source code +## the LICENSE file, which can be found at the root of the source code ## distribution tree, or in https://www.hdfgroup.org/licenses. ## If you do not have access to either file, you may request a copy from ## help@hdfgroup.org. diff --git a/config/cygwin b/config/cygwin index b028e702670..33a21f46d76 100644 --- a/config/cygwin +++ b/config/cygwin @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/examples.am b/config/examples.am index 09a9a244c9b..a51b472bf7d 100644 --- a/config/examples.am +++ b/config/examples.am @@ -6,7 +6,7 @@ ## ## This file is part of HDF5. The full HDF5 copyright notice, including ## terms governing use, modification, and redistribution, is contained in -## the COPYING file, which can be found at the root of the source code +## the LICENSE file, which can be found at the root of the source code ## distribution tree, or in https://www.hdfgroup.org/licenses. ## If you do not have access to either file, you may request a copy from ## help@hdfgroup.org. diff --git a/config/freebsd b/config/freebsd index 70cf44a07ac..70b66fbd4c9 100644 --- a/config/freebsd +++ b/config/freebsd @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/gnu-cxxflags b/config/gnu-cxxflags index f409ab416c5..7e80a49a03a 100644 --- a/config/gnu-cxxflags +++ b/config/gnu-cxxflags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/gnu-fflags b/config/gnu-fflags index b3385ec8836..c1beb31cb4d 100644 --- a/config/gnu-fflags +++ b/config/gnu-fflags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/gnu-flags b/config/gnu-flags index 5bf8b7a8d22..658475c0aba 100644 --- a/config/gnu-flags +++ b/config/gnu-flags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/ibm-aix b/config/ibm-aix index bd486af8e27..d0f34239a94 100644 --- a/config/ibm-aix +++ b/config/ibm-aix @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/ibm-flags b/config/ibm-flags index 37ecd20d1f5..fd25f2f017e 100644 --- a/config/ibm-flags +++ b/config/ibm-flags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/intel-cxxflags b/config/intel-cxxflags index 8db550dc4a6..ae3c9ff0feb 100644 --- a/config/intel-cxxflags +++ b/config/intel-cxxflags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/intel-fflags b/config/intel-fflags index b6307c1bedb..c6d88843855 100644 --- a/config/intel-fflags +++ b/config/intel-fflags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/intel-flags b/config/intel-flags index 725ba625128..3f069319331 100644 --- a/config/intel-flags +++ b/config/intel-flags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/linux-gnu b/config/linux-gnu index b4139ee1a58..bbbcf51ee1e 100644 --- a/config/linux-gnu +++ b/config/linux-gnu @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/lt_vers.am b/config/lt_vers.am index 7ef44760918..559d1ff1950 100644 --- a/config/lt_vers.am +++ b/config/lt_vers.am @@ -6,7 +6,7 @@ ## ## This file is part of HDF5. The full HDF5 copyright notice, including ## terms governing use, modification, and redistribution, is contained in -## the COPYING file, which can be found at the root of the source code +## the LICENSE file, which can be found at the root of the source code ## distribution tree, or in https://www.hdfgroup.org/licenses. ## If you do not have access to either file, you may request a copy from ## help@hdfgroup.org. diff --git a/config/netbsd b/config/netbsd index 0ed84f7b3d2..27020d46258 100644 --- a/config/netbsd +++ b/config/netbsd @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/nvidia-cxxflags b/config/nvidia-cxxflags index 6becd26887a..dfac0f74cf8 100644 --- a/config/nvidia-cxxflags +++ b/config/nvidia-cxxflags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/nvidia-fflags b/config/nvidia-fflags index 77677e1036a..a6879468058 100644 --- a/config/nvidia-fflags +++ b/config/nvidia-fflags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/nvidia-flags b/config/nvidia-flags index 31b2aa0bd56..cff61c6ecca 100644 --- a/config/nvidia-flags +++ b/config/nvidia-flags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/oneapi-cxxflags b/config/oneapi-cxxflags index d9819b94c44..f8d873509a1 100644 --- a/config/oneapi-cxxflags +++ b/config/oneapi-cxxflags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/oneapi-fflags b/config/oneapi-fflags index a63108d0b99..1bd64bcb738 100644 --- a/config/oneapi-fflags +++ b/config/oneapi-fflags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/oneapi-flags b/config/oneapi-flags index 32a7e7c61a7..49607a04e11 100644 --- a/config/oneapi-flags +++ b/config/oneapi-flags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/pgi-cxxflags b/config/pgi-cxxflags index 7d8bdeb3077..d513f2dff1d 100644 --- a/config/pgi-cxxflags +++ b/config/pgi-cxxflags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/pgi-fflags b/config/pgi-fflags index 5ec8368beea..55588fff846 100644 --- a/config/pgi-fflags +++ b/config/pgi-fflags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/pgi-flags b/config/pgi-flags index 19dd912f183..7c9f5ae726b 100644 --- a/config/pgi-flags +++ b/config/pgi-flags @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/site-specific/BlankForm b/config/site-specific/BlankForm index a5e89215123..6898af7aadc 100644 --- a/config/site-specific/BlankForm +++ b/config/site-specific/BlankForm @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/config/solaris b/config/solaris index e99a2bc060b..172793e6753 100644 --- a/config/solaris +++ b/config/solaris @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/configure.ac b/configure.ac index 6f1ed6aa50e..32ed53f4b6e 100644 --- a/configure.ac +++ b/configure.ac @@ -5,7 +5,7 @@ ## ## This file is part of HDF5. The full HDF5 copyright notice, including ## terms governing use, modification, and redistribution, is contained in -## the COPYING file, which can be found at the root of the source code +## the LICENSE file, which can be found at the root of the source code ## distribution tree, or in https://www.hdfgroup.org/licenses. ## If you do not have access to either file, you may request a copy from ## help@hdfgroup.org. diff --git a/doxygen/examples/H5.format.html b/doxygen/examples/H5.format.html index 1e7fe256f1a..0876c56c007 100644 --- a/doxygen/examples/H5.format.html +++ b/doxygen/examples/H5.format.html @@ -176,7 +176,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/doxygen/examples/VFL.html b/doxygen/examples/VFL.html index 78d163208ad..e0942fc077d 100644 --- a/doxygen/examples/VFL.html +++ b/doxygen/examples/VFL.html @@ -14,7 +14,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/doxygen/examples/h5_attribute.c b/doxygen/examples/h5_attribute.c index 6d3523d5b9e..c8144c63913 100644 --- a/doxygen/examples/h5_attribute.c +++ b/doxygen/examples/h5_attribute.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/doxygen/examples/h5_extlink.c b/doxygen/examples/h5_extlink.c index e1f02cf4cfd..a35172059f8 100644 --- a/doxygen/examples/h5_extlink.c +++ b/doxygen/examples/h5_extlink.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/Makefile.am b/fortran/Makefile.am index 631d9edc888..9d2c8c7e395 100644 --- a/fortran/Makefile.am +++ b/fortran/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/fortran/src/H5Af.c b/fortran/src/H5Af.c index 364d2c56eda..7ad1ee33a49 100644 --- a/fortran/src/H5Af.c +++ b/fortran/src/H5Af.c @@ -9,7 +9,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5Aff.F90 b/fortran/src/H5Aff.F90 index c2de9853f20..bb51c34d47e 100644 --- a/fortran/src/H5Aff.F90 +++ b/fortran/src/H5Aff.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5Df.c b/fortran/src/H5Df.c index fdaba9f73ca..9d978cde927 100644 --- a/fortran/src/H5Df.c +++ b/fortran/src/H5Df.c @@ -9,7 +9,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5Dff.F90 b/fortran/src/H5Dff.F90 index 5d6ff524bb2..da7efd7a98e 100644 --- a/fortran/src/H5Dff.F90 +++ b/fortran/src/H5Dff.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5ESff.F90 b/fortran/src/H5ESff.F90 index 76e84881e50..28676b52d45 100644 --- a/fortran/src/H5ESff.F90 +++ b/fortran/src/H5ESff.F90 @@ -12,7 +12,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5Ef.c b/fortran/src/H5Ef.c index 316c9ad9a5d..f5faa56ddbf 100644 --- a/fortran/src/H5Ef.c +++ b/fortran/src/H5Ef.c @@ -9,7 +9,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5Eff.F90 b/fortran/src/H5Eff.F90 index 20f45473a3b..50f23f175b7 100644 --- a/fortran/src/H5Eff.F90 +++ b/fortran/src/H5Eff.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5Ff.c b/fortran/src/H5Ff.c index 4b56ccaae9f..1e53b9b715e 100644 --- a/fortran/src/H5Ff.c +++ b/fortran/src/H5Ff.c @@ -9,7 +9,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5Fff.F90 b/fortran/src/H5Fff.F90 index dbd1c809bd5..7051e95bec8 100644 --- a/fortran/src/H5Fff.F90 +++ b/fortran/src/H5Fff.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5Gf.c b/fortran/src/H5Gf.c index 8e4bae3d7be..b6615366fb3 100644 --- a/fortran/src/H5Gf.c +++ b/fortran/src/H5Gf.c @@ -9,7 +9,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5Gff.F90 b/fortran/src/H5Gff.F90 index 8f805ab0f61..598ff2fff5e 100644 --- a/fortran/src/H5Gff.F90 +++ b/fortran/src/H5Gff.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5If.c b/fortran/src/H5If.c index 7486ff5fcfd..1a6a599c65b 100644 --- a/fortran/src/H5If.c +++ b/fortran/src/H5If.c @@ -9,7 +9,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5Iff.F90 b/fortran/src/H5Iff.F90 index 7c449eaa8be..7e9be6a04c6 100644 --- a/fortran/src/H5Iff.F90 +++ b/fortran/src/H5Iff.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5Lf.c b/fortran/src/H5Lf.c index 5fb5a3425fb..c2e0f17b7d2 100644 --- a/fortran/src/H5Lf.c +++ b/fortran/src/H5Lf.c @@ -9,7 +9,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5Lff.F90 b/fortran/src/H5Lff.F90 index 50a605a67db..5945eb3985a 100644 --- a/fortran/src/H5Lff.F90 +++ b/fortran/src/H5Lff.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5Of.c b/fortran/src/H5Of.c index 393f505fdb1..2085e49a8ae 100644 --- a/fortran/src/H5Of.c +++ b/fortran/src/H5Of.c @@ -9,7 +9,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5Off.F90 b/fortran/src/H5Off.F90 index 9c8b09141b8..a149806857a 100644 --- a/fortran/src/H5Off.F90 +++ b/fortran/src/H5Off.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5Pf.c b/fortran/src/H5Pf.c index 40e9c0fb9e3..079d0277a43 100644 --- a/fortran/src/H5Pf.c +++ b/fortran/src/H5Pf.c @@ -9,7 +9,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5Pff.F90 b/fortran/src/H5Pff.F90 index f5e50c90383..7e73ac2255a 100644 --- a/fortran/src/H5Pff.F90 +++ b/fortran/src/H5Pff.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5Rf.c b/fortran/src/H5Rf.c index d9ef5d06f71..108591d23e4 100644 --- a/fortran/src/H5Rf.c +++ b/fortran/src/H5Rf.c @@ -9,7 +9,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5Rff.F90 b/fortran/src/H5Rff.F90 index 75933e28fb4..7e5d8468f54 100644 --- a/fortran/src/H5Rff.F90 +++ b/fortran/src/H5Rff.F90 @@ -24,7 +24,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5Sf.c b/fortran/src/H5Sf.c index 22130fc9bd8..73cae480bfb 100644 --- a/fortran/src/H5Sf.c +++ b/fortran/src/H5Sf.c @@ -9,7 +9,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5Sff.F90 b/fortran/src/H5Sff.F90 index db709ddc10f..0c20fe1c1a9 100644 --- a/fortran/src/H5Sff.F90 +++ b/fortran/src/H5Sff.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5Tf.c b/fortran/src/H5Tf.c index 393873e110b..d4b8363688e 100644 --- a/fortran/src/H5Tf.c +++ b/fortran/src/H5Tf.c @@ -9,7 +9,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5Tff.F90 b/fortran/src/H5Tff.F90 index b93e3c3a03c..ff1b84af34f 100644 --- a/fortran/src/H5Tff.F90 +++ b/fortran/src/H5Tff.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5VLff.F90 b/fortran/src/H5VLff.F90 index e1629328ce2..21fc6f6b05e 100644 --- a/fortran/src/H5VLff.F90 +++ b/fortran/src/H5VLff.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5Zf.c b/fortran/src/H5Zf.c index 607992f2d37..541617a9810 100644 --- a/fortran/src/H5Zf.c +++ b/fortran/src/H5Zf.c @@ -9,7 +9,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5Zff.F90 b/fortran/src/H5Zff.F90 index eae94c5bb81..a92587a9e0b 100644 --- a/fortran/src/H5Zff.F90 +++ b/fortran/src/H5Zff.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5_buildiface.F90 b/fortran/src/H5_buildiface.F90 index 62ced23cf45..0c8db4c5dd2 100644 --- a/fortran/src/H5_buildiface.F90 +++ b/fortran/src/H5_buildiface.F90 @@ -32,7 +32,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * @@ -117,7 +117,7 @@ PROGRAM H5_buildiface '! *',& '! This file is part of HDF5. The full HDF5 copyright notice, including *',& '! terms governing use, modification, and redistribution, is contained in *',& -'! the COPYING file, which can be found at the root of the source code *',& +'! the LICENSE file, which can be found at the root of the source code *',& '! distribution tree, or in https://www.hdfgroup.org/licenses. *',& '! If you do not have access to either file, you may request a copy from *',& '! help@hdfgroup.org. *',& diff --git a/fortran/src/H5_f.c b/fortran/src/H5_f.c index ac3c7bfceed..b560184618a 100644 --- a/fortran/src/H5_f.c +++ b/fortran/src/H5_f.c @@ -9,7 +9,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5_ff.F90 b/fortran/src/H5_ff.F90 index d8c18374045..847d649e6fe 100644 --- a/fortran/src/H5_ff.F90 +++ b/fortran/src/H5_ff.F90 @@ -26,7 +26,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5config_f.inc.cmake b/fortran/src/H5config_f.inc.cmake index bc9f036e020..88875cb0b9a 100644 --- a/fortran/src/H5config_f.inc.cmake +++ b/fortran/src/H5config_f.inc.cmake @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5config_f.inc.in b/fortran/src/H5config_f.inc.in index 7f2d3cad8a9..a37176ec619 100644 --- a/fortran/src/H5config_f.inc.in +++ b/fortran/src/H5config_f.inc.in @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5f90.h b/fortran/src/H5f90.h index 513b30940b7..4f8233dcb58 100644 --- a/fortran/src/H5f90.h +++ b/fortran/src/H5f90.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5f90global.F90 b/fortran/src/H5f90global.F90 index ee2c6ab3aec..223f8dddf72 100644 --- a/fortran/src/H5f90global.F90 +++ b/fortran/src/H5f90global.F90 @@ -12,7 +12,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5f90i.h b/fortran/src/H5f90i.h index 9f7433aec97..cd263feaba5 100644 --- a/fortran/src/H5f90i.h +++ b/fortran/src/H5f90i.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5f90kit.c b/fortran/src/H5f90kit.c index 5129bda9976..91836265bb3 100644 --- a/fortran/src/H5f90kit.c +++ b/fortran/src/H5f90kit.c @@ -12,7 +12,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5f90proto.h b/fortran/src/H5f90proto.h index 71d914c1d26..55d36da33b3 100644 --- a/fortran/src/H5f90proto.h +++ b/fortran/src/H5f90proto.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5fort_type_defines.h.cmake b/fortran/src/H5fort_type_defines.h.cmake index f2f6af6b6ae..02493d1f928 100644 --- a/fortran/src/H5fort_type_defines.h.cmake +++ b/fortran/src/H5fort_type_defines.h.cmake @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5fort_type_defines.h.in b/fortran/src/H5fort_type_defines.h.in index 989be54d1ff..a7c48ef2d59 100644 --- a/fortran/src/H5fort_type_defines.h.in +++ b/fortran/src/H5fort_type_defines.h.in @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/src/H5fortkit.F90 b/fortran/src/H5fortkit.F90 index 70d7087d65e..b77c7c166e6 100644 --- a/fortran/src/H5fortkit.F90 +++ b/fortran/src/H5fortkit.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/H5match_types.c b/fortran/src/H5match_types.c index 40d21e97cc0..310720ed9aa 100644 --- a/fortran/src/H5match_types.c +++ b/fortran/src/H5match_types.c @@ -18,7 +18,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * @@ -62,7 +62,7 @@ initCfile(void) * *\n\ * This file is part of HDF5. The full HDF5 copyright notice, including *\n\ * terms governing use, modification, and redistribution, is contained in *\n\ - * the COPYING file, which can be found at the root of the source code *\n\ + * the LICENSE file, which can be found at the root of the source code *\n\ * distribution tree, or in https://www.hdfgroup.org/licenses. *\n\ * If you do not have access to either file, you may request a copy from *\n\ * help@hdfgroup.org. *\n\ @@ -85,7 +85,7 @@ initFfile(void) ! *\n\ ! This file is part of HDF5. The full HDF5 copyright notice, including *\n\ ! terms governing use, modification, and redistribution, is contained in *\n\ -! the COPYING file, which can be found at the root of the source code *\n\ +! the LICENSE file, which can be found at the root of the source code *\n\ ! distribution tree, or in https://www.hdfgroup.org/licenses. *\n\ ! If you do not have access to either file, you may request a copy from *\n\ ! help@hdfgroup.org. *\n\ diff --git a/fortran/src/HDF5.F90 b/fortran/src/HDF5.F90 index faedc40a05b..fd3733cd2f3 100644 --- a/fortran/src/HDF5.F90 +++ b/fortran/src/HDF5.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/src/Makefile.am b/fortran/src/Makefile.am index 2fdf085f4b9..4b25e230317 100644 --- a/fortran/src/Makefile.am +++ b/fortran/src/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/fortran/src/h5fc.in b/fortran/src/h5fc.in index 562d56d2089..f63d2ff1cbd 100644 --- a/fortran/src/h5fc.in +++ b/fortran/src/h5fc.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/fortran/test/CMakeTests.cmake b/fortran/test/CMakeTests.cmake index 46b89728bea..66a5f058634 100644 --- a/fortran/test/CMakeTests.cmake +++ b/fortran/test/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/fortran/test/H5_test_buildiface.F90 b/fortran/test/H5_test_buildiface.F90 index 0b5efebd235..efbabc74987 100644 --- a/fortran/test/H5_test_buildiface.F90 +++ b/fortran/test/H5_test_buildiface.F90 @@ -32,7 +32,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * @@ -76,7 +76,7 @@ PROGRAM H5_test_buildiface '! *',& '! This file is part of HDF5. The full HDF5 copyright notice, including *',& '! terms governing use, modification, and redistribution, is contained in *',& -'! the COPYING file, which can be found at the root of the source code *',& +'! the LICENSE file, which can be found at the root of the source code *',& '! distribution tree, or in https://www.hdfgroup.org/licenses. *',& '! If you do not have access to either file, you may request a copy from *',& '! help@hdfgroup.org. *',& diff --git a/fortran/test/Makefile.am b/fortran/test/Makefile.am index 6d11dcc07d1..29cb2c97bff 100644 --- a/fortran/test/Makefile.am +++ b/fortran/test/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/fortran/test/fflush1.F90 b/fortran/test/fflush1.F90 index 5e3234d0161..b016346bb49 100644 --- a/fortran/test/fflush1.F90 +++ b/fortran/test/fflush1.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/fflush2.F90 b/fortran/test/fflush2.F90 index e05908a9f1b..e2fbe438952 100644 --- a/fortran/test/fflush2.F90 +++ b/fortran/test/fflush2.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/fortranlib_test.F90 b/fortran/test/fortranlib_test.F90 index 534bde6c9a0..bace2bf86f9 100644 --- a/fortran/test/fortranlib_test.F90 +++ b/fortran/test/fortranlib_test.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/fortranlib_test_1_8.F90 b/fortran/test/fortranlib_test_1_8.F90 index 6b3e7fa5b8d..feb85a47cdc 100644 --- a/fortran/test/fortranlib_test_1_8.F90 +++ b/fortran/test/fortranlib_test_1_8.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/fortranlib_test_F03.F90 b/fortran/test/fortranlib_test_F03.F90 index 50240ce6ed1..51da6b5eeb5 100644 --- a/fortran/test/fortranlib_test_F03.F90 +++ b/fortran/test/fortranlib_test_F03.F90 @@ -14,7 +14,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/t.c b/fortran/test/t.c index 1336540ca61..048dae89120 100644 --- a/fortran/test/t.c +++ b/fortran/test/t.c @@ -13,7 +13,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/test/t.h b/fortran/test/t.h index af8940ff9a7..de909271df6 100644 --- a/fortran/test/t.h +++ b/fortran/test/t.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/fortran/test/tH5A.F90 b/fortran/test/tH5A.F90 index ff7ee60053e..ce69ba11bc0 100644 --- a/fortran/test/tH5A.F90 +++ b/fortran/test/tH5A.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5A_1_8.F90 b/fortran/test/tH5A_1_8.F90 index 2a479e476ca..0a90842075c 100644 --- a/fortran/test/tH5A_1_8.F90 +++ b/fortran/test/tH5A_1_8.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5D.F90 b/fortran/test/tH5D.F90 index fc774144f14..59b69db7e7f 100644 --- a/fortran/test/tH5D.F90 +++ b/fortran/test/tH5D.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5E.F90 b/fortran/test/tH5E.F90 index 5cf761477d6..c878b3c8efa 100644 --- a/fortran/test/tH5E.F90 +++ b/fortran/test/tH5E.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5E_F03.F90 b/fortran/test/tH5E_F03.F90 index 7060d2ee617..26268205b22 100644 --- a/fortran/test/tH5E_F03.F90 +++ b/fortran/test/tH5E_F03.F90 @@ -14,7 +14,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5F.F90 b/fortran/test/tH5F.F90 index 569d4598c92..ea042dd7ceb 100644 --- a/fortran/test/tH5F.F90 +++ b/fortran/test/tH5F.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5G.F90 b/fortran/test/tH5G.F90 index 36c51df54a1..30de65766c5 100644 --- a/fortran/test/tH5G.F90 +++ b/fortran/test/tH5G.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5G_1_8.F90 b/fortran/test/tH5G_1_8.F90 index cd354d81d2b..e364ab32ce1 100644 --- a/fortran/test/tH5G_1_8.F90 +++ b/fortran/test/tH5G_1_8.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5I.F90 b/fortran/test/tH5I.F90 index 7d97219b177..baba2df428a 100644 --- a/fortran/test/tH5I.F90 +++ b/fortran/test/tH5I.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5L_F03.F90 b/fortran/test/tH5L_F03.F90 index a4ece4d7fe4..d7760b693c9 100644 --- a/fortran/test/tH5L_F03.F90 +++ b/fortran/test/tH5L_F03.F90 @@ -14,7 +14,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5MISC_1_8.F90 b/fortran/test/tH5MISC_1_8.F90 index bd3ce3f9da9..67deb5a21e1 100644 --- a/fortran/test/tH5MISC_1_8.F90 +++ b/fortran/test/tH5MISC_1_8.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5O.F90 b/fortran/test/tH5O.F90 index 5fdb066fa32..acbe0817798 100644 --- a/fortran/test/tH5O.F90 +++ b/fortran/test/tH5O.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5O_F03.F90 b/fortran/test/tH5O_F03.F90 index f9cad325f3b..759f1123c75 100644 --- a/fortran/test/tH5O_F03.F90 +++ b/fortran/test/tH5O_F03.F90 @@ -14,7 +14,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5P.F90 b/fortran/test/tH5P.F90 index 78d665f0aa1..5a317d5593c 100644 --- a/fortran/test/tH5P.F90 +++ b/fortran/test/tH5P.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5P_F03.F90 b/fortran/test/tH5P_F03.F90 index f411338ccc8..6611187c8ce 100644 --- a/fortran/test/tH5P_F03.F90 +++ b/fortran/test/tH5P_F03.F90 @@ -14,7 +14,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5R.F90 b/fortran/test/tH5R.F90 index 8eb8d8d2f9a..ac0319779f7 100644 --- a/fortran/test/tH5R.F90 +++ b/fortran/test/tH5R.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * @@ -684,7 +684,7 @@ SUBROUTINE v3reftest(cleanup, total_error) CALL check("H5Rget_name_f", error, total_error) CALL verify("H5Rget_name_f", TRIM(buf_big), "/"//groupname1//"/"//groupname2, total_error) - ! CHECK COPYING REF + ! CHECK LICENSE REF f_ptr = C_LOC(ref_ptr_cp) CALL h5rcopy_f(C_LOC(ref_ptr(3)), f_ptr, error) diff --git a/fortran/test/tH5S.F90 b/fortran/test/tH5S.F90 index 4bb68108fa8..21809203e3f 100644 --- a/fortran/test/tH5S.F90 +++ b/fortran/test/tH5S.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5Sselect.F90 b/fortran/test/tH5Sselect.F90 index bcf254ae2a5..0509f33ba3c 100644 --- a/fortran/test/tH5Sselect.F90 +++ b/fortran/test/tH5Sselect.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5T.F90 b/fortran/test/tH5T.F90 index c4f6aa0ece7..2e006bc3a4f 100644 --- a/fortran/test/tH5T.F90 +++ b/fortran/test/tH5T.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5T_F03.F90 b/fortran/test/tH5T_F03.F90 index e7a3797e37e..4f0aeb1ef04 100644 --- a/fortran/test/tH5T_F03.F90 +++ b/fortran/test/tH5T_F03.F90 @@ -14,7 +14,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5VL.F90 b/fortran/test/tH5VL.F90 index e7a03636156..41acf9c81fb 100644 --- a/fortran/test/tH5VL.F90 +++ b/fortran/test/tH5VL.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tH5Z.F90 b/fortran/test/tH5Z.F90 index c6ab3832d18..488129118f2 100644 --- a/fortran/test/tH5Z.F90 +++ b/fortran/test/tH5Z.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tHDF5.F90 b/fortran/test/tHDF5.F90 index 34e1ea09a49..3669bf13408 100644 --- a/fortran/test/tHDF5.F90 +++ b/fortran/test/tHDF5.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tHDF5_1_8.F90 b/fortran/test/tHDF5_1_8.F90 index 2a41fb9a92b..be14eeb1144 100644 --- a/fortran/test/tHDF5_1_8.F90 +++ b/fortran/test/tHDF5_1_8.F90 @@ -17,7 +17,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tHDF5_F03.F90 b/fortran/test/tHDF5_F03.F90 index 1ef762609ec..75133876007 100644 --- a/fortran/test/tHDF5_F03.F90 +++ b/fortran/test/tHDF5_F03.F90 @@ -17,7 +17,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/tf.F90 b/fortran/test/tf.F90 index d08d1c7451c..62e31ac3aea 100644 --- a/fortran/test/tf.F90 +++ b/fortran/test/tf.F90 @@ -13,7 +13,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/test/vol_connector.F90 b/fortran/test/vol_connector.F90 index 44446ddf361..8cf9b930b28 100644 --- a/fortran/test/vol_connector.F90 +++ b/fortran/test/vol_connector.F90 @@ -16,7 +16,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/testpar/CMakeTests.cmake b/fortran/testpar/CMakeTests.cmake index f9ce2b829c7..6062c2533c2 100644 --- a/fortran/testpar/CMakeTests.cmake +++ b/fortran/testpar/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/fortran/testpar/Makefile.am b/fortran/testpar/Makefile.am index 3df1fee8f09..2b25ec0bc8f 100644 --- a/fortran/testpar/Makefile.am +++ b/fortran/testpar/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/fortran/testpar/async.F90 b/fortran/testpar/async.F90 index aa2416fd24d..96ca02790af 100644 --- a/fortran/testpar/async.F90 +++ b/fortran/testpar/async.F90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/testpar/hyper.F90 b/fortran/testpar/hyper.F90 index 61a3e260797..2a7f9dec703 100644 --- a/fortran/testpar/hyper.F90 +++ b/fortran/testpar/hyper.F90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/testpar/mdset.F90 b/fortran/testpar/mdset.F90 index 95e401137e6..9ee57501abc 100644 --- a/fortran/testpar/mdset.F90 +++ b/fortran/testpar/mdset.F90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/testpar/mpi_param.F90 b/fortran/testpar/mpi_param.F90 index 1d7f8ff70f8..a014d76ef51 100644 --- a/fortran/testpar/mpi_param.F90 +++ b/fortran/testpar/mpi_param.F90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/testpar/multidsetrw.F90 b/fortran/testpar/multidsetrw.F90 index 62eb5d1e8bb..3cfe03775cb 100644 --- a/fortran/testpar/multidsetrw.F90 +++ b/fortran/testpar/multidsetrw.F90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/testpar/ptest.F90 b/fortran/testpar/ptest.F90 index 6e34ffdaaac..4244cfb2941 100644 --- a/fortran/testpar/ptest.F90 +++ b/fortran/testpar/ptest.F90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/fortran/testpar/subfiling.F90 b/fortran/testpar/subfiling.F90 index 67f201e0ec7..a4f97c2c7a6 100644 --- a/fortran/testpar/subfiling.F90 +++ b/fortran/testpar/subfiling.F90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/hl/Makefile.am b/hl/Makefile.am index 5660b9bc5fe..83de129bc68 100644 --- a/hl/Makefile.am +++ b/hl/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/c++/Makefile.am b/hl/c++/Makefile.am index 4bdab417fcc..699e663f4bf 100644 --- a/hl/c++/Makefile.am +++ b/hl/c++/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/c++/examples/CMakeTests.cmake b/hl/c++/examples/CMakeTests.cmake index d0a647e1d1c..4f0dce222c4 100644 --- a/hl/c++/examples/CMakeTests.cmake +++ b/hl/c++/examples/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/c++/examples/Makefile.am b/hl/c++/examples/Makefile.am index a0690651bb4..ed4d55ba6d7 100644 --- a/hl/c++/examples/Makefile.am +++ b/hl/c++/examples/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/c++/examples/ptExampleFL.cpp b/hl/c++/examples/ptExampleFL.cpp index cb407e21f65..5f7195dd068 100644 --- a/hl/c++/examples/ptExampleFL.cpp +++ b/hl/c++/examples/ptExampleFL.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/c++/examples/run-hlc++-ex.sh.in b/hl/c++/examples/run-hlc++-ex.sh.in index 47f460bfd27..7d6dbb4c9c7 100644 --- a/hl/c++/examples/run-hlc++-ex.sh.in +++ b/hl/c++/examples/run-hlc++-ex.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/c++/src/H5PacketTable.cpp b/hl/c++/src/H5PacketTable.cpp index 4cd3c034a48..98fa48e66d7 100644 --- a/hl/c++/src/H5PacketTable.cpp +++ b/hl/c++/src/H5PacketTable.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/c++/src/H5PacketTable.h b/hl/c++/src/H5PacketTable.h index 8ef5ac31bce..fc6f93aeef0 100644 --- a/hl/c++/src/H5PacketTable.h +++ b/hl/c++/src/H5PacketTable.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/c++/src/Makefile.am b/hl/c++/src/Makefile.am index 54fd52e8ee8..a2f0708a8b9 100644 --- a/hl/c++/src/Makefile.am +++ b/hl/c++/src/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/c++/test/CMakeTests.cmake b/hl/c++/test/CMakeTests.cmake index b07dd6d0a24..159597d5b99 100644 --- a/hl/c++/test/CMakeTests.cmake +++ b/hl/c++/test/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/c++/test/Makefile.am b/hl/c++/test/Makefile.am index 73f14632ba9..abca464c760 100644 --- a/hl/c++/test/Makefile.am +++ b/hl/c++/test/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/c++/test/ptableTest.cpp b/hl/c++/test/ptableTest.cpp index efb97a6546a..9953f17fa68 100644 --- a/hl/c++/test/ptableTest.cpp +++ b/hl/c++/test/ptableTest.cpp @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/c++/test/ptableTest.h b/hl/c++/test/ptableTest.h index 7c5ac3513f1..324c5f4907d 100644 --- a/hl/c++/test/ptableTest.h +++ b/hl/c++/test/ptableTest.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/CMakeTests.cmake b/hl/examples/CMakeTests.cmake index ee376cade7b..c6e32ba52db 100644 --- a/hl/examples/CMakeTests.cmake +++ b/hl/examples/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/examples/Makefile.am b/hl/examples/Makefile.am index 95eb5eb34da..349842d54fd 100644 --- a/hl/examples/Makefile.am +++ b/hl/examples/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/examples/ex_ds1.c b/hl/examples/ex_ds1.c index 7371f82f3d9..3e6c9c382a8 100644 --- a/hl/examples/ex_ds1.c +++ b/hl/examples/ex_ds1.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_image1.c b/hl/examples/ex_image1.c index 49a90936e99..86d5525170d 100644 --- a/hl/examples/ex_image1.c +++ b/hl/examples/ex_image1.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_image2.c b/hl/examples/ex_image2.c index 9ce1746f702..53031a51ca8 100644 --- a/hl/examples/ex_image2.c +++ b/hl/examples/ex_image2.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_lite1.c b/hl/examples/ex_lite1.c index a23bd296091..1095f01260c 100644 --- a/hl/examples/ex_lite1.c +++ b/hl/examples/ex_lite1.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_lite2.c b/hl/examples/ex_lite2.c index aa6a47f3146..affcea37af3 100644 --- a/hl/examples/ex_lite2.c +++ b/hl/examples/ex_lite2.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_lite3.c b/hl/examples/ex_lite3.c index 8b774de92f9..6c0dee8f8d3 100644 --- a/hl/examples/ex_lite3.c +++ b/hl/examples/ex_lite3.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_table_01.c b/hl/examples/ex_table_01.c index 582cdc701f9..f12ed10c2af 100644 --- a/hl/examples/ex_table_01.c +++ b/hl/examples/ex_table_01.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_table_02.c b/hl/examples/ex_table_02.c index 5b4fe31daca..f16074bf726 100644 --- a/hl/examples/ex_table_02.c +++ b/hl/examples/ex_table_02.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_table_03.c b/hl/examples/ex_table_03.c index 280c6a4f571..c6b7d57b76b 100644 --- a/hl/examples/ex_table_03.c +++ b/hl/examples/ex_table_03.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_table_04.c b/hl/examples/ex_table_04.c index ba7b4363557..a975e979d2d 100644 --- a/hl/examples/ex_table_04.c +++ b/hl/examples/ex_table_04.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_table_05.c b/hl/examples/ex_table_05.c index d7cecaf6959..77557e86f11 100644 --- a/hl/examples/ex_table_05.c +++ b/hl/examples/ex_table_05.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_table_06.c b/hl/examples/ex_table_06.c index b53216fb46f..ca4514408f3 100644 --- a/hl/examples/ex_table_06.c +++ b/hl/examples/ex_table_06.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_table_07.c b/hl/examples/ex_table_07.c index e99d2347c26..7fe662c9487 100644 --- a/hl/examples/ex_table_07.c +++ b/hl/examples/ex_table_07.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_table_08.c b/hl/examples/ex_table_08.c index d66a1b9e4d1..5d1fcff13a4 100644 --- a/hl/examples/ex_table_08.c +++ b/hl/examples/ex_table_08.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_table_09.c b/hl/examples/ex_table_09.c index ba515ee188a..2087c421921 100644 --- a/hl/examples/ex_table_09.c +++ b/hl/examples/ex_table_09.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_table_10.c b/hl/examples/ex_table_10.c index d462f7f020f..1bb0077367a 100644 --- a/hl/examples/ex_table_10.c +++ b/hl/examples/ex_table_10.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_table_11.c b/hl/examples/ex_table_11.c index 725c26c8e5c..c0181a7412f 100644 --- a/hl/examples/ex_table_11.c +++ b/hl/examples/ex_table_11.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ex_table_12.c b/hl/examples/ex_table_12.c index 35175d0841f..291c8cb6461 100644 --- a/hl/examples/ex_table_12.c +++ b/hl/examples/ex_table_12.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/pal_rgb.h b/hl/examples/pal_rgb.h index 8409f7ed696..af2e2320569 100644 --- a/hl/examples/pal_rgb.h +++ b/hl/examples/pal_rgb.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/ptExampleFL.c b/hl/examples/ptExampleFL.c index b3b4f726769..cc447fe7d83 100644 --- a/hl/examples/ptExampleFL.c +++ b/hl/examples/ptExampleFL.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/examples/run-hl-ex.sh b/hl/examples/run-hl-ex.sh index c31e0d4234e..aaee5404a62 100755 --- a/hl/examples/run-hl-ex.sh +++ b/hl/examples/run-hl-ex.sh @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/examples/run-hlc-ex.sh.in b/hl/examples/run-hlc-ex.sh.in index 81d3c00c928..fa861779190 100644 --- a/hl/examples/run-hlc-ex.sh.in +++ b/hl/examples/run-hlc-ex.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/fortran/Makefile.am b/hl/fortran/Makefile.am index b8a3ac4b14a..a71f94dfe35 100644 --- a/hl/fortran/Makefile.am +++ b/hl/fortran/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/fortran/examples/CMakeTests.cmake b/hl/fortran/examples/CMakeTests.cmake index c5273e541f3..ab14b745888 100644 --- a/hl/fortran/examples/CMakeTests.cmake +++ b/hl/fortran/examples/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/fortran/examples/Makefile.am b/hl/fortran/examples/Makefile.am index eda9e7da56e..871570f5b53 100644 --- a/hl/fortran/examples/Makefile.am +++ b/hl/fortran/examples/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/fortran/examples/ex_ds1.f90 b/hl/fortran/examples/ex_ds1.f90 index b34467e40fb..a6905c4f37a 100644 --- a/hl/fortran/examples/ex_ds1.f90 +++ b/hl/fortran/examples/ex_ds1.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/hl/fortran/examples/exlite.f90 b/hl/fortran/examples/exlite.f90 index 7d080d1ebb9..addead3a49a 100644 --- a/hl/fortran/examples/exlite.f90 +++ b/hl/fortran/examples/exlite.f90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/hl/fortran/examples/run-hlfortran-ex.sh.in b/hl/fortran/examples/run-hlfortran-ex.sh.in index 83a61958271..2c8c337d503 100644 --- a/hl/fortran/examples/run-hlfortran-ex.sh.in +++ b/hl/fortran/examples/run-hlfortran-ex.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/fortran/src/H5DOff.F90 b/hl/fortran/src/H5DOff.F90 index df4157cbaba..ce15aff7364 100644 --- a/hl/fortran/src/H5DOff.F90 +++ b/hl/fortran/src/H5DOff.F90 @@ -15,7 +15,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/hl/fortran/src/H5DSfc.c b/hl/fortran/src/H5DSfc.c index 7b5dfe97cf9..0f5a0e6dd05 100644 --- a/hl/fortran/src/H5DSfc.c +++ b/hl/fortran/src/H5DSfc.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/fortran/src/H5DSff.F90 b/hl/fortran/src/H5DSff.F90 index 8e238c595f4..673e64b1f58 100644 --- a/hl/fortran/src/H5DSff.F90 +++ b/hl/fortran/src/H5DSff.F90 @@ -15,7 +15,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/hl/fortran/src/H5HL_buildiface.F90 b/hl/fortran/src/H5HL_buildiface.F90 index a556c9d4722..7ee123889a4 100644 --- a/hl/fortran/src/H5HL_buildiface.F90 +++ b/hl/fortran/src/H5HL_buildiface.F90 @@ -32,7 +32,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * @@ -108,7 +108,7 @@ PROGRAM H5HL_buildiface '! *',& '! This file is part of HDF5. The full HDF5 copyright notice, including *',& '! terms governing use, modification, and redistribution, is contained in *',& -'! the COPYING file, which can be found at the root of the source code *',& +'! the LICENSE file, which can be found at the root of the source code *',& '! distribution tree, or in https://www.hdfgroup.org/licenses. *',& '! If you do not have access to either file, you may request a copy from *',& '! help@hdfgroup.org. *',& @@ -576,7 +576,7 @@ PROGRAM H5HL_buildiface '! *',& '! This file is part of HDF5. The full HDF5 copyright notice, including *',& '! terms governing use, modification, and redistribution, is contained in *',& -'! the COPYING file, which can be found at the root of the source code *',& +'! the LICENSE file, which can be found at the root of the source code *',& '! distribution tree, or in https://www.hdfgroup.org/licenses. *',& '! If you do not have access to either file, you may request a copy from *',& '! help@hdfgroup.org. *',& diff --git a/hl/fortran/src/H5IMcc.c b/hl/fortran/src/H5IMcc.c index 055d52d6e80..8f323ee486a 100644 --- a/hl/fortran/src/H5IMcc.c +++ b/hl/fortran/src/H5IMcc.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/fortran/src/H5IMcc.h b/hl/fortran/src/H5IMcc.h index 0b04e1f27b6..cf77d2b4c51 100644 --- a/hl/fortran/src/H5IMcc.h +++ b/hl/fortran/src/H5IMcc.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/fortran/src/H5IMfc.c b/hl/fortran/src/H5IMfc.c index 9d8baf2553a..4f013340932 100644 --- a/hl/fortran/src/H5IMfc.c +++ b/hl/fortran/src/H5IMfc.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/fortran/src/H5IMff.F90 b/hl/fortran/src/H5IMff.F90 index 5354dd0ee9c..c93d5ea1823 100644 --- a/hl/fortran/src/H5IMff.F90 +++ b/hl/fortran/src/H5IMff.F90 @@ -15,7 +15,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/hl/fortran/src/H5LTf90proto.h b/hl/fortran/src/H5LTf90proto.h index 997d3a0fd4e..9debdc96ae7 100644 --- a/hl/fortran/src/H5LTf90proto.h +++ b/hl/fortran/src/H5LTf90proto.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/fortran/src/H5LTfc.c b/hl/fortran/src/H5LTfc.c index b7f4540266f..916aa25da58 100644 --- a/hl/fortran/src/H5LTfc.c +++ b/hl/fortran/src/H5LTfc.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/fortran/src/H5LTff.F90 b/hl/fortran/src/H5LTff.F90 index 80e9fe7e350..52b101514de 100644 --- a/hl/fortran/src/H5LTff.F90 +++ b/hl/fortran/src/H5LTff.F90 @@ -15,7 +15,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/hl/fortran/src/H5TBfc.c b/hl/fortran/src/H5TBfc.c index d339def6f66..6b9ac578ee6 100644 --- a/hl/fortran/src/H5TBfc.c +++ b/hl/fortran/src/H5TBfc.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/fortran/src/H5TBff.F90 b/hl/fortran/src/H5TBff.F90 index f4f8950850b..b2054f54baf 100644 --- a/hl/fortran/src/H5TBff.F90 +++ b/hl/fortran/src/H5TBff.F90 @@ -15,7 +15,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/hl/fortran/src/Makefile.am b/hl/fortran/src/Makefile.am index eef7e8b4dc1..d48c4b04eb0 100644 --- a/hl/fortran/src/Makefile.am +++ b/hl/fortran/src/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/fortran/test/CMakeTests.cmake b/hl/fortran/test/CMakeTests.cmake index 84218728db6..3d325916bc1 100644 --- a/hl/fortran/test/CMakeTests.cmake +++ b/hl/fortran/test/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/fortran/test/Makefile.am b/hl/fortran/test/Makefile.am index adaa59db4cc..909055a8a83 100644 --- a/hl/fortran/test/Makefile.am +++ b/hl/fortran/test/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/fortran/test/tstds.F90 b/hl/fortran/test/tstds.F90 index 4027b1193d6..652fe52bad1 100644 --- a/hl/fortran/test/tstds.F90 +++ b/hl/fortran/test/tstds.F90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/hl/fortran/test/tstimage.F90 b/hl/fortran/test/tstimage.F90 index fc3a43af41c..1991ed5f939 100644 --- a/hl/fortran/test/tstimage.F90 +++ b/hl/fortran/test/tstimage.F90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/hl/fortran/test/tstlite.F90 b/hl/fortran/test/tstlite.F90 index b98bbe7a163..3b044732b90 100644 --- a/hl/fortran/test/tstlite.F90 +++ b/hl/fortran/test/tstlite.F90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/hl/fortran/test/tsttable.F90 b/hl/fortran/test/tsttable.F90 index eb5f41c554a..6d566665dd1 100644 --- a/hl/fortran/test/tsttable.F90 +++ b/hl/fortran/test/tsttable.F90 @@ -4,7 +4,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/hl/src/H5DO.c b/hl/src/H5DO.c index 49786e2d8ac..5e72b2b2645 100644 --- a/hl/src/H5DO.c +++ b/hl/src/H5DO.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5DOpublic.h b/hl/src/H5DOpublic.h index b3ea31d67e1..48cfac77066 100644 --- a/hl/src/H5DOpublic.h +++ b/hl/src/H5DOpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5DS.c b/hl/src/H5DS.c index 327c9c61e81..cb250f555df 100644 --- a/hl/src/H5DS.c +++ b/hl/src/H5DS.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5DSprivate.h b/hl/src/H5DSprivate.h index a172237be36..0aba9854be6 100644 --- a/hl/src/H5DSprivate.h +++ b/hl/src/H5DSprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5DSpublic.h b/hl/src/H5DSpublic.h index a7c9c9326a8..a926035a4c8 100644 --- a/hl/src/H5DSpublic.h +++ b/hl/src/H5DSpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5HLprivate2.h b/hl/src/H5HLprivate2.h index 2bd8d01917b..226c5a3eaa3 100644 --- a/hl/src/H5HLprivate2.h +++ b/hl/src/H5HLprivate2.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5IM.c b/hl/src/H5IM.c index b5476c6e93a..48433b43609 100644 --- a/hl/src/H5IM.c +++ b/hl/src/H5IM.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5IMprivate.h b/hl/src/H5IMprivate.h index 29d2669fbd8..4acc58e9f2d 100644 --- a/hl/src/H5IMprivate.h +++ b/hl/src/H5IMprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5IMpublic.h b/hl/src/H5IMpublic.h index bf219b73e46..4171ebcf18c 100644 --- a/hl/src/H5IMpublic.h +++ b/hl/src/H5IMpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5LD.c b/hl/src/H5LD.c index 6f140d01bc7..09a3d7815b2 100644 --- a/hl/src/H5LD.c +++ b/hl/src/H5LD.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5LDprivate.h b/hl/src/H5LDprivate.h index 639cdceb885..f6652a964f1 100644 --- a/hl/src/H5LDprivate.h +++ b/hl/src/H5LDprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5LDpublic.h b/hl/src/H5LDpublic.h index 1eee8b4f190..5c05c205466 100644 --- a/hl/src/H5LDpublic.h +++ b/hl/src/H5LDpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5LT.c b/hl/src/H5LT.c index 7b55cedeb3b..b064947b919 100644 --- a/hl/src/H5LT.c +++ b/hl/src/H5LT.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5LTanalyze.c b/hl/src/H5LTanalyze.c index 3e6b20d322e..67fa8457382 100644 --- a/hl/src/H5LTanalyze.c +++ b/hl/src/H5LTanalyze.c @@ -906,7 +906,7 @@ char *yytext; * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5LTanalyze.l b/hl/src/H5LTanalyze.l index a573f8137f3..f78a4159567 100644 --- a/hl/src/H5LTanalyze.l +++ b/hl/src/H5LTanalyze.l @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5LTparse.y b/hl/src/H5LTparse.y index 3a14e769419..97132a1df66 100644 --- a/hl/src/H5LTparse.y +++ b/hl/src/H5LTparse.y @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5LTprivate.h b/hl/src/H5LTprivate.h index bea2e63c8eb..bf7c277a3fb 100644 --- a/hl/src/H5LTprivate.h +++ b/hl/src/H5LTprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5LTpublic.h b/hl/src/H5LTpublic.h index f5eea20eb60..67abf05dae5 100644 --- a/hl/src/H5LTpublic.h +++ b/hl/src/H5LTpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5PT.c b/hl/src/H5PT.c index 183cae83bea..c8cefd3a324 100644 --- a/hl/src/H5PT.c +++ b/hl/src/H5PT.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5PTprivate.h b/hl/src/H5PTprivate.h index 1e88cec182a..f25f4f9063b 100644 --- a/hl/src/H5PTprivate.h +++ b/hl/src/H5PTprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5PTpublic.h b/hl/src/H5PTpublic.h index 607e385c5c7..babf3152b84 100644 --- a/hl/src/H5PTpublic.h +++ b/hl/src/H5PTpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5TB.c b/hl/src/H5TB.c index e1c2382887e..842e52b9e69 100644 --- a/hl/src/H5TB.c +++ b/hl/src/H5TB.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5TBprivate.h b/hl/src/H5TBprivate.h index ce591689aea..11346f6d862 100644 --- a/hl/src/H5TBprivate.h +++ b/hl/src/H5TBprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/H5TBpublic.h b/hl/src/H5TBpublic.h index dbeb330a1db..1dfee515b34 100644 --- a/hl/src/H5TBpublic.h +++ b/hl/src/H5TBpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/src/Makefile.am b/hl/src/Makefile.am index 650a89f5c62..d3fd894904a 100644 --- a/hl/src/Makefile.am +++ b/hl/src/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/src/hdf5_hl.h b/hl/src/hdf5_hl.h index 7757b392e19..ffbeedfc647 100644 --- a/hl/src/hdf5_hl.h +++ b/hl/src/hdf5_hl.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/test/CMakeTests.cmake b/hl/test/CMakeTests.cmake index 6ec5f29a534..038ec332373 100644 --- a/hl/test/CMakeTests.cmake +++ b/hl/test/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/test/H5srcdir_str.h.in b/hl/test/H5srcdir_str.h.in index 55280cd641c..3e161381abb 100644 --- a/hl/test/H5srcdir_str.h.in +++ b/hl/test/H5srcdir_str.h.in @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/test/Makefile.am b/hl/test/Makefile.am index 6f66291b25d..4650ed2fa04 100644 --- a/hl/test/Makefile.am +++ b/hl/test/Makefile.am @@ -3,7 +3,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/test/gen_test_ds.c b/hl/test/gen_test_ds.c index 525f44a046b..edcdd1b42bb 100644 --- a/hl/test/gen_test_ds.c +++ b/hl/test/gen_test_ds.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/test/gen_test_ld.c b/hl/test/gen_test_ld.c index 7eefd5ca6c6..51e4bb023fe 100644 --- a/hl/test/gen_test_ld.c +++ b/hl/test/gen_test_ld.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/test/h5hltest.h b/hl/test/h5hltest.h index 3d58ed60917..fdf09c30977 100644 --- a/hl/test/h5hltest.h +++ b/hl/test/h5hltest.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/test/pal_rgb.h b/hl/test/pal_rgb.h index 8409f7ed696..af2e2320569 100644 --- a/hl/test/pal_rgb.h +++ b/hl/test/pal_rgb.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/test/test_ds.c b/hl/test/test_ds.c index 0172cb45a22..117f9589347 100644 --- a/hl/test/test_ds.c +++ b/hl/test/test_ds.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/test/test_dset_append.c b/hl/test/test_dset_append.c index d3e385532b7..e00bcc1477d 100644 --- a/hl/test/test_dset_append.c +++ b/hl/test/test_dset_append.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/test/test_file_image.c b/hl/test/test_file_image.c index 9cb7f453e44..8072b95ee7d 100644 --- a/hl/test/test_file_image.c +++ b/hl/test/test_file_image.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/test/test_h5do_compat.c b/hl/test/test_h5do_compat.c index 3d26f7eb25b..6c75918c9ba 100644 --- a/hl/test/test_h5do_compat.c +++ b/hl/test/test_h5do_compat.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/test/test_image.c b/hl/test/test_image.c index b9f290e9d45..3e5945d958c 100644 --- a/hl/test/test_image.c +++ b/hl/test/test_image.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/test/test_ld.c b/hl/test/test_ld.c index b0579d5d420..c65992506d2 100644 --- a/hl/test/test_ld.c +++ b/hl/test/test_ld.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/test/test_lite.c b/hl/test/test_lite.c index 1ec81238a9d..7d40e3deed1 100644 --- a/hl/test/test_lite.c +++ b/hl/test/test_lite.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/test/test_packet.c b/hl/test/test_packet.c index 8baa38cce13..7bda487faab 100644 --- a/hl/test/test_packet.c +++ b/hl/test/test_packet.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/test/test_packet_vlen.c b/hl/test/test_packet_vlen.c index d17fcf1412f..a23a2f71565 100644 --- a/hl/test/test_packet_vlen.c +++ b/hl/test/test_packet_vlen.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/test/test_table.c b/hl/test/test_table.c index 4aa359fedcd..8545aac708a 100644 --- a/hl/test/test_table.c +++ b/hl/test/test_table.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/tools/Makefile.am b/hl/tools/Makefile.am index 620eb5dbfcc..d30551ca85b 100644 --- a/hl/tools/Makefile.am +++ b/hl/tools/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/tools/h5watch/CMakeTests.cmake b/hl/tools/h5watch/CMakeTests.cmake index b807fad6264..19790da4e9d 100644 --- a/hl/tools/h5watch/CMakeTests.cmake +++ b/hl/tools/h5watch/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/tools/h5watch/Makefile.am b/hl/tools/h5watch/Makefile.am index 8f577754561..e4ae1a2a3d6 100644 --- a/hl/tools/h5watch/Makefile.am +++ b/hl/tools/h5watch/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/hl/tools/h5watch/extend_dset.c b/hl/tools/h5watch/extend_dset.c index abba782399a..1b68d8a323f 100644 --- a/hl/tools/h5watch/extend_dset.c +++ b/hl/tools/h5watch/extend_dset.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/tools/h5watch/h5watch.c b/hl/tools/h5watch/h5watch.c index b4dd62fd70c..ec05a886952 100644 --- a/hl/tools/h5watch/h5watch.c +++ b/hl/tools/h5watch/h5watch.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/tools/h5watch/h5watch.h b/hl/tools/h5watch/h5watch.h index 188707bba2b..a7c625af65e 100644 --- a/hl/tools/h5watch/h5watch.h +++ b/hl/tools/h5watch/h5watch.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/tools/h5watch/h5watchgentest.c b/hl/tools/h5watch/h5watchgentest.c index ef47926a972..f3e30757777 100644 --- a/hl/tools/h5watch/h5watchgentest.c +++ b/hl/tools/h5watch/h5watchgentest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/hl/tools/h5watch/testh5watch.sh.in b/hl/tools/h5watch/testh5watch.sh.in index a1daeec9bf1..05ecfab8bf0 100644 --- a/hl/tools/h5watch/testh5watch.sh.in +++ b/hl/tools/h5watch/testh5watch.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/java/Makefile.am b/java/Makefile.am index b21f17835be..ab534890f5d 100644 --- a/java/Makefile.am +++ b/java/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/java/src/Makefile.am b/java/src/Makefile.am index d73cdf2370c..e194a0fce5d 100644 --- a/java/src/Makefile.am +++ b/java/src/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/java/src/hdf/hdf5lib/H5.java b/java/src/hdf/hdf5lib/H5.java index 54c51798cf7..c2b1c3c009f 100644 --- a/java/src/hdf/hdf5lib/H5.java +++ b/java/src/hdf/hdf5lib/H5.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/HDF5Constants.java b/java/src/hdf/hdf5lib/HDF5Constants.java index 0260ce879e9..564e2a617d1 100644 --- a/java/src/hdf/hdf5lib/HDF5Constants.java +++ b/java/src/hdf/hdf5lib/HDF5Constants.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/HDFArray.java b/java/src/hdf/hdf5lib/HDFArray.java index 637a8966e6c..15072cabdda 100644 --- a/java/src/hdf/hdf5lib/HDFArray.java +++ b/java/src/hdf/hdf5lib/HDFArray.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/HDFNativeData.java b/java/src/hdf/hdf5lib/HDFNativeData.java index adfa4c5ee34..a6155ca2a65 100644 --- a/java/src/hdf/hdf5lib/HDFNativeData.java +++ b/java/src/hdf/hdf5lib/HDFNativeData.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/Callbacks.java b/java/src/hdf/hdf5lib/callbacks/Callbacks.java index 013e0ec0ae7..a106ab67625 100644 --- a/java/src/hdf/hdf5lib/callbacks/Callbacks.java +++ b/java/src/hdf/hdf5lib/callbacks/Callbacks.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5A_iterate_cb.java b/java/src/hdf/hdf5lib/callbacks/H5A_iterate_cb.java index 2d37044b1e1..b7471805d68 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5A_iterate_cb.java +++ b/java/src/hdf/hdf5lib/callbacks/H5A_iterate_cb.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5A_iterate_t.java b/java/src/hdf/hdf5lib/callbacks/H5A_iterate_t.java index 45bde9a51bf..c25f08d169a 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5A_iterate_t.java +++ b/java/src/hdf/hdf5lib/callbacks/H5A_iterate_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5D_append_cb.java b/java/src/hdf/hdf5lib/callbacks/H5D_append_cb.java index 92024f8f16a..d29a4199fa0 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5D_append_cb.java +++ b/java/src/hdf/hdf5lib/callbacks/H5D_append_cb.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5D_append_t.java b/java/src/hdf/hdf5lib/callbacks/H5D_append_t.java index cb178963875..676b0c72c2d 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5D_append_t.java +++ b/java/src/hdf/hdf5lib/callbacks/H5D_append_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5D_iterate_cb.java b/java/src/hdf/hdf5lib/callbacks/H5D_iterate_cb.java index f9ea6a96b3a..02f3069572d 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5D_iterate_cb.java +++ b/java/src/hdf/hdf5lib/callbacks/H5D_iterate_cb.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5D_iterate_t.java b/java/src/hdf/hdf5lib/callbacks/H5D_iterate_t.java index fb48c73954d..43bf570d496 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5D_iterate_t.java +++ b/java/src/hdf/hdf5lib/callbacks/H5D_iterate_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5E_walk_cb.java b/java/src/hdf/hdf5lib/callbacks/H5E_walk_cb.java index a9690a55fe1..b4e9eb61592 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5E_walk_cb.java +++ b/java/src/hdf/hdf5lib/callbacks/H5E_walk_cb.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5E_walk_t.java b/java/src/hdf/hdf5lib/callbacks/H5E_walk_t.java index 131b33fd0ea..d7c2e017815 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5E_walk_t.java +++ b/java/src/hdf/hdf5lib/callbacks/H5E_walk_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5L_iterate_opdata_t.java b/java/src/hdf/hdf5lib/callbacks/H5L_iterate_opdata_t.java index c657dbc49cb..bc7a173cae5 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5L_iterate_opdata_t.java +++ b/java/src/hdf/hdf5lib/callbacks/H5L_iterate_opdata_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5L_iterate_t.java b/java/src/hdf/hdf5lib/callbacks/H5L_iterate_t.java index cf0ac0e5b78..1aaaabea5d6 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5L_iterate_t.java +++ b/java/src/hdf/hdf5lib/callbacks/H5L_iterate_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5O_iterate_opdata_t.java b/java/src/hdf/hdf5lib/callbacks/H5O_iterate_opdata_t.java index f4a4412afdd..9e53c729736 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5O_iterate_opdata_t.java +++ b/java/src/hdf/hdf5lib/callbacks/H5O_iterate_opdata_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5O_iterate_t.java b/java/src/hdf/hdf5lib/callbacks/H5O_iterate_t.java index f0dd587d88c..74836a2eb5c 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5O_iterate_t.java +++ b/java/src/hdf/hdf5lib/callbacks/H5O_iterate_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_cls_close_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_cls_close_func_cb.java index e4f10ccfa33..4eccb24a003 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5P_cls_close_func_cb.java +++ b/java/src/hdf/hdf5lib/callbacks/H5P_cls_close_func_cb.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_cls_close_func_t.java b/java/src/hdf/hdf5lib/callbacks/H5P_cls_close_func_t.java index 059addfa9fb..45b0a98abd6 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5P_cls_close_func_t.java +++ b/java/src/hdf/hdf5lib/callbacks/H5P_cls_close_func_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_cls_copy_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_cls_copy_func_cb.java index bdaad5f9324..332181079d8 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5P_cls_copy_func_cb.java +++ b/java/src/hdf/hdf5lib/callbacks/H5P_cls_copy_func_cb.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_cls_copy_func_t.java b/java/src/hdf/hdf5lib/callbacks/H5P_cls_copy_func_t.java index 4b7cf116d1e..82483070bc3 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5P_cls_copy_func_t.java +++ b/java/src/hdf/hdf5lib/callbacks/H5P_cls_copy_func_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_cls_create_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_cls_create_func_cb.java index 0b9ced20059..43f915a4943 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5P_cls_create_func_cb.java +++ b/java/src/hdf/hdf5lib/callbacks/H5P_cls_create_func_cb.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_cls_create_func_t.java b/java/src/hdf/hdf5lib/callbacks/H5P_cls_create_func_t.java index 917264d9a9c..67eca814afe 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5P_cls_create_func_t.java +++ b/java/src/hdf/hdf5lib/callbacks/H5P_cls_create_func_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_iterate_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_iterate_cb.java index 941fd150a3e..6586a6aca8f 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5P_iterate_cb.java +++ b/java/src/hdf/hdf5lib/callbacks/H5P_iterate_cb.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_iterate_t.java b/java/src/hdf/hdf5lib/callbacks/H5P_iterate_t.java index 9c0d0eb6851..b2c6fe494e2 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5P_iterate_t.java +++ b/java/src/hdf/hdf5lib/callbacks/H5P_iterate_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_prp_close_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_prp_close_func_cb.java index 33bde76df4b..4eb3b33ba19 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5P_prp_close_func_cb.java +++ b/java/src/hdf/hdf5lib/callbacks/H5P_prp_close_func_cb.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_prp_compare_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_prp_compare_func_cb.java index 3149d171fe1..91c2863c95a 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5P_prp_compare_func_cb.java +++ b/java/src/hdf/hdf5lib/callbacks/H5P_prp_compare_func_cb.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_prp_copy_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_prp_copy_func_cb.java index d3d6b37365a..49827d1666b 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5P_prp_copy_func_cb.java +++ b/java/src/hdf/hdf5lib/callbacks/H5P_prp_copy_func_cb.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_prp_create_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_prp_create_func_cb.java index 2fe33388f91..0391596994f 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5P_prp_create_func_cb.java +++ b/java/src/hdf/hdf5lib/callbacks/H5P_prp_create_func_cb.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_prp_delete_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_prp_delete_func_cb.java index 30192842d99..477612ff23b 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5P_prp_delete_func_cb.java +++ b/java/src/hdf/hdf5lib/callbacks/H5P_prp_delete_func_cb.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_prp_get_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_prp_get_func_cb.java index cfc8e314ab6..2bf08ce4322 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5P_prp_get_func_cb.java +++ b/java/src/hdf/hdf5lib/callbacks/H5P_prp_get_func_cb.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_prp_set_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_prp_set_func_cb.java index 22728699782..11f00d65fad 100644 --- a/java/src/hdf/hdf5lib/callbacks/H5P_prp_set_func_cb.java +++ b/java/src/hdf/hdf5lib/callbacks/H5P_prp_set_func_cb.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/callbacks/package-info.java b/java/src/hdf/hdf5lib/callbacks/package-info.java index bf7bf3c79c1..323442c79b1 100644 --- a/java/src/hdf/hdf5lib/callbacks/package-info.java +++ b/java/src/hdf/hdf5lib/callbacks/package-info.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5AttributeException.java b/java/src/hdf/hdf5lib/exceptions/HDF5AttributeException.java index aff9f99c0d1..94999d2b470 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5AttributeException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5AttributeException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5BtreeException.java b/java/src/hdf/hdf5lib/exceptions/HDF5BtreeException.java index ba70615ebea..64ed54d64fa 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5BtreeException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5BtreeException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5DataFiltersException.java b/java/src/hdf/hdf5lib/exceptions/HDF5DataFiltersException.java index 77b25ecdef9..255f1fea68d 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5DataFiltersException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5DataFiltersException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5DataStorageException.java b/java/src/hdf/hdf5lib/exceptions/HDF5DataStorageException.java index 6097f604abe..7a033232521 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5DataStorageException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5DataStorageException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5DatasetInterfaceException.java b/java/src/hdf/hdf5lib/exceptions/HDF5DatasetInterfaceException.java index e8747bc37f5..3d4f50d28d6 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5DatasetInterfaceException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5DatasetInterfaceException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5DataspaceInterfaceException.java b/java/src/hdf/hdf5lib/exceptions/HDF5DataspaceInterfaceException.java index 4ab514f126f..7bd4ad57ee1 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5DataspaceInterfaceException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5DataspaceInterfaceException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5DatatypeInterfaceException.java b/java/src/hdf/hdf5lib/exceptions/HDF5DatatypeInterfaceException.java index ec45ea61926..18c07cef2c0 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5DatatypeInterfaceException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5DatatypeInterfaceException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5Exception.java b/java/src/hdf/hdf5lib/exceptions/HDF5Exception.java index de5ee3aee48..403c7684ac6 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5Exception.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5Exception.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5ExternalFileListException.java b/java/src/hdf/hdf5lib/exceptions/HDF5ExternalFileListException.java index 55baaa9ff80..05a78b8d5ac 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5ExternalFileListException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5ExternalFileListException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5FileInterfaceException.java b/java/src/hdf/hdf5lib/exceptions/HDF5FileInterfaceException.java index 07110de22b1..56961a5af73 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5FileInterfaceException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5FileInterfaceException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5FunctionArgumentException.java b/java/src/hdf/hdf5lib/exceptions/HDF5FunctionArgumentException.java index 38e919ec3ff..a212989b23a 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5FunctionArgumentException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5FunctionArgumentException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5FunctionEntryExitException.java b/java/src/hdf/hdf5lib/exceptions/HDF5FunctionEntryExitException.java index 302107d4a3d..278589605b0 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5FunctionEntryExitException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5FunctionEntryExitException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5HeapException.java b/java/src/hdf/hdf5lib/exceptions/HDF5HeapException.java index 72272a08910..6718806c61a 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5HeapException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5HeapException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5IdException.java b/java/src/hdf/hdf5lib/exceptions/HDF5IdException.java index f28ce37114b..deb85a1050c 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5IdException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5IdException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5InternalErrorException.java b/java/src/hdf/hdf5lib/exceptions/HDF5InternalErrorException.java index 0f1d4207ebb..3923a6a3183 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5InternalErrorException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5InternalErrorException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5JavaException.java b/java/src/hdf/hdf5lib/exceptions/HDF5JavaException.java index 90a4fa6eee2..65f4667249e 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5JavaException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5JavaException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5LibraryException.java b/java/src/hdf/hdf5lib/exceptions/HDF5LibraryException.java index 70e157b817e..31d29b2ca2b 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5LibraryException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5LibraryException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5LowLevelIOException.java b/java/src/hdf/hdf5lib/exceptions/HDF5LowLevelIOException.java index a8b197655e0..fba46c3abce 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5LowLevelIOException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5LowLevelIOException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5MetaDataCacheException.java b/java/src/hdf/hdf5lib/exceptions/HDF5MetaDataCacheException.java index da96218b01f..0394fb6763c 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5MetaDataCacheException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5MetaDataCacheException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5ObjectHeaderException.java b/java/src/hdf/hdf5lib/exceptions/HDF5ObjectHeaderException.java index 151381673d9..4708707bdce 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5ObjectHeaderException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5ObjectHeaderException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5PropertyListInterfaceException.java b/java/src/hdf/hdf5lib/exceptions/HDF5PropertyListInterfaceException.java index 99dc369ab5f..86b5b26b9e4 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5PropertyListInterfaceException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5PropertyListInterfaceException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5ReferenceException.java b/java/src/hdf/hdf5lib/exceptions/HDF5ReferenceException.java index 4c0f9ba5592..8f470b14ec3 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5ReferenceException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5ReferenceException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5ResourceUnavailableException.java b/java/src/hdf/hdf5lib/exceptions/HDF5ResourceUnavailableException.java index dde27f7991e..d3e46d4aff6 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5ResourceUnavailableException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5ResourceUnavailableException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5SymbolTableException.java b/java/src/hdf/hdf5lib/exceptions/HDF5SymbolTableException.java index 62657ea3c7f..df3d43d6f4d 100644 --- a/java/src/hdf/hdf5lib/exceptions/HDF5SymbolTableException.java +++ b/java/src/hdf/hdf5lib/exceptions/HDF5SymbolTableException.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/exceptions/package-info.java b/java/src/hdf/hdf5lib/exceptions/package-info.java index 784e57d6dda..f7e229444e5 100644 --- a/java/src/hdf/hdf5lib/exceptions/package-info.java +++ b/java/src/hdf/hdf5lib/exceptions/package-info.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/package-info.java b/java/src/hdf/hdf5lib/package-info.java index e7421975917..77ef151621f 100644 --- a/java/src/hdf/hdf5lib/package-info.java +++ b/java/src/hdf/hdf5lib/package-info.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/structs/H5AC_cache_config_t.java b/java/src/hdf/hdf5lib/structs/H5AC_cache_config_t.java index a224124f3f5..b8cf7e97f04 100644 --- a/java/src/hdf/hdf5lib/structs/H5AC_cache_config_t.java +++ b/java/src/hdf/hdf5lib/structs/H5AC_cache_config_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/structs/H5A_info_t.java b/java/src/hdf/hdf5lib/structs/H5A_info_t.java index 364e48079db..0ba6f4b638e 100644 --- a/java/src/hdf/hdf5lib/structs/H5A_info_t.java +++ b/java/src/hdf/hdf5lib/structs/H5A_info_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/structs/H5E_error2_t.java b/java/src/hdf/hdf5lib/structs/H5E_error2_t.java index 1be836f3a75..b7dbb57bf76 100644 --- a/java/src/hdf/hdf5lib/structs/H5E_error2_t.java +++ b/java/src/hdf/hdf5lib/structs/H5E_error2_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/structs/H5FD_hdfs_fapl_t.java b/java/src/hdf/hdf5lib/structs/H5FD_hdfs_fapl_t.java index 986133448f0..20d63648ccb 100644 --- a/java/src/hdf/hdf5lib/structs/H5FD_hdfs_fapl_t.java +++ b/java/src/hdf/hdf5lib/structs/H5FD_hdfs_fapl_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/structs/H5FD_ros3_fapl_t.java b/java/src/hdf/hdf5lib/structs/H5FD_ros3_fapl_t.java index 62b29218e39..f820f9ed584 100644 --- a/java/src/hdf/hdf5lib/structs/H5FD_ros3_fapl_t.java +++ b/java/src/hdf/hdf5lib/structs/H5FD_ros3_fapl_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/structs/H5F_info2_t.java b/java/src/hdf/hdf5lib/structs/H5F_info2_t.java index 1961b16f75b..0cdecab5c07 100644 --- a/java/src/hdf/hdf5lib/structs/H5F_info2_t.java +++ b/java/src/hdf/hdf5lib/structs/H5F_info2_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/structs/H5G_info_t.java b/java/src/hdf/hdf5lib/structs/H5G_info_t.java index 10ae76a72a6..0bcf6256f80 100644 --- a/java/src/hdf/hdf5lib/structs/H5G_info_t.java +++ b/java/src/hdf/hdf5lib/structs/H5G_info_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/structs/H5L_info_t.java b/java/src/hdf/hdf5lib/structs/H5L_info_t.java index 38b64d64115..aa04c97d2d4 100644 --- a/java/src/hdf/hdf5lib/structs/H5L_info_t.java +++ b/java/src/hdf/hdf5lib/structs/H5L_info_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/structs/H5O_hdr_info_t.java b/java/src/hdf/hdf5lib/structs/H5O_hdr_info_t.java index 16a0eaec92c..3c8a2938337 100644 --- a/java/src/hdf/hdf5lib/structs/H5O_hdr_info_t.java +++ b/java/src/hdf/hdf5lib/structs/H5O_hdr_info_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/structs/H5O_info_t.java b/java/src/hdf/hdf5lib/structs/H5O_info_t.java index 011a88e3585..dad690fa62d 100644 --- a/java/src/hdf/hdf5lib/structs/H5O_info_t.java +++ b/java/src/hdf/hdf5lib/structs/H5O_info_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/structs/H5O_native_info_t.java b/java/src/hdf/hdf5lib/structs/H5O_native_info_t.java index ec01b402922..33a0f730fb4 100644 --- a/java/src/hdf/hdf5lib/structs/H5O_native_info_t.java +++ b/java/src/hdf/hdf5lib/structs/H5O_native_info_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/structs/H5O_token_t.java b/java/src/hdf/hdf5lib/structs/H5O_token_t.java index 8f2b7e27ac8..3e59276b23c 100644 --- a/java/src/hdf/hdf5lib/structs/H5O_token_t.java +++ b/java/src/hdf/hdf5lib/structs/H5O_token_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/structs/H5_ih_info_t.java b/java/src/hdf/hdf5lib/structs/H5_ih_info_t.java index 3213695d823..a258c2af19c 100644 --- a/java/src/hdf/hdf5lib/structs/H5_ih_info_t.java +++ b/java/src/hdf/hdf5lib/structs/H5_ih_info_t.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/hdf/hdf5lib/structs/package-info.java b/java/src/hdf/hdf5lib/structs/package-info.java index 7bd3dee9bba..9e127233009 100644 --- a/java/src/hdf/hdf5lib/structs/package-info.java +++ b/java/src/hdf/hdf5lib/structs/package-info.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/Makefile.am b/java/src/jni/Makefile.am index bf086d23aa2..a52d1cbd27e 100644 --- a/java/src/jni/Makefile.am +++ b/java/src/jni/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/java/src/jni/exceptionImp.c b/java/src/jni/exceptionImp.c index 6b2004ddeb4..83d1afaf1ee 100644 --- a/java/src/jni/exceptionImp.c +++ b/java/src/jni/exceptionImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/exceptionImp.h b/java/src/jni/exceptionImp.h index c7375e73cd6..3a267e6ae24 100644 --- a/java/src/jni/exceptionImp.h +++ b/java/src/jni/exceptionImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5Constants.c b/java/src/jni/h5Constants.c index 41cd6344033..8a39513695b 100644 --- a/java/src/jni/h5Constants.c +++ b/java/src/jni/h5Constants.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5Imp.c b/java/src/jni/h5Imp.c index 6092419c256..77ad4a9dbb2 100644 --- a/java/src/jni/h5Imp.c +++ b/java/src/jni/h5Imp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5Imp.h b/java/src/jni/h5Imp.h index 8ab766215a4..e4ad2e46f98 100644 --- a/java/src/jni/h5Imp.h +++ b/java/src/jni/h5Imp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5aImp.c b/java/src/jni/h5aImp.c index b6ed1c4c3e1..47388b1b884 100644 --- a/java/src/jni/h5aImp.c +++ b/java/src/jni/h5aImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5aImp.h b/java/src/jni/h5aImp.h index 094f9904d4a..a5d6141c21f 100644 --- a/java/src/jni/h5aImp.h +++ b/java/src/jni/h5aImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5dImp.c b/java/src/jni/h5dImp.c index 363936b76e9..405c471b9f9 100644 --- a/java/src/jni/h5dImp.c +++ b/java/src/jni/h5dImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5dImp.h b/java/src/jni/h5dImp.h index f79cc2cfb55..7b1916c48c1 100644 --- a/java/src/jni/h5dImp.h +++ b/java/src/jni/h5dImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5eImp.c b/java/src/jni/h5eImp.c index 89c9362626f..0534025e0f4 100644 --- a/java/src/jni/h5eImp.c +++ b/java/src/jni/h5eImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5eImp.h b/java/src/jni/h5eImp.h index 95e43fa6d20..13716f22caf 100644 --- a/java/src/jni/h5eImp.h +++ b/java/src/jni/h5eImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5fImp.c b/java/src/jni/h5fImp.c index 6bd17a786cb..9245d7b2118 100644 --- a/java/src/jni/h5fImp.c +++ b/java/src/jni/h5fImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5fImp.h b/java/src/jni/h5fImp.h index bf2f1991c5e..4a4ca8047a2 100644 --- a/java/src/jni/h5fImp.h +++ b/java/src/jni/h5fImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5gImp.c b/java/src/jni/h5gImp.c index 54b72b6c09a..80acfd74918 100644 --- a/java/src/jni/h5gImp.c +++ b/java/src/jni/h5gImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5gImp.h b/java/src/jni/h5gImp.h index b7130ed13a5..0c4c814850e 100644 --- a/java/src/jni/h5gImp.h +++ b/java/src/jni/h5gImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5iImp.c b/java/src/jni/h5iImp.c index 728c3b14ed5..507299bda6f 100644 --- a/java/src/jni/h5iImp.c +++ b/java/src/jni/h5iImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5iImp.h b/java/src/jni/h5iImp.h index 08d5fa1c9ff..1ad8a393dad 100644 --- a/java/src/jni/h5iImp.h +++ b/java/src/jni/h5iImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5jni.h b/java/src/jni/h5jni.h index b1bd968ba7c..6ffebde12e2 100644 --- a/java/src/jni/h5jni.h +++ b/java/src/jni/h5jni.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5lImp.c b/java/src/jni/h5lImp.c index 7d487999f96..5fc3a8007cb 100644 --- a/java/src/jni/h5lImp.c +++ b/java/src/jni/h5lImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5lImp.h b/java/src/jni/h5lImp.h index 85aff038f24..131c59173cb 100644 --- a/java/src/jni/h5lImp.h +++ b/java/src/jni/h5lImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5oImp.c b/java/src/jni/h5oImp.c index 60a6e4fbf90..81c6ebc592c 100644 --- a/java/src/jni/h5oImp.c +++ b/java/src/jni/h5oImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5oImp.h b/java/src/jni/h5oImp.h index a7d7f3171a6..42245e6c6a5 100644 --- a/java/src/jni/h5oImp.h +++ b/java/src/jni/h5oImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pACPLImp.c b/java/src/jni/h5pACPLImp.c index 7c9895a6de1..69af3a336bb 100644 --- a/java/src/jni/h5pACPLImp.c +++ b/java/src/jni/h5pACPLImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pACPLImp.h b/java/src/jni/h5pACPLImp.h index 15fcf33b949..ff5c30cb305 100644 --- a/java/src/jni/h5pACPLImp.h +++ b/java/src/jni/h5pACPLImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pDAPLImp.c b/java/src/jni/h5pDAPLImp.c index 44378a1dc5e..b6ae1836bb9 100644 --- a/java/src/jni/h5pDAPLImp.c +++ b/java/src/jni/h5pDAPLImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pDAPLImp.h b/java/src/jni/h5pDAPLImp.h index bf11fef9bcf..ac4828b8403 100644 --- a/java/src/jni/h5pDAPLImp.h +++ b/java/src/jni/h5pDAPLImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pDCPLImp.c b/java/src/jni/h5pDCPLImp.c index ebe12cb5455..4903f61e8a1 100644 --- a/java/src/jni/h5pDCPLImp.c +++ b/java/src/jni/h5pDCPLImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pDCPLImp.h b/java/src/jni/h5pDCPLImp.h index 46d1cc3d763..eb01518d881 100644 --- a/java/src/jni/h5pDCPLImp.h +++ b/java/src/jni/h5pDCPLImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pDXPLImp.c b/java/src/jni/h5pDXPLImp.c index 3b519ef2709..cbefa18a8e6 100644 --- a/java/src/jni/h5pDXPLImp.c +++ b/java/src/jni/h5pDXPLImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pDXPLImp.h b/java/src/jni/h5pDXPLImp.h index 21c40c4ea74..f3f90e54341 100644 --- a/java/src/jni/h5pDXPLImp.h +++ b/java/src/jni/h5pDXPLImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pFAPLImp.c b/java/src/jni/h5pFAPLImp.c index 24b7f357e50..a78365b5d4b 100644 --- a/java/src/jni/h5pFAPLImp.c +++ b/java/src/jni/h5pFAPLImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pFAPLImp.h b/java/src/jni/h5pFAPLImp.h index 3c5988f56a9..089edf6fafd 100644 --- a/java/src/jni/h5pFAPLImp.h +++ b/java/src/jni/h5pFAPLImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pFCPLImp.c b/java/src/jni/h5pFCPLImp.c index 56b4e921aae..ce9b7f7525d 100644 --- a/java/src/jni/h5pFCPLImp.c +++ b/java/src/jni/h5pFCPLImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pFCPLImp.h b/java/src/jni/h5pFCPLImp.h index 94411d6216c..b740cf245d8 100644 --- a/java/src/jni/h5pFCPLImp.h +++ b/java/src/jni/h5pFCPLImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pGAPLImp.c b/java/src/jni/h5pGAPLImp.c index b38bd4b3b23..3a5db4edf34 100644 --- a/java/src/jni/h5pGAPLImp.c +++ b/java/src/jni/h5pGAPLImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pGAPLImp.h b/java/src/jni/h5pGAPLImp.h index 9091ff8ab63..b3148a9da70 100644 --- a/java/src/jni/h5pGAPLImp.h +++ b/java/src/jni/h5pGAPLImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pGCPLImp.c b/java/src/jni/h5pGCPLImp.c index b71558012ce..d341fea8c12 100644 --- a/java/src/jni/h5pGCPLImp.c +++ b/java/src/jni/h5pGCPLImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pGCPLImp.h b/java/src/jni/h5pGCPLImp.h index 5090c3a2088..6269449030a 100644 --- a/java/src/jni/h5pGCPLImp.h +++ b/java/src/jni/h5pGCPLImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pImp.c b/java/src/jni/h5pImp.c index 6c17984ae24..fa6b97982d6 100644 --- a/java/src/jni/h5pImp.c +++ b/java/src/jni/h5pImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pImp.h b/java/src/jni/h5pImp.h index 189e9d7b892..8872ebff670 100644 --- a/java/src/jni/h5pImp.h +++ b/java/src/jni/h5pImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pLAPLImp.c b/java/src/jni/h5pLAPLImp.c index 36813e33fc9..6db4ef5b59f 100644 --- a/java/src/jni/h5pLAPLImp.c +++ b/java/src/jni/h5pLAPLImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pLAPLImp.h b/java/src/jni/h5pLAPLImp.h index 8ddc8d26449..7337a72c1f2 100644 --- a/java/src/jni/h5pLAPLImp.h +++ b/java/src/jni/h5pLAPLImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pLCPLImp.c b/java/src/jni/h5pLCPLImp.c index e27a9eb1570..e14a846b806 100644 --- a/java/src/jni/h5pLCPLImp.c +++ b/java/src/jni/h5pLCPLImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pLCPLImp.h b/java/src/jni/h5pLCPLImp.h index 4cdf6cd6c6f..5bcabd1eba6 100644 --- a/java/src/jni/h5pLCPLImp.h +++ b/java/src/jni/h5pLCPLImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pOCPLImp.c b/java/src/jni/h5pOCPLImp.c index a743cbaa7f4..551856b2bc5 100644 --- a/java/src/jni/h5pOCPLImp.c +++ b/java/src/jni/h5pOCPLImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pOCPLImp.h b/java/src/jni/h5pOCPLImp.h index 94d397bab5b..66744910850 100644 --- a/java/src/jni/h5pOCPLImp.h +++ b/java/src/jni/h5pOCPLImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pOCpyPLImp.c b/java/src/jni/h5pOCpyPLImp.c index a78aaa259f0..439a214f248 100644 --- a/java/src/jni/h5pOCpyPLImp.c +++ b/java/src/jni/h5pOCpyPLImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pOCpyPLImp.h b/java/src/jni/h5pOCpyPLImp.h index 50ee972990c..c94afde832c 100644 --- a/java/src/jni/h5pOCpyPLImp.h +++ b/java/src/jni/h5pOCpyPLImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pStrCPLImp.c b/java/src/jni/h5pStrCPLImp.c index 3382f0aea30..430ec40e21c 100644 --- a/java/src/jni/h5pStrCPLImp.c +++ b/java/src/jni/h5pStrCPLImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5pStrCPLImp.h b/java/src/jni/h5pStrCPLImp.h index c0a7ec25351..ef967b0273b 100644 --- a/java/src/jni/h5pStrCPLImp.h +++ b/java/src/jni/h5pStrCPLImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5plImp.c b/java/src/jni/h5plImp.c index 9632e9e2609..7e739f872f2 100644 --- a/java/src/jni/h5plImp.c +++ b/java/src/jni/h5plImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5plImp.h b/java/src/jni/h5plImp.h index 410a34fca15..61c4d4e7607 100644 --- a/java/src/jni/h5plImp.h +++ b/java/src/jni/h5plImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5rImp.c b/java/src/jni/h5rImp.c index 4ccad5457a2..becae03cec4 100644 --- a/java/src/jni/h5rImp.c +++ b/java/src/jni/h5rImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5rImp.h b/java/src/jni/h5rImp.h index 5865495b87e..ec54f7077b0 100644 --- a/java/src/jni/h5rImp.h +++ b/java/src/jni/h5rImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5sImp.c b/java/src/jni/h5sImp.c index 738db67ffee..d1954b4f063 100644 --- a/java/src/jni/h5sImp.c +++ b/java/src/jni/h5sImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5sImp.h b/java/src/jni/h5sImp.h index a758d5af434..7ce5a285cf1 100644 --- a/java/src/jni/h5sImp.h +++ b/java/src/jni/h5sImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5tImp.c b/java/src/jni/h5tImp.c index 316455715ac..7512f8214b1 100644 --- a/java/src/jni/h5tImp.c +++ b/java/src/jni/h5tImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5tImp.h b/java/src/jni/h5tImp.h index e671456a9a6..0d45cc10fa9 100644 --- a/java/src/jni/h5tImp.h +++ b/java/src/jni/h5tImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5util.c b/java/src/jni/h5util.c index fb619aa619d..2ceb05258b5 100644 --- a/java/src/jni/h5util.c +++ b/java/src/jni/h5util.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5util.h b/java/src/jni/h5util.h index 011aaec428f..9a1359540e3 100644 --- a/java/src/jni/h5util.h +++ b/java/src/jni/h5util.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5vlImp.c b/java/src/jni/h5vlImp.c index b2fc6a1aebf..f395ddcbfc8 100644 --- a/java/src/jni/h5vlImp.c +++ b/java/src/jni/h5vlImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5vlImp.h b/java/src/jni/h5vlImp.h index d3248f53d13..fbb1d21adce 100644 --- a/java/src/jni/h5vlImp.h +++ b/java/src/jni/h5vlImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5zImp.c b/java/src/jni/h5zImp.c index 9c387fa33ee..bb39ec34403 100644 --- a/java/src/jni/h5zImp.c +++ b/java/src/jni/h5zImp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/h5zImp.h b/java/src/jni/h5zImp.h index 3092ae678ad..014c4e71b26 100644 --- a/java/src/jni/h5zImp.h +++ b/java/src/jni/h5zImp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/nativeData.c b/java/src/jni/nativeData.c index d014b64579d..d7ae6e77c60 100644 --- a/java/src/jni/nativeData.c +++ b/java/src/jni/nativeData.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/src/jni/nativeData.h b/java/src/jni/nativeData.h index 9bf313fc300..e345e6ab29f 100644 --- a/java/src/jni/nativeData.h +++ b/java/src/jni/nativeData.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/Makefile.am b/java/test/Makefile.am index 7f6ab0169a8..91934285586 100644 --- a/java/test/Makefile.am +++ b/java/test/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/java/test/TestAll.java b/java/test/TestAll.java index 5f3b14c3e01..b74e286a386 100644 --- a/java/test/TestAll.java +++ b/java/test/TestAll.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5.java b/java/test/TestH5.java index bfe2cc59540..b9252569132 100644 --- a/java/test/TestH5.java +++ b/java/test/TestH5.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5A.java b/java/test/TestH5A.java index 90fe24cda71..75ed41f43b9 100644 --- a/java/test/TestH5A.java +++ b/java/test/TestH5A.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Arw.java b/java/test/TestH5Arw.java index 205f3b0e3a4..4e1cdd67e59 100644 --- a/java/test/TestH5Arw.java +++ b/java/test/TestH5Arw.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5D.java b/java/test/TestH5D.java index db2a0428db7..794c7c39f72 100644 --- a/java/test/TestH5D.java +++ b/java/test/TestH5D.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Dparams.java b/java/test/TestH5Dparams.java index e42e10b74c1..1b5277d5135 100644 --- a/java/test/TestH5Dparams.java +++ b/java/test/TestH5Dparams.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Dplist.java b/java/test/TestH5Dplist.java index c3e4d69427e..5c9e0a57a72 100644 --- a/java/test/TestH5Dplist.java +++ b/java/test/TestH5Dplist.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Drw.java b/java/test/TestH5Drw.java index a5caabd72be..13514433234 100644 --- a/java/test/TestH5Drw.java +++ b/java/test/TestH5Drw.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5E.java b/java/test/TestH5E.java index bdd68028880..e919c5e6168 100644 --- a/java/test/TestH5E.java +++ b/java/test/TestH5E.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Edefault.java b/java/test/TestH5Edefault.java index c412cf2bfd2..2340186f35f 100644 --- a/java/test/TestH5Edefault.java +++ b/java/test/TestH5Edefault.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Eparams.java b/java/test/TestH5Eparams.java index 4300ae6041b..9551bd8c8ab 100644 --- a/java/test/TestH5Eparams.java +++ b/java/test/TestH5Eparams.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Eregister.java b/java/test/TestH5Eregister.java index b4c63e08627..225060f95b1 100644 --- a/java/test/TestH5Eregister.java +++ b/java/test/TestH5Eregister.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5F.java b/java/test/TestH5F.java index 5ae8f7e0c0e..8e21cbc8400 100644 --- a/java/test/TestH5F.java +++ b/java/test/TestH5F.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Fbasic.java b/java/test/TestH5Fbasic.java index 37be9431704..7c70f5eaf58 100644 --- a/java/test/TestH5Fbasic.java +++ b/java/test/TestH5Fbasic.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Fparams.java b/java/test/TestH5Fparams.java index 3fcfe3bf57c..3929505f9fe 100644 --- a/java/test/TestH5Fparams.java +++ b/java/test/TestH5Fparams.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Fswmr.java b/java/test/TestH5Fswmr.java index 823640d6eda..9953d589d79 100644 --- a/java/test/TestH5Fswmr.java +++ b/java/test/TestH5Fswmr.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5G.java b/java/test/TestH5G.java index 65fadde95c3..b37b222f662 100644 --- a/java/test/TestH5G.java +++ b/java/test/TestH5G.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Gbasic.java b/java/test/TestH5Gbasic.java index 8ec04dd7044..95e2f770258 100644 --- a/java/test/TestH5Gbasic.java +++ b/java/test/TestH5Gbasic.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Giterate.java b/java/test/TestH5Giterate.java index eb4b5bf4edd..172d76c0ade 100644 --- a/java/test/TestH5Giterate.java +++ b/java/test/TestH5Giterate.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Lbasic.java b/java/test/TestH5Lbasic.java index c81545bade7..1c66c794c58 100644 --- a/java/test/TestH5Lbasic.java +++ b/java/test/TestH5Lbasic.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Lcreate.java b/java/test/TestH5Lcreate.java index 822323e0f8e..7f390865622 100644 --- a/java/test/TestH5Lcreate.java +++ b/java/test/TestH5Lcreate.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Lparams.java b/java/test/TestH5Lparams.java index 78de663d73f..6c30b963724 100644 --- a/java/test/TestH5Lparams.java +++ b/java/test/TestH5Lparams.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Obasic.java b/java/test/TestH5Obasic.java index cac2e6aa0fc..ec6be419a95 100644 --- a/java/test/TestH5Obasic.java +++ b/java/test/TestH5Obasic.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Ocopy.java b/java/test/TestH5Ocopy.java index 18cb71aeb44..5ffb2284358 100644 --- a/java/test/TestH5Ocopy.java +++ b/java/test/TestH5Ocopy.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5OcopyOld.java b/java/test/TestH5OcopyOld.java index 0fa57e650f2..3f6ef7e9071 100644 --- a/java/test/TestH5OcopyOld.java +++ b/java/test/TestH5OcopyOld.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Ocreate.java b/java/test/TestH5Ocreate.java index eb57938d299..1363f07011c 100644 --- a/java/test/TestH5Ocreate.java +++ b/java/test/TestH5Ocreate.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Oparams.java b/java/test/TestH5Oparams.java index 296babceb68..3de1656b64e 100644 --- a/java/test/TestH5Oparams.java +++ b/java/test/TestH5Oparams.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5P.java b/java/test/TestH5P.java index 0571e3fe93d..7dc4cb70595 100644 --- a/java/test/TestH5P.java +++ b/java/test/TestH5P.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5PData.java b/java/test/TestH5PData.java index da45715fc3d..4edf29194bc 100644 --- a/java/test/TestH5PData.java +++ b/java/test/TestH5PData.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5PL.java b/java/test/TestH5PL.java index f6440cdb308..4b0adb0fe4e 100644 --- a/java/test/TestH5PL.java +++ b/java/test/TestH5PL.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Pfapl.java b/java/test/TestH5Pfapl.java index e5c04ee1b20..132318581e4 100644 --- a/java/test/TestH5Pfapl.java +++ b/java/test/TestH5Pfapl.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Pfaplhdfs.java b/java/test/TestH5Pfaplhdfs.java index e99967b4569..cbd5700efc2 100644 --- a/java/test/TestH5Pfaplhdfs.java +++ b/java/test/TestH5Pfaplhdfs.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Pfapls3.java b/java/test/TestH5Pfapls3.java index 06baef2ba1c..5ac4bc38cad 100644 --- a/java/test/TestH5Pfapls3.java +++ b/java/test/TestH5Pfapls3.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Plist.java b/java/test/TestH5Plist.java index c2a9862eb8e..1de4506fb5d 100644 --- a/java/test/TestH5Plist.java +++ b/java/test/TestH5Plist.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Pvirtual.java b/java/test/TestH5Pvirtual.java index b743f09fc15..852a51c0f5c 100644 --- a/java/test/TestH5Pvirtual.java +++ b/java/test/TestH5Pvirtual.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5R.java b/java/test/TestH5R.java index 1dcf992ce11..87ec715dd8a 100644 --- a/java/test/TestH5R.java +++ b/java/test/TestH5R.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Rref.java b/java/test/TestH5Rref.java index 520de74a010..b13e46ab9b7 100644 --- a/java/test/TestH5Rref.java +++ b/java/test/TestH5Rref.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5S.java b/java/test/TestH5S.java index 6e081a6c9a1..c5d065998ea 100644 --- a/java/test/TestH5S.java +++ b/java/test/TestH5S.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Sbasic.java b/java/test/TestH5Sbasic.java index 3b92c9249b0..7224f032cab 100644 --- a/java/test/TestH5Sbasic.java +++ b/java/test/TestH5Sbasic.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5T.java b/java/test/TestH5T.java index 0121cc24297..b861e80613b 100644 --- a/java/test/TestH5T.java +++ b/java/test/TestH5T.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Tbasic.java b/java/test/TestH5Tbasic.java index 8fb1e583616..8b583c2fa03 100644 --- a/java/test/TestH5Tbasic.java +++ b/java/test/TestH5Tbasic.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Tparams.java b/java/test/TestH5Tparams.java index a1710af1c95..38bd1f68038 100644 --- a/java/test/TestH5Tparams.java +++ b/java/test/TestH5Tparams.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5VL.java b/java/test/TestH5VL.java index 666219114fe..30cb96beabc 100644 --- a/java/test/TestH5VL.java +++ b/java/test/TestH5VL.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/TestH5Z.java b/java/test/TestH5Z.java index bc6bfc0bc31..1ef7cfc1870 100644 --- a/java/test/TestH5Z.java +++ b/java/test/TestH5Z.java @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/java/test/junit.sh.in b/java/test/junit.sh.in index edae8d0848c..3f642bbc9ab 100644 --- a/java/test/junit.sh.in +++ b/java/test/junit.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/m4/aclocal_fc.f90 b/m4/aclocal_fc.f90 index 918fc6769dd..10949d2ea37 100644 --- a/m4/aclocal_fc.f90 +++ b/m4/aclocal_fc.f90 @@ -5,7 +5,7 @@ ! * ! This file is part of HDF5. The full HDF5 copyright notice, including * ! terms governing use, modification, and redistribution, is contained in * -! the COPYING file, which can be found at the root of the source code * +! the LICENSE file, which can be found at the root of the source code * ! distribution tree, or in https://www.hdfgroup.org/licenses. * ! If you do not have access to either file, you may request a copy from * ! help@hdfgroup.org. * diff --git a/m4/aclocal_fc.m4 b/m4/aclocal_fc.m4 index 610ee300611..344788e5c6b 100644 --- a/m4/aclocal_fc.m4 +++ b/m4/aclocal_fc.m4 @@ -6,7 +6,7 @@ dnl All rights reserved. dnl dnl This file is part of HDF5. The full HDF5 copyright notice, including dnl terms governing use, modification, and redistribution, is contained in -dnl the COPYING file, which can be found at the root of the source code +dnl the LICENSE file, which can be found at the root of the source code dnl distribution tree, or in https://www.hdfgroup.org/licenses. dnl If you do not have access to either file, you may request a copy from dnl help@hdfgroup.org diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 5fabb8dafbe..7e6576671a6 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -147,7 +147,11 @@ New Features Documentation: -------------- - - + - The COPYING file has been renamed to LICENSE + + This is where most people will expect to find license information. The + COPYING_LBNL_HDF5 file has also been renamed to LICENSE_LBNL_HDF5. + The licenses are unchanged. Support for new platforms, languages and compilers @@ -435,7 +439,7 @@ CMake vs. Autotools installations While both build systems produce similar results, there are differences. Each system produces the same set of folders on Linux (only CMake works on standard Windows); bin, include, lib and share. Autotools places the -COPYING and RELEASE.txt file in the root folder, CMake places them in +LICENSE and RELEASE.txt file in the root folder, CMake places them in the share folder. The bin folder contains the tools and the build scripts. Additionally, CMake diff --git a/release_docs/RELEASE_PROCESS.md b/release_docs/RELEASE_PROCESS.md index fd21bfb4d4b..60ace68d21f 100644 --- a/release_docs/RELEASE_PROCESS.md +++ b/release_docs/RELEASE_PROCESS.md @@ -45,7 +45,7 @@ For more information on the HDF5 versioning and backward and forward compatibili - **See: Testing/Testing Systems(this is a page in confluence)** 4. Update current compiler information for each platform in the PLATFORMS TESTED section of [RELEASE.txt][u1]. 5. Review the [RELEASE.txt][u1] for formatting and language to verify that it corresponds to guidelines found in **[Writing Notes in a RELEASE.txt(this is missing)]()** File. -6. Review and update, if needed, the [README][u2] and [COPYING][u3] files. +6. Review and update, if needed, the [README][u2] and [LICENSE][u3] files. 7. Review and update all INSTALL_* files in [release_docs][u4], if needed. - [INSTALL][u5] should be general info and not require extensive changes - [INSTALL_Autotools.txt][u6] are the instructions for building under autotools. @@ -202,7 +202,7 @@ For more information on the HDF5 versioning and backward and forward compatibili [u1]: https://github.com/HDFGroup/hdf5/blob/develop/release_docs/RELEASE.txt [u2]: https://github.com/HDFGroup/hdf5/blob/develop/README.md -[u3]: https://github.com/HDFGroup/hdf5/blob/develop/COPYING +[u3]: https://github.com/HDFGroup/hdf5/blob/develop/LICENSE [u4]: https://github.com/HDFGroup/hdf5/blob/develop/release_docs [u5]: https://github.com/HDFGroup/hdf5/blob/develop/release_docs/INSTALL [u6]: https://github.com/HDFGroup/hdf5/blob/develop/release_docs/INSTALL_Autotools.txt diff --git a/src/H5.c b/src/H5.c index 9dc9fca1022..f591e84eb76 100644 --- a/src/H5.c +++ b/src/H5.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5A.c b/src/H5A.c index 6c9cfd9f50d..83bc68fe514 100644 --- a/src/H5A.c +++ b/src/H5A.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5AC.c b/src/H5AC.c index 5f9df26aba1..8ad885e8af3 100644 --- a/src/H5AC.c +++ b/src/H5AC.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5ACdbg.c b/src/H5ACdbg.c index 37d9ca8dcdc..4fa827bf6d4 100644 --- a/src/H5ACdbg.c +++ b/src/H5ACdbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5ACmodule.h b/src/H5ACmodule.h index 1ce26f6b15f..94cf94bd334 100644 --- a/src/H5ACmodule.h +++ b/src/H5ACmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5ACmpio.c b/src/H5ACmpio.c index c80c134c098..f657ec3b10d 100644 --- a/src/H5ACmpio.c +++ b/src/H5ACmpio.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5ACpkg.h b/src/H5ACpkg.h index e0867f4ebe6..7b6e5302efc 100644 --- a/src/H5ACpkg.h +++ b/src/H5ACpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5ACprivate.h b/src/H5ACprivate.h index 51f1b358a60..3cf6980fa4a 100644 --- a/src/H5ACprivate.h +++ b/src/H5ACprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5ACproxy_entry.c b/src/H5ACproxy_entry.c index 5ad1673dd5c..c8142cca4f3 100644 --- a/src/H5ACproxy_entry.c +++ b/src/H5ACproxy_entry.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5ACpublic.h b/src/H5ACpublic.h index 71292b679ae..3e989394788 100644 --- a/src/H5ACpublic.h +++ b/src/H5ACpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Abtree2.c b/src/H5Abtree2.c index 9ea4b75a29a..2386294d6f9 100644 --- a/src/H5Abtree2.c +++ b/src/H5Abtree2.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Adense.c b/src/H5Adense.c index 143fa9b3646..11bb5479e93 100644 --- a/src/H5Adense.c +++ b/src/H5Adense.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Adeprec.c b/src/H5Adeprec.c index 0d878d34e48..b5f9fb21647 100644 --- a/src/H5Adeprec.c +++ b/src/H5Adeprec.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Aint.c b/src/H5Aint.c index 1f1f12437b7..fdeb9643510 100644 --- a/src/H5Aint.c +++ b/src/H5Aint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Amodule.h b/src/H5Amodule.h index 42715535367..77d1b338761 100644 --- a/src/H5Amodule.h +++ b/src/H5Amodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Apkg.h b/src/H5Apkg.h index 239d7550c46..4c6b35ec34e 100644 --- a/src/H5Apkg.h +++ b/src/H5Apkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Aprivate.h b/src/H5Aprivate.h index 33f0134004f..120cf2789b2 100644 --- a/src/H5Aprivate.h +++ b/src/H5Aprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Apublic.h b/src/H5Apublic.h index 97d3a204cc2..6743b2e2fa0 100644 --- a/src/H5Apublic.h +++ b/src/H5Apublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Atest.c b/src/H5Atest.c index 141f5110160..5961ba73664 100644 --- a/src/H5Atest.c +++ b/src/H5Atest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5B.c b/src/H5B.c index 30e39ef71a6..9c081a91fe0 100644 --- a/src/H5B.c +++ b/src/H5B.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5B2.c b/src/H5B2.c index d3eceff756e..1bdfd5decda 100644 --- a/src/H5B2.c +++ b/src/H5B2.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5B2cache.c b/src/H5B2cache.c index c78b54c33f5..3f2b52b57ad 100644 --- a/src/H5B2cache.c +++ b/src/H5B2cache.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5B2dbg.c b/src/H5B2dbg.c index 0977a4c96d2..0c1600b3070 100644 --- a/src/H5B2dbg.c +++ b/src/H5B2dbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5B2hdr.c b/src/H5B2hdr.c index f46b1d0820a..96372265fa0 100644 --- a/src/H5B2hdr.c +++ b/src/H5B2hdr.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5B2int.c b/src/H5B2int.c index 0174b527879..51327de3e20 100644 --- a/src/H5B2int.c +++ b/src/H5B2int.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5B2internal.c b/src/H5B2internal.c index 82e686a9569..00f163d6a08 100644 --- a/src/H5B2internal.c +++ b/src/H5B2internal.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5B2leaf.c b/src/H5B2leaf.c index 3351909484c..8fffb8193c1 100644 --- a/src/H5B2leaf.c +++ b/src/H5B2leaf.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5B2module.h b/src/H5B2module.h index 8eaea2f266d..2807ac6ea2e 100644 --- a/src/H5B2module.h +++ b/src/H5B2module.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5B2pkg.h b/src/H5B2pkg.h index d60e1ac0c85..3f636b8f6b8 100644 --- a/src/H5B2pkg.h +++ b/src/H5B2pkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5B2private.h b/src/H5B2private.h index bf06a8bd846..1a8d5fb0eb0 100644 --- a/src/H5B2private.h +++ b/src/H5B2private.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5B2stat.c b/src/H5B2stat.c index 52af55417b5..5a478ec6e2f 100644 --- a/src/H5B2stat.c +++ b/src/H5B2stat.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5B2test.c b/src/H5B2test.c index 4a5a325b031..b842dab2f1e 100644 --- a/src/H5B2test.c +++ b/src/H5B2test.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Bcache.c b/src/H5Bcache.c index 0b1010ba832..8d3655dadff 100644 --- a/src/H5Bcache.c +++ b/src/H5Bcache.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Bdbg.c b/src/H5Bdbg.c index 6bbda059320..d6d6abc2ee4 100644 --- a/src/H5Bdbg.c +++ b/src/H5Bdbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Bmodule.h b/src/H5Bmodule.h index 0ded7562a7f..04aafdb0532 100644 --- a/src/H5Bmodule.h +++ b/src/H5Bmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Bpkg.h b/src/H5Bpkg.h index d1ad647ae7d..4f61614a9e0 100644 --- a/src/H5Bpkg.h +++ b/src/H5Bpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Bprivate.h b/src/H5Bprivate.h index f354dea2ac0..22bcaf53aee 100644 --- a/src/H5Bprivate.h +++ b/src/H5Bprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5C.c b/src/H5C.c index 44d499df964..156251e592f 100644 --- a/src/H5C.c +++ b/src/H5C.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5CX.c b/src/H5CX.c index dbcb49e2e6b..92a8d2cb88b 100644 --- a/src/H5CX.c +++ b/src/H5CX.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5CXmodule.h b/src/H5CXmodule.h index ffb4804ab57..7306966a5c0 100644 --- a/src/H5CXmodule.h +++ b/src/H5CXmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5CXprivate.h b/src/H5CXprivate.h index 2a49d9ef031..a2066f235a4 100644 --- a/src/H5CXprivate.h +++ b/src/H5CXprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Cdbg.c b/src/H5Cdbg.c index 55bfcd28600..418f24579a0 100644 --- a/src/H5Cdbg.c +++ b/src/H5Cdbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Centry.c b/src/H5Centry.c index 1ca7479cf7e..74cd42a4aaa 100644 --- a/src/H5Centry.c +++ b/src/H5Centry.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Cepoch.c b/src/H5Cepoch.c index ef105f839a4..79fe6cb0c9c 100644 --- a/src/H5Cepoch.c +++ b/src/H5Cepoch.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Cimage.c b/src/H5Cimage.c index eb89b735f27..d626640dbdd 100644 --- a/src/H5Cimage.c +++ b/src/H5Cimage.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Cint.c b/src/H5Cint.c index 905cbf951ec..7ebd9457856 100644 --- a/src/H5Cint.c +++ b/src/H5Cint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Clog.c b/src/H5Clog.c index 255b28f25e7..60fc058ad5f 100644 --- a/src/H5Clog.c +++ b/src/H5Clog.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Clog.h b/src/H5Clog.h index eb74a339900..01bbf17a86a 100644 --- a/src/H5Clog.h +++ b/src/H5Clog.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Clog_json.c b/src/H5Clog_json.c index e273f55d2ba..3dd0bb12764 100644 --- a/src/H5Clog_json.c +++ b/src/H5Clog_json.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Clog_trace.c b/src/H5Clog_trace.c index 4b845d56e88..6000a28a4cf 100644 --- a/src/H5Clog_trace.c +++ b/src/H5Clog_trace.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Cmodule.h b/src/H5Cmodule.h index 64c5279d92f..80a3583a3a9 100644 --- a/src/H5Cmodule.h +++ b/src/H5Cmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Cmpio.c b/src/H5Cmpio.c index 233e4f92d2d..67435d362ca 100644 --- a/src/H5Cmpio.c +++ b/src/H5Cmpio.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Cpkg.h b/src/H5Cpkg.h index b8d579a6df0..3e3da929faa 100644 --- a/src/H5Cpkg.h +++ b/src/H5Cpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Cprefetched.c b/src/H5Cprefetched.c index 1a890678a58..a87b9cd2a7e 100644 --- a/src/H5Cprefetched.c +++ b/src/H5Cprefetched.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Cprivate.h b/src/H5Cprivate.h index d7065799a67..e1832614292 100644 --- a/src/H5Cprivate.h +++ b/src/H5Cprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Cpublic.h b/src/H5Cpublic.h index 69c86cdef9b..56e361537f8 100644 --- a/src/H5Cpublic.h +++ b/src/H5Cpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Cquery.c b/src/H5Cquery.c index 2df9bb1a90d..04063d17157 100644 --- a/src/H5Cquery.c +++ b/src/H5Cquery.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ctag.c b/src/H5Ctag.c index 71eb24d2577..089c9f4b7b2 100644 --- a/src/H5Ctag.c +++ b/src/H5Ctag.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ctest.c b/src/H5Ctest.c index c2af1dc2b65..eb99d0c5468 100644 --- a/src/H5Ctest.c +++ b/src/H5Ctest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5D.c b/src/H5D.c index 7673acc0711..80540fe6a58 100644 --- a/src/H5D.c +++ b/src/H5D.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dbtree.c b/src/H5Dbtree.c index 6c32c26f345..92a95aa6808 100644 --- a/src/H5Dbtree.c +++ b/src/H5Dbtree.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dbtree2.c b/src/H5Dbtree2.c index 7a26b6d016c..c93ee87223f 100644 --- a/src/H5Dbtree2.c +++ b/src/H5Dbtree2.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dchunk.c b/src/H5Dchunk.c index d232024a3f0..10843a6997f 100644 --- a/src/H5Dchunk.c +++ b/src/H5Dchunk.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dcompact.c b/src/H5Dcompact.c index de84034f638..aa18f255586 100644 --- a/src/H5Dcompact.c +++ b/src/H5Dcompact.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dcontig.c b/src/H5Dcontig.c index 11b0a8e4ef8..902b512d2c2 100644 --- a/src/H5Dcontig.c +++ b/src/H5Dcontig.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ddbg.c b/src/H5Ddbg.c index d011303d3c6..1baed0231e8 100644 --- a/src/H5Ddbg.c +++ b/src/H5Ddbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ddeprec.c b/src/H5Ddeprec.c index a8f92fe5c55..0b98a5e726a 100644 --- a/src/H5Ddeprec.c +++ b/src/H5Ddeprec.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dearray.c b/src/H5Dearray.c index 965eaacaca3..d2335f5a2bf 100644 --- a/src/H5Dearray.c +++ b/src/H5Dearray.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Defl.c b/src/H5Defl.c index 42678761a00..7f25e69d92c 100644 --- a/src/H5Defl.c +++ b/src/H5Defl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dfarray.c b/src/H5Dfarray.c index 8d06de47b02..f8770322cde 100644 --- a/src/H5Dfarray.c +++ b/src/H5Dfarray.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dfill.c b/src/H5Dfill.c index 56609844021..e4703b8af74 100644 --- a/src/H5Dfill.c +++ b/src/H5Dfill.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dint.c b/src/H5Dint.c index 2b1d0c7e20b..bede70a57d4 100644 --- a/src/H5Dint.c +++ b/src/H5Dint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dio.c b/src/H5Dio.c index 312c7fd854b..c5b6ee21dbb 100644 --- a/src/H5Dio.c +++ b/src/H5Dio.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dlayout.c b/src/H5Dlayout.c index ae2b9aa4a74..04d55aa7fa3 100644 --- a/src/H5Dlayout.c +++ b/src/H5Dlayout.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dmodule.h b/src/H5Dmodule.h index 5829e80fc9a..c7368cfc8e7 100644 --- a/src/H5Dmodule.h +++ b/src/H5Dmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dmpio.c b/src/H5Dmpio.c index 84a0f25356f..e6e2444ffd7 100644 --- a/src/H5Dmpio.c +++ b/src/H5Dmpio.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dnone.c b/src/H5Dnone.c index b319bd26fc6..0d747c82d47 100644 --- a/src/H5Dnone.c +++ b/src/H5Dnone.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Doh.c b/src/H5Doh.c index 1008948972e..387a2c1dae8 100644 --- a/src/H5Doh.c +++ b/src/H5Doh.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dpkg.h b/src/H5Dpkg.h index c6c50c2eef3..d7dbf23ce1a 100644 --- a/src/H5Dpkg.h +++ b/src/H5Dpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dprivate.h b/src/H5Dprivate.h index e539d872f9e..ad55dcc5d6c 100644 --- a/src/H5Dprivate.h +++ b/src/H5Dprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dpublic.h b/src/H5Dpublic.h index fbe60f03735..52b2fd1c60c 100644 --- a/src/H5Dpublic.h +++ b/src/H5Dpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dscatgath.c b/src/H5Dscatgath.c index 997c72c115e..56b556615a8 100644 --- a/src/H5Dscatgath.c +++ b/src/H5Dscatgath.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dselect.c b/src/H5Dselect.c index e018da5b4a5..9534c5346ac 100644 --- a/src/H5Dselect.c +++ b/src/H5Dselect.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dsingle.c b/src/H5Dsingle.c index a08fa10d871..fb9ffc27273 100644 --- a/src/H5Dsingle.c +++ b/src/H5Dsingle.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dtest.c b/src/H5Dtest.c index 5f700b38237..929a32a5243 100644 --- a/src/H5Dtest.c +++ b/src/H5Dtest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Dvirtual.c b/src/H5Dvirtual.c index d10f4af8520..4e30939241a 100644 --- a/src/H5Dvirtual.c +++ b/src/H5Dvirtual.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5E.c b/src/H5E.c index a037ffa595e..2c2776eddd4 100644 --- a/src/H5E.c +++ b/src/H5E.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5EA.c b/src/H5EA.c index 82b7da6cefa..b0a3c2ab574 100644 --- a/src/H5EA.c +++ b/src/H5EA.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5EAcache.c b/src/H5EAcache.c index 951c40dccc1..7eb289a2b53 100644 --- a/src/H5EAcache.c +++ b/src/H5EAcache.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5EAdbg.c b/src/H5EAdbg.c index d744ac53d1c..d4893050e80 100644 --- a/src/H5EAdbg.c +++ b/src/H5EAdbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5EAdblkpage.c b/src/H5EAdblkpage.c index 1fd04b2ee8c..a18dbcc4e70 100644 --- a/src/H5EAdblkpage.c +++ b/src/H5EAdblkpage.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5EAdblock.c b/src/H5EAdblock.c index 848985f0641..7b0298b4379 100644 --- a/src/H5EAdblock.c +++ b/src/H5EAdblock.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5EAhdr.c b/src/H5EAhdr.c index 96c027ec581..e565c37ac28 100644 --- a/src/H5EAhdr.c +++ b/src/H5EAhdr.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5EAiblock.c b/src/H5EAiblock.c index 086d0ad75fa..4d007153fda 100644 --- a/src/H5EAiblock.c +++ b/src/H5EAiblock.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5EAint.c b/src/H5EAint.c index 8ca3bc75157..68941887104 100644 --- a/src/H5EAint.c +++ b/src/H5EAint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5EAmodule.h b/src/H5EAmodule.h index f992393ed56..102149be954 100644 --- a/src/H5EAmodule.h +++ b/src/H5EAmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5EApkg.h b/src/H5EApkg.h index 3dd2a2da516..5bcb823e17f 100644 --- a/src/H5EApkg.h +++ b/src/H5EApkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5EAprivate.h b/src/H5EAprivate.h index 2780cb199d3..6ea3e14a6c8 100644 --- a/src/H5EAprivate.h +++ b/src/H5EAprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5EAsblock.c b/src/H5EAsblock.c index 75dd26acf96..dabcdf2ff86 100644 --- a/src/H5EAsblock.c +++ b/src/H5EAsblock.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5EAstat.c b/src/H5EAstat.c index a564455c0e2..3f01e804c74 100644 --- a/src/H5EAstat.c +++ b/src/H5EAstat.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5EAtest.c b/src/H5EAtest.c index 13e7c98140a..ef271f4b687 100644 --- a/src/H5EAtest.c +++ b/src/H5EAtest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5ES.c b/src/H5ES.c index 7b830b5f740..2e633d5a907 100644 --- a/src/H5ES.c +++ b/src/H5ES.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5ESdevelop.h b/src/H5ESdevelop.h index b2facaacec7..d373ee81f06 100644 --- a/src/H5ESdevelop.h +++ b/src/H5ESdevelop.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5ESevent.c b/src/H5ESevent.c index d925fb407d8..84f2110d860 100644 --- a/src/H5ESevent.c +++ b/src/H5ESevent.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5ESint.c b/src/H5ESint.c index eef68d579c2..9542bb636a1 100644 --- a/src/H5ESint.c +++ b/src/H5ESint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5ESlist.c b/src/H5ESlist.c index 90eef90fab6..b3f1a0f2f27 100644 --- a/src/H5ESlist.c +++ b/src/H5ESlist.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5ESmodule.h b/src/H5ESmodule.h index f63852db384..77408e14e20 100644 --- a/src/H5ESmodule.h +++ b/src/H5ESmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5ESpkg.h b/src/H5ESpkg.h index 853f39fefad..9138b6dcc9f 100644 --- a/src/H5ESpkg.h +++ b/src/H5ESpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5ESprivate.h b/src/H5ESprivate.h index 2de833de459..3b397b7289b 100644 --- a/src/H5ESprivate.h +++ b/src/H5ESprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5ESpublic.h b/src/H5ESpublic.h index 0f3e739d72f..635ad86170a 100644 --- a/src/H5ESpublic.h +++ b/src/H5ESpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Edeprec.c b/src/H5Edeprec.c index 87b39e4133f..5f32ccd204f 100644 --- a/src/H5Edeprec.c +++ b/src/H5Edeprec.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Eint.c b/src/H5Eint.c index 2ceb96b31a5..fa1be37925a 100644 --- a/src/H5Eint.c +++ b/src/H5Eint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Emodule.h b/src/H5Emodule.h index f46456a1369..027e94309d0 100644 --- a/src/H5Emodule.h +++ b/src/H5Emodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Epkg.h b/src/H5Epkg.h index 2eda2b24e2d..4eaad76fb6f 100644 --- a/src/H5Epkg.h +++ b/src/H5Epkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Eprivate.h b/src/H5Eprivate.h index a3f8b693b33..1bb6d714eea 100644 --- a/src/H5Eprivate.h +++ b/src/H5Eprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Epublic.h b/src/H5Epublic.h index 9263c3c96bf..4e41f166176 100644 --- a/src/H5Epublic.h +++ b/src/H5Epublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5F.c b/src/H5F.c index b35ed2ef7c3..d0e7bcfcca1 100644 --- a/src/H5F.c +++ b/src/H5F.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FA.c b/src/H5FA.c index d30ea60cce3..42830178cca 100644 --- a/src/H5FA.c +++ b/src/H5FA.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FAcache.c b/src/H5FAcache.c index ecc25e216a2..0696a63b5cb 100644 --- a/src/H5FAcache.c +++ b/src/H5FAcache.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FAdbg.c b/src/H5FAdbg.c index 1e624b3e13c..42331d5ac2d 100644 --- a/src/H5FAdbg.c +++ b/src/H5FAdbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FAdblkpage.c b/src/H5FAdblkpage.c index 89f346db403..9810d65059f 100644 --- a/src/H5FAdblkpage.c +++ b/src/H5FAdblkpage.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FAdblock.c b/src/H5FAdblock.c index 558d9bf732d..d055b8992e8 100644 --- a/src/H5FAdblock.c +++ b/src/H5FAdblock.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FAhdr.c b/src/H5FAhdr.c index 3a3ee2db8a9..4aa683307eb 100644 --- a/src/H5FAhdr.c +++ b/src/H5FAhdr.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FAint.c b/src/H5FAint.c index f4070ee03ae..b2c4f207f12 100644 --- a/src/H5FAint.c +++ b/src/H5FAint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FAmodule.h b/src/H5FAmodule.h index 8ef75820d57..d76384f55cc 100644 --- a/src/H5FAmodule.h +++ b/src/H5FAmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FApkg.h b/src/H5FApkg.h index 79213e94401..fc178764a68 100644 --- a/src/H5FApkg.h +++ b/src/H5FApkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FAprivate.h b/src/H5FAprivate.h index 9bdc0742c75..fe49f11d0bf 100644 --- a/src/H5FAprivate.h +++ b/src/H5FAprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FAstat.c b/src/H5FAstat.c index 4ea4177045d..a8247ee313a 100644 --- a/src/H5FAstat.c +++ b/src/H5FAstat.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FAtest.c b/src/H5FAtest.c index 666b922fa27..febd7ddbb9b 100644 --- a/src/H5FAtest.c +++ b/src/H5FAtest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FD.c b/src/H5FD.c index a6f35ad6a87..82daa37cee1 100644 --- a/src/H5FD.c +++ b/src/H5FD.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDcore.c b/src/H5FDcore.c index a05b1d037f0..86dda9763d2 100644 --- a/src/H5FDcore.c +++ b/src/H5FDcore.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDcore.h b/src/H5FDcore.h index cd45c8d6061..7b21ca32865 100644 --- a/src/H5FDcore.h +++ b/src/H5FDcore.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDdevelop.h b/src/H5FDdevelop.h index 5f1be973d64..88e8113a2a0 100644 --- a/src/H5FDdevelop.h +++ b/src/H5FDdevelop.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDdirect.c b/src/H5FDdirect.c index b072eeeec08..eea9fd11bc9 100644 --- a/src/H5FDdirect.c +++ b/src/H5FDdirect.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDdirect.h b/src/H5FDdirect.h index 1e60bb08119..ac5bf3ec99e 100644 --- a/src/H5FDdirect.h +++ b/src/H5FDdirect.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDdrvr_module.h b/src/H5FDdrvr_module.h index c984cf51004..6757f564b4b 100644 --- a/src/H5FDdrvr_module.h +++ b/src/H5FDdrvr_module.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDfamily.c b/src/H5FDfamily.c index 335c63a94f1..1a70f9875fc 100644 --- a/src/H5FDfamily.c +++ b/src/H5FDfamily.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDfamily.h b/src/H5FDfamily.h index 32e885c422d..b2aac30c74b 100644 --- a/src/H5FDfamily.h +++ b/src/H5FDfamily.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDhdfs.c b/src/H5FDhdfs.c index 25fe7cba95a..c28972a4a1c 100644 --- a/src/H5FDhdfs.c +++ b/src/H5FDhdfs.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDhdfs.h b/src/H5FDhdfs.h index 3150a45801b..22fbbc50d17 100644 --- a/src/H5FDhdfs.h +++ b/src/H5FDhdfs.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDint.c b/src/H5FDint.c index a0b2c7d1ecb..12049ca87cc 100644 --- a/src/H5FDint.c +++ b/src/H5FDint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDlog.c b/src/H5FDlog.c index 8c02415ce08..726a8f6e105 100644 --- a/src/H5FDlog.c +++ b/src/H5FDlog.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDlog.h b/src/H5FDlog.h index ca431bdc691..e957157a5a5 100644 --- a/src/H5FDlog.h +++ b/src/H5FDlog.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDmirror.c b/src/H5FDmirror.c index bde3647f652..c0fc9d07817 100644 --- a/src/H5FDmirror.c +++ b/src/H5FDmirror.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDmirror.h b/src/H5FDmirror.h index 95ce936594d..d64d6d778b7 100644 --- a/src/H5FDmirror.h +++ b/src/H5FDmirror.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDmirror_priv.h b/src/H5FDmirror_priv.h index 693d4ebb21e..72693d53180 100644 --- a/src/H5FDmirror_priv.h +++ b/src/H5FDmirror_priv.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDmodule.h b/src/H5FDmodule.h index 1e29ca912a6..ed399a4cb12 100644 --- a/src/H5FDmodule.h +++ b/src/H5FDmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDmpi.c b/src/H5FDmpi.c index bfa21253af8..761cdf026ae 100644 --- a/src/H5FDmpi.c +++ b/src/H5FDmpi.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDmpi.h b/src/H5FDmpi.h index 9cee0e69b74..c168ae89b7d 100644 --- a/src/H5FDmpi.h +++ b/src/H5FDmpi.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDmpio.c b/src/H5FDmpio.c index 0819bd68f7e..2d950f236cf 100644 --- a/src/H5FDmpio.c +++ b/src/H5FDmpio.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDmpio.h b/src/H5FDmpio.h index 5e7ecf30353..453b58221a3 100644 --- a/src/H5FDmpio.h +++ b/src/H5FDmpio.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDmulti.c b/src/H5FDmulti.c index 56ee7b1a198..82c36a2df78 100644 --- a/src/H5FDmulti.c +++ b/src/H5FDmulti.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDmulti.h b/src/H5FDmulti.h index 0bb86157f89..d32ed3ed66a 100644 --- a/src/H5FDmulti.h +++ b/src/H5FDmulti.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDonion.c b/src/H5FDonion.c index 96f9166b244..2f77eebf5a9 100644 --- a/src/H5FDonion.c +++ b/src/H5FDonion.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDonion.h b/src/H5FDonion.h index 4aaab6d3c3e..eefaf1f0f0c 100644 --- a/src/H5FDonion.h +++ b/src/H5FDonion.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDonion_header.c b/src/H5FDonion_header.c index e6790b3290e..46510a20f65 100644 --- a/src/H5FDonion_header.c +++ b/src/H5FDonion_header.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDonion_header.h b/src/H5FDonion_header.h index f8dd739d13e..774bd6020bf 100644 --- a/src/H5FDonion_header.h +++ b/src/H5FDonion_header.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDonion_history.c b/src/H5FDonion_history.c index 32bf483ccda..6ef1ad688a8 100644 --- a/src/H5FDonion_history.c +++ b/src/H5FDonion_history.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDonion_history.h b/src/H5FDonion_history.h index 5980bf7e1ac..59c1378efe9 100644 --- a/src/H5FDonion_history.h +++ b/src/H5FDonion_history.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDonion_index.c b/src/H5FDonion_index.c index 4d1320ed809..639e69019ab 100644 --- a/src/H5FDonion_index.c +++ b/src/H5FDonion_index.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDonion_index.h b/src/H5FDonion_index.h index 7dbd30a922d..91dd4492d2a 100644 --- a/src/H5FDonion_index.h +++ b/src/H5FDonion_index.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDonion_priv.h b/src/H5FDonion_priv.h index 907d39f668a..5d6de960fb9 100644 --- a/src/H5FDonion_priv.h +++ b/src/H5FDonion_priv.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDperform.c b/src/H5FDperform.c index 7d9f49afdd5..dc6491ba2ef 100644 --- a/src/H5FDperform.c +++ b/src/H5FDperform.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDpkg.h b/src/H5FDpkg.h index 0d0a7b706c9..2c1bea9df69 100644 --- a/src/H5FDpkg.h +++ b/src/H5FDpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDprivate.h b/src/H5FDprivate.h index 942dc21e2e5..86ed6f073b8 100644 --- a/src/H5FDprivate.h +++ b/src/H5FDprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDpublic.h b/src/H5FDpublic.h index d8d77d6534b..d8e080edab9 100644 --- a/src/H5FDpublic.h +++ b/src/H5FDpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDros3.c b/src/H5FDros3.c index eebf9edca3c..b68337e6dd7 100644 --- a/src/H5FDros3.c +++ b/src/H5FDros3.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDros3.h b/src/H5FDros3.h index f7d59c83c89..896d2e89f5d 100644 --- a/src/H5FDros3.h +++ b/src/H5FDros3.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDs3comms.c b/src/H5FDs3comms.c index 78ed5273f52..c5de645ddb8 100644 --- a/src/H5FDs3comms.c +++ b/src/H5FDs3comms.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDs3comms.h b/src/H5FDs3comms.h index 62855e3d952..fdf13ac6b99 100644 --- a/src/H5FDs3comms.h +++ b/src/H5FDs3comms.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDsec2.c b/src/H5FDsec2.c index ed4093adf74..3f3e93cb978 100644 --- a/src/H5FDsec2.c +++ b/src/H5FDsec2.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDsec2.h b/src/H5FDsec2.h index dd0a4d8918d..b02e5a90c80 100644 --- a/src/H5FDsec2.h +++ b/src/H5FDsec2.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDspace.c b/src/H5FDspace.c index 6e658bca794..3bf233d56e5 100644 --- a/src/H5FDspace.c +++ b/src/H5FDspace.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDsplitter.c b/src/H5FDsplitter.c index 778d112822e..325d8561956 100644 --- a/src/H5FDsplitter.c +++ b/src/H5FDsplitter.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDsplitter.h b/src/H5FDsplitter.h index 99a471e5ce3..ca91f433176 100644 --- a/src/H5FDsplitter.h +++ b/src/H5FDsplitter.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDstdio.c b/src/H5FDstdio.c index b53dd3dc1ad..7c5cf6e2bf9 100644 --- a/src/H5FDstdio.c +++ b/src/H5FDstdio.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDstdio.h b/src/H5FDstdio.h index 794fe31bf61..7d51ec73f08 100644 --- a/src/H5FDstdio.h +++ b/src/H5FDstdio.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDsubfiling/H5FDioc.c b/src/H5FDsubfiling/H5FDioc.c index 8ec066a0a68..5847630255f 100644 --- a/src/H5FDsubfiling/H5FDioc.c +++ b/src/H5FDsubfiling/H5FDioc.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDsubfiling/H5FDioc.h b/src/H5FDsubfiling/H5FDioc.h index 8f0255c5583..820258ed2f0 100644 --- a/src/H5FDsubfiling/H5FDioc.h +++ b/src/H5FDsubfiling/H5FDioc.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDsubfiling/H5FDioc_int.c b/src/H5FDsubfiling/H5FDioc_int.c index e528a362f80..4a1f8486ba6 100644 --- a/src/H5FDsubfiling/H5FDioc_int.c +++ b/src/H5FDsubfiling/H5FDioc_int.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDsubfiling/H5FDioc_priv.h b/src/H5FDsubfiling/H5FDioc_priv.h index c1b47661de5..fa4c431c6c8 100644 --- a/src/H5FDsubfiling/H5FDioc_priv.h +++ b/src/H5FDsubfiling/H5FDioc_priv.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDsubfiling/H5FDioc_threads.c b/src/H5FDsubfiling/H5FDioc_threads.c index da110e72bd7..e3f267952fc 100644 --- a/src/H5FDsubfiling/H5FDioc_threads.c +++ b/src/H5FDsubfiling/H5FDioc_threads.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDsubfiling/H5FDsubfile_int.c b/src/H5FDsubfiling/H5FDsubfile_int.c index bf01fc0a2e4..6c687aa69a7 100644 --- a/src/H5FDsubfiling/H5FDsubfile_int.c +++ b/src/H5FDsubfiling/H5FDsubfile_int.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDsubfiling/H5FDsubfiling.c b/src/H5FDsubfiling/H5FDsubfiling.c index 159b7175589..6f14d8492f3 100644 --- a/src/H5FDsubfiling/H5FDsubfiling.c +++ b/src/H5FDsubfiling/H5FDsubfiling.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDsubfiling/H5FDsubfiling.h b/src/H5FDsubfiling/H5FDsubfiling.h index d6d2ffd16da..7d546bca84a 100644 --- a/src/H5FDsubfiling/H5FDsubfiling.h +++ b/src/H5FDsubfiling/H5FDsubfiling.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDsubfiling/H5FDsubfiling_priv.h b/src/H5FDsubfiling/H5FDsubfiling_priv.h index fdb946e73ef..fd6779c4178 100644 --- a/src/H5FDsubfiling/H5FDsubfiling_priv.h +++ b/src/H5FDsubfiling/H5FDsubfiling_priv.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDsubfiling/H5subfiling_common.c b/src/H5FDsubfiling/H5subfiling_common.c index 00a2b7017c4..63078a3c031 100644 --- a/src/H5FDsubfiling/H5subfiling_common.c +++ b/src/H5FDsubfiling/H5subfiling_common.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDsubfiling/H5subfiling_common.h b/src/H5FDsubfiling/H5subfiling_common.h index 7e7ada5bcfe..8dc08ac82f9 100644 --- a/src/H5FDsubfiling/H5subfiling_common.h +++ b/src/H5FDsubfiling/H5subfiling_common.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDtest.c b/src/H5FDtest.c index 2a48fb5b8cd..d5bc634c23a 100644 --- a/src/H5FDtest.c +++ b/src/H5FDtest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDwindows.c b/src/H5FDwindows.c index 74389db913d..c44de9935fc 100644 --- a/src/H5FDwindows.c +++ b/src/H5FDwindows.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FDwindows.h b/src/H5FDwindows.h index 673d1c93b59..02e20008357 100644 --- a/src/H5FDwindows.h +++ b/src/H5FDwindows.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FL.c b/src/H5FL.c index cdcdc0cbda9..4f7a94060f1 100644 --- a/src/H5FL.c +++ b/src/H5FL.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FLmodule.h b/src/H5FLmodule.h index 5e9f15733f5..172c13d1b55 100644 --- a/src/H5FLmodule.h +++ b/src/H5FLmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FLprivate.h b/src/H5FLprivate.h index 823e0fda61e..c9f79b3c7da 100644 --- a/src/H5FLprivate.h +++ b/src/H5FLprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FO.c b/src/H5FO.c index 74daa7b55b0..a5c47fdb4bd 100644 --- a/src/H5FO.c +++ b/src/H5FO.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FOprivate.h b/src/H5FOprivate.h index 5f5fe9c7d11..286dfa5d646 100644 --- a/src/H5FOprivate.h +++ b/src/H5FOprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FS.c b/src/H5FS.c index 64bf51f5d46..2f8d28fdec6 100644 --- a/src/H5FS.c +++ b/src/H5FS.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FScache.c b/src/H5FScache.c index 7f8edf69f13..8f730c3f2f4 100644 --- a/src/H5FScache.c +++ b/src/H5FScache.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FSdbg.c b/src/H5FSdbg.c index 5105032a053..3d013b25223 100644 --- a/src/H5FSdbg.c +++ b/src/H5FSdbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FSint.c b/src/H5FSint.c index da9f9b85837..8db6d367bc5 100644 --- a/src/H5FSint.c +++ b/src/H5FSint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FSmodule.h b/src/H5FSmodule.h index 46bf8bf0c27..a44bb4c4810 100644 --- a/src/H5FSmodule.h +++ b/src/H5FSmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FSpkg.h b/src/H5FSpkg.h index 6e14deb4ecb..e40b0b3936c 100644 --- a/src/H5FSpkg.h +++ b/src/H5FSpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FSprivate.h b/src/H5FSprivate.h index f917a253944..9e92c7544b6 100644 --- a/src/H5FSprivate.h +++ b/src/H5FSprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FSsection.c b/src/H5FSsection.c index 57022a2c02c..4131a92854e 100644 --- a/src/H5FSsection.c +++ b/src/H5FSsection.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FSstat.c b/src/H5FSstat.c index 3617f18ff62..577d08fc4ca 100644 --- a/src/H5FSstat.c +++ b/src/H5FSstat.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5FStest.c b/src/H5FStest.c index 30f598dd28e..f372ba7e9ef 100644 --- a/src/H5FStest.c +++ b/src/H5FStest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Faccum.c b/src/H5Faccum.c index 5fabf5266a0..e73ba110182 100644 --- a/src/H5Faccum.c +++ b/src/H5Faccum.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fcwfs.c b/src/H5Fcwfs.c index c946fa453e1..62de3da6fe6 100644 --- a/src/H5Fcwfs.c +++ b/src/H5Fcwfs.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fdbg.c b/src/H5Fdbg.c index 3b1aad37dbd..daf76057ee3 100644 --- a/src/H5Fdbg.c +++ b/src/H5Fdbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fdeprec.c b/src/H5Fdeprec.c index c7552840bc1..e0616a444fe 100644 --- a/src/H5Fdeprec.c +++ b/src/H5Fdeprec.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fefc.c b/src/H5Fefc.c index e8ecc6d0efe..5c24c0a6dea 100644 --- a/src/H5Fefc.c +++ b/src/H5Fefc.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ffake.c b/src/H5Ffake.c index ad9fc8fb2ff..dde8f3181ab 100644 --- a/src/H5Ffake.c +++ b/src/H5Ffake.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fint.c b/src/H5Fint.c index e89b4bdb6af..c3d2e3ae82a 100644 --- a/src/H5Fint.c +++ b/src/H5Fint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fio.c b/src/H5Fio.c index 3d50b50fc51..44e5aeb3851 100644 --- a/src/H5Fio.c +++ b/src/H5Fio.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fmodule.h b/src/H5Fmodule.h index c9f1b31ceac..23463226137 100644 --- a/src/H5Fmodule.h +++ b/src/H5Fmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fmount.c b/src/H5Fmount.c index 6f497468e3e..fb3ba603c9d 100644 --- a/src/H5Fmount.c +++ b/src/H5Fmount.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fmpi.c b/src/H5Fmpi.c index 4e6ca64253d..d3e38119524 100644 --- a/src/H5Fmpi.c +++ b/src/H5Fmpi.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fpkg.h b/src/H5Fpkg.h index 275fa378f0e..3fd7cb624d8 100644 --- a/src/H5Fpkg.h +++ b/src/H5Fpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h index 5d9f5011927..32375046291 100644 --- a/src/H5Fprivate.h +++ b/src/H5Fprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fpublic.h b/src/H5Fpublic.h index 53dfaa78c31..4e9214f0a4b 100644 --- a/src/H5Fpublic.h +++ b/src/H5Fpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fquery.c b/src/H5Fquery.c index 526795a9870..5a119a287f6 100644 --- a/src/H5Fquery.c +++ b/src/H5Fquery.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fsfile.c b/src/H5Fsfile.c index 6cf2c809b8c..7eb4422be02 100644 --- a/src/H5Fsfile.c +++ b/src/H5Fsfile.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fspace.c b/src/H5Fspace.c index 9c6afd3f226..e73218d3ee1 100644 --- a/src/H5Fspace.c +++ b/src/H5Fspace.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fsuper.c b/src/H5Fsuper.c index 28b21ed01b3..24660035c16 100644 --- a/src/H5Fsuper.c +++ b/src/H5Fsuper.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Fsuper_cache.c b/src/H5Fsuper_cache.c index 2a425099b47..8a040cbed7c 100644 --- a/src/H5Fsuper_cache.c +++ b/src/H5Fsuper_cache.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ftest.c b/src/H5Ftest.c index 7e34e0af9b9..aacdd4cf4e9 100644 --- a/src/H5Ftest.c +++ b/src/H5Ftest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5G.c b/src/H5G.c index 8919788c809..5fb9d3b6506 100644 --- a/src/H5G.c +++ b/src/H5G.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gbtree2.c b/src/H5Gbtree2.c index fcefd1d0214..0a2291d8942 100644 --- a/src/H5Gbtree2.c +++ b/src/H5Gbtree2.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gcache.c b/src/H5Gcache.c index 9e34e77c253..f16eb75a860 100644 --- a/src/H5Gcache.c +++ b/src/H5Gcache.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gcompact.c b/src/H5Gcompact.c index 4ed675118ba..50d3d69a5b9 100644 --- a/src/H5Gcompact.c +++ b/src/H5Gcompact.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gdense.c b/src/H5Gdense.c index 531549e6423..6d081f33bfa 100644 --- a/src/H5Gdense.c +++ b/src/H5Gdense.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gdeprec.c b/src/H5Gdeprec.c index 287f609553e..c24fc549b8d 100644 --- a/src/H5Gdeprec.c +++ b/src/H5Gdeprec.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gent.c b/src/H5Gent.c index 2d6ece74083..3dcc618262b 100644 --- a/src/H5Gent.c +++ b/src/H5Gent.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gint.c b/src/H5Gint.c index 2580bf08ce0..2a7dbf5e255 100644 --- a/src/H5Gint.c +++ b/src/H5Gint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Glink.c b/src/H5Glink.c index 1982f54984c..4614d622a3c 100644 --- a/src/H5Glink.c +++ b/src/H5Glink.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gloc.c b/src/H5Gloc.c index 7bb59ea9e2f..00e6ba008a0 100644 --- a/src/H5Gloc.c +++ b/src/H5Gloc.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gmodule.h b/src/H5Gmodule.h index 49fc9ed9472..d91afc4d601 100644 --- a/src/H5Gmodule.h +++ b/src/H5Gmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gname.c b/src/H5Gname.c index 4a1225b2ffd..5ee05433d0c 100644 --- a/src/H5Gname.c +++ b/src/H5Gname.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gnode.c b/src/H5Gnode.c index c89417750e2..d647096b18c 100644 --- a/src/H5Gnode.c +++ b/src/H5Gnode.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gobj.c b/src/H5Gobj.c index 51feeaad56d..3a11246c24e 100644 --- a/src/H5Gobj.c +++ b/src/H5Gobj.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Goh.c b/src/H5Goh.c index ce98960e8aa..e4ffc46ebce 100644 --- a/src/H5Goh.c +++ b/src/H5Goh.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gpkg.h b/src/H5Gpkg.h index f4f1749dc88..72a5b03445f 100644 --- a/src/H5Gpkg.h +++ b/src/H5Gpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gprivate.h b/src/H5Gprivate.h index a756a1c324f..b87597feb22 100644 --- a/src/H5Gprivate.h +++ b/src/H5Gprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gpublic.h b/src/H5Gpublic.h index d3dd64e7a7b..61321500206 100644 --- a/src/H5Gpublic.h +++ b/src/H5Gpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Groot.c b/src/H5Groot.c index 0b524b7b4de..7948de4d32c 100644 --- a/src/H5Groot.c +++ b/src/H5Groot.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gstab.c b/src/H5Gstab.c index 594842830c4..a101315a406 100644 --- a/src/H5Gstab.c +++ b/src/H5Gstab.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gtest.c b/src/H5Gtest.c index 0b0708119e1..d8d74ed63f3 100644 --- a/src/H5Gtest.c +++ b/src/H5Gtest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Gtraverse.c b/src/H5Gtraverse.c index d113b576b18..f2dad1ce3f1 100644 --- a/src/H5Gtraverse.c +++ b/src/H5Gtraverse.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HF.c b/src/H5HF.c index bbc5ce7e455..acb37fa6c66 100644 --- a/src/H5HF.c +++ b/src/H5HF.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFbtree2.c b/src/H5HFbtree2.c index 56e5270e088..6ce9b69c32e 100644 --- a/src/H5HFbtree2.c +++ b/src/H5HFbtree2.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFcache.c b/src/H5HFcache.c index db55bf0b4d0..3b65f227f0e 100644 --- a/src/H5HFcache.c +++ b/src/H5HFcache.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFdbg.c b/src/H5HFdbg.c index d9a6c19bf19..779a7b59f61 100644 --- a/src/H5HFdbg.c +++ b/src/H5HFdbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFdblock.c b/src/H5HFdblock.c index 8a6df298482..b535024c5d9 100644 --- a/src/H5HFdblock.c +++ b/src/H5HFdblock.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFdtable.c b/src/H5HFdtable.c index f03060d879e..8464156dbef 100644 --- a/src/H5HFdtable.c +++ b/src/H5HFdtable.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFhdr.c b/src/H5HFhdr.c index 9f457385c31..2741c0af56f 100644 --- a/src/H5HFhdr.c +++ b/src/H5HFhdr.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFhuge.c b/src/H5HFhuge.c index b1778587e9d..33a6748cb6f 100644 --- a/src/H5HFhuge.c +++ b/src/H5HFhuge.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFiblock.c b/src/H5HFiblock.c index 6ec2d763711..6b6a0d811f2 100644 --- a/src/H5HFiblock.c +++ b/src/H5HFiblock.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFiter.c b/src/H5HFiter.c index 9fc564d09cd..3d889728dc6 100644 --- a/src/H5HFiter.c +++ b/src/H5HFiter.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFman.c b/src/H5HFman.c index edbb48e059f..09d9255aa17 100644 --- a/src/H5HFman.c +++ b/src/H5HFman.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFmodule.h b/src/H5HFmodule.h index c4fb437d4f1..435b21a6c1b 100644 --- a/src/H5HFmodule.h +++ b/src/H5HFmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFpkg.h b/src/H5HFpkg.h index ceef78f0c84..28ea5b4c314 100644 --- a/src/H5HFpkg.h +++ b/src/H5HFpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFprivate.h b/src/H5HFprivate.h index ca7948aa2e6..0908c0c22cd 100644 --- a/src/H5HFprivate.h +++ b/src/H5HFprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFsection.c b/src/H5HFsection.c index 2a61ad43a2a..b008b3db01d 100644 --- a/src/H5HFsection.c +++ b/src/H5HFsection.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFspace.c b/src/H5HFspace.c index 8c9f0c041ff..97c1e2e5eae 100644 --- a/src/H5HFspace.c +++ b/src/H5HFspace.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFstat.c b/src/H5HFstat.c index 411ad7ab79c..8e6fbe8e894 100644 --- a/src/H5HFstat.c +++ b/src/H5HFstat.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFtest.c b/src/H5HFtest.c index 16ea5292b9c..c62e898b33b 100644 --- a/src/H5HFtest.c +++ b/src/H5HFtest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HFtiny.c b/src/H5HFtiny.c index 0f5f1a56b4a..a7a674066a7 100644 --- a/src/H5HFtiny.c +++ b/src/H5HFtiny.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HG.c b/src/H5HG.c index a859b40f100..96f3fa3dc79 100644 --- a/src/H5HG.c +++ b/src/H5HG.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HGcache.c b/src/H5HGcache.c index f885ecf973a..28099d1684b 100644 --- a/src/H5HGcache.c +++ b/src/H5HGcache.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HGdbg.c b/src/H5HGdbg.c index 8f33052421b..0fc4c305820 100644 --- a/src/H5HGdbg.c +++ b/src/H5HGdbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HGmodule.h b/src/H5HGmodule.h index 772ebe6163d..0ed32ceb003 100644 --- a/src/H5HGmodule.h +++ b/src/H5HGmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HGpkg.h b/src/H5HGpkg.h index 99725d86f94..490086121b8 100644 --- a/src/H5HGpkg.h +++ b/src/H5HGpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HGprivate.h b/src/H5HGprivate.h index 892a0c7326a..f3e88b2dfaa 100644 --- a/src/H5HGprivate.h +++ b/src/H5HGprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HGquery.c b/src/H5HGquery.c index 3d329b60a8a..7a001288446 100644 --- a/src/H5HGquery.c +++ b/src/H5HGquery.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HL.c b/src/H5HL.c index f6e589b016d..45df1b2e6e8 100644 --- a/src/H5HL.c +++ b/src/H5HL.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HLcache.c b/src/H5HLcache.c index d0836fed4f7..11dcc20aeae 100644 --- a/src/H5HLcache.c +++ b/src/H5HLcache.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HLdbg.c b/src/H5HLdbg.c index 1308f8d7437..c0d906874c1 100644 --- a/src/H5HLdbg.c +++ b/src/H5HLdbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HLdblk.c b/src/H5HLdblk.c index dfcca97ff6f..746b0cf72f9 100644 --- a/src/H5HLdblk.c +++ b/src/H5HLdblk.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HLint.c b/src/H5HLint.c index 9369875afa7..1b120e531e4 100644 --- a/src/H5HLint.c +++ b/src/H5HLint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HLmodule.h b/src/H5HLmodule.h index 1a871abf745..e9d2ef5e45f 100644 --- a/src/H5HLmodule.h +++ b/src/H5HLmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HLpkg.h b/src/H5HLpkg.h index 9d23049dd35..aae0078a4c9 100644 --- a/src/H5HLpkg.h +++ b/src/H5HLpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HLprfx.c b/src/H5HLprfx.c index 6011e8ec2ab..48e423316fa 100644 --- a/src/H5HLprfx.c +++ b/src/H5HLprfx.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5HLprivate.h b/src/H5HLprivate.h index 045c5d7ac1e..16c1c6b4a1d 100644 --- a/src/H5HLprivate.h +++ b/src/H5HLprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5I.c b/src/H5I.c index 9202be2fa4d..731f0f31c56 100644 --- a/src/H5I.c +++ b/src/H5I.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Idbg.c b/src/H5Idbg.c index ee963fd1823..3091786e81e 100644 --- a/src/H5Idbg.c +++ b/src/H5Idbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Idevelop.h b/src/H5Idevelop.h index 2eaa61abf41..49cba70e21f 100644 --- a/src/H5Idevelop.h +++ b/src/H5Idevelop.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Iint.c b/src/H5Iint.c index 57a6d9f708f..57bb75bbbd1 100644 --- a/src/H5Iint.c +++ b/src/H5Iint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Imodule.h b/src/H5Imodule.h index f8924d3df62..6f9c4491fb0 100644 --- a/src/H5Imodule.h +++ b/src/H5Imodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ipkg.h b/src/H5Ipkg.h index c42c61d3d1b..852ab151dc5 100644 --- a/src/H5Ipkg.h +++ b/src/H5Ipkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Iprivate.h b/src/H5Iprivate.h index 75a5787b616..404cfc11c61 100644 --- a/src/H5Iprivate.h +++ b/src/H5Iprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ipublic.h b/src/H5Ipublic.h index d14e53dfaf9..338d1a46545 100644 --- a/src/H5Ipublic.h +++ b/src/H5Ipublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Itest.c b/src/H5Itest.c index a6d2c1ee3bb..feb87dda1d2 100644 --- a/src/H5Itest.c +++ b/src/H5Itest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5L.c b/src/H5L.c index 6b1e7fe9947..5a0c5973aab 100644 --- a/src/H5L.c +++ b/src/H5L.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ldeprec.c b/src/H5Ldeprec.c index 819aea87f10..bac57f2bf45 100644 --- a/src/H5Ldeprec.c +++ b/src/H5Ldeprec.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ldevelop.h b/src/H5Ldevelop.h index 148a5a57468..21d7458d512 100644 --- a/src/H5Ldevelop.h +++ b/src/H5Ldevelop.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Lexternal.c b/src/H5Lexternal.c index 88ee6baa201..888ff404679 100644 --- a/src/H5Lexternal.c +++ b/src/H5Lexternal.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Lint.c b/src/H5Lint.c index 10b935ab09d..96f4a6937f9 100644 --- a/src/H5Lint.c +++ b/src/H5Lint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Lmodule.h b/src/H5Lmodule.h index f29aa5c50c0..fda22a9b6ca 100644 --- a/src/H5Lmodule.h +++ b/src/H5Lmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Lpkg.h b/src/H5Lpkg.h index 0b04fdcb769..33305f82221 100644 --- a/src/H5Lpkg.h +++ b/src/H5Lpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Lprivate.h b/src/H5Lprivate.h index ff3ace83dbd..21fb142d8a8 100644 --- a/src/H5Lprivate.h +++ b/src/H5Lprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Lpublic.h b/src/H5Lpublic.h index ec325b8ad77..75ded667cfc 100644 --- a/src/H5Lpublic.h +++ b/src/H5Lpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5M.c b/src/H5M.c index c55f881d6d5..a862bad54fe 100644 --- a/src/H5M.c +++ b/src/H5M.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5MF.c b/src/H5MF.c index 2de3e7ad197..a09bb3afcc3 100644 --- a/src/H5MF.c +++ b/src/H5MF.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5MFaggr.c b/src/H5MFaggr.c index fa39c7256ef..550fb65efa9 100644 --- a/src/H5MFaggr.c +++ b/src/H5MFaggr.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5MFdbg.c b/src/H5MFdbg.c index 3c5060f84e1..9e3f8b07e61 100644 --- a/src/H5MFdbg.c +++ b/src/H5MFdbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5MFmodule.h b/src/H5MFmodule.h index dd32cdc210d..94ae9ed32e1 100644 --- a/src/H5MFmodule.h +++ b/src/H5MFmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5MFpkg.h b/src/H5MFpkg.h index 32d04d35a0e..2830b25fbf5 100644 --- a/src/H5MFpkg.h +++ b/src/H5MFpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5MFprivate.h b/src/H5MFprivate.h index 5342cc7d94e..79dc808af83 100644 --- a/src/H5MFprivate.h +++ b/src/H5MFprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5MFsection.c b/src/H5MFsection.c index a3b3988b38c..83026004750 100644 --- a/src/H5MFsection.c +++ b/src/H5MFsection.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5MM.c b/src/H5MM.c index 100ea297388..777a5581ce6 100644 --- a/src/H5MM.c +++ b/src/H5MM.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5MMprivate.h b/src/H5MMprivate.h index 39bba2c6e00..04302f82ce3 100644 --- a/src/H5MMprivate.h +++ b/src/H5MMprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5MMpublic.h b/src/H5MMpublic.h index 62172c9ea09..6e9311d1e12 100644 --- a/src/H5MMpublic.h +++ b/src/H5MMpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Mmodule.h b/src/H5Mmodule.h index 375399751b5..2305cad9cb9 100644 --- a/src/H5Mmodule.h +++ b/src/H5Mmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Mpkg.h b/src/H5Mpkg.h index d6b86ffa6dd..b4d27e0b9ca 100644 --- a/src/H5Mpkg.h +++ b/src/H5Mpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Mprivate.h b/src/H5Mprivate.h index 6dfb55641c0..9dca6e13176 100644 --- a/src/H5Mprivate.h +++ b/src/H5Mprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Mpublic.h b/src/H5Mpublic.h index f2d45720bfe..a57b8e63fd0 100644 --- a/src/H5Mpublic.h +++ b/src/H5Mpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5O.c b/src/H5O.c index 14118668d03..566c4b162eb 100644 --- a/src/H5O.c +++ b/src/H5O.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Oainfo.c b/src/H5Oainfo.c index 8b4340d2392..390b741ee55 100644 --- a/src/H5Oainfo.c +++ b/src/H5Oainfo.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Oalloc.c b/src/H5Oalloc.c index 4eadc315e05..14421c03635 100644 --- a/src/H5Oalloc.c +++ b/src/H5Oalloc.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Oattr.c b/src/H5Oattr.c index 6d1d23740f7..a671d507f27 100644 --- a/src/H5Oattr.c +++ b/src/H5Oattr.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Oattribute.c b/src/H5Oattribute.c index 4929be56717..fd8d5a4b732 100644 --- a/src/H5Oattribute.c +++ b/src/H5Oattribute.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Obogus.c b/src/H5Obogus.c index 4948d61c96d..2ba320d539e 100644 --- a/src/H5Obogus.c +++ b/src/H5Obogus.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Obtreek.c b/src/H5Obtreek.c index 42e1ce0c32c..6e3701f328c 100644 --- a/src/H5Obtreek.c +++ b/src/H5Obtreek.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ocache.c b/src/H5Ocache.c index 87f321cb986..a5bf35aa7ba 100644 --- a/src/H5Ocache.c +++ b/src/H5Ocache.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ocache_image.c b/src/H5Ocache_image.c index d91b46341c0..30f0732d671 100644 --- a/src/H5Ocache_image.c +++ b/src/H5Ocache_image.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ochunk.c b/src/H5Ochunk.c index 37ce88b5759..540495ceffc 100644 --- a/src/H5Ochunk.c +++ b/src/H5Ochunk.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ocont.c b/src/H5Ocont.c index 621095a1986..c58ed3e9008 100644 --- a/src/H5Ocont.c +++ b/src/H5Ocont.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ocopy.c b/src/H5Ocopy.c index bd19cd34f44..9317be0b4f7 100644 --- a/src/H5Ocopy.c +++ b/src/H5Ocopy.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ocopy_ref.c b/src/H5Ocopy_ref.c index c509732dfb8..1327a1db591 100644 --- a/src/H5Ocopy_ref.c +++ b/src/H5Ocopy_ref.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Odbg.c b/src/H5Odbg.c index cfdff270e40..32ad9df3a1d 100644 --- a/src/H5Odbg.c +++ b/src/H5Odbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Odeprec.c b/src/H5Odeprec.c index f56480392e4..c4395c1c011 100644 --- a/src/H5Odeprec.c +++ b/src/H5Odeprec.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Odrvinfo.c b/src/H5Odrvinfo.c index baec777d0f9..c07c0832811 100644 --- a/src/H5Odrvinfo.c +++ b/src/H5Odrvinfo.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Odtype.c b/src/H5Odtype.c index a359575a646..86892288923 100644 --- a/src/H5Odtype.c +++ b/src/H5Odtype.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Oefl.c b/src/H5Oefl.c index 351dbd30211..ea3c8b2754d 100644 --- a/src/H5Oefl.c +++ b/src/H5Oefl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ofill.c b/src/H5Ofill.c index 2b1faac30ca..becb16c8e41 100644 --- a/src/H5Ofill.c +++ b/src/H5Ofill.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Oflush.c b/src/H5Oflush.c index 7bd38f0eb89..c6e051e276b 100644 --- a/src/H5Oflush.c +++ b/src/H5Oflush.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ofsinfo.c b/src/H5Ofsinfo.c index 674e3ff05ff..e5e16758cea 100644 --- a/src/H5Ofsinfo.c +++ b/src/H5Ofsinfo.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Oginfo.c b/src/H5Oginfo.c index 645c5ff81af..97243545910 100644 --- a/src/H5Oginfo.c +++ b/src/H5Oginfo.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Oint.c b/src/H5Oint.c index c9363697fa5..6077a9e99b0 100644 --- a/src/H5Oint.c +++ b/src/H5Oint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Olayout.c b/src/H5Olayout.c index e5ffc382476..2d612235060 100644 --- a/src/H5Olayout.c +++ b/src/H5Olayout.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Olinfo.c b/src/H5Olinfo.c index 6b5dc0b89b5..1b3760a2cfa 100644 --- a/src/H5Olinfo.c +++ b/src/H5Olinfo.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Olink.c b/src/H5Olink.c index 431e1dd4965..b530e421cba 100644 --- a/src/H5Olink.c +++ b/src/H5Olink.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Omessage.c b/src/H5Omessage.c index 7190e46a57f..9b536c56116 100644 --- a/src/H5Omessage.c +++ b/src/H5Omessage.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Omodule.h b/src/H5Omodule.h index 1c1278a0e8a..de697a296d9 100644 --- a/src/H5Omodule.h +++ b/src/H5Omodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Omtime.c b/src/H5Omtime.c index 66f8d1bf4d4..7b9b2b6e4ca 100644 --- a/src/H5Omtime.c +++ b/src/H5Omtime.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Oname.c b/src/H5Oname.c index fc85c0bb9e0..f8f58138527 100644 --- a/src/H5Oname.c +++ b/src/H5Oname.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Onull.c b/src/H5Onull.c index d6ec380cbbf..c4f52a9b18a 100644 --- a/src/H5Onull.c +++ b/src/H5Onull.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Opkg.h b/src/H5Opkg.h index d4cab42471d..b47c82e23f9 100644 --- a/src/H5Opkg.h +++ b/src/H5Opkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Opline.c b/src/H5Opline.c index 3e5eb4d7318..aa8a25292e3 100644 --- a/src/H5Opline.c +++ b/src/H5Opline.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Oprivate.h b/src/H5Oprivate.h index 4b1f4e07940..b50f7c315be 100644 --- a/src/H5Oprivate.h +++ b/src/H5Oprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Opublic.h b/src/H5Opublic.h index 498e2595254..5c4d78702a9 100644 --- a/src/H5Opublic.h +++ b/src/H5Opublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Orefcount.c b/src/H5Orefcount.c index a93f4295a86..562d149f8b0 100644 --- a/src/H5Orefcount.c +++ b/src/H5Orefcount.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Osdspace.c b/src/H5Osdspace.c index 365e3511243..7c2fc52c496 100644 --- a/src/H5Osdspace.c +++ b/src/H5Osdspace.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Oshared.c b/src/H5Oshared.c index d562d1764a8..0007ef4886b 100644 --- a/src/H5Oshared.c +++ b/src/H5Oshared.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Oshared.h b/src/H5Oshared.h index d22e2e1b14c..86c22265313 100644 --- a/src/H5Oshared.h +++ b/src/H5Oshared.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Oshmesg.c b/src/H5Oshmesg.c index 98f18292c93..b8fa7c97c13 100644 --- a/src/H5Oshmesg.c +++ b/src/H5Oshmesg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ostab.c b/src/H5Ostab.c index c87034dc13f..9a25b228d14 100644 --- a/src/H5Ostab.c +++ b/src/H5Ostab.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Otest.c b/src/H5Otest.c index 410baa7f603..e44ad929025 100644 --- a/src/H5Otest.c +++ b/src/H5Otest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ounknown.c b/src/H5Ounknown.c index 08841021dec..d045e9b3a53 100644 --- a/src/H5Ounknown.c +++ b/src/H5Ounknown.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5P.c b/src/H5P.c index f0ccc2fc4ef..41ba7da4422 100644 --- a/src/H5P.c +++ b/src/H5P.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5PB.c b/src/H5PB.c index 69707d14cba..68b711185ff 100644 --- a/src/H5PB.c +++ b/src/H5PB.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5PBmodule.h b/src/H5PBmodule.h index 3a353dbd0b2..ba89f9e7dda 100644 --- a/src/H5PBmodule.h +++ b/src/H5PBmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5PBpkg.h b/src/H5PBpkg.h index 527c109df74..e25c2ad0614 100644 --- a/src/H5PBpkg.h +++ b/src/H5PBpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5PBprivate.h b/src/H5PBprivate.h index d4abf8ef081..65a1e812479 100644 --- a/src/H5PBprivate.h +++ b/src/H5PBprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5PL.c b/src/H5PL.c index b132721f732..a29ff97bc23 100644 --- a/src/H5PL.c +++ b/src/H5PL.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5PLextern.h b/src/H5PLextern.h index d136051beda..9abfb2e9f1d 100644 --- a/src/H5PLextern.h +++ b/src/H5PLextern.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5PLint.c b/src/H5PLint.c index 6ee4603f63a..8b6cd32f360 100644 --- a/src/H5PLint.c +++ b/src/H5PLint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5PLmodule.h b/src/H5PLmodule.h index 9f867ee5fff..46b586c91dd 100644 --- a/src/H5PLmodule.h +++ b/src/H5PLmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5PLpath.c b/src/H5PLpath.c index 02e7d25d4d5..b27797fb521 100644 --- a/src/H5PLpath.c +++ b/src/H5PLpath.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5PLpkg.h b/src/H5PLpkg.h index 24a7f34d3f4..f7830504df9 100644 --- a/src/H5PLpkg.h +++ b/src/H5PLpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5PLplugin_cache.c b/src/H5PLplugin_cache.c index 3878f36efaa..3b31f1efdd5 100644 --- a/src/H5PLplugin_cache.c +++ b/src/H5PLplugin_cache.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5PLprivate.h b/src/H5PLprivate.h index 0c71b176b73..32ba263e56d 100644 --- a/src/H5PLprivate.h +++ b/src/H5PLprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5PLpublic.h b/src/H5PLpublic.h index ca996977485..18ca6ec51ce 100644 --- a/src/H5PLpublic.h +++ b/src/H5PLpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pacpl.c b/src/H5Pacpl.c index b4dd90b8dfc..73d8a8ec985 100644 --- a/src/H5Pacpl.c +++ b/src/H5Pacpl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pdapl.c b/src/H5Pdapl.c index fd6f2e2ddf9..af123632963 100644 --- a/src/H5Pdapl.c +++ b/src/H5Pdapl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pdcpl.c b/src/H5Pdcpl.c index 6160d36e38a..3186e11c041 100644 --- a/src/H5Pdcpl.c +++ b/src/H5Pdcpl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pdeprec.c b/src/H5Pdeprec.c index 3332a35a9b9..c986eb30142 100644 --- a/src/H5Pdeprec.c +++ b/src/H5Pdeprec.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pdxpl.c b/src/H5Pdxpl.c index bd53c3affd1..4fc27f6be96 100644 --- a/src/H5Pdxpl.c +++ b/src/H5Pdxpl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pencdec.c b/src/H5Pencdec.c index 19d453279ee..96cbfc3f018 100644 --- a/src/H5Pencdec.c +++ b/src/H5Pencdec.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pfapl.c b/src/H5Pfapl.c index f726f63e7b4..807ee3d5cf3 100644 --- a/src/H5Pfapl.c +++ b/src/H5Pfapl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pfcpl.c b/src/H5Pfcpl.c index 8e43874275c..c2f44dec615 100644 --- a/src/H5Pfcpl.c +++ b/src/H5Pfcpl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pfmpl.c b/src/H5Pfmpl.c index 97856c5a525..aa89e6fbec1 100644 --- a/src/H5Pfmpl.c +++ b/src/H5Pfmpl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pgcpl.c b/src/H5Pgcpl.c index b7d9ca1fb23..657eecd95f6 100644 --- a/src/H5Pgcpl.c +++ b/src/H5Pgcpl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pint.c b/src/H5Pint.c index f8c79bf022f..4e9a41ff676 100644 --- a/src/H5Pint.c +++ b/src/H5Pint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Plapl.c b/src/H5Plapl.c index 64cd2996fc4..24c8c581ad9 100644 --- a/src/H5Plapl.c +++ b/src/H5Plapl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Plcpl.c b/src/H5Plcpl.c index 739ef76f3f2..9afad0a278a 100644 --- a/src/H5Plcpl.c +++ b/src/H5Plcpl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pmapl.c b/src/H5Pmapl.c index 45cbd7648aa..b3b9b776075 100644 --- a/src/H5Pmapl.c +++ b/src/H5Pmapl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pmcpl.c b/src/H5Pmcpl.c index 367edb3f8b7..75836a481be 100644 --- a/src/H5Pmcpl.c +++ b/src/H5Pmcpl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pmodule.h b/src/H5Pmodule.h index 8ac6f86eed9..88cab4d3a12 100644 --- a/src/H5Pmodule.h +++ b/src/H5Pmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pocpl.c b/src/H5Pocpl.c index f9d89ab4156..8605d0112c8 100644 --- a/src/H5Pocpl.c +++ b/src/H5Pocpl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pocpypl.c b/src/H5Pocpypl.c index 5cf809140cd..622e35f416e 100644 --- a/src/H5Pocpypl.c +++ b/src/H5Pocpypl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ppkg.h b/src/H5Ppkg.h index 0ff000ba96c..a1f3e3a5233 100644 --- a/src/H5Ppkg.h +++ b/src/H5Ppkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pprivate.h b/src/H5Pprivate.h index 0671ed5952e..b4abbc3b549 100644 --- a/src/H5Pprivate.h +++ b/src/H5Pprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ppublic.h b/src/H5Ppublic.h index 273250017a3..fa4c3ba5b8c 100644 --- a/src/H5Ppublic.h +++ b/src/H5Ppublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Pstrcpl.c b/src/H5Pstrcpl.c index 3facfff7d12..57543444239 100644 --- a/src/H5Pstrcpl.c +++ b/src/H5Pstrcpl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ptest.c b/src/H5Ptest.c index f52a3702100..094dbc44da4 100644 --- a/src/H5Ptest.c +++ b/src/H5Ptest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5R.c b/src/H5R.c index b532bf7426d..2b8dcdbf2f3 100644 --- a/src/H5R.c +++ b/src/H5R.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5RS.c b/src/H5RS.c index ad1f1d0c69e..238390335eb 100644 --- a/src/H5RS.c +++ b/src/H5RS.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5RSmodule.h b/src/H5RSmodule.h index ee6b7e80e51..578474a9729 100644 --- a/src/H5RSmodule.h +++ b/src/H5RSmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5RSprivate.h b/src/H5RSprivate.h index a38214039ab..0822fbd6e15 100644 --- a/src/H5RSprivate.h +++ b/src/H5RSprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Rdeprec.c b/src/H5Rdeprec.c index 921693770a2..99b69225be6 100644 --- a/src/H5Rdeprec.c +++ b/src/H5Rdeprec.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Rint.c b/src/H5Rint.c index cbfa910d247..1c5b0b68841 100644 --- a/src/H5Rint.c +++ b/src/H5Rint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Rmodule.h b/src/H5Rmodule.h index 443c4746d71..87a367796a6 100644 --- a/src/H5Rmodule.h +++ b/src/H5Rmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Rpkg.h b/src/H5Rpkg.h index 8ce6041769a..1c214068477 100644 --- a/src/H5Rpkg.h +++ b/src/H5Rpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Rprivate.h b/src/H5Rprivate.h index 43e476485fb..723dd30e953 100644 --- a/src/H5Rprivate.h +++ b/src/H5Rprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Rpublic.h b/src/H5Rpublic.h index 9e1f73f1c00..c7e03e126f2 100644 --- a/src/H5Rpublic.h +++ b/src/H5Rpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5S.c b/src/H5S.c index 373115661b6..d39232776ad 100644 --- a/src/H5S.c +++ b/src/H5S.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5SL.c b/src/H5SL.c index 54e064962f5..813a5961064 100644 --- a/src/H5SL.c +++ b/src/H5SL.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5SLmodule.h b/src/H5SLmodule.h index b0b3064f15b..83cfa591327 100644 --- a/src/H5SLmodule.h +++ b/src/H5SLmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5SLprivate.h b/src/H5SLprivate.h index d7eb5be8b83..14eee279509 100644 --- a/src/H5SLprivate.h +++ b/src/H5SLprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5SM.c b/src/H5SM.c index 59abd24e679..f096a50c8b8 100644 --- a/src/H5SM.c +++ b/src/H5SM.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5SMbtree2.c b/src/H5SMbtree2.c index 6165d664f38..6e0226d04b3 100644 --- a/src/H5SMbtree2.c +++ b/src/H5SMbtree2.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5SMcache.c b/src/H5SMcache.c index 7bf0575ed45..3be26d6945c 100644 --- a/src/H5SMcache.c +++ b/src/H5SMcache.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5SMmessage.c b/src/H5SMmessage.c index 34fe8fd08af..230f381df2f 100644 --- a/src/H5SMmessage.c +++ b/src/H5SMmessage.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5SMmodule.h b/src/H5SMmodule.h index 1eaeea29e99..d0f247f3a00 100644 --- a/src/H5SMmodule.h +++ b/src/H5SMmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5SMpkg.h b/src/H5SMpkg.h index dbeafc15139..b61252758fd 100644 --- a/src/H5SMpkg.h +++ b/src/H5SMpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5SMprivate.h b/src/H5SMprivate.h index f6496f3988b..b64aa6bd079 100644 --- a/src/H5SMprivate.h +++ b/src/H5SMprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5SMtest.c b/src/H5SMtest.c index 84da3195556..e6bfc7cfbbc 100644 --- a/src/H5SMtest.c +++ b/src/H5SMtest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Sall.c b/src/H5Sall.c index 1a9d8fc4029..8bdcc4ad9aa 100644 --- a/src/H5Sall.c +++ b/src/H5Sall.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Sdbg.c b/src/H5Sdbg.c index f233491cd1c..7348848d9fa 100644 --- a/src/H5Sdbg.c +++ b/src/H5Sdbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Sdeprec.c b/src/H5Sdeprec.c index 062bf29fec0..8c09c1bccd5 100644 --- a/src/H5Sdeprec.c +++ b/src/H5Sdeprec.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Shyper.c b/src/H5Shyper.c index cbf519d3aab..e0ca727bd09 100644 --- a/src/H5Shyper.c +++ b/src/H5Shyper.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Smodule.h b/src/H5Smodule.h index b9897485405..b0cdc574744 100644 --- a/src/H5Smodule.h +++ b/src/H5Smodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Smpio.c b/src/H5Smpio.c index 96b20400ac5..e430c647538 100644 --- a/src/H5Smpio.c +++ b/src/H5Smpio.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Snone.c b/src/H5Snone.c index 397fb5860e1..ac3ec9beb4a 100644 --- a/src/H5Snone.c +++ b/src/H5Snone.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Spkg.h b/src/H5Spkg.h index ea0feefffa7..67125d874d6 100644 --- a/src/H5Spkg.h +++ b/src/H5Spkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Spoint.c b/src/H5Spoint.c index 6853dc3932a..339e36593c9 100644 --- a/src/H5Spoint.c +++ b/src/H5Spoint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Sprivate.h b/src/H5Sprivate.h index 24a83353f70..056d9e4dac1 100644 --- a/src/H5Sprivate.h +++ b/src/H5Sprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Spublic.h b/src/H5Spublic.h index a5264099b0f..80c64e91fad 100644 --- a/src/H5Spublic.h +++ b/src/H5Spublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Sselect.c b/src/H5Sselect.c index 5625de3aab4..31d68a9ad21 100644 --- a/src/H5Sselect.c +++ b/src/H5Sselect.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Stest.c b/src/H5Stest.c index 422f7c1d20f..db33d9ce5dd 100644 --- a/src/H5Stest.c +++ b/src/H5Stest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5T.c b/src/H5T.c index 1728132cf6b..9befc0836b5 100644 --- a/src/H5T.c +++ b/src/H5T.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TS.c b/src/H5TS.c index 05d700c4652..2b025724cc4 100644 --- a/src/H5TS.c +++ b/src/H5TS.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSatomic.c b/src/H5TSatomic.c index e765a5f491a..db241b2b868 100644 --- a/src/H5TSatomic.c +++ b/src/H5TSatomic.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSatomic.h b/src/H5TSatomic.h index 478760e8c4d..933bf1a11f7 100644 --- a/src/H5TSatomic.h +++ b/src/H5TSatomic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSbarrier.c b/src/H5TSbarrier.c index 1dee209dddd..3606f836349 100644 --- a/src/H5TSbarrier.c +++ b/src/H5TSbarrier.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSbarrier.h b/src/H5TSbarrier.h index e27ec08897f..bf085a50e5a 100644 --- a/src/H5TSbarrier.h +++ b/src/H5TSbarrier.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSc11.c b/src/H5TSc11.c index c1de0fe7a5c..e5f6732030d 100644 --- a/src/H5TSc11.c +++ b/src/H5TSc11.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TScond.c b/src/H5TScond.c index 994bd38c7a8..ec38c70a994 100644 --- a/src/H5TScond.c +++ b/src/H5TScond.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TScond.h b/src/H5TScond.h index afc6c305348..3eae21cfca5 100644 --- a/src/H5TScond.h +++ b/src/H5TScond.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSdevelop.h b/src/H5TSdevelop.h index 6700d1047d8..b8140c675d4 100644 --- a/src/H5TSdevelop.h +++ b/src/H5TSdevelop.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSint.c b/src/H5TSint.c index c7600eb1fda..410ae408a23 100644 --- a/src/H5TSint.c +++ b/src/H5TSint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSkey.c b/src/H5TSkey.c index 994898c71f0..991771f951e 100644 --- a/src/H5TSkey.c +++ b/src/H5TSkey.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSkey.h b/src/H5TSkey.h index 3003e114bcd..4442e2b63ce 100644 --- a/src/H5TSkey.h +++ b/src/H5TSkey.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSmodule.h b/src/H5TSmodule.h index 2e8bb1d92a6..e550d3a9edb 100644 --- a/src/H5TSmodule.h +++ b/src/H5TSmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSmutex.c b/src/H5TSmutex.c index 710f37e74e7..63b9f7329a5 100644 --- a/src/H5TSmutex.c +++ b/src/H5TSmutex.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSmutex.h b/src/H5TSmutex.h index 50167ec6bc8..cb67fb35a85 100644 --- a/src/H5TSmutex.h +++ b/src/H5TSmutex.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSonce.c b/src/H5TSonce.c index 492dd1de4c0..71d56884ba0 100644 --- a/src/H5TSonce.c +++ b/src/H5TSonce.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSpkg.h b/src/H5TSpkg.h index b90f4110d6b..47ab8cb7720 100644 --- a/src/H5TSpkg.h +++ b/src/H5TSpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSpool.c b/src/H5TSpool.c index 3099543ba5f..48cfb1446f5 100644 --- a/src/H5TSpool.c +++ b/src/H5TSpool.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSpool.h b/src/H5TSpool.h index 5953097b45d..4d0b0337cc3 100644 --- a/src/H5TSpool.h +++ b/src/H5TSpool.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSprivate.h b/src/H5TSprivate.h index 64fd567a9bb..cc6fc61d860 100644 --- a/src/H5TSprivate.h +++ b/src/H5TSprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSpthread.c b/src/H5TSpthread.c index e8774b67979..11ca704c200 100644 --- a/src/H5TSpthread.c +++ b/src/H5TSpthread.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSrec_rwlock.c b/src/H5TSrec_rwlock.c index e191aa3a290..43528c2afa3 100644 --- a/src/H5TSrec_rwlock.c +++ b/src/H5TSrec_rwlock.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSrwlock.c b/src/H5TSrwlock.c index d8f772318a5..70b7c27687f 100644 --- a/src/H5TSrwlock.c +++ b/src/H5TSrwlock.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSrwlock.h b/src/H5TSrwlock.h index 16c36d46e5e..951f4569b3d 100644 --- a/src/H5TSrwlock.h +++ b/src/H5TSrwlock.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSsemaphore.c b/src/H5TSsemaphore.c index 231058b5476..e3f64780497 100644 --- a/src/H5TSsemaphore.c +++ b/src/H5TSsemaphore.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSsemaphore.h b/src/H5TSsemaphore.h index 340b1cf9a11..56a52300e90 100644 --- a/src/H5TSsemaphore.h +++ b/src/H5TSsemaphore.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSthread.c b/src/H5TSthread.c index f8bd1aebe0a..3e2f13c5afc 100644 --- a/src/H5TSthread.c +++ b/src/H5TSthread.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5TSwin.c b/src/H5TSwin.c index 48efe009da8..d6198dab0ba 100644 --- a/src/H5TSwin.c +++ b/src/H5TSwin.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tarray.c b/src/H5Tarray.c index 620b4834e60..24d2786d06b 100644 --- a/src/H5Tarray.c +++ b/src/H5Tarray.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tbit.c b/src/H5Tbit.c index c8300b85cde..47f46614f5f 100644 --- a/src/H5Tbit.c +++ b/src/H5Tbit.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tcommit.c b/src/H5Tcommit.c index d30ddd00bd4..a30985e3058 100644 --- a/src/H5Tcommit.c +++ b/src/H5Tcommit.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tcompound.c b/src/H5Tcompound.c index eb39dd4e98a..cea7c03665c 100644 --- a/src/H5Tcompound.c +++ b/src/H5Tcompound.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv.c b/src/H5Tconv.c index 0a5e89ee99c..6d6d023a9c0 100644 --- a/src/H5Tconv.c +++ b/src/H5Tconv.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv.h b/src/H5Tconv.h index 4dae848269d..be822247b6e 100644 --- a/src/H5Tconv.h +++ b/src/H5Tconv.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_array.c b/src/H5Tconv_array.c index e192c7267e0..dc08ab96c50 100644 --- a/src/H5Tconv_array.c +++ b/src/H5Tconv_array.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_array.h b/src/H5Tconv_array.h index be1ba8ff5f1..e2aaec1829b 100644 --- a/src/H5Tconv_array.h +++ b/src/H5Tconv_array.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_bitfield.c b/src/H5Tconv_bitfield.c index 486036ad260..8a8a2e4de43 100644 --- a/src/H5Tconv_bitfield.c +++ b/src/H5Tconv_bitfield.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_bitfield.h b/src/H5Tconv_bitfield.h index aece3c38a12..806aff3f23e 100644 --- a/src/H5Tconv_bitfield.h +++ b/src/H5Tconv_bitfield.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_compound.c b/src/H5Tconv_compound.c index 9495fbc621e..e509c0c4704 100644 --- a/src/H5Tconv_compound.c +++ b/src/H5Tconv_compound.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_compound.h b/src/H5Tconv_compound.h index 02d3150c4e3..609a66f1112 100644 --- a/src/H5Tconv_compound.h +++ b/src/H5Tconv_compound.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_enum.c b/src/H5Tconv_enum.c index cfa86071987..66c5358314c 100644 --- a/src/H5Tconv_enum.c +++ b/src/H5Tconv_enum.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_enum.h b/src/H5Tconv_enum.h index da836ce707e..5a533c8306c 100644 --- a/src/H5Tconv_enum.h +++ b/src/H5Tconv_enum.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_float.c b/src/H5Tconv_float.c index 806a7261677..561e29714dd 100644 --- a/src/H5Tconv_float.c +++ b/src/H5Tconv_float.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_float.h b/src/H5Tconv_float.h index df349d26874..b5ec3062856 100644 --- a/src/H5Tconv_float.h +++ b/src/H5Tconv_float.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_integer.c b/src/H5Tconv_integer.c index 9128f777a79..6d92c67ed24 100644 --- a/src/H5Tconv_integer.c +++ b/src/H5Tconv_integer.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_integer.h b/src/H5Tconv_integer.h index c8eff45a285..dbebfd4393f 100644 --- a/src/H5Tconv_integer.h +++ b/src/H5Tconv_integer.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_macros.h b/src/H5Tconv_macros.h index c2876670f5e..33be7544bac 100644 --- a/src/H5Tconv_macros.h +++ b/src/H5Tconv_macros.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_reference.c b/src/H5Tconv_reference.c index 62ad0b574c0..44a642a3cd5 100644 --- a/src/H5Tconv_reference.c +++ b/src/H5Tconv_reference.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_reference.h b/src/H5Tconv_reference.h index 346dc947e94..984ad280d40 100644 --- a/src/H5Tconv_reference.h +++ b/src/H5Tconv_reference.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_string.c b/src/H5Tconv_string.c index 520d43e24c7..158ffd7aa6a 100644 --- a/src/H5Tconv_string.c +++ b/src/H5Tconv_string.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_string.h b/src/H5Tconv_string.h index 5a8a6354539..91718fea3e9 100644 --- a/src/H5Tconv_string.h +++ b/src/H5Tconv_string.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_vlen.c b/src/H5Tconv_vlen.c index ab6f5fc2d59..2f368879be0 100644 --- a/src/H5Tconv_vlen.c +++ b/src/H5Tconv_vlen.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tconv_vlen.h b/src/H5Tconv_vlen.h index a6a38d82ef1..e03961d2c9a 100644 --- a/src/H5Tconv_vlen.h +++ b/src/H5Tconv_vlen.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tcset.c b/src/H5Tcset.c index 28cfe63f9a6..8ccb8d826df 100644 --- a/src/H5Tcset.c +++ b/src/H5Tcset.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tdbg.c b/src/H5Tdbg.c index b1de7708b8f..d54422a626c 100644 --- a/src/H5Tdbg.c +++ b/src/H5Tdbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tdeprec.c b/src/H5Tdeprec.c index 2545858f760..8350cbb8af8 100644 --- a/src/H5Tdeprec.c +++ b/src/H5Tdeprec.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tdevelop.h b/src/H5Tdevelop.h index e571741ec2e..bb2d4aee0a0 100644 --- a/src/H5Tdevelop.h +++ b/src/H5Tdevelop.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tenum.c b/src/H5Tenum.c index 53a6ab36e46..0693f4e2605 100644 --- a/src/H5Tenum.c +++ b/src/H5Tenum.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tfields.c b/src/H5Tfields.c index 86c9e1eb51b..8d3ec8f6fb8 100644 --- a/src/H5Tfields.c +++ b/src/H5Tfields.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tfixed.c b/src/H5Tfixed.c index 178a0271fb4..fab2159bb52 100644 --- a/src/H5Tfixed.c +++ b/src/H5Tfixed.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tfloat.c b/src/H5Tfloat.c index 0eefd730b73..d1e404a57e4 100644 --- a/src/H5Tfloat.c +++ b/src/H5Tfloat.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tinit_float.c b/src/H5Tinit_float.c index 39deda03625..ca89207ce90 100644 --- a/src/H5Tinit_float.c +++ b/src/H5Tinit_float.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tmodule.h b/src/H5Tmodule.h index 3e121469108..55ba2d9d478 100644 --- a/src/H5Tmodule.h +++ b/src/H5Tmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tnative.c b/src/H5Tnative.c index 01ba1a48386..62d55669789 100644 --- a/src/H5Tnative.c +++ b/src/H5Tnative.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Toffset.c b/src/H5Toffset.c index 332bc41ade1..ab2500be1b3 100644 --- a/src/H5Toffset.c +++ b/src/H5Toffset.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Toh.c b/src/H5Toh.c index 6d43561177b..e5753b88f24 100644 --- a/src/H5Toh.c +++ b/src/H5Toh.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Topaque.c b/src/H5Topaque.c index edaeb69e3d6..c4165b15c0e 100644 --- a/src/H5Topaque.c +++ b/src/H5Topaque.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Torder.c b/src/H5Torder.c index e358c74168c..26efe15318d 100644 --- a/src/H5Torder.c +++ b/src/H5Torder.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tpad.c b/src/H5Tpad.c index 4074f12058f..36b5d7a60c1 100644 --- a/src/H5Tpad.c +++ b/src/H5Tpad.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tpkg.h b/src/H5Tpkg.h index c3171ca0b81..dd1ad8d69a1 100644 --- a/src/H5Tpkg.h +++ b/src/H5Tpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tprecis.c b/src/H5Tprecis.c index 986d2646323..641da1a99d6 100644 --- a/src/H5Tprecis.c +++ b/src/H5Tprecis.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tprivate.h b/src/H5Tprivate.h index bf938ffb1bd..a525ffe3739 100644 --- a/src/H5Tprivate.h +++ b/src/H5Tprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tpublic.h b/src/H5Tpublic.h index 522488b0e90..8de42d507e8 100644 --- a/src/H5Tpublic.h +++ b/src/H5Tpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tref.c b/src/H5Tref.c index cd603946bfa..526ea696f3c 100644 --- a/src/H5Tref.c +++ b/src/H5Tref.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tstrpad.c b/src/H5Tstrpad.c index 2fec03c62e3..62737bc26e3 100644 --- a/src/H5Tstrpad.c +++ b/src/H5Tstrpad.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tvisit.c b/src/H5Tvisit.c index dd328c0aa15..a3946124343 100644 --- a/src/H5Tvisit.c +++ b/src/H5Tvisit.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Tvlen.c b/src/H5Tvlen.c index d8832714917..eda525be565 100644 --- a/src/H5Tvlen.c +++ b/src/H5Tvlen.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5UC.c b/src/H5UC.c index 00da5306c08..cab195eb6c0 100644 --- a/src/H5UC.c +++ b/src/H5UC.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5UCprivate.h b/src/H5UCprivate.h index c6a6b7a854e..6012064f1d1 100644 --- a/src/H5UCprivate.h +++ b/src/H5UCprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VL.c b/src/H5VL.c index c3e737a1942..9b0477493ce 100644 --- a/src/H5VL.c +++ b/src/H5VL.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLcallback.c b/src/H5VLcallback.c index 497e53908d5..830a61fc945 100644 --- a/src/H5VLcallback.c +++ b/src/H5VLcallback.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLconnector.h b/src/H5VLconnector.h index 19e5e11999c..9966d2a31a1 100644 --- a/src/H5VLconnector.h +++ b/src/H5VLconnector.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLconnector_passthru.h b/src/H5VLconnector_passthru.h index d10bac4697c..90afbbc0610 100644 --- a/src/H5VLconnector_passthru.h +++ b/src/H5VLconnector_passthru.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLdyn_ops.c b/src/H5VLdyn_ops.c index 5f3f58c5fda..ee11874ea54 100644 --- a/src/H5VLdyn_ops.c +++ b/src/H5VLdyn_ops.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLint.c b/src/H5VLint.c index 81d8fe07b22..938b33588ba 100644 --- a/src/H5VLint.c +++ b/src/H5VLint.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLmodule.h b/src/H5VLmodule.h index 81321f6d787..8359118998c 100644 --- a/src/H5VLmodule.h +++ b/src/H5VLmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLnative.c b/src/H5VLnative.c index 3a360713ee6..d11337f9e71 100644 --- a/src/H5VLnative.c +++ b/src/H5VLnative.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLnative.h b/src/H5VLnative.h index f0a185b22d6..3653c2668cc 100644 --- a/src/H5VLnative.h +++ b/src/H5VLnative.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLnative_attr.c b/src/H5VLnative_attr.c index bebd127df23..7cc9c6a0f4b 100644 --- a/src/H5VLnative_attr.c +++ b/src/H5VLnative_attr.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLnative_blob.c b/src/H5VLnative_blob.c index 890e82dc1b5..2dfe569a50d 100644 --- a/src/H5VLnative_blob.c +++ b/src/H5VLnative_blob.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLnative_dataset.c b/src/H5VLnative_dataset.c index ced4569d8d1..fb65458e7fd 100644 --- a/src/H5VLnative_dataset.c +++ b/src/H5VLnative_dataset.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLnative_datatype.c b/src/H5VLnative_datatype.c index 41776ebcba6..e545d54e49b 100644 --- a/src/H5VLnative_datatype.c +++ b/src/H5VLnative_datatype.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLnative_file.c b/src/H5VLnative_file.c index 33a19bfd917..0734f47304d 100644 --- a/src/H5VLnative_file.c +++ b/src/H5VLnative_file.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLnative_group.c b/src/H5VLnative_group.c index 43ab7a3b63d..07a68278000 100644 --- a/src/H5VLnative_group.c +++ b/src/H5VLnative_group.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLnative_introspect.c b/src/H5VLnative_introspect.c index 4c1cb53c0db..2cb1b5bc588 100644 --- a/src/H5VLnative_introspect.c +++ b/src/H5VLnative_introspect.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLnative_link.c b/src/H5VLnative_link.c index c25a01271d2..ae7bb8ffdd9 100644 --- a/src/H5VLnative_link.c +++ b/src/H5VLnative_link.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLnative_object.c b/src/H5VLnative_object.c index 00442b8316a..8c08060777c 100644 --- a/src/H5VLnative_object.c +++ b/src/H5VLnative_object.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLnative_private.h b/src/H5VLnative_private.h index e3f5fb8f405..15c9ae94e59 100644 --- a/src/H5VLnative_private.h +++ b/src/H5VLnative_private.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLnative_token.c b/src/H5VLnative_token.c index f7265043f98..a3f04fed892 100644 --- a/src/H5VLnative_token.c +++ b/src/H5VLnative_token.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLpassthru.c b/src/H5VLpassthru.c index 14274ed86c9..62d490ebb6e 100644 --- a/src/H5VLpassthru.c +++ b/src/H5VLpassthru.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLpassthru.h b/src/H5VLpassthru.h index 8480081cde6..d3723b72c67 100644 --- a/src/H5VLpassthru.h +++ b/src/H5VLpassthru.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLpassthru_int.c b/src/H5VLpassthru_int.c index b514101b8c4..302a494ecdf 100644 --- a/src/H5VLpassthru_int.c +++ b/src/H5VLpassthru_int.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLpassthru_private.h b/src/H5VLpassthru_private.h index 8ac340937c2..0c28400d460 100644 --- a/src/H5VLpassthru_private.h +++ b/src/H5VLpassthru_private.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLpkg.h b/src/H5VLpkg.h index f33406e7602..ed3d9e00cf3 100644 --- a/src/H5VLpkg.h +++ b/src/H5VLpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLprivate.h b/src/H5VLprivate.h index 635642969bb..11b77f890b3 100644 --- a/src/H5VLprivate.h +++ b/src/H5VLprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLpublic.h b/src/H5VLpublic.h index 30a2b5dd62a..b114f333c6b 100644 --- a/src/H5VLpublic.h +++ b/src/H5VLpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLquery.c b/src/H5VLquery.c index 47fd0d21a2c..c38b08d592c 100644 --- a/src/H5VLquery.c +++ b/src/H5VLquery.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VLtest.c b/src/H5VLtest.c index c15f8295d51..903abb04df4 100644 --- a/src/H5VLtest.c +++ b/src/H5VLtest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VM.c b/src/H5VM.c index e5d533e26e0..8d3874ee058 100644 --- a/src/H5VM.c +++ b/src/H5VM.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5VMprivate.h b/src/H5VMprivate.h index 456413fae9a..88a277eac43 100644 --- a/src/H5VMprivate.h +++ b/src/H5VMprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5WB.c b/src/H5WB.c index d9b9c5e9ef3..127c507aa34 100644 --- a/src/H5WB.c +++ b/src/H5WB.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5WBprivate.h b/src/H5WBprivate.h index 74b3900927c..abe1cb5c839 100644 --- a/src/H5WBprivate.h +++ b/src/H5WBprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Z.c b/src/H5Z.c index 8ee679b3f54..67b1a31154f 100644 --- a/src/H5Z.c +++ b/src/H5Z.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Zdeflate.c b/src/H5Zdeflate.c index 7d580646d9a..def170e9f99 100644 --- a/src/H5Zdeflate.c +++ b/src/H5Zdeflate.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Zdevelop.h b/src/H5Zdevelop.h index fb3b71b13d3..a962a5bd600 100644 --- a/src/H5Zdevelop.h +++ b/src/H5Zdevelop.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Zfletcher32.c b/src/H5Zfletcher32.c index a90131c6f80..c3ec5f7ccb0 100644 --- a/src/H5Zfletcher32.c +++ b/src/H5Zfletcher32.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Zmodule.h b/src/H5Zmodule.h index e02be5c2677..23d38368047 100644 --- a/src/H5Zmodule.h +++ b/src/H5Zmodule.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Znbit.c b/src/H5Znbit.c index 429394d56c8..83185831ad6 100644 --- a/src/H5Znbit.c +++ b/src/H5Znbit.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Zpkg.h b/src/H5Zpkg.h index e5660e70d3f..cf3122f90d4 100644 --- a/src/H5Zpkg.h +++ b/src/H5Zpkg.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Zprivate.h b/src/H5Zprivate.h index 8b7c3d0234f..775373d4ca4 100644 --- a/src/H5Zprivate.h +++ b/src/H5Zprivate.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Zpublic.h b/src/H5Zpublic.h index bd557fc8630..c3927dc682e 100644 --- a/src/H5Zpublic.h +++ b/src/H5Zpublic.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Zscaleoffset.c b/src/H5Zscaleoffset.c index 048344b763c..00104446159 100644 --- a/src/H5Zscaleoffset.c +++ b/src/H5Zscaleoffset.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Zshuffle.c b/src/H5Zshuffle.c index 7fce6720f3d..acc864f774c 100644 --- a/src/H5Zshuffle.c +++ b/src/H5Zshuffle.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Zszip.c b/src/H5Zszip.c index f75060e38e6..a5e961d3b6f 100644 --- a/src/H5Zszip.c +++ b/src/H5Zszip.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5Ztrans.c b/src/H5Ztrans.c index 1b59efac3ee..b8afda077ba 100644 --- a/src/H5Ztrans.c +++ b/src/H5Ztrans.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5api_adpt.h b/src/H5api_adpt.h index a9c34ae2534..90f67fbbd84 100644 --- a/src/H5api_adpt.h +++ b/src/H5api_adpt.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5build_settings.autotools.c.in b/src/H5build_settings.autotools.c.in index 70eb34b8123..8fd583de62f 100644 --- a/src/H5build_settings.autotools.c.in +++ b/src/H5build_settings.autotools.c.in @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5build_settings.cmake.c.in b/src/H5build_settings.cmake.c.in index 8889ebf8d6f..acb5c5bb169 100644 --- a/src/H5build_settings.cmake.c.in +++ b/src/H5build_settings.cmake.c.in @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5build_settings.off.c.in b/src/H5build_settings.off.c.in index 2464e9fabec..ae88c32f202 100644 --- a/src/H5build_settings.off.c.in +++ b/src/H5build_settings.off.c.in @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5checksum.c b/src/H5checksum.c index 6eafc0dbe35..92fe1549516 100644 --- a/src/H5checksum.c +++ b/src/H5checksum.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5dbg.c b/src/H5dbg.c index 7a3dfaa521c..e6b252dfbbc 100644 --- a/src/H5dbg.c +++ b/src/H5dbg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5encode.h b/src/H5encode.h index d88757c4b7e..ecba9201313 100644 --- a/src/H5encode.h +++ b/src/H5encode.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5err.txt b/src/H5err.txt index 23cab2c0e56..e50915c86f8 100644 --- a/src/H5err.txt +++ b/src/H5err.txt @@ -3,7 +3,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/src/H5module.h b/src/H5module.h index a0f1af77363..918630f1646 100644 --- a/src/H5module.h +++ b/src/H5module.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5mpi.c b/src/H5mpi.c index cf7e33d46c9..7f6281f2a7c 100644 --- a/src/H5mpi.c +++ b/src/H5mpi.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5overflow.txt b/src/H5overflow.txt index e1222e8f587..65133e9d50c 100644 --- a/src/H5overflow.txt +++ b/src/H5overflow.txt @@ -3,7 +3,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/src/H5private.h b/src/H5private.h index a7bab99c581..eb3b8bcca58 100644 --- a/src/H5private.h +++ b/src/H5private.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5public.h b/src/H5public.h index b50f4d4652c..d898e75b353 100644 --- a/src/H5public.h +++ b/src/H5public.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5system.c b/src/H5system.c index 2da53d82e55..476790e7424 100644 --- a/src/H5system.c +++ b/src/H5system.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5timer.c b/src/H5timer.c index 4111cf46f20..d20b99da2f8 100644 --- a/src/H5timer.c +++ b/src/H5timer.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5timer.h b/src/H5timer.h index 459f55a9a51..0e3261ed208 100644 --- a/src/H5timer.h +++ b/src/H5timer.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5trace.c b/src/H5trace.c index 9b27e072980..6a6917142f5 100644 --- a/src/H5trace.c +++ b/src/H5trace.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5vers.txt b/src/H5vers.txt index 8bf8eddb2fe..c2b0a45886b 100644 --- a/src/H5vers.txt +++ b/src/H5vers.txt @@ -3,7 +3,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/src/H5warnings.h b/src/H5warnings.h index ae0027ab629..850fb29e290 100644 --- a/src/H5warnings.h +++ b/src/H5warnings.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/H5win32defs.h b/src/H5win32defs.h index 677baee3e61..0b6ce4d441c 100644 --- a/src/H5win32defs.h +++ b/src/H5win32defs.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/src/Makefile.am b/src/Makefile.am index 1ae1119c758..b9306775480 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/src/hdf5.h b/src/hdf5.h index 5be0efe2452..66dfb152a69 100644 --- a/src/hdf5.h +++ b/src/hdf5.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/CMakeLists.txt b/test/API/CMakeLists.txt index f034c71f56e..3813539d433 100644 --- a/test/API/CMakeLists.txt +++ b/test/API/CMakeLists.txt @@ -3,7 +3,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/API/H5_api_async_test.c b/test/API/H5_api_async_test.c index 8399074a216..7646a24cac9 100644 --- a/test/API/H5_api_async_test.c +++ b/test/API/H5_api_async_test.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_async_test.h b/test/API/H5_api_async_test.h index 718e21713a5..f3139f8ba37 100644 --- a/test/API/H5_api_async_test.h +++ b/test/API/H5_api_async_test.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_attribute_test.c b/test/API/H5_api_attribute_test.c index 7b8f33e8720..0e5aee07648 100644 --- a/test/API/H5_api_attribute_test.c +++ b/test/API/H5_api_attribute_test.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_attribute_test.h b/test/API/H5_api_attribute_test.h index 7b455dcaa1a..153d444e2fa 100644 --- a/test/API/H5_api_attribute_test.h +++ b/test/API/H5_api_attribute_test.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_dataset_test.c b/test/API/H5_api_dataset_test.c index db169c69c25..89c6b018c30 100644 --- a/test/API/H5_api_dataset_test.c +++ b/test/API/H5_api_dataset_test.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_dataset_test.h b/test/API/H5_api_dataset_test.h index 12a111a5972..cb87ae38bcb 100644 --- a/test/API/H5_api_dataset_test.h +++ b/test/API/H5_api_dataset_test.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_datatype_test.c b/test/API/H5_api_datatype_test.c index 43baf71c54c..c788391d05c 100644 --- a/test/API/H5_api_datatype_test.c +++ b/test/API/H5_api_datatype_test.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_datatype_test.h b/test/API/H5_api_datatype_test.h index 2088ef1d174..e35de7904bd 100644 --- a/test/API/H5_api_datatype_test.h +++ b/test/API/H5_api_datatype_test.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_file_test.c b/test/API/H5_api_file_test.c index 5b9155118f4..e7bb632f1ae 100644 --- a/test/API/H5_api_file_test.c +++ b/test/API/H5_api_file_test.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_file_test.h b/test/API/H5_api_file_test.h index 368d037f46f..782b27b4941 100644 --- a/test/API/H5_api_file_test.h +++ b/test/API/H5_api_file_test.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_group_test.c b/test/API/H5_api_group_test.c index 8858506d5a8..fb7a149db04 100644 --- a/test/API/H5_api_group_test.c +++ b/test/API/H5_api_group_test.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_group_test.h b/test/API/H5_api_group_test.h index b1cbc68455e..a60822daa75 100644 --- a/test/API/H5_api_group_test.h +++ b/test/API/H5_api_group_test.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_link_test.c b/test/API/H5_api_link_test.c index 650bdec7fa6..fe00e1b82a4 100644 --- a/test/API/H5_api_link_test.c +++ b/test/API/H5_api_link_test.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_link_test.h b/test/API/H5_api_link_test.h index 02514cd5877..d7d69154939 100644 --- a/test/API/H5_api_link_test.h +++ b/test/API/H5_api_link_test.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_misc_test.c b/test/API/H5_api_misc_test.c index bce618ba8d7..d747f882750 100644 --- a/test/API/H5_api_misc_test.c +++ b/test/API/H5_api_misc_test.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_misc_test.h b/test/API/H5_api_misc_test.h index 99fe4b54b2e..13c82ed60ca 100644 --- a/test/API/H5_api_misc_test.h +++ b/test/API/H5_api_misc_test.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_object_test.c b/test/API/H5_api_object_test.c index 3e7303a1b18..063ddf6a530 100644 --- a/test/API/H5_api_object_test.c +++ b/test/API/H5_api_object_test.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_object_test.h b/test/API/H5_api_object_test.h index 68d89d08431..9231b91c2b9 100644 --- a/test/API/H5_api_object_test.h +++ b/test/API/H5_api_object_test.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_test.c b/test/API/H5_api_test.c index 70b68a0bde2..22df50a0964 100644 --- a/test/API/H5_api_test.c +++ b/test/API/H5_api_test.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_test.h b/test/API/H5_api_test.h index c6094bd2208..9f11cdb35fb 100644 --- a/test/API/H5_api_test.h +++ b/test/API/H5_api_test.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_test_config.h.in b/test/API/H5_api_test_config.h.in index 59fbf6a1a81..097bbd17269 100644 --- a/test/API/H5_api_test_config.h.in +++ b/test/API/H5_api_test_config.h.in @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_test_util.c b/test/API/H5_api_test_util.c index 48b77d36b2c..9d578950dce 100644 --- a/test/API/H5_api_test_util.c +++ b/test/API/H5_api_test_util.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/H5_api_test_util.h b/test/API/H5_api_test_util.h index 4e416af1242..82339ec9ff7 100644 --- a/test/API/H5_api_test_util.h +++ b/test/API/H5_api_test_util.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/driver/h5_api_test_driver.cxx b/test/API/driver/h5_api_test_driver.cxx index 1948ff71407..195704321c5 100644 --- a/test/API/driver/h5_api_test_driver.cxx +++ b/test/API/driver/h5_api_test_driver.cxx @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/API/driver/h5_api_test_driver.hxx b/test/API/driver/h5_api_test_driver.hxx index 9e69dd79510..f7cbf5fa030 100644 --- a/test/API/driver/h5_api_test_driver.hxx +++ b/test/API/driver/h5_api_test_driver.hxx @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/CMakePassthroughVOLTests.cmake b/test/CMakePassthroughVOLTests.cmake index 55f112b90d2..74b5ba53fa0 100644 --- a/test/CMakePassthroughVOLTests.cmake +++ b/test/CMakePassthroughVOLTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/CMakeTests.cmake b/test/CMakeTests.cmake index 59eb6bdbd96..036b54798bc 100644 --- a/test/CMakeTests.cmake +++ b/test/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/CMakeVFDTests.cmake b/test/CMakeVFDTests.cmake index 6086cbc9537..2cac84a5674 100644 --- a/test/CMakeVFDTests.cmake +++ b/test/CMakeVFDTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/H5srcdir.h b/test/H5srcdir.h index 4a34d3bd985..d1e4bfcda8e 100644 --- a/test/H5srcdir.h +++ b/test/H5srcdir.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/H5srcdir_str.h.in b/test/H5srcdir_str.h.in index 55280cd641c..3e161381abb 100644 --- a/test/H5srcdir_str.h.in +++ b/test/H5srcdir_str.h.in @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/Makefile.am b/test/Makefile.am index b15e36d3f91..5d2ffa524f1 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/ShellTests.cmake b/test/ShellTests.cmake index 118f30198d4..88486131860 100644 --- a/test/ShellTests.cmake +++ b/test/ShellTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/accum.c b/test/accum.c index 308b64ad32c..e2c70d64f5f 100644 --- a/test/accum.c +++ b/test/accum.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/accum_swmr_reader.c b/test/accum_swmr_reader.c index 05966a9f2b0..5feb19b4019 100644 --- a/test/accum_swmr_reader.c +++ b/test/accum_swmr_reader.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/app_ref.c b/test/app_ref.c index 68e00d8ac3a..d9779f22c5e 100644 --- a/test/app_ref.c +++ b/test/app_ref.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/atomic_reader.c b/test/atomic_reader.c index 12e2d5cd6e9..26fc85e918a 100644 --- a/test/atomic_reader.c +++ b/test/atomic_reader.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/atomic_writer.c b/test/atomic_writer.c index 54aa2f45349..0f90788b8bc 100644 --- a/test/atomic_writer.c +++ b/test/atomic_writer.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/big.c b/test/big.c index 8651927b18c..7ef0f41d6c6 100644 --- a/test/big.c +++ b/test/big.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/bittests.c b/test/bittests.c index dea6076f6f0..3f79894b5b0 100644 --- a/test/bittests.c +++ b/test/bittests.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/btree2.c b/test/btree2.c index 1fb4d882d5e..41c25ccb9f3 100644 --- a/test/btree2.c +++ b/test/btree2.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/cache.c b/test/cache.c index 5be0874df5f..08c051a8535 100644 --- a/test/cache.c +++ b/test/cache.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/cache_api.c b/test/cache_api.c index 502d954d707..f8bb9dad7df 100644 --- a/test/cache_api.c +++ b/test/cache_api.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/cache_common.c b/test/cache_common.c index 02a216b9c7e..334821b623e 100644 --- a/test/cache_common.c +++ b/test/cache_common.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/cache_common.h b/test/cache_common.h index 2e8a4632a57..61a79b73289 100644 --- a/test/cache_common.h +++ b/test/cache_common.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/cache_image.c b/test/cache_image.c index 2cc2cc7f9bb..bf44492bd23 100644 --- a/test/cache_image.c +++ b/test/cache_image.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/cache_logging.c b/test/cache_logging.c index bcc37cc72a8..3bdbd1be083 100644 --- a/test/cache_logging.c +++ b/test/cache_logging.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/cache_tagging.c b/test/cache_tagging.c index ec4e917b50e..b6a6396da5e 100644 --- a/test/cache_tagging.c +++ b/test/cache_tagging.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/chunk_info.c b/test/chunk_info.c index 991d4640cad..1bae1fa2724 100644 --- a/test/chunk_info.c +++ b/test/chunk_info.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/cmpd_dset.c b/test/cmpd_dset.c index 61592165137..5596c955da5 100644 --- a/test/cmpd_dset.c +++ b/test/cmpd_dset.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/cmpd_dtransform.c b/test/cmpd_dtransform.c index be05b008969..c70910b00ec 100644 --- a/test/cmpd_dtransform.c +++ b/test/cmpd_dtransform.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/cork.c b/test/cork.c index 65e19d5be55..304c689a187 100644 --- a/test/cork.c +++ b/test/cork.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/cross_read.c b/test/cross_read.c index 3fbe9df89e9..a7965e3ac01 100644 --- a/test/cross_read.c +++ b/test/cross_read.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/dangle.c b/test/dangle.c index cad7fe202df..1d27f9e3a6d 100644 --- a/test/dangle.c +++ b/test/dangle.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/del_many_dense_attrs.c b/test/del_many_dense_attrs.c index b6cb4375af8..08b1fd9acc6 100644 --- a/test/del_many_dense_attrs.c +++ b/test/del_many_dense_attrs.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/direct_chunk.c b/test/direct_chunk.c index bde67dbdb5c..ca9825866f1 100644 --- a/test/direct_chunk.c +++ b/test/direct_chunk.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/dsets.c b/test/dsets.c index 0df604e7ae6..4ff2fe625cd 100644 --- a/test/dsets.c +++ b/test/dsets.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/dt_arith.c b/test/dt_arith.c index af4a2fc7f6e..57a0343c99d 100644 --- a/test/dt_arith.c +++ b/test/dt_arith.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/dtransform.c b/test/dtransform.c index 53b1f1bc1a8..2a28732f883 100644 --- a/test/dtransform.c +++ b/test/dtransform.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/dtypes.c b/test/dtypes.c index 41b3ddf5a49..9b1436bd10e 100644 --- a/test/dtypes.c +++ b/test/dtypes.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/earray.c b/test/earray.c index edd054994c7..b7592f26f79 100644 --- a/test/earray.c +++ b/test/earray.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/efc.c b/test/efc.c index 3da334fae98..2d8c62682c2 100644 --- a/test/efc.c +++ b/test/efc.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/enc_dec_plist.c b/test/enc_dec_plist.c index 7a289618eaa..5ca3c6cbdf4 100644 --- a/test/enc_dec_plist.c +++ b/test/enc_dec_plist.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/enc_dec_plist_cross_platform.c b/test/enc_dec_plist_cross_platform.c index e7403576a8e..b8bb2834ec4 100644 --- a/test/enc_dec_plist_cross_platform.c +++ b/test/enc_dec_plist_cross_platform.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/enum.c b/test/enum.c index ac348fcb437..a5787a6e2e6 100644 --- a/test/enum.c +++ b/test/enum.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/err_compat.c b/test/err_compat.c index c7abb42e9bb..64fafbf6915 100644 --- a/test/err_compat.c +++ b/test/err_compat.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/error_test.c b/test/error_test.c index b08acf63fdb..b303d89c8a0 100644 --- a/test/error_test.c +++ b/test/error_test.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/event_set.c b/test/event_set.c index 65ecc12887a..aa1a66fe695 100644 --- a/test/event_set.c +++ b/test/event_set.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/evict_on_close.c b/test/evict_on_close.c index 975b6258311..239d7fa41ed 100644 --- a/test/evict_on_close.c +++ b/test/evict_on_close.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/extend.c b/test/extend.c index 26bc3d2faa6..24ccdc18e20 100644 --- a/test/extend.c +++ b/test/extend.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/external.c b/test/external.c index a92538b2efb..c7354f9afa4 100644 --- a/test/external.c +++ b/test/external.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/external_common.c b/test/external_common.c index 8f0b7b9177c..52a14c7e8a4 100644 --- a/test/external_common.c +++ b/test/external_common.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/external_common.h b/test/external_common.h index cf00fe2d986..3e22047a9aa 100644 --- a/test/external_common.h +++ b/test/external_common.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/external_env.c b/test/external_env.c index 61844c40a0a..9e0305394e3 100644 --- a/test/external_env.c +++ b/test/external_env.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/external_fname.h b/test/external_fname.h index add6466dcf4..04c806cbe96 100644 --- a/test/external_fname.h +++ b/test/external_fname.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/farray.c b/test/farray.c index b4cd1fef3c8..06ff7e524c0 100644 --- a/test/farray.c +++ b/test/farray.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/fheap.c b/test/fheap.c index 7c62a5dc083..9f02d9f48e3 100644 --- a/test/fheap.c +++ b/test/fheap.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/file_image.c b/test/file_image.c index 834b758a3ff..1d7bdfab215 100644 --- a/test/file_image.c +++ b/test/file_image.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/filenotclosed.c b/test/filenotclosed.c index cdd8eed09d2..be3c2ddde7f 100644 --- a/test/filenotclosed.c +++ b/test/filenotclosed.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/fillval.c b/test/fillval.c index 49ee2011256..9504a71ed91 100644 --- a/test/fillval.c +++ b/test/fillval.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/filter_fail.c b/test/filter_fail.c index 1d204fa3218..f22e0adb5a5 100644 --- a/test/filter_fail.c +++ b/test/filter_fail.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/filter_plugin.c b/test/filter_plugin.c index 1ea46aedb51..75f5a4c2a71 100644 --- a/test/filter_plugin.c +++ b/test/filter_plugin.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/filter_plugin1_dsets.c b/test/filter_plugin1_dsets.c index 3a9e7145982..4abdba49d36 100644 --- a/test/filter_plugin1_dsets.c +++ b/test/filter_plugin1_dsets.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/filter_plugin2_dsets.c b/test/filter_plugin2_dsets.c index 6e8c1e179f9..aca3629d608 100644 --- a/test/filter_plugin2_dsets.c +++ b/test/filter_plugin2_dsets.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/filter_plugin3_dsets.c b/test/filter_plugin3_dsets.c index c901355789e..f04bfe7ca2d 100644 --- a/test/filter_plugin3_dsets.c +++ b/test/filter_plugin3_dsets.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/filter_plugin4_groups.c b/test/filter_plugin4_groups.c index 7e576a36b48..bd276b7d772 100644 --- a/test/filter_plugin4_groups.c +++ b/test/filter_plugin4_groups.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/flush1.c b/test/flush1.c index e93684bf36a..2b88108f11b 100644 --- a/test/flush1.c +++ b/test/flush1.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/flush2.c b/test/flush2.c index b8f4e13d35d..7d0e2aa42cd 100644 --- a/test/flush2.c +++ b/test/flush2.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/flushrefresh.c b/test/flushrefresh.c index 0e662209212..a6df5996f90 100644 --- a/test/flushrefresh.c +++ b/test/flushrefresh.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/flushrefreshTest.cmake b/test/flushrefreshTest.cmake index 9a99902aeff..ba21efedddb 100644 --- a/test/flushrefreshTest.cmake +++ b/test/flushrefreshTest.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/freespace.c b/test/freespace.c index 2d812177af3..278d811cc22 100644 --- a/test/freespace.c +++ b/test/freespace.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_bad_compound.c b/test/gen_bad_compound.c index 2f2cd55e6ee..dc4df236ea5 100644 --- a/test/gen_bad_compound.c +++ b/test/gen_bad_compound.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_bad_offset.c b/test/gen_bad_offset.c index 9c52195a94f..ab8e08b6aaf 100644 --- a/test/gen_bad_offset.c +++ b/test/gen_bad_offset.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_bad_ohdr.c b/test/gen_bad_ohdr.c index a464867b45d..dd1a735e4e1 100644 --- a/test/gen_bad_ohdr.c +++ b/test/gen_bad_ohdr.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_bogus.c b/test/gen_bogus.c index 67fc63059eb..8a08edb484e 100644 --- a/test/gen_bogus.c +++ b/test/gen_bogus.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_bounds.c b/test/gen_bounds.c index 53fa436a6dc..32eebe96f42 100644 --- a/test/gen_bounds.c +++ b/test/gen_bounds.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_cross.c b/test/gen_cross.c index 77e321e1471..1d32b6069f4 100644 --- a/test/gen_cross.c +++ b/test/gen_cross.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_deflate.c b/test/gen_deflate.c index b19dcbd573d..9b6d91a71bf 100644 --- a/test/gen_deflate.c +++ b/test/gen_deflate.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_file_image.c b/test/gen_file_image.c index c5c15106df1..fbb6179f6de 100644 --- a/test/gen_file_image.c +++ b/test/gen_file_image.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_filespace.c b/test/gen_filespace.c index d2572887674..90601c7af8d 100644 --- a/test/gen_filespace.c +++ b/test/gen_filespace.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_filters.c b/test/gen_filters.c index 6b96dec872e..0302a5b7da6 100644 --- a/test/gen_filters.c +++ b/test/gen_filters.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_mergemsg.c b/test/gen_mergemsg.c index ed3c180aa3e..4bd7ee82d54 100644 --- a/test/gen_mergemsg.c +++ b/test/gen_mergemsg.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_new_array.c b/test/gen_new_array.c index 9e157898b47..10ccadfd529 100644 --- a/test/gen_new_array.c +++ b/test/gen_new_array.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_new_fill.c b/test/gen_new_fill.c index b27daee83c0..89b295abe43 100644 --- a/test/gen_new_fill.c +++ b/test/gen_new_fill.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_new_group.c b/test/gen_new_group.c index e9d55cbd172..25909cad386 100644 --- a/test/gen_new_group.c +++ b/test/gen_new_group.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_new_mtime.c b/test/gen_new_mtime.c index efea5484649..e0643e81dd8 100644 --- a/test/gen_new_mtime.c +++ b/test/gen_new_mtime.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_new_super.c b/test/gen_new_super.c index 7f27ce3922d..590d17924a4 100644 --- a/test/gen_new_super.c +++ b/test/gen_new_super.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_noencoder.c b/test/gen_noencoder.c index 711545c52ba..1f2ae72e9c8 100644 --- a/test/gen_noencoder.c +++ b/test/gen_noencoder.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_nullspace.c b/test/gen_nullspace.c index bf9c49693cd..93abd6302d8 100644 --- a/test/gen_nullspace.c +++ b/test/gen_nullspace.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_old_array.c b/test/gen_old_array.c index 968d05dfbb3..00a5cc44b26 100644 --- a/test/gen_old_array.c +++ b/test/gen_old_array.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_old_group.c b/test/gen_old_group.c index 888697f8469..e1f4bc3e9da 100644 --- a/test/gen_old_group.c +++ b/test/gen_old_group.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_old_layout.c b/test/gen_old_layout.c index 6bfab5b1da8..1841de3419f 100644 --- a/test/gen_old_layout.c +++ b/test/gen_old_layout.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_old_mtime.c b/test/gen_old_mtime.c index 6ceca77ed0c..1e36dabe81f 100644 --- a/test/gen_old_mtime.c +++ b/test/gen_old_mtime.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_plist.c b/test/gen_plist.c index 5f5f95c80e1..62f5478dee9 100644 --- a/test/gen_plist.c +++ b/test/gen_plist.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_sizes_lheap.c b/test/gen_sizes_lheap.c index 41d1b234d95..45b5000d02c 100644 --- a/test/gen_sizes_lheap.c +++ b/test/gen_sizes_lheap.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_specmetaread.c b/test/gen_specmetaread.c index 352ac4fbfbc..95644b64801 100644 --- a/test/gen_specmetaread.c +++ b/test/gen_specmetaread.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gen_udlinks.c b/test/gen_udlinks.c index 91f938df508..9e35537a6a5 100644 --- a/test/gen_udlinks.c +++ b/test/gen_udlinks.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/genall5.c b/test/genall5.c index 67e76d1610e..3a9bd78f29e 100644 --- a/test/genall5.c +++ b/test/genall5.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/genall5.h b/test/genall5.h index e299c83e29d..eaaab7b54a0 100644 --- a/test/genall5.h +++ b/test/genall5.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/getname.c b/test/getname.c index ffc90a61cad..b1f4ac2f597 100644 --- a/test/getname.c +++ b/test/getname.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/gheap.c b/test/gheap.c index f4bf3210d6f..9cd94ebb046 100644 --- a/test/gheap.c +++ b/test/gheap.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/h5test.c b/test/h5test.c index 92e3c65c1d9..27c71aee46e 100644 --- a/test/h5test.c +++ b/test/h5test.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/h5test.h b/test/h5test.h index 1b33664fbf0..006b56e1b11 100644 --- a/test/h5test.h +++ b/test/h5test.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/hdfs.c b/test/hdfs.c index bf67e045abc..c09d75bd33e 100644 --- a/test/hdfs.c +++ b/test/hdfs.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/hyperslab.c b/test/hyperslab.c index 16298331122..24cef142712 100644 --- a/test/hyperslab.c +++ b/test/hyperslab.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/istore.c b/test/istore.c index 89fec3d3a36..bd739615b53 100644 --- a/test/istore.c +++ b/test/istore.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/lheap.c b/test/lheap.c index 7377d949fd6..7cdbc09c5f7 100644 --- a/test/lheap.c +++ b/test/lheap.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/links.c b/test/links.c index ad9948af04d..71cdf688dca 100644 --- a/test/links.c +++ b/test/links.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/links_env.c b/test/links_env.c index 389cde662a4..ad6e74e71e2 100644 --- a/test/links_env.c +++ b/test/links_env.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/mdset.c b/test/mdset.c index 639c57525bd..6d98b8f7f09 100644 --- a/test/mdset.c +++ b/test/mdset.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/mf.c b/test/mf.c index e400348a11d..b4c5845e66f 100644 --- a/test/mf.c +++ b/test/mf.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/mirror_vfd.c b/test/mirror_vfd.c index fe6695b9a06..507d8ab3c7c 100644 --- a/test/mirror_vfd.c +++ b/test/mirror_vfd.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/mount.c b/test/mount.c index 2d833fbf102..e626a2027ac 100644 --- a/test/mount.c +++ b/test/mount.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/mtime.c b/test/mtime.c index 53916b438a7..0735aabe1ef 100644 --- a/test/mtime.c +++ b/test/mtime.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ntypes.c b/test/ntypes.c index 81c694dc568..671b406c9ba 100644 --- a/test/ntypes.c +++ b/test/ntypes.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/null_vfd_plugin.c b/test/null_vfd_plugin.c index ca59939801a..20a6e9079c6 100644 --- a/test/null_vfd_plugin.c +++ b/test/null_vfd_plugin.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/null_vfd_plugin.h b/test/null_vfd_plugin.h index 7b7671f312a..511971d0cf8 100644 --- a/test/null_vfd_plugin.h +++ b/test/null_vfd_plugin.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/null_vol_connector.c b/test/null_vol_connector.c index ed1adbb7f71..415b6e2d35b 100644 --- a/test/null_vol_connector.c +++ b/test/null_vol_connector.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/null_vol_connector.h b/test/null_vol_connector.h index 8fe9abee5aa..c69c3f0648e 100644 --- a/test/null_vol_connector.h +++ b/test/null_vol_connector.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/objcopy.c b/test/objcopy.c index 88a709ad5ee..adede178bcf 100644 --- a/test/objcopy.c +++ b/test/objcopy.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/objcopy_ref.c b/test/objcopy_ref.c index 0aed2a0d010..fa9b4745e34 100644 --- a/test/objcopy_ref.c +++ b/test/objcopy_ref.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ohdr.c b/test/ohdr.c index 7f4e6bdce0a..fe36b45095f 100644 --- a/test/ohdr.c +++ b/test/ohdr.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/onion.c b/test/onion.c index 84ac6e70709..035911c9f70 100644 --- a/test/onion.c +++ b/test/onion.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/page_buffer.c b/test/page_buffer.c index 5d36beb0389..06176e7f42b 100644 --- a/test/page_buffer.c +++ b/test/page_buffer.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/reserved.c b/test/reserved.c index 3762bd9deb4..5e6640ebf78 100644 --- a/test/reserved.c +++ b/test/reserved.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ros3.c b/test/ros3.c index b2e3912ec81..b5307a7305f 100644 --- a/test/ros3.c +++ b/test/ros3.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/s3comms.c b/test/s3comms.c index fe7c8c6f8df..61d73f37f35 100644 --- a/test/s3comms.c +++ b/test/s3comms.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/select_io_dset.c b/test/select_io_dset.c index 9ce1c636061..3d473dc7a7d 100644 --- a/test/select_io_dset.c +++ b/test/select_io_dset.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/set_extent.c b/test/set_extent.c index 80cc57a6ceb..0127e870174 100644 --- a/test/set_extent.c +++ b/test/set_extent.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/space_overflow.c b/test/space_overflow.c index b63f6c676cb..f1c810fc36f 100644 --- a/test/space_overflow.c +++ b/test/space_overflow.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/stab.c b/test/stab.c index c48474874c4..788dad0ab67 100644 --- a/test/stab.c +++ b/test/stab.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/swmr.c b/test/swmr.c index ce9d73e272c..b827f8ef52a 100644 --- a/test/swmr.c +++ b/test/swmr.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/swmr_addrem_writer.c b/test/swmr_addrem_writer.c index 8e42f2436fc..16becf7cb14 100644 --- a/test/swmr_addrem_writer.c +++ b/test/swmr_addrem_writer.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/swmr_common.c b/test/swmr_common.c index b95bdf67b56..3a652506cbd 100644 --- a/test/swmr_common.c +++ b/test/swmr_common.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/swmr_common.h b/test/swmr_common.h index 7c62e202c3d..f6b3b7dcffc 100644 --- a/test/swmr_common.h +++ b/test/swmr_common.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/swmr_generator.c b/test/swmr_generator.c index f66ab03cd52..dd361bc068e 100644 --- a/test/swmr_generator.c +++ b/test/swmr_generator.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/swmr_reader.c b/test/swmr_reader.c index 93ba920f73c..8f3ebc11624 100644 --- a/test/swmr_reader.c +++ b/test/swmr_reader.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/swmr_remove_reader.c b/test/swmr_remove_reader.c index ee5a4df2a7f..215c1fde4b3 100644 --- a/test/swmr_remove_reader.c +++ b/test/swmr_remove_reader.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/swmr_remove_writer.c b/test/swmr_remove_writer.c index 7b4eaeb29ef..91ac1b763cc 100644 --- a/test/swmr_remove_writer.c +++ b/test/swmr_remove_writer.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/swmr_sparse_reader.c b/test/swmr_sparse_reader.c index d2771e83618..9a5f0dcb047 100644 --- a/test/swmr_sparse_reader.c +++ b/test/swmr_sparse_reader.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/swmr_sparse_writer.c b/test/swmr_sparse_writer.c index 4662d027ee1..1d505490c43 100644 --- a/test/swmr_sparse_writer.c +++ b/test/swmr_sparse_writer.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/swmr_start_write.c b/test/swmr_start_write.c index 575e8b67baf..07d497a8e28 100644 --- a/test/swmr_start_write.c +++ b/test/swmr_start_write.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/swmr_writer.c b/test/swmr_writer.c index 5ef6afc50e5..c6ffc2de3f5 100644 --- a/test/swmr_writer.c +++ b/test/swmr_writer.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tarray.c b/test/tarray.c index 8f370cb4846..ae612fc7583 100644 --- a/test/tarray.c +++ b/test/tarray.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tattr.c b/test/tattr.c index 4831e1604b0..1241ef7afbe 100644 --- a/test/tattr.c +++ b/test/tattr.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tcheck_version.c b/test/tcheck_version.c index 5d17e6baef5..89601b741dc 100644 --- a/test/tcheck_version.c +++ b/test/tcheck_version.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tchecksum.c b/test/tchecksum.c index 5ee7c0f6d6e..9b55f5ec902 100644 --- a/test/tchecksum.c +++ b/test/tchecksum.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tconfig.c b/test/tconfig.c index 4cc796dcb43..97a0b6385bc 100644 --- a/test/tconfig.c +++ b/test/tconfig.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tcoords.c b/test/tcoords.c index c1d5c4083f2..52561317253 100644 --- a/test/tcoords.c +++ b/test/tcoords.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/test_abort_fail.sh.in b/test/test_abort_fail.sh.in index 5d5a858222c..f4873f53184 100644 --- a/test/test_abort_fail.sh.in +++ b/test/test_abort_fail.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/test_check_version.sh.in b/test/test_check_version.sh.in index c08536de328..6bd268b745d 100644 --- a/test/test_check_version.sh.in +++ b/test/test_check_version.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/test_error.sh.in b/test/test_error.sh.in index 3657a7c1ad1..63682057d41 100644 --- a/test/test_error.sh.in +++ b/test/test_error.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/test_external_env.sh.in b/test/test_external_env.sh.in index 41e04f16982..86d2fd5870d 100644 --- a/test/test_external_env.sh.in +++ b/test/test_external_env.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/test_flush_refresh.sh.in b/test/test_flush_refresh.sh.in index 14cdfbba6eb..6c03e13dc09 100644 --- a/test/test_flush_refresh.sh.in +++ b/test/test_flush_refresh.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/test_libinfo.sh.in b/test/test_libinfo.sh.in index b016a6159e5..89f852f2173 100644 --- a/test/test_libinfo.sh.in +++ b/test/test_libinfo.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/test_links_env.sh.in b/test/test_links_env.sh.in index 060fcd5d956..a81aec2343e 100644 --- a/test/test_links_env.sh.in +++ b/test/test_links_env.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/test_mirror.sh.in b/test/test_mirror.sh.in index ab092e57719..6ad2a901bea 100644 --- a/test/test_mirror.sh.in +++ b/test/test_mirror.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/test_plugin.sh.in b/test/test_plugin.sh.in index d96aba4e331..82fcd525f9e 100644 --- a/test/test_plugin.sh.in +++ b/test/test_plugin.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/test_swmr.pwsh.in b/test/test_swmr.pwsh.in index becebb3d454..1c1d147ed82 100644 --- a/test/test_swmr.pwsh.in +++ b/test/test_swmr.pwsh.in @@ -3,7 +3,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/test_swmr.sh.in b/test/test_swmr.sh.in index 38a32041538..d9896cfb536 100644 --- a/test/test_swmr.sh.in +++ b/test/test_swmr.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/test_use_cases.sh.in b/test/test_use_cases.sh.in index 2b327f8b5fe..5d95f2c7dc2 100644 --- a/test/test_use_cases.sh.in +++ b/test/test_use_cases.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/test_vds_env.sh.in b/test/test_vds_env.sh.in index 97518f112c6..ea911185e0b 100644 --- a/test/test_vds_env.sh.in +++ b/test/test_vds_env.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/test_vds_swmr.pwsh.in b/test/test_vds_swmr.pwsh.in index 97761935599..564e1f6d4ae 100644 --- a/test/test_vds_swmr.pwsh.in +++ b/test/test_vds_swmr.pwsh.in @@ -3,7 +3,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/test_vds_swmr.sh.in b/test/test_vds_swmr.sh.in index f5a9043bf06..45a441c238b 100644 --- a/test/test_vds_swmr.sh.in +++ b/test/test_vds_swmr.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/test/testframe.c b/test/testframe.c index a630a179b9e..05cb57967ea 100644 --- a/test/testframe.c +++ b/test/testframe.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/testframe.h b/test/testframe.h index 21ffcfe673f..2b24f03c07d 100644 --- a/test/testframe.h +++ b/test/testframe.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/testhdf5.c b/test/testhdf5.c index 925b15981e0..098a8d56976 100644 --- a/test/testhdf5.c +++ b/test/testhdf5.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/testhdf5.h b/test/testhdf5.h index f4f3136d8a4..16ec9b4b055 100644 --- a/test/testhdf5.h +++ b/test/testhdf5.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/testmeta.c b/test/testmeta.c index 14388f02caa..f028eeb9827 100644 --- a/test/testmeta.c +++ b/test/testmeta.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tfile.c b/test/tfile.c index 9ffedc0f001..f7147806001 100644 --- a/test/tfile.c +++ b/test/tfile.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tgenprop.c b/test/tgenprop.c index b4267b66a87..8d8e39a5b79 100644 --- a/test/tgenprop.c +++ b/test/tgenprop.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/th5_system.c b/test/th5_system.c index f55642b8941..9980e6a788f 100644 --- a/test/th5_system.c +++ b/test/th5_system.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/th5o.c b/test/th5o.c index f4eddfc4f5c..3a43c94ed69 100644 --- a/test/th5o.c +++ b/test/th5o.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/th5s.c b/test/th5s.c index e3505f2d0fa..4835e1f0e03 100644 --- a/test/th5s.c +++ b/test/th5s.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tid.c b/test/tid.c index 7d03872bfee..c4ec0d8ea40 100644 --- a/test/tid.c +++ b/test/tid.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/timer.c b/test/timer.c index 81c356feff2..ab4f9814325 100644 --- a/test/timer.c +++ b/test/timer.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/titerate.c b/test/titerate.c index 6128508d1b1..e3d4ad72e6e 100644 --- a/test/titerate.c +++ b/test/titerate.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tmeta.c b/test/tmeta.c index 2e3978a2c38..5a48836bf9d 100644 --- a/test/tmeta.c +++ b/test/tmeta.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tmisc.c b/test/tmisc.c index a368aa0fa96..6a0674d41bc 100644 --- a/test/tmisc.c +++ b/test/tmisc.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/trefer.c b/test/trefer.c index 8847608265c..a1a8f7a3a38 100644 --- a/test/trefer.c +++ b/test/trefer.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/trefer_deprec.c b/test/trefer_deprec.c index 3035cbb2045..81da6bc3e18 100644 --- a/test/trefer_deprec.c +++ b/test/trefer_deprec.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/trefstr.c b/test/trefstr.c index 3cd49c33e98..93c0a14b3f6 100644 --- a/test/trefstr.c +++ b/test/trefstr.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tselect.c b/test/tselect.c index a2dcf269a8e..1ce06551738 100644 --- a/test/tselect.c +++ b/test/tselect.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tskiplist.c b/test/tskiplist.c index 53d0d958645..d9a765aafb1 100644 --- a/test/tskiplist.c +++ b/test/tskiplist.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tsohm.c b/test/tsohm.c index b054e6d170c..71d3578bcbb 100644 --- a/test/tsohm.c +++ b/test/tsohm.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ttime.c b/test/ttime.c index 3d9ab879565..1218e262694 100644 --- a/test/ttime.c +++ b/test/ttime.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ttsafe.c b/test/ttsafe.c index b1cf42f4e0a..04f30c15138 100644 --- a/test/ttsafe.c +++ b/test/ttsafe.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ttsafe.h b/test/ttsafe.h index 61d86be0e4e..87b41d83bc6 100644 --- a/test/ttsafe.h +++ b/test/ttsafe.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ttsafe_acreate.c b/test/ttsafe_acreate.c index 15ad84b1c88..98533203ac5 100644 --- a/test/ttsafe_acreate.c +++ b/test/ttsafe_acreate.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ttsafe_atomic.c b/test/ttsafe_atomic.c index 732a0583ea8..6dc294ea8ca 100644 --- a/test/ttsafe_atomic.c +++ b/test/ttsafe_atomic.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ttsafe_attr_vlen.c b/test/ttsafe_attr_vlen.c index dc742368b30..13240e26ee9 100644 --- a/test/ttsafe_attr_vlen.c +++ b/test/ttsafe_attr_vlen.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ttsafe_cancel.c b/test/ttsafe_cancel.c index 7531f3e0dde..0a5dbabcc98 100644 --- a/test/ttsafe_cancel.c +++ b/test/ttsafe_cancel.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ttsafe_dcreate.c b/test/ttsafe_dcreate.c index e206a1415d1..14f751055f8 100644 --- a/test/ttsafe_dcreate.c +++ b/test/ttsafe_dcreate.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ttsafe_develop.c b/test/ttsafe_develop.c index 8622d326f4c..fbe91949486 100644 --- a/test/ttsafe_develop.c +++ b/test/ttsafe_develop.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ttsafe_error.c b/test/ttsafe_error.c index efa3b7c81b9..9322bf460ca 100644 --- a/test/ttsafe_error.c +++ b/test/ttsafe_error.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ttsafe_error_stacks.c b/test/ttsafe_error_stacks.c index 29f9698bef0..6edca5b5fe2 100644 --- a/test/ttsafe_error_stacks.c +++ b/test/ttsafe_error_stacks.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ttsafe_rec_rwlock.c b/test/ttsafe_rec_rwlock.c index 5840cc38107..37bf094fb80 100644 --- a/test/ttsafe_rec_rwlock.c +++ b/test/ttsafe_rec_rwlock.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ttsafe_rwlock.c b/test/ttsafe_rwlock.c index db73fa4e361..b8f6b24b546 100644 --- a/test/ttsafe_rwlock.c +++ b/test/ttsafe_rwlock.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ttsafe_semaphore.c b/test/ttsafe_semaphore.c index 0c9deab1c79..26802ad96a2 100644 --- a/test/ttsafe_semaphore.c +++ b/test/ttsafe_semaphore.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ttsafe_thread_id.c b/test/ttsafe_thread_id.c index 08d9a221966..540857cae71 100644 --- a/test/ttsafe_thread_id.c +++ b/test/ttsafe_thread_id.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/ttsafe_thread_pool.c b/test/ttsafe_thread_pool.c index e322bbeffac..2229fa9b40e 100644 --- a/test/ttsafe_thread_pool.c +++ b/test/ttsafe_thread_pool.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tunicode.c b/test/tunicode.c index 0b54281f835..78a3381dcfc 100644 --- a/test/tunicode.c +++ b/test/tunicode.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tvlstr.c b/test/tvlstr.c index 51004de8d08..e6f33e7f94c 100644 --- a/test/tvlstr.c +++ b/test/tvlstr.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/tvltypes.c b/test/tvltypes.c index 8277337c27e..fd367ebde66 100644 --- a/test/tvltypes.c +++ b/test/tvltypes.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/twriteorder.c b/test/twriteorder.c index 41841b59672..e4fb3c8313b 100644 --- a/test/twriteorder.c +++ b/test/twriteorder.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/unlink.c b/test/unlink.c index 914b434bae7..638fbaf5506 100644 --- a/test/unlink.c +++ b/test/unlink.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/unregister.c b/test/unregister.c index 843c6671240..528adf9ddf7 100644 --- a/test/unregister.c +++ b/test/unregister.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/use.h b/test/use.h index 217c155a71b..68b38db8c31 100644 --- a/test/use.h +++ b/test/use.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/use_append_chunk.c b/test/use_append_chunk.c index 3b3d69c7d25..d4a7226cffa 100644 --- a/test/use_append_chunk.c +++ b/test/use_append_chunk.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/use_append_chunk_mirror.c b/test/use_append_chunk_mirror.c index e9e27267507..b251f22e157 100644 --- a/test/use_append_chunk_mirror.c +++ b/test/use_append_chunk_mirror.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/use_append_mchunks.c b/test/use_append_mchunks.c index ab6a5e5073f..aaa5ff36400 100644 --- a/test/use_append_mchunks.c +++ b/test/use_append_mchunks.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/use_common.c b/test/use_common.c index a782eec9d75..8803e145ba3 100644 --- a/test/use_common.c +++ b/test/use_common.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/use_disable_mdc_flushes.c b/test/use_disable_mdc_flushes.c index b8b5b7fdfa6..3e83c8927a3 100644 --- a/test/use_disable_mdc_flushes.c +++ b/test/use_disable_mdc_flushes.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/vds.c b/test/vds.c index 3d2f41eac05..b17cbd08ae1 100644 --- a/test/vds.c +++ b/test/vds.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/vds_env.c b/test/vds_env.c index 757732adaf9..06486af153f 100644 --- a/test/vds_env.c +++ b/test/vds_env.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/vds_swmr.h b/test/vds_swmr.h index 14a9826bca9..799d68652c3 100644 --- a/test/vds_swmr.h +++ b/test/vds_swmr.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/vds_swmr_gen.c b/test/vds_swmr_gen.c index a22b1552270..a6d8c4dfc7d 100644 --- a/test/vds_swmr_gen.c +++ b/test/vds_swmr_gen.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/vds_swmr_reader.c b/test/vds_swmr_reader.c index 76cdb8aa3d5..0abb8c5d3fd 100644 --- a/test/vds_swmr_reader.c +++ b/test/vds_swmr_reader.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/vds_swmr_writer.c b/test/vds_swmr_writer.c index b57c2f689dd..b14621f2b4a 100644 --- a/test/vds_swmr_writer.c +++ b/test/vds_swmr_writer.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/vfd.c b/test/vfd.c index 65a5393265b..6f24e97d86f 100644 --- a/test/vfd.c +++ b/test/vfd.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/vfd_plugin.c b/test/vfd_plugin.c index e588d5feab8..952615567d4 100644 --- a/test/vfd_plugin.c +++ b/test/vfd_plugin.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/vol.c b/test/vol.c index 7d61f4f2daa..a6d1d6caf83 100644 --- a/test/vol.c +++ b/test/vol.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/test/vol_plugin.c b/test/vol_plugin.c index 414f18c6677..bc85ac2ba84 100644 --- a/test/vol_plugin.c +++ b/test/vol_plugin.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/CMakeLists.txt b/testpar/API/CMakeLists.txt index e5cb5779b31..c744366188a 100644 --- a/testpar/API/CMakeLists.txt +++ b/testpar/API/CMakeLists.txt @@ -3,7 +3,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/testpar/API/H5_api_async_test_parallel.c b/testpar/API/H5_api_async_test_parallel.c index e8a792702fb..cfa9230ffed 100644 --- a/testpar/API/H5_api_async_test_parallel.c +++ b/testpar/API/H5_api_async_test_parallel.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_async_test_parallel.h b/testpar/API/H5_api_async_test_parallel.h index b99a328e2ae..02b910b5a8f 100644 --- a/testpar/API/H5_api_async_test_parallel.h +++ b/testpar/API/H5_api_async_test_parallel.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_attribute_test_parallel.c b/testpar/API/H5_api_attribute_test_parallel.c index 163f8a1b212..aaee7503ac8 100644 --- a/testpar/API/H5_api_attribute_test_parallel.c +++ b/testpar/API/H5_api_attribute_test_parallel.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_attribute_test_parallel.h b/testpar/API/H5_api_attribute_test_parallel.h index 3deb2793012..73ed9708cf4 100644 --- a/testpar/API/H5_api_attribute_test_parallel.h +++ b/testpar/API/H5_api_attribute_test_parallel.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_dataset_test_parallel.c b/testpar/API/H5_api_dataset_test_parallel.c index 169d5945e13..7dd9f7027ea 100644 --- a/testpar/API/H5_api_dataset_test_parallel.c +++ b/testpar/API/H5_api_dataset_test_parallel.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_dataset_test_parallel.h b/testpar/API/H5_api_dataset_test_parallel.h index 8f7aadb74f3..d1af1d430ec 100644 --- a/testpar/API/H5_api_dataset_test_parallel.h +++ b/testpar/API/H5_api_dataset_test_parallel.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_datatype_test_parallel.c b/testpar/API/H5_api_datatype_test_parallel.c index f60893e102f..a6234042258 100644 --- a/testpar/API/H5_api_datatype_test_parallel.c +++ b/testpar/API/H5_api_datatype_test_parallel.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_datatype_test_parallel.h b/testpar/API/H5_api_datatype_test_parallel.h index 85c7099927b..9f169fdc8ed 100644 --- a/testpar/API/H5_api_datatype_test_parallel.h +++ b/testpar/API/H5_api_datatype_test_parallel.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_file_test_parallel.c b/testpar/API/H5_api_file_test_parallel.c index 2d9b5c20a2c..70f37c00405 100644 --- a/testpar/API/H5_api_file_test_parallel.c +++ b/testpar/API/H5_api_file_test_parallel.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_file_test_parallel.h b/testpar/API/H5_api_file_test_parallel.h index 380a2ffb18e..d7bf5522dea 100644 --- a/testpar/API/H5_api_file_test_parallel.h +++ b/testpar/API/H5_api_file_test_parallel.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_group_test_parallel.c b/testpar/API/H5_api_group_test_parallel.c index 1c761c4b5c0..f3e81cc4db7 100644 --- a/testpar/API/H5_api_group_test_parallel.c +++ b/testpar/API/H5_api_group_test_parallel.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_group_test_parallel.h b/testpar/API/H5_api_group_test_parallel.h index a2a2857c60c..a3201d13500 100644 --- a/testpar/API/H5_api_group_test_parallel.h +++ b/testpar/API/H5_api_group_test_parallel.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_link_test_parallel.c b/testpar/API/H5_api_link_test_parallel.c index 739e815b0fb..33dcb002108 100644 --- a/testpar/API/H5_api_link_test_parallel.c +++ b/testpar/API/H5_api_link_test_parallel.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_link_test_parallel.h b/testpar/API/H5_api_link_test_parallel.h index 8679ccb5d05..72aaef22aed 100644 --- a/testpar/API/H5_api_link_test_parallel.h +++ b/testpar/API/H5_api_link_test_parallel.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_misc_test_parallel.c b/testpar/API/H5_api_misc_test_parallel.c index 3453f8a5e9f..b8a9147633d 100644 --- a/testpar/API/H5_api_misc_test_parallel.c +++ b/testpar/API/H5_api_misc_test_parallel.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_misc_test_parallel.h b/testpar/API/H5_api_misc_test_parallel.h index 321fb6bf837..abe5ec0a163 100644 --- a/testpar/API/H5_api_misc_test_parallel.h +++ b/testpar/API/H5_api_misc_test_parallel.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_object_test_parallel.c b/testpar/API/H5_api_object_test_parallel.c index 58700580d1c..b475dfdf768 100644 --- a/testpar/API/H5_api_object_test_parallel.c +++ b/testpar/API/H5_api_object_test_parallel.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_object_test_parallel.h b/testpar/API/H5_api_object_test_parallel.h index 39bade9dc84..8e8e81739d4 100644 --- a/testpar/API/H5_api_object_test_parallel.h +++ b/testpar/API/H5_api_object_test_parallel.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_test_parallel.c b/testpar/API/H5_api_test_parallel.c index c67f93280fe..882cce2fdae 100644 --- a/testpar/API/H5_api_test_parallel.c +++ b/testpar/API/H5_api_test_parallel.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/API/H5_api_test_parallel.h b/testpar/API/H5_api_test_parallel.h index ae7881417e7..ae15b12d00f 100644 --- a/testpar/API/H5_api_test_parallel.h +++ b/testpar/API/H5_api_test_parallel.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/CMakeTests.cmake b/testpar/CMakeTests.cmake index 36a97eefc81..ebdd561e6fb 100644 --- a/testpar/CMakeTests.cmake +++ b/testpar/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/testpar/CMakeVFDTests.cmake b/testpar/CMakeVFDTests.cmake index cdec5f75c25..db381650c21 100644 --- a/testpar/CMakeVFDTests.cmake +++ b/testpar/CMakeVFDTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/testpar/Makefile.am b/testpar/Makefile.am index 27002fa3de3..df6e13caecc 100644 --- a/testpar/Makefile.am +++ b/testpar/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/testpar/t_2Gio.c b/testpar/t_2Gio.c index 3a5a63d11cc..258601d1776 100644 --- a/testpar/t_2Gio.c +++ b/testpar/t_2Gio.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_bigio.c b/testpar/t_bigio.c index fe38dadb403..53cd17fe105 100644 --- a/testpar/t_bigio.c +++ b/testpar/t_bigio.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_cache.c b/testpar/t_cache.c index 5d0b9dc1a2f..7b546e04ebc 100644 --- a/testpar/t_cache.c +++ b/testpar/t_cache.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_cache_image.c b/testpar/t_cache_image.c index 88c070968fd..fc6a02f9506 100644 --- a/testpar/t_cache_image.c +++ b/testpar/t_cache_image.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_chunk_alloc.c b/testpar/t_chunk_alloc.c index 202551ff9c8..c9896a48508 100644 --- a/testpar/t_chunk_alloc.c +++ b/testpar/t_chunk_alloc.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_coll_chunk.c b/testpar/t_coll_chunk.c index eeaced0a067..2569cdd9e8e 100644 --- a/testpar/t_coll_chunk.c +++ b/testpar/t_coll_chunk.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_coll_md.c b/testpar/t_coll_md.c index 078a561279e..461c2a8febe 100644 --- a/testpar/t_coll_md.c +++ b/testpar/t_coll_md.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_dset.c b/testpar/t_dset.c index cf4ada8139d..92884c5b270 100644 --- a/testpar/t_dset.c +++ b/testpar/t_dset.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_file.c b/testpar/t_file.c index 1fd4b41e82f..77fd69782d9 100644 --- a/testpar/t_file.c +++ b/testpar/t_file.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_file_image.c b/testpar/t_file_image.c index ae1658e47d3..e8f064cae33 100644 --- a/testpar/t_file_image.c +++ b/testpar/t_file_image.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_filter_read.c b/testpar/t_filter_read.c index e7cd95de672..fc64680c732 100644 --- a/testpar/t_filter_read.c +++ b/testpar/t_filter_read.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_filters_parallel.c b/testpar/t_filters_parallel.c index 69f4f12551b..9d8bee6cb7d 100644 --- a/testpar/t_filters_parallel.c +++ b/testpar/t_filters_parallel.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_filters_parallel.h b/testpar/t_filters_parallel.h index f853b779e89..d43e8ef065d 100644 --- a/testpar/t_filters_parallel.h +++ b/testpar/t_filters_parallel.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_init_term.c b/testpar/t_init_term.c index ec12396bc05..ee38c8a5300 100644 --- a/testpar/t_init_term.c +++ b/testpar/t_init_term.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_mdset.c b/testpar/t_mdset.c index ae7ecde133e..d966bfb0f44 100644 --- a/testpar/t_mdset.c +++ b/testpar/t_mdset.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_mpi.c b/testpar/t_mpi.c index e26dbe63e92..0d6c9ed1ff1 100644 --- a/testpar/t_mpi.c +++ b/testpar/t_mpi.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_oflush.c b/testpar/t_oflush.c index 70257a40f85..4bca1fe1d43 100644 --- a/testpar/t_oflush.c +++ b/testpar/t_oflush.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_pflush1.c b/testpar/t_pflush1.c index 733898f9839..395ef9f2f0c 100644 --- a/testpar/t_pflush1.c +++ b/testpar/t_pflush1.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_pflush2.c b/testpar/t_pflush2.c index 826f7d4622d..5a0b11e100f 100644 --- a/testpar/t_pflush2.c +++ b/testpar/t_pflush2.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_ph5basic.c b/testpar/t_ph5basic.c index 6a3909173d4..8cecffb4f72 100644 --- a/testpar/t_ph5basic.c +++ b/testpar/t_ph5basic.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_pmulti_dset.c b/testpar/t_pmulti_dset.c index e9819840cb3..6cd5116ebb7 100644 --- a/testpar/t_pmulti_dset.c +++ b/testpar/t_pmulti_dset.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_pread.c b/testpar/t_pread.c index b16675bd452..f0341191176 100644 --- a/testpar/t_pread.c +++ b/testpar/t_pread.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_prestart.c b/testpar/t_prestart.c index a2335fb6f53..057d042b398 100644 --- a/testpar/t_prestart.c +++ b/testpar/t_prestart.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_prop.c b/testpar/t_prop.c index 789796b7ebd..257c4330629 100644 --- a/testpar/t_prop.c +++ b/testpar/t_prop.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_pshutdown.c b/testpar/t_pshutdown.c index 2133c9f7a26..04038d53344 100644 --- a/testpar/t_pshutdown.c +++ b/testpar/t_pshutdown.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_select_io_dset.c b/testpar/t_select_io_dset.c index a6e62c6f8e5..e069e2af44a 100644 --- a/testpar/t_select_io_dset.c +++ b/testpar/t_select_io_dset.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_shapesame.c b/testpar/t_shapesame.c index d841e7e9269..be1d2758ed1 100644 --- a/testpar/t_shapesame.c +++ b/testpar/t_shapesame.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_span_tree.c b/testpar/t_span_tree.c index 1541bf6b894..7619404e866 100644 --- a/testpar/t_span_tree.c +++ b/testpar/t_span_tree.c @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_subfiling_vfd.c b/testpar/t_subfiling_vfd.c index 68ae70c8ade..a79bc04a130 100644 --- a/testpar/t_subfiling_vfd.c +++ b/testpar/t_subfiling_vfd.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/t_vfd.c b/testpar/t_vfd.c index 5069577a318..0819cccce9c 100644 --- a/testpar/t_vfd.c +++ b/testpar/t_vfd.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/testpar.c b/testpar/testpar.c index c674f61c5c2..b8eac3abc25 100644 --- a/testpar/testpar.c +++ b/testpar/testpar.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/testpar.h b/testpar/testpar.h index 71ff72a5f13..0eaa207f2ba 100644 --- a/testpar/testpar.h +++ b/testpar/testpar.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/testpflush.sh.in b/testpar/testpflush.sh.in index 483d0d92d26..86ebf66cd40 100644 --- a/testpar/testpflush.sh.in +++ b/testpar/testpflush.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/testpar/testphdf5.c b/testpar/testphdf5.c index 2f30e722323..c511ee387be 100644 --- a/testpar/testphdf5.c +++ b/testpar/testphdf5.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/testpar/testphdf5.h b/testpar/testphdf5.h index 345045e4f28..2de49c39501 100644 --- a/testpar/testphdf5.h +++ b/testpar/testphdf5.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/Makefile.am b/tools/Makefile.am index d0a6c5c5bc4..265a6611d45 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/lib/Makefile.am b/tools/lib/Makefile.am index 12427d91307..f274932cc1b 100644 --- a/tools/lib/Makefile.am +++ b/tools/lib/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/lib/h5diff.c b/tools/lib/h5diff.c index 60dc5595aef..1e7e6e86ffb 100644 --- a/tools/lib/h5diff.c +++ b/tools/lib/h5diff.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5diff.h b/tools/lib/h5diff.h index 4b9847a3044..922036b5c5a 100644 --- a/tools/lib/h5diff.h +++ b/tools/lib/h5diff.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5diff_array.c b/tools/lib/h5diff_array.c index 952b29bec87..40c0b4d32f9 100644 --- a/tools/lib/h5diff_array.c +++ b/tools/lib/h5diff_array.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5diff_attr.c b/tools/lib/h5diff_attr.c index 2521177a598..cd4e377d1fd 100644 --- a/tools/lib/h5diff_attr.c +++ b/tools/lib/h5diff_attr.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5diff_dset.c b/tools/lib/h5diff_dset.c index 3d4b25a83d8..092b5e8a785 100644 --- a/tools/lib/h5diff_dset.c +++ b/tools/lib/h5diff_dset.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5diff_util.c b/tools/lib/h5diff_util.c index 26cde1b837f..9df24117b62 100644 --- a/tools/lib/h5diff_util.c +++ b/tools/lib/h5diff_util.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5tools.c b/tools/lib/h5tools.c index 83037f1de62..99aeea7dec0 100644 --- a/tools/lib/h5tools.c +++ b/tools/lib/h5tools.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5tools.h b/tools/lib/h5tools.h index 52e3a3659a8..e9798ea222d 100644 --- a/tools/lib/h5tools.h +++ b/tools/lib/h5tools.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5tools_dump.c b/tools/lib/h5tools_dump.c index cbfa8ac8b71..f9c3c6a2265 100644 --- a/tools/lib/h5tools_dump.c +++ b/tools/lib/h5tools_dump.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5tools_dump.h b/tools/lib/h5tools_dump.h index e57158af2e4..e8a559506b7 100644 --- a/tools/lib/h5tools_dump.h +++ b/tools/lib/h5tools_dump.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5tools_error.h b/tools/lib/h5tools_error.h index b56451188fd..2496d585419 100644 --- a/tools/lib/h5tools_error.h +++ b/tools/lib/h5tools_error.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5tools_filters.c b/tools/lib/h5tools_filters.c index 58a71b3d94a..ad4265cbce5 100644 --- a/tools/lib/h5tools_filters.c +++ b/tools/lib/h5tools_filters.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5tools_ref.c b/tools/lib/h5tools_ref.c index a1466bcddea..b1377583209 100644 --- a/tools/lib/h5tools_ref.c +++ b/tools/lib/h5tools_ref.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5tools_ref.h b/tools/lib/h5tools_ref.h index c747337497b..10b1106292e 100644 --- a/tools/lib/h5tools_ref.h +++ b/tools/lib/h5tools_ref.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5tools_str.c b/tools/lib/h5tools_str.c index 1b513cc5090..4758a7ba379 100644 --- a/tools/lib/h5tools_str.c +++ b/tools/lib/h5tools_str.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5tools_str.h b/tools/lib/h5tools_str.h index 831778b4817..9e41d40b6e3 100644 --- a/tools/lib/h5tools_str.h +++ b/tools/lib/h5tools_str.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5tools_type.c b/tools/lib/h5tools_type.c index c5e74729b14..bcd99d8023f 100644 --- a/tools/lib/h5tools_type.c +++ b/tools/lib/h5tools_type.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5tools_utils.c b/tools/lib/h5tools_utils.c index d764de2d8f3..8426ef3261d 100644 --- a/tools/lib/h5tools_utils.c +++ b/tools/lib/h5tools_utils.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5tools_utils.h b/tools/lib/h5tools_utils.h index ce5a24aa63a..80a89ffad02 100644 --- a/tools/lib/h5tools_utils.h +++ b/tools/lib/h5tools_utils.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5trav.c b/tools/lib/h5trav.c index 4376184e43d..67cfab504ab 100644 --- a/tools/lib/h5trav.c +++ b/tools/lib/h5trav.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/h5trav.h b/tools/lib/h5trav.h index 40ceaaecc7e..99b294f4bd7 100644 --- a/tools/lib/h5trav.h +++ b/tools/lib/h5trav.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/io_timer.c b/tools/lib/io_timer.c index 15d8b4f74fa..987c1af84d4 100644 --- a/tools/lib/io_timer.c +++ b/tools/lib/io_timer.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/io_timer.h b/tools/lib/io_timer.h index 575cc728afa..fced47d9551 100644 --- a/tools/lib/io_timer.h +++ b/tools/lib/io_timer.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/lib/ph5diff.h b/tools/lib/ph5diff.h index e7d16dab849..3b9c770f1f1 100644 --- a/tools/lib/ph5diff.h +++ b/tools/lib/ph5diff.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/libtest/CMakeTests.cmake b/tools/libtest/CMakeTests.cmake index b8d63d36d1b..fa32ebf8741 100644 --- a/tools/libtest/CMakeTests.cmake +++ b/tools/libtest/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/libtest/Makefile.am b/tools/libtest/Makefile.am index 8a503d033b2..602e71e43d1 100644 --- a/tools/libtest/Makefile.am +++ b/tools/libtest/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/libtest/h5tools_test_utils.c b/tools/libtest/h5tools_test_utils.c index bfe62506b25..b64ce4c09be 100644 --- a/tools/libtest/h5tools_test_utils.c +++ b/tools/libtest/h5tools_test_utils.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/Makefile.am b/tools/src/Makefile.am index 7527e48f256..3d741cbe7e3 100644 --- a/tools/src/Makefile.am +++ b/tools/src/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/src/h5copy/Makefile.am b/tools/src/h5copy/Makefile.am index 93a6d01b894..e12c2b16ede 100644 --- a/tools/src/h5copy/Makefile.am +++ b/tools/src/h5copy/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/src/h5copy/h5copy.c b/tools/src/h5copy/h5copy.c index a4d4027121d..635ce3b1aca 100644 --- a/tools/src/h5copy/h5copy.c +++ b/tools/src/h5copy/h5copy.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5copy/h5copy.h b/tools/src/h5copy/h5copy.h index b0a684f4ab9..db06efbc34e 100644 --- a/tools/src/h5copy/h5copy.h +++ b/tools/src/h5copy/h5copy.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5diff/Makefile.am b/tools/src/h5diff/Makefile.am index f6e1001fd19..8782448f8f2 100644 --- a/tools/src/h5diff/Makefile.am +++ b/tools/src/h5diff/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/src/h5diff/h5diff_common.c b/tools/src/h5diff/h5diff_common.c index 62a8cd2abe5..ed2b33a89b4 100644 --- a/tools/src/h5diff/h5diff_common.c +++ b/tools/src/h5diff/h5diff_common.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5diff/h5diff_common.h b/tools/src/h5diff/h5diff_common.h index 4ca476a1145..2e96e6ba97f 100644 --- a/tools/src/h5diff/h5diff_common.h +++ b/tools/src/h5diff/h5diff_common.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5diff/h5diff_main.c b/tools/src/h5diff/h5diff_main.c index 41dc18f6de5..66fb4f26646 100644 --- a/tools/src/h5diff/h5diff_main.c +++ b/tools/src/h5diff/h5diff_main.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5diff/h5diff_main.h b/tools/src/h5diff/h5diff_main.h index fcbf25bb02a..3efde6337ef 100644 --- a/tools/src/h5diff/h5diff_main.h +++ b/tools/src/h5diff/h5diff_main.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5diff/ph5diff_main.c b/tools/src/h5diff/ph5diff_main.c index 07fdb58bc09..c3d2018381b 100644 --- a/tools/src/h5diff/ph5diff_main.c +++ b/tools/src/h5diff/ph5diff_main.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5dump/Makefile.am b/tools/src/h5dump/Makefile.am index 30fd78a81e0..3b360a88fd4 100644 --- a/tools/src/h5dump/Makefile.am +++ b/tools/src/h5dump/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/src/h5dump/h5dump.c b/tools/src/h5dump/h5dump.c index 6f37c1bc2be..95e607959ba 100644 --- a/tools/src/h5dump/h5dump.c +++ b/tools/src/h5dump/h5dump.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5dump/h5dump.h b/tools/src/h5dump/h5dump.h index f50950b5548..9761e8e035b 100644 --- a/tools/src/h5dump/h5dump.h +++ b/tools/src/h5dump/h5dump.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5dump/h5dump_ddl.c b/tools/src/h5dump/h5dump_ddl.c index 3b72faa6ddf..80bffe68de8 100644 --- a/tools/src/h5dump/h5dump_ddl.c +++ b/tools/src/h5dump/h5dump_ddl.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5dump/h5dump_ddl.h b/tools/src/h5dump/h5dump_ddl.h index c9f2f124dd6..5f00c1fd530 100644 --- a/tools/src/h5dump/h5dump_ddl.h +++ b/tools/src/h5dump/h5dump_ddl.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5dump/h5dump_defines.h b/tools/src/h5dump/h5dump_defines.h index f82dee5b303..56a46006533 100644 --- a/tools/src/h5dump/h5dump_defines.h +++ b/tools/src/h5dump/h5dump_defines.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5dump/h5dump_extern.h b/tools/src/h5dump/h5dump_extern.h index ca4a92906bf..87a5ff1a399 100644 --- a/tools/src/h5dump/h5dump_extern.h +++ b/tools/src/h5dump/h5dump_extern.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5dump/h5dump_xml.c b/tools/src/h5dump/h5dump_xml.c index 93fc3b02768..605bfd7374c 100644 --- a/tools/src/h5dump/h5dump_xml.c +++ b/tools/src/h5dump/h5dump_xml.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5dump/h5dump_xml.h b/tools/src/h5dump/h5dump_xml.h index aebe2b00a74..100f6168673 100644 --- a/tools/src/h5dump/h5dump_xml.h +++ b/tools/src/h5dump/h5dump_xml.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5format_convert/Makefile.am b/tools/src/h5format_convert/Makefile.am index 3b17a4a1de7..df29fa2f1c1 100644 --- a/tools/src/h5format_convert/Makefile.am +++ b/tools/src/h5format_convert/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/src/h5format_convert/h5format_convert.c b/tools/src/h5format_convert/h5format_convert.c index 0ac4f3a6d37..09f99f88b8f 100644 --- a/tools/src/h5format_convert/h5format_convert.c +++ b/tools/src/h5format_convert/h5format_convert.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5format_convert/h5format_convert.h b/tools/src/h5format_convert/h5format_convert.h index 5f101dac52c..a08e8b3cec0 100644 --- a/tools/src/h5format_convert/h5format_convert.h +++ b/tools/src/h5format_convert/h5format_convert.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5import/Makefile.am b/tools/src/h5import/Makefile.am index 7797a9842fc..229d0e3b2ee 100644 --- a/tools/src/h5import/Makefile.am +++ b/tools/src/h5import/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/src/h5import/h5import.c b/tools/src/h5import/h5import.c index 89dae55c696..5d7abd91f9b 100644 --- a/tools/src/h5import/h5import.c +++ b/tools/src/h5import/h5import.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5import/h5import.h b/tools/src/h5import/h5import.h index 5b03780674e..ac770928a87 100644 --- a/tools/src/h5import/h5import.h +++ b/tools/src/h5import/h5import.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5jam/Makefile.am b/tools/src/h5jam/Makefile.am index d29314d5c74..1e9d122ce4a 100644 --- a/tools/src/h5jam/Makefile.am +++ b/tools/src/h5jam/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/src/h5jam/h5jam.c b/tools/src/h5jam/h5jam.c index ffef472c9ba..04ca13d51b0 100644 --- a/tools/src/h5jam/h5jam.c +++ b/tools/src/h5jam/h5jam.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5jam/h5jam.h b/tools/src/h5jam/h5jam.h index 7d3cca65535..3c92a9c60c9 100644 --- a/tools/src/h5jam/h5jam.h +++ b/tools/src/h5jam/h5jam.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5jam/h5unjam.c b/tools/src/h5jam/h5unjam.c index 0ea5d494662..5a99fe45b08 100644 --- a/tools/src/h5jam/h5unjam.c +++ b/tools/src/h5jam/h5unjam.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5ls/Makefile.am b/tools/src/h5ls/Makefile.am index ee9ecdbc130..9228a0acad2 100644 --- a/tools/src/h5ls/Makefile.am +++ b/tools/src/h5ls/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/src/h5ls/h5ls.c b/tools/src/h5ls/h5ls.c index 3e9255019ca..109e4e2de95 100644 --- a/tools/src/h5ls/h5ls.c +++ b/tools/src/h5ls/h5ls.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5ls/h5ls.h b/tools/src/h5ls/h5ls.h index d72c1be10d4..6aee044cac9 100644 --- a/tools/src/h5ls/h5ls.h +++ b/tools/src/h5ls/h5ls.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5perf/Makefile.am b/tools/src/h5perf/Makefile.am index 09ac26bce4b..6eed3b8975d 100644 --- a/tools/src/h5perf/Makefile.am +++ b/tools/src/h5perf/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/src/h5perf/pio_engine.c b/tools/src/h5perf/pio_engine.c index 7930d9645a0..49889c5ad3b 100644 --- a/tools/src/h5perf/pio_engine.c +++ b/tools/src/h5perf/pio_engine.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5perf/pio_perf.c b/tools/src/h5perf/pio_perf.c index e72de3207f3..921cdd6724f 100644 --- a/tools/src/h5perf/pio_perf.c +++ b/tools/src/h5perf/pio_perf.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5perf/pio_perf.h b/tools/src/h5perf/pio_perf.h index 54fbb526f0a..d38a943a24b 100644 --- a/tools/src/h5perf/pio_perf.h +++ b/tools/src/h5perf/pio_perf.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5perf/sio_engine.c b/tools/src/h5perf/sio_engine.c index 0d2240fa69f..07abe94d4be 100644 --- a/tools/src/h5perf/sio_engine.c +++ b/tools/src/h5perf/sio_engine.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5perf/sio_perf.c b/tools/src/h5perf/sio_perf.c index ad536ba02e5..110f3391298 100644 --- a/tools/src/h5perf/sio_perf.c +++ b/tools/src/h5perf/sio_perf.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5perf/sio_perf.h b/tools/src/h5perf/sio_perf.h index a417bdb56b3..d32296526ee 100644 --- a/tools/src/h5perf/sio_perf.h +++ b/tools/src/h5perf/sio_perf.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5repack/Makefile.am b/tools/src/h5repack/Makefile.am index 9af6e9d4603..52e1ca1f9c6 100644 --- a/tools/src/h5repack/Makefile.am +++ b/tools/src/h5repack/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/src/h5repack/h5repack.c b/tools/src/h5repack/h5repack.c index 1cbed04df19..3715ae12ee4 100644 --- a/tools/src/h5repack/h5repack.c +++ b/tools/src/h5repack/h5repack.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5repack/h5repack.h b/tools/src/h5repack/h5repack.h index cdfeb86b5d4..b7c24cb8be2 100644 --- a/tools/src/h5repack/h5repack.h +++ b/tools/src/h5repack/h5repack.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5repack/h5repack_copy.c b/tools/src/h5repack/h5repack_copy.c index 77442269f6f..3c7a78058cd 100644 --- a/tools/src/h5repack/h5repack_copy.c +++ b/tools/src/h5repack/h5repack_copy.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5repack/h5repack_filters.c b/tools/src/h5repack/h5repack_filters.c index 9669d0c193b..f243f6fafa0 100644 --- a/tools/src/h5repack/h5repack_filters.c +++ b/tools/src/h5repack/h5repack_filters.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5repack/h5repack_main.c b/tools/src/h5repack/h5repack_main.c index baf60535dc9..9eaa049d41f 100644 --- a/tools/src/h5repack/h5repack_main.c +++ b/tools/src/h5repack/h5repack_main.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5repack/h5repack_opttable.c b/tools/src/h5repack/h5repack_opttable.c index fdad8780654..0bb776b055f 100644 --- a/tools/src/h5repack/h5repack_opttable.c +++ b/tools/src/h5repack/h5repack_opttable.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5repack/h5repack_parse.c b/tools/src/h5repack/h5repack_parse.c index 0317ef709ba..5030ec58b62 100644 --- a/tools/src/h5repack/h5repack_parse.c +++ b/tools/src/h5repack/h5repack_parse.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5repack/h5repack_refs.c b/tools/src/h5repack/h5repack_refs.c index e71d6db7679..bbdc135ffda 100644 --- a/tools/src/h5repack/h5repack_refs.c +++ b/tools/src/h5repack/h5repack_refs.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5repack/h5repack_verify.c b/tools/src/h5repack/h5repack_verify.c index 50604e055cb..1e328f7139c 100644 --- a/tools/src/h5repack/h5repack_verify.c +++ b/tools/src/h5repack/h5repack_verify.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5stat/Makefile.am b/tools/src/h5stat/Makefile.am index b8bd906cc1b..f0d35431417 100644 --- a/tools/src/h5stat/Makefile.am +++ b/tools/src/h5stat/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/src/h5stat/h5stat.c b/tools/src/h5stat/h5stat.c index 71c507801ee..8a356554ee7 100644 --- a/tools/src/h5stat/h5stat.c +++ b/tools/src/h5stat/h5stat.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/h5stat/h5stat.h b/tools/src/h5stat/h5stat.h index 848480eb2b3..6d1bf184d62 100644 --- a/tools/src/h5stat/h5stat.h +++ b/tools/src/h5stat/h5stat.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/misc/Makefile.am b/tools/src/misc/Makefile.am index 709be6e5825..1842f958167 100644 --- a/tools/src/misc/Makefile.am +++ b/tools/src/misc/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/src/misc/h5clear.c b/tools/src/misc/h5clear.c index 66931846d76..059f738c601 100644 --- a/tools/src/misc/h5clear.c +++ b/tools/src/misc/h5clear.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/misc/h5clear.h b/tools/src/misc/h5clear.h index 354b2f6ef33..e313424848c 100644 --- a/tools/src/misc/h5clear.h +++ b/tools/src/misc/h5clear.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/misc/h5debug.c b/tools/src/misc/h5debug.c index 1bba4199a36..b4051fd6212 100644 --- a/tools/src/misc/h5debug.c +++ b/tools/src/misc/h5debug.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/misc/h5debug.h b/tools/src/misc/h5debug.h index e946681a6a9..1a19a0b910c 100644 --- a/tools/src/misc/h5debug.h +++ b/tools/src/misc/h5debug.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/misc/h5delete.c b/tools/src/misc/h5delete.c index 42a5eaaf90e..55ff1f21435 100644 --- a/tools/src/misc/h5delete.c +++ b/tools/src/misc/h5delete.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/misc/h5delete.h b/tools/src/misc/h5delete.h index 5faedc023a4..2751b9b9425 100644 --- a/tools/src/misc/h5delete.h +++ b/tools/src/misc/h5delete.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/misc/h5mkgrp.c b/tools/src/misc/h5mkgrp.c index b96251991b5..55a8b03e772 100644 --- a/tools/src/misc/h5mkgrp.c +++ b/tools/src/misc/h5mkgrp.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/misc/h5mkgrp.h b/tools/src/misc/h5mkgrp.h index cb0b2740bcb..d57a16a5970 100644 --- a/tools/src/misc/h5mkgrp.h +++ b/tools/src/misc/h5mkgrp.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/misc/h5repart.c b/tools/src/misc/h5repart.c index 5d3fa04b514..4f1aa20fbf9 100644 --- a/tools/src/misc/h5repart.c +++ b/tools/src/misc/h5repart.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/src/misc/h5repart.h b/tools/src/misc/h5repart.h index 9452bd5b6f4..655b210b0af 100644 --- a/tools/src/misc/h5repart.h +++ b/tools/src/misc/h5repart.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/Makefile.am b/tools/test/Makefile.am index c32dd18e568..21c2f82975d 100644 --- a/tools/test/Makefile.am +++ b/tools/test/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5copy/CMakeTests.cmake b/tools/test/h5copy/CMakeTests.cmake index 90b030d08b4..3972495f525 100644 --- a/tools/test/h5copy/CMakeTests.cmake +++ b/tools/test/h5copy/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5copy/Makefile.am b/tools/test/h5copy/Makefile.am index 6010f987442..451e0bcc10c 100644 --- a/tools/test/h5copy/Makefile.am +++ b/tools/test/h5copy/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5copy/dynlib_copy.c b/tools/test/h5copy/dynlib_copy.c index 2abef792d9e..fa894155e60 100644 --- a/tools/test/h5copy/dynlib_copy.c +++ b/tools/test/h5copy/dynlib_copy.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5copy/h5copygentest.c b/tools/test/h5copy/h5copygentest.c index ac19f34d722..abcab014959 100644 --- a/tools/test/h5copy/h5copygentest.c +++ b/tools/test/h5copy/h5copygentest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5copy/testh5copy.sh.in b/tools/test/h5copy/testh5copy.sh.in index 84a746c23b4..5f7b82efe1c 100644 --- a/tools/test/h5copy/testh5copy.sh.in +++ b/tools/test/h5copy/testh5copy.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5diff/CMakeTests.cmake b/tools/test/h5diff/CMakeTests.cmake index 151e73cb2cb..5d36e0cd764 100644 --- a/tools/test/h5diff/CMakeTests.cmake +++ b/tools/test/h5diff/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5diff/Makefile.am b/tools/test/h5diff/Makefile.am index f920afab74a..24f30612e68 100644 --- a/tools/test/h5diff/Makefile.am +++ b/tools/test/h5diff/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5diff/dynlib_diff.c b/tools/test/h5diff/dynlib_diff.c index fd675b065ed..d8a7a7e3696 100644 --- a/tools/test/h5diff/dynlib_diff.c +++ b/tools/test/h5diff/dynlib_diff.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5diff/h5diff_plugin.sh.in b/tools/test/h5diff/h5diff_plugin.sh.in index 98ccf639d8c..9ea9d187611 100644 --- a/tools/test/h5diff/h5diff_plugin.sh.in +++ b/tools/test/h5diff/h5diff_plugin.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5diff/h5diffgentest.c b/tools/test/h5diff/h5diffgentest.c index 351e4153571..f95e773245d 100644 --- a/tools/test/h5diff/h5diffgentest.c +++ b/tools/test/h5diff/h5diffgentest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5diff/testh5diff.sh.in b/tools/test/h5diff/testh5diff.sh.in index 2cde4571982..ed197b9538b 100644 --- a/tools/test/h5diff/testh5diff.sh.in +++ b/tools/test/h5diff/testh5diff.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5diff/testph5diff.sh.in b/tools/test/h5diff/testph5diff.sh.in index a8345e65046..fc0726068ec 100644 --- a/tools/test/h5diff/testph5diff.sh.in +++ b/tools/test/h5diff/testph5diff.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5dump/CMakeTests.cmake b/tools/test/h5dump/CMakeTests.cmake index 49417bd4d07..41fd15389a9 100644 --- a/tools/test/h5dump/CMakeTests.cmake +++ b/tools/test/h5dump/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5dump/CMakeTestsPBITS.cmake b/tools/test/h5dump/CMakeTestsPBITS.cmake index 9c6dab446d1..7325e510b39 100644 --- a/tools/test/h5dump/CMakeTestsPBITS.cmake +++ b/tools/test/h5dump/CMakeTestsPBITS.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5dump/CMakeTestsVDS.cmake b/tools/test/h5dump/CMakeTestsVDS.cmake index 81a6eb249dd..6d5c4b2ced5 100644 --- a/tools/test/h5dump/CMakeTestsVDS.cmake +++ b/tools/test/h5dump/CMakeTestsVDS.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5dump/CMakeTestsXML.cmake b/tools/test/h5dump/CMakeTestsXML.cmake index 7b97f71057b..97b30582680 100644 --- a/tools/test/h5dump/CMakeTestsXML.cmake +++ b/tools/test/h5dump/CMakeTestsXML.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5dump/CMakeVFDTests.cmake b/tools/test/h5dump/CMakeVFDTests.cmake index 6f89d4cf2e5..e6f2fd05c1f 100644 --- a/tools/test/h5dump/CMakeVFDTests.cmake +++ b/tools/test/h5dump/CMakeVFDTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5dump/Makefile.am b/tools/test/h5dump/Makefile.am index 619647c670e..d535be413b1 100644 --- a/tools/test/h5dump/Makefile.am +++ b/tools/test/h5dump/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5dump/binread.c b/tools/test/h5dump/binread.c index 50c88ad1941..a16a3ca0160 100644 --- a/tools/test/h5dump/binread.c +++ b/tools/test/h5dump/binread.c @@ -5,7 +5,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5dump/dynlib_dump.c b/tools/test/h5dump/dynlib_dump.c index fd675b065ed..d8a7a7e3696 100644 --- a/tools/test/h5dump/dynlib_dump.c +++ b/tools/test/h5dump/dynlib_dump.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5dump/h5dump_plugin.sh.in b/tools/test/h5dump/h5dump_plugin.sh.in index c9e485d565f..b1ba19efb44 100644 --- a/tools/test/h5dump/h5dump_plugin.sh.in +++ b/tools/test/h5dump/h5dump_plugin.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5dump/h5dumpgentest.c b/tools/test/h5dump/h5dumpgentest.c index 1af7d721254..5c13d614844 100644 --- a/tools/test/h5dump/h5dumpgentest.c +++ b/tools/test/h5dump/h5dumpgentest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5dump/testh5dump.sh.in b/tools/test/h5dump/testh5dump.sh.in index 6a60785e959..17bac431be2 100644 --- a/tools/test/h5dump/testh5dump.sh.in +++ b/tools/test/h5dump/testh5dump.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5dump/testh5dumppbits.sh.in b/tools/test/h5dump/testh5dumppbits.sh.in index 181dfb1b978..19e0954c97c 100644 --- a/tools/test/h5dump/testh5dumppbits.sh.in +++ b/tools/test/h5dump/testh5dumppbits.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5dump/testh5dumpvds.sh.in b/tools/test/h5dump/testh5dumpvds.sh.in index 9c992303d67..3245e26f619 100644 --- a/tools/test/h5dump/testh5dumpvds.sh.in +++ b/tools/test/h5dump/testh5dumpvds.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5dump/testh5dumpxml.sh.in b/tools/test/h5dump/testh5dumpxml.sh.in index b95d5c4ff34..53af38508f5 100644 --- a/tools/test/h5dump/testh5dumpxml.sh.in +++ b/tools/test/h5dump/testh5dumpxml.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5format_convert/CMakeTests.cmake b/tools/test/h5format_convert/CMakeTests.cmake index 3611e6c9e92..6b290c0b633 100644 --- a/tools/test/h5format_convert/CMakeTests.cmake +++ b/tools/test/h5format_convert/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5format_convert/Makefile.am b/tools/test/h5format_convert/Makefile.am index 1ab0151bb19..316954b8d04 100644 --- a/tools/test/h5format_convert/Makefile.am +++ b/tools/test/h5format_convert/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5format_convert/h5fc_chk_idx.c b/tools/test/h5format_convert/h5fc_chk_idx.c index 24434b00e48..f92d1043158 100644 --- a/tools/test/h5format_convert/h5fc_chk_idx.c +++ b/tools/test/h5format_convert/h5fc_chk_idx.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5format_convert/h5fc_gentest.c b/tools/test/h5format_convert/h5fc_gentest.c index 7a31e58cc2a..144842a35fc 100644 --- a/tools/test/h5format_convert/h5fc_gentest.c +++ b/tools/test/h5format_convert/h5fc_gentest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5format_convert/testh5fc.sh.in b/tools/test/h5format_convert/testh5fc.sh.in index 6b75248f3c3..5ecdcff9e66 100644 --- a/tools/test/h5format_convert/testh5fc.sh.in +++ b/tools/test/h5format_convert/testh5fc.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5import/CMakeTests.cmake b/tools/test/h5import/CMakeTests.cmake index 443effe5fc3..6e6c960f6db 100644 --- a/tools/test/h5import/CMakeTests.cmake +++ b/tools/test/h5import/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5import/Makefile.am b/tools/test/h5import/Makefile.am index 6cd9947320d..476318c1bb1 100644 --- a/tools/test/h5import/Makefile.am +++ b/tools/test/h5import/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5import/h5importtest.c b/tools/test/h5import/h5importtest.c index b11fe100d2d..031616cc39f 100644 --- a/tools/test/h5import/h5importtest.c +++ b/tools/test/h5import/h5importtest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5import/h5importtestutil.sh.in b/tools/test/h5import/h5importtestutil.sh.in index 04582ee87c2..d31ee91bb24 100644 --- a/tools/test/h5import/h5importtestutil.sh.in +++ b/tools/test/h5import/h5importtestutil.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5jam/CMakeTests.cmake b/tools/test/h5jam/CMakeTests.cmake index 2067e7946e5..60f3532f5a0 100644 --- a/tools/test/h5jam/CMakeTests.cmake +++ b/tools/test/h5jam/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5jam/Makefile.am b/tools/test/h5jam/Makefile.am index 06e8e86e404..8a6382404c4 100644 --- a/tools/test/h5jam/Makefile.am +++ b/tools/test/h5jam/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5jam/getub.c b/tools/test/h5jam/getub.c index 8878a69fca2..83c772902ba 100644 --- a/tools/test/h5jam/getub.c +++ b/tools/test/h5jam/getub.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5jam/h5jamgentest.c b/tools/test/h5jam/h5jamgentest.c index 0ab29c30d32..cdf44f1c9bf 100644 --- a/tools/test/h5jam/h5jamgentest.c +++ b/tools/test/h5jam/h5jamgentest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5jam/tellub.c b/tools/test/h5jam/tellub.c index 61ea89663cf..67809231d44 100644 --- a/tools/test/h5jam/tellub.c +++ b/tools/test/h5jam/tellub.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5jam/testh5jam.sh.in b/tools/test/h5jam/testh5jam.sh.in index ee34377047d..a7a88eea722 100644 --- a/tools/test/h5jam/testh5jam.sh.in +++ b/tools/test/h5jam/testh5jam.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5ls/CMakeTests.cmake b/tools/test/h5ls/CMakeTests.cmake index 1e2ddd7f376..cff2941b3a7 100644 --- a/tools/test/h5ls/CMakeTests.cmake +++ b/tools/test/h5ls/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5ls/CMakeTestsVDS.cmake b/tools/test/h5ls/CMakeTestsVDS.cmake index 9251718943b..c8b31db42d2 100644 --- a/tools/test/h5ls/CMakeTestsVDS.cmake +++ b/tools/test/h5ls/CMakeTestsVDS.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5ls/Makefile.am b/tools/test/h5ls/Makefile.am index f802f881ce2..5c9abd5faf8 100644 --- a/tools/test/h5ls/Makefile.am +++ b/tools/test/h5ls/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5ls/dynlib_ls.c b/tools/test/h5ls/dynlib_ls.c index fd675b065ed..d8a7a7e3696 100644 --- a/tools/test/h5ls/dynlib_ls.c +++ b/tools/test/h5ls/dynlib_ls.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5ls/h5ls_plugin.sh.in b/tools/test/h5ls/h5ls_plugin.sh.in index 8b606d6ff29..10621a41c62 100644 --- a/tools/test/h5ls/h5ls_plugin.sh.in +++ b/tools/test/h5ls/h5ls_plugin.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5ls/testh5ls.sh.in b/tools/test/h5ls/testh5ls.sh.in index 78844cfc654..c4885d42dbc 100644 --- a/tools/test/h5ls/testh5ls.sh.in +++ b/tools/test/h5ls/testh5ls.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5ls/testh5lsvds.sh.in b/tools/test/h5ls/testh5lsvds.sh.in index 9038cf18ddd..92f7e0fad9d 100644 --- a/tools/test/h5ls/testh5lsvds.sh.in +++ b/tools/test/h5ls/testh5lsvds.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5repack/CMakeTests.cmake b/tools/test/h5repack/CMakeTests.cmake index 2c584ba6040..e2c6aee1baa 100644 --- a/tools/test/h5repack/CMakeTests.cmake +++ b/tools/test/h5repack/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5repack/CMakeVFDTests.cmake b/tools/test/h5repack/CMakeVFDTests.cmake index e992029ab33..93698b8dd8b 100644 --- a/tools/test/h5repack/CMakeVFDTests.cmake +++ b/tools/test/h5repack/CMakeVFDTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5repack/Makefile.am b/tools/test/h5repack/Makefile.am index a3db2548c55..726aadd03fc 100644 --- a/tools/test/h5repack/Makefile.am +++ b/tools/test/h5repack/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5repack/dynlib_rpk.c b/tools/test/h5repack/dynlib_rpk.c index 0fc3c42516f..bd0430478e2 100644 --- a/tools/test/h5repack/dynlib_rpk.c +++ b/tools/test/h5repack/dynlib_rpk.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5repack/dynlib_vrpk.c b/tools/test/h5repack/dynlib_vrpk.c index f9f92999dbe..91934222ea1 100644 --- a/tools/test/h5repack/dynlib_vrpk.c +++ b/tools/test/h5repack/dynlib_vrpk.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5repack/h5repack.sh.in b/tools/test/h5repack/h5repack.sh.in index 9b4af9dda45..6d443f31865 100644 --- a/tools/test/h5repack/h5repack.sh.in +++ b/tools/test/h5repack/h5repack.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5repack/h5repack_plugin.sh.in b/tools/test/h5repack/h5repack_plugin.sh.in index a39cd7b967f..e073796c538 100644 --- a/tools/test/h5repack/h5repack_plugin.sh.in +++ b/tools/test/h5repack/h5repack_plugin.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5repack/h5repackgentest.c b/tools/test/h5repack/h5repackgentest.c index 8fbfab5e420..6e776b53310 100644 --- a/tools/test/h5repack/h5repackgentest.c +++ b/tools/test/h5repack/h5repackgentest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5repack/h5repacktst.c b/tools/test/h5repack/h5repacktst.c index c9d64188695..e3c34fe82ab 100644 --- a/tools/test/h5repack/h5repacktst.c +++ b/tools/test/h5repack/h5repacktst.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5repack/testh5repack_detect_szip.c b/tools/test/h5repack/testh5repack_detect_szip.c index f2410f65ab6..bcc93c52981 100644 --- a/tools/test/h5repack/testh5repack_detect_szip.c +++ b/tools/test/h5repack/testh5repack_detect_szip.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5stat/CMakeTests.cmake b/tools/test/h5stat/CMakeTests.cmake index 18137d10250..8ac0dfdec9d 100644 --- a/tools/test/h5stat/CMakeTests.cmake +++ b/tools/test/h5stat/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5stat/Makefile.am b/tools/test/h5stat/Makefile.am index 530c86cd66a..89469bce427 100644 --- a/tools/test/h5stat/Makefile.am +++ b/tools/test/h5stat/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/h5stat/h5stat_gentest.c b/tools/test/h5stat/h5stat_gentest.c index 787c2e19f17..c29e0083834 100644 --- a/tools/test/h5stat/h5stat_gentest.c +++ b/tools/test/h5stat/h5stat_gentest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/h5stat/testh5stat.sh.in b/tools/test/h5stat/testh5stat.sh.in index b44c43921de..9d80a516ef5 100644 --- a/tools/test/h5stat/testh5stat.sh.in +++ b/tools/test/h5stat/testh5stat.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/misc/CMakeTestsClear.cmake b/tools/test/misc/CMakeTestsClear.cmake index 2ec4292208b..43686e089ac 100644 --- a/tools/test/misc/CMakeTestsClear.cmake +++ b/tools/test/misc/CMakeTestsClear.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/misc/CMakeTestsMkgrp.cmake b/tools/test/misc/CMakeTestsMkgrp.cmake index a66d4ee5150..f3be60d6232 100644 --- a/tools/test/misc/CMakeTestsMkgrp.cmake +++ b/tools/test/misc/CMakeTestsMkgrp.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/misc/CMakeTestsRepart.cmake b/tools/test/misc/CMakeTestsRepart.cmake index 9b3e44e73e8..2c885ad0ccf 100644 --- a/tools/test/misc/CMakeTestsRepart.cmake +++ b/tools/test/misc/CMakeTestsRepart.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/misc/Makefile.am b/tools/test/misc/Makefile.am index e222af2f21a..43c822e74df 100644 --- a/tools/test/misc/Makefile.am +++ b/tools/test/misc/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/misc/clear_open_chk.c b/tools/test/misc/clear_open_chk.c index 8abd4e5a1ff..286e5ac6b82 100644 --- a/tools/test/misc/clear_open_chk.c +++ b/tools/test/misc/clear_open_chk.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/misc/h5clear_gentest.c b/tools/test/misc/h5clear_gentest.c index 5bcd91f9774..ba4db9a1ec3 100644 --- a/tools/test/misc/h5clear_gentest.c +++ b/tools/test/misc/h5clear_gentest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/misc/h5perf_gentest.c b/tools/test/misc/h5perf_gentest.c index b3f5bb722b4..8c12bce050b 100644 --- a/tools/test/misc/h5perf_gentest.c +++ b/tools/test/misc/h5perf_gentest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/misc/h5repart_gentest.c b/tools/test/misc/h5repart_gentest.c index a4a4ab10a8d..714806a05c5 100644 --- a/tools/test/misc/h5repart_gentest.c +++ b/tools/test/misc/h5repart_gentest.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/misc/repart_test.c b/tools/test/misc/repart_test.c index 3857ee29fee..705b67435f8 100644 --- a/tools/test/misc/repart_test.c +++ b/tools/test/misc/repart_test.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/misc/talign.c b/tools/test/misc/talign.c index e3c0f455d1e..7e382e61ae5 100644 --- a/tools/test/misc/talign.c +++ b/tools/test/misc/talign.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/misc/testh5clear.sh.in b/tools/test/misc/testh5clear.sh.in index b97509415e2..085417a55e2 100644 --- a/tools/test/misc/testh5clear.sh.in +++ b/tools/test/misc/testh5clear.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/misc/testh5mkgrp.sh.in b/tools/test/misc/testh5mkgrp.sh.in index 297f89f9f19..3481d507288 100644 --- a/tools/test/misc/testh5mkgrp.sh.in +++ b/tools/test/misc/testh5mkgrp.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/misc/testh5repart.sh.in b/tools/test/misc/testh5repart.sh.in index e101b088067..ee8dd65a45a 100644 --- a/tools/test/misc/testh5repart.sh.in +++ b/tools/test/misc/testh5repart.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/misc/vds/Makefile.am b/tools/test/misc/vds/Makefile.am index f2cc259e634..94f34e5e55c 100644 --- a/tools/test/misc/vds/Makefile.am +++ b/tools/test/misc/vds/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/misc/vds/UC_1.h b/tools/test/misc/vds/UC_1.h index a7046ff48e8..1023afee6bf 100644 --- a/tools/test/misc/vds/UC_1.h +++ b/tools/test/misc/vds/UC_1.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/misc/vds/UC_1_one_dim_gen.c b/tools/test/misc/vds/UC_1_one_dim_gen.c index 56b257dfeb4..f9287d9680d 100644 --- a/tools/test/misc/vds/UC_1_one_dim_gen.c +++ b/tools/test/misc/vds/UC_1_one_dim_gen.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/misc/vds/UC_2.h b/tools/test/misc/vds/UC_2.h index bf94a329b8b..92d5cf4727f 100644 --- a/tools/test/misc/vds/UC_2.h +++ b/tools/test/misc/vds/UC_2.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/misc/vds/UC_2_two_dims_gen.c b/tools/test/misc/vds/UC_2_two_dims_gen.c index 05488c4a972..a8930ac0a5f 100644 --- a/tools/test/misc/vds/UC_2_two_dims_gen.c +++ b/tools/test/misc/vds/UC_2_two_dims_gen.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/misc/vds/UC_3.h b/tools/test/misc/vds/UC_3.h index ea3df96f14f..2752994bb39 100644 --- a/tools/test/misc/vds/UC_3.h +++ b/tools/test/misc/vds/UC_3.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/misc/vds/UC_3_gaps_gen.c b/tools/test/misc/vds/UC_3_gaps_gen.c index 33840dcdd3e..e7e05bc58a7 100644 --- a/tools/test/misc/vds/UC_3_gaps_gen.c +++ b/tools/test/misc/vds/UC_3_gaps_gen.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/misc/vds/UC_4.h b/tools/test/misc/vds/UC_4.h index c4698912fc6..b4ed93ba99c 100644 --- a/tools/test/misc/vds/UC_4.h +++ b/tools/test/misc/vds/UC_4.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/misc/vds/UC_4_printf_gen.c b/tools/test/misc/vds/UC_4_printf_gen.c index 45de2acd200..eec604ce9e1 100644 --- a/tools/test/misc/vds/UC_4_printf_gen.c +++ b/tools/test/misc/vds/UC_4_printf_gen.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/misc/vds/UC_5.h b/tools/test/misc/vds/UC_5.h index 56544553c4c..e76d47fcfd7 100644 --- a/tools/test/misc/vds/UC_5.h +++ b/tools/test/misc/vds/UC_5.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/misc/vds/UC_5_stride_gen.c b/tools/test/misc/vds/UC_5_stride_gen.c index f1e93e15bb6..36f055a079f 100644 --- a/tools/test/misc/vds/UC_5_stride_gen.c +++ b/tools/test/misc/vds/UC_5_stride_gen.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/misc/vds/UC_common.h b/tools/test/misc/vds/UC_common.h index 4cfce358c1c..ae077c65982 100644 --- a/tools/test/misc/vds/UC_common.h +++ b/tools/test/misc/vds/UC_common.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/perform/CMakeTests.cmake b/tools/test/perform/CMakeTests.cmake index 714713e5569..aeec2c111a1 100644 --- a/tools/test/perform/CMakeTests.cmake +++ b/tools/test/perform/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/perform/Makefile.am b/tools/test/perform/Makefile.am index 14755ca46f0..3a32db3693e 100644 --- a/tools/test/perform/Makefile.am +++ b/tools/test/perform/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/perform/chunk.c b/tools/test/perform/chunk.c index 665c857b9d8..66450b875bb 100644 --- a/tools/test/perform/chunk.c +++ b/tools/test/perform/chunk.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/perform/chunk_cache.c b/tools/test/perform/chunk_cache.c index 3d258ea657d..012b0035309 100644 --- a/tools/test/perform/chunk_cache.c +++ b/tools/test/perform/chunk_cache.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/perform/direct_write_perf.c b/tools/test/perform/direct_write_perf.c index be9d58342eb..a24710fa3e7 100644 --- a/tools/test/perform/direct_write_perf.c +++ b/tools/test/perform/direct_write_perf.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/perform/gen_report.pl b/tools/test/perform/gen_report.pl index e42e547aab5..74a5d4817e1 100644 --- a/tools/test/perform/gen_report.pl +++ b/tools/test/perform/gen_report.pl @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/tools/test/perform/iopipe.c b/tools/test/perform/iopipe.c index b5190fa6767..eed64924999 100644 --- a/tools/test/perform/iopipe.c +++ b/tools/test/perform/iopipe.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/perform/overhead.c b/tools/test/perform/overhead.c index 721124c05bb..e301bbfb737 100644 --- a/tools/test/perform/overhead.c +++ b/tools/test/perform/overhead.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/perform/perf_meta.c b/tools/test/perform/perf_meta.c index 401400a1ac9..d75bdb1044c 100644 --- a/tools/test/perform/perf_meta.c +++ b/tools/test/perform/perf_meta.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/tools/test/perform/zip_perf.c b/tools/test/perform/zip_perf.c index 8f33a86bf42..78f62f80c60 100644 --- a/tools/test/perform/zip_perf.c +++ b/tools/test/perform/zip_perf.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/utils/Makefile.am b/utils/Makefile.am index 740f5c36fbf..1f9359a5486 100644 --- a/utils/Makefile.am +++ b/utils/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/utils/mirror_vfd/Makefile.am b/utils/mirror_vfd/Makefile.am index f263c4e73b0..d3640a389fc 100644 --- a/utils/mirror_vfd/Makefile.am +++ b/utils/mirror_vfd/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/utils/mirror_vfd/mirror_remote.c b/utils/mirror_vfd/mirror_remote.c index a5115276e53..fc3ac5e8d2f 100644 --- a/utils/mirror_vfd/mirror_remote.c +++ b/utils/mirror_vfd/mirror_remote.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/utils/mirror_vfd/mirror_remote.h b/utils/mirror_vfd/mirror_remote.h index 00a09b061b0..863169ee8fe 100644 --- a/utils/mirror_vfd/mirror_remote.h +++ b/utils/mirror_vfd/mirror_remote.h @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/utils/mirror_vfd/mirror_server.c b/utils/mirror_vfd/mirror_server.c index 597e307e9ae..467a9b332e6 100644 --- a/utils/mirror_vfd/mirror_server.c +++ b/utils/mirror_vfd/mirror_server.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/utils/mirror_vfd/mirror_server_stop.c b/utils/mirror_vfd/mirror_server_stop.c index 6b2b1b116b3..d575f32db5c 100644 --- a/utils/mirror_vfd/mirror_server_stop.c +++ b/utils/mirror_vfd/mirror_server_stop.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/utils/mirror_vfd/mirror_writer.c b/utils/mirror_vfd/mirror_writer.c index f1569657deb..ec8a45e9546 100644 --- a/utils/mirror_vfd/mirror_writer.c +++ b/utils/mirror_vfd/mirror_writer.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/utils/subfiling_vfd/h5fuse.in b/utils/subfiling_vfd/h5fuse.in index a4c6a053cc0..bc288261fce 100755 --- a/utils/subfiling_vfd/h5fuse.in +++ b/utils/subfiling_vfd/h5fuse.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/utils/test/Makefile.am b/utils/test/Makefile.am index 43a8d6109b7..31719375431 100644 --- a/utils/test/Makefile.am +++ b/utils/test/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/utils/test/swmr_check_compat_vfd.c b/utils/test/swmr_check_compat_vfd.c index eeaae726f47..55bb4daa015 100644 --- a/utils/test/swmr_check_compat_vfd.c +++ b/utils/test/swmr_check_compat_vfd.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/utils/tools/Makefile.am b/utils/tools/Makefile.am index 0c89aff24f9..3a7105f27a6 100644 --- a/utils/tools/Makefile.am +++ b/utils/tools/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/utils/tools/h5dwalk/Makefile.am b/utils/tools/h5dwalk/Makefile.am index 34cdb32d5f0..046a38595df 100644 --- a/utils/tools/h5dwalk/Makefile.am +++ b/utils/tools/h5dwalk/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/utils/tools/h5dwalk/h5dwalk.c b/utils/tools/h5dwalk/h5dwalk.c index 58d7463d959..e1d8889b4e0 100644 --- a/utils/tools/h5dwalk/h5dwalk.c +++ b/utils/tools/h5dwalk/h5dwalk.c @@ -4,7 +4,7 @@ * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the COPYING file, which can be found at the root of the source code * + * the LICENSE file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * diff --git a/utils/tools/test/Makefile.am b/utils/tools/test/Makefile.am index 88104f201d7..e69f73373e9 100644 --- a/utils/tools/test/Makefile.am +++ b/utils/tools/test/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/utils/tools/test/h5dwalk/CMakeTests.cmake b/utils/tools/test/h5dwalk/CMakeTests.cmake index b65499d6c60..b2670cd26c1 100644 --- a/utils/tools/test/h5dwalk/CMakeTests.cmake +++ b/utils/tools/test/h5dwalk/CMakeTests.cmake @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/utils/tools/test/h5dwalk/Makefile.am b/utils/tools/test/h5dwalk/Makefile.am index c32dd0fdf35..a8eb71ab636 100644 --- a/utils/tools/test/h5dwalk/Makefile.am +++ b/utils/tools/test/h5dwalk/Makefile.am @@ -4,7 +4,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/utils/tools/test/h5dwalk/copy_demo_files.sh.in b/utils/tools/test/h5dwalk/copy_demo_files.sh.in index 8ccc5e8b678..13d12f86605 100644 --- a/utils/tools/test/h5dwalk/copy_demo_files.sh.in +++ b/utils/tools/test/h5dwalk/copy_demo_files.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/utils/tools/test/h5dwalk/testh5dwalk.sh.in b/utils/tools/test/h5dwalk/testh5dwalk.sh.in index 694dad01e3b..8774bde6a9b 100644 --- a/utils/tools/test/h5dwalk/testh5dwalk.sh.in +++ b/utils/tools/test/h5dwalk/testh5dwalk.sh.in @@ -5,7 +5,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. From ee6c2eed7481b978479dfd1ba39366b6510f5d6d Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Sun, 20 Oct 2024 12:47:38 -0700 Subject: [PATCH 022/179] Always check for __attribute__() in CMake (#4980) The CMake compiler checks skip checking for things like __attribute__() on Windows. Now that Visual Studio can use clang, we should be checking for this, even on non-MinGW Windows. --- config/cmake/ConfigureChecks.cmake | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/config/cmake/ConfigureChecks.cmake b/config/cmake/ConfigureChecks.cmake index e0b02618658..5f8f7514b0a 100644 --- a/config/cmake/ConfigureChecks.cmake +++ b/config/cmake/ConfigureChecks.cmake @@ -437,16 +437,14 @@ endif () #----------------------------------------------------------------------------- # Check a bunch of other functions #----------------------------------------------------------------------------- -if (MINGW OR NOT WINDOWS) - foreach (other_test - HAVE_ATTRIBUTE - HAVE_BUILTIN_EXPECT - PTHREAD_BARRIER - HAVE_SOCKLEN_T +foreach (other_test + HAVE_ATTRIBUTE + HAVE_BUILTIN_EXPECT + PTHREAD_BARRIER + HAVE_SOCKLEN_T ) - HDF_FUNCTION_TEST (${other_test}) - endforeach () -endif () + HDF_FUNCTION_TEST (${other_test}) +endforeach () # ---------------------------------------------------------------------- # Set the flag to indicate that the machine can handle converting From 245bb2cd238cc5d5d2769f71f90c401e94f1af96 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Sun, 20 Oct 2024 12:47:52 -0700 Subject: [PATCH 023/179] Remove some Solaris Studio work-arounds (#4979) Solaris Studio hasn't been updated in almost a decade and the last version (12.4, circa 2015) doesn't seem to fully support C11. This PR removes some work-arounds for things like __attribute__() support. --- bin/genparser | 2 -- config/cmake/ConfigureChecks.cmake | 5 ----- hl/src/H5LTanalyze.c | 2 -- hl/src/H5LTparse.c | 2 -- release_docs/RELEASE.txt | 6 ++++++ src/H5private.h | 5 +---- tools/test/perform/chunk.c | 3 +-- tools/test/perform/overhead.c | 3 +-- 8 files changed, 9 insertions(+), 19 deletions(-) diff --git a/bin/genparser b/bin/genparser index cb200619fa5..be2b9e24bd4 100755 --- a/bin/genparser +++ b/bin/genparser @@ -250,8 +250,6 @@ do echo '#if ((__GNUC__ * 100) + __GNUC_MINOR__) >= 600 ' >> tmp.out echo '#pragma GCC diagnostic ignored "-Wnull-dereference" ' >> tmp.out echo '#endif ' >> tmp.out - echo '#elif defined __SUNPRO_CC ' >> tmp.out - echo '#pragma disable_warn ' >> tmp.out echo '#elif defined _MSC_VER ' >> tmp.out echo '#pragma warning(push, 1) ' >> tmp.out echo '#endif ' >> tmp.out diff --git a/config/cmake/ConfigureChecks.cmake b/config/cmake/ConfigureChecks.cmake index 5f8f7514b0a..df6c760f0cc 100644 --- a/config/cmake/ConfigureChecks.cmake +++ b/config/cmake/ConfigureChecks.cmake @@ -29,11 +29,6 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set (${HDF_PREFIX}_HAVE_DARWIN 1) endif () -# Check for Solaris -if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS") - set (${HDF_PREFIX}_HAVE_SOLARIS 1) -endif () - #----------------------------------------------------------------------------- # This MACRO checks IF the symbol exists in the library and IF it # does, it appends library to the list. diff --git a/hl/src/H5LTanalyze.c b/hl/src/H5LTanalyze.c index 67fa8457382..1b7355b130f 100644 --- a/hl/src/H5LTanalyze.c +++ b/hl/src/H5LTanalyze.c @@ -24,8 +24,6 @@ #if ((__GNUC__ * 100) + __GNUC_MINOR__) >= 600 #pragma GCC diagnostic ignored "-Wnull-dereference" #endif -#elif defined __SUNPRO_CC -#pragma disable_warn #elif defined _MSC_VER #pragma warning(push, 1) #endif diff --git a/hl/src/H5LTparse.c b/hl/src/H5LTparse.c index bb7137630a5..46c3ae79b72 100644 --- a/hl/src/H5LTparse.c +++ b/hl/src/H5LTparse.c @@ -24,8 +24,6 @@ #if ((__GNUC__ * 100) + __GNUC_MINOR__) >= 600 #pragma GCC diagnostic ignored "-Wnull-dereference" #endif -#elif defined __SUNPRO_CC -#pragma disable_warn #elif defined _MSC_VER #pragma warning(push, 1) #endif diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 7e6576671a6..4bd31245750 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -47,6 +47,12 @@ New Features Configuration: ------------- + - Dropped some old Solaris Studio work-arounds + + Solaris Studio no longer seems to be maintained and the last version + (12.4, circa 2015) doesn't seem to fully support C11. We've removed + some hacks that work around things like __attribute__() support. + - Dropped support for the traditional MSVC preprocessor Visual Studio has recently started using a standards-compliant diff --git a/src/H5private.h b/src/H5private.h index eb3b8bcca58..b46dc8f7651 100644 --- a/src/H5private.h +++ b/src/H5private.h @@ -187,9 +187,6 @@ * Does the compiler support the __attribute__(()) syntax? It's no * big deal if we don't. * - * Note that Solaris Studio supports attribute, but does not support the - * attributes we use. - * * When using H5_ATTR_FALLTHROUGH, you should also include a comment that * says FALLTHROUGH to reduce warnings on compilers that don't use * attributes but do respect fall-through comments. @@ -199,7 +196,7 @@ * file). Be sure to update that file if the #ifdefs change here. */ /* clang-format off */ -#if defined(H5_HAVE_ATTRIBUTE) && !defined(__SUNPRO_C) +#if defined(H5_HAVE_ATTRIBUTE) # define H5_ATTR_FORMAT(X, Y, Z) __attribute__((format(X, Y, Z))) # define H5_ATTR_UNUSED __attribute__((unused)) diff --git a/tools/test/perform/chunk.c b/tools/test/perform/chunk.c index 66450b875bb..4db2086fa7a 100644 --- a/tools/test/perform/chunk.c +++ b/tools/test/perform/chunk.c @@ -24,8 +24,7 @@ #include #include -/* Solaris Studio defines attribute, but for the attributes we need */ -#if !defined(H5_HAVE_ATTRIBUTE) || defined __cplusplus || defined(__SUNPRO_C) +#if !defined(H5_HAVE_ATTRIBUTE) || defined __cplusplus #undef __attribute__ #define __attribute__(X) /*void*/ #define H5_ATTR_UNUSED /*void*/ diff --git a/tools/test/perform/overhead.c b/tools/test/perform/overhead.c index e301bbfb737..4dd8da9293e 100644 --- a/tools/test/perform/overhead.c +++ b/tools/test/perform/overhead.c @@ -30,8 +30,7 @@ #include #endif -/* Solaris Studio defines attribute, but for the attributes we need */ -#if !defined(H5_HAVE_ATTRIBUTE) || defined __cplusplus || defined(__SUNPRO_C) +#if !defined(H5_HAVE_ATTRIBUTE) || defined __cplusplus #undef __attribute__ #define __attribute__(X) /*void*/ #define H5_ATTR_UNUSED /*void*/ From 680cdd08bbe21340930f56a7e85cb6f25555c750 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Sun, 20 Oct 2024 12:48:46 -0700 Subject: [PATCH 024/179] Check in generated files in src (#4981) These files are infrequently updated and generating them adds an annoying dependency on Perl. We're checking them in and will probably add a GitHub action to check if anything is stale when creating a PR. Adds: * H5Edefin.h * H5Einit.h * H5Emajdef.h * H5Emindef.h * H5Epubgen.h * H5Eterm.h * H5overflow.h * H5version.h --- .gitignore | 8 - release_docs/RELEASE.txt | 15 + src/H5Edefin.h | 255 ++++ src/H5Einit.h | 814 +++++++++++ src/H5Emajdef.h | 66 + src/H5Emindef.h | 212 +++ src/H5Epubgen.h | 442 ++++++ src/H5Eterm.h | 259 ++++ src/H5overflow.h | 2953 ++++++++++++++++++++++++++++++++++++++ src/H5version.h | 1342 +++++++++++++++++ 10 files changed, 6358 insertions(+), 8 deletions(-) create mode 100644 src/H5Edefin.h create mode 100644 src/H5Einit.h create mode 100644 src/H5Emajdef.h create mode 100644 src/H5Emindef.h create mode 100644 src/H5Epubgen.h create mode 100644 src/H5Eterm.h create mode 100644 src/H5overflow.h create mode 100644 src/H5version.h diff --git a/.gitignore b/.gitignore index d6b8b714dcb..3acf4fd1e36 100644 --- a/.gitignore +++ b/.gitignore @@ -32,15 +32,7 @@ m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 m4/lt~obsolete.m4 -src/H5Edefin.h -src/H5Einit.h -src/H5Emajdef.h -src/H5Emindef.h -src/H5Epubgen.h -src/H5Eterm.h src/H5config.h.in -src/H5overflow.h -src/H5version.h /.classpath /CMakeUserPresets.json diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 4bd31245750..066d5a6ec2c 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -47,6 +47,21 @@ New Features Configuration: ------------- + - Generated files in src are now checked into version control + + These files are infrequently updated and generating them adds a + dependency on Perl. The listed files are now checked in and do + not need to be recreated when checking out development branches. + + * H5Edefin.h + * H5Einit.h + * H5Emajdef.h + * H5Emindef.h + * H5Epubgen.h + * H5Eterm.h + * H5overflow.h + * H5version.h + - Dropped some old Solaris Studio work-arounds Solaris Studio no longer seems to be maintained and the last version diff --git a/src/H5Edefin.h b/src/H5Edefin.h new file mode 100644 index 00000000000..edefe9b4def --- /dev/null +++ b/src/H5Edefin.h @@ -0,0 +1,255 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the LICENSE file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* Generated automatically by bin/make_err -- do not edit */ +/* Add new errors to H5err.txt file */ + +#ifndef H5Edefin_H +#define H5Edefin_H + +/* Major error IDs */ +hid_t H5E_ARGS_g = H5I_INVALID_HID; /* Invalid arguments to routine */ +hid_t H5E_ATTR_g = H5I_INVALID_HID; /* Attribute */ +hid_t H5E_BTREE_g = H5I_INVALID_HID; /* B-Tree node */ +hid_t H5E_CACHE_g = H5I_INVALID_HID; /* Object cache */ +hid_t H5E_CONTEXT_g = H5I_INVALID_HID; /* API Context */ +hid_t H5E_DATASET_g = H5I_INVALID_HID; /* Dataset */ +hid_t H5E_DATASPACE_g = H5I_INVALID_HID; /* Dataspace */ +hid_t H5E_DATATYPE_g = H5I_INVALID_HID; /* Datatype */ +hid_t H5E_EARRAY_g = H5I_INVALID_HID; /* Extensible Array */ +hid_t H5E_EFL_g = H5I_INVALID_HID; /* External file list */ +hid_t H5E_ERROR_g = H5I_INVALID_HID; /* Error API */ +hid_t H5E_EVENTSET_g = H5I_INVALID_HID; /* Event Set */ +hid_t H5E_FARRAY_g = H5I_INVALID_HID; /* Fixed Array */ +hid_t H5E_FILE_g = H5I_INVALID_HID; /* File accessibility */ +hid_t H5E_FSPACE_g = H5I_INVALID_HID; /* Free Space Manager */ +hid_t H5E_FUNC_g = H5I_INVALID_HID; /* Function entry/exit */ +hid_t H5E_HEAP_g = H5I_INVALID_HID; /* Heap */ +hid_t H5E_ID_g = H5I_INVALID_HID; /* Object ID */ +hid_t H5E_INTERNAL_g = H5I_INVALID_HID; /* Internal error (too specific to document in detail) */ +hid_t H5E_IO_g = H5I_INVALID_HID; /* Low-level I/O */ +hid_t H5E_LIB_g = H5I_INVALID_HID; /* General library infrastructure */ +hid_t H5E_LINK_g = H5I_INVALID_HID; /* Links */ +hid_t H5E_MAP_g = H5I_INVALID_HID; /* Map */ +hid_t H5E_NONE_MAJOR_g = H5I_INVALID_HID; /* No error */ +hid_t H5E_OHDR_g = H5I_INVALID_HID; /* Object header */ +hid_t H5E_PAGEBUF_g = H5I_INVALID_HID; /* Page Buffering */ +hid_t H5E_PLINE_g = H5I_INVALID_HID; /* Data filters */ +hid_t H5E_PLIST_g = H5I_INVALID_HID; /* Property lists */ +hid_t H5E_PLUGIN_g = H5I_INVALID_HID; /* Plugin for dynamically loaded library */ +hid_t H5E_REFERENCE_g = H5I_INVALID_HID; /* References */ +hid_t H5E_RESOURCE_g = H5I_INVALID_HID; /* Resource unavailable */ +hid_t H5E_RS_g = H5I_INVALID_HID; /* Reference Counted Strings */ +hid_t H5E_SLIST_g = H5I_INVALID_HID; /* Skip Lists */ +hid_t H5E_SOHM_g = H5I_INVALID_HID; /* Shared Object Header Messages */ +hid_t H5E_STORAGE_g = H5I_INVALID_HID; /* Data storage */ +hid_t H5E_SYM_g = H5I_INVALID_HID; /* Symbol table */ +hid_t H5E_THREADSAFE_g = H5I_INVALID_HID; /* Threadsafety */ +hid_t H5E_TST_g = H5I_INVALID_HID; /* Ternary Search Trees */ +hid_t H5E_VFL_g = H5I_INVALID_HID; /* Virtual File Layer */ +hid_t H5E_VOL_g = H5I_INVALID_HID; /* Virtual Object Layer */ + +/* Number of major error messages */ +#define H5E_NUM_MAJ_ERRORS 40 + +/* Minor error IDs */ + +/* ARGS: Argument errors */ +hid_t H5E_BADRANGE_g = H5I_INVALID_HID; /* Out of range */ +hid_t H5E_BADTYPE_g = H5I_INVALID_HID; /* Inappropriate type */ +hid_t H5E_BADVALUE_g = H5I_INVALID_HID; /* Bad value */ +hid_t H5E_UNINITIALIZED_g = H5I_INVALID_HID; /* Information is uinitialized */ +hid_t H5E_UNSUPPORTED_g = H5I_INVALID_HID; /* Feature is unsupported */ + +/* ASYNC: Asynchronous operation errors */ +hid_t H5E_CANTCANCEL_g = H5I_INVALID_HID; /* Can't cancel operation */ +hid_t H5E_CANTWAIT_g = H5I_INVALID_HID; /* Can't wait on operation */ + +/* BTREE: B-tree related errors */ +hid_t H5E_CANTDECODE_g = H5I_INVALID_HID; /* Unable to decode value */ +hid_t H5E_CANTENCODE_g = H5I_INVALID_HID; /* Unable to encode value */ +hid_t H5E_CANTFIND_g = H5I_INVALID_HID; /* Unable to check for record */ +hid_t H5E_CANTINSERT_g = H5I_INVALID_HID; /* Unable to insert object */ +hid_t H5E_CANTLIST_g = H5I_INVALID_HID; /* Unable to list node */ +hid_t H5E_CANTMODIFY_g = H5I_INVALID_HID; /* Unable to modify record */ +hid_t H5E_CANTREDISTRIBUTE_g = H5I_INVALID_HID; /* Unable to redistribute records */ +hid_t H5E_CANTREMOVE_g = H5I_INVALID_HID; /* Unable to remove object */ +hid_t H5E_CANTSPLIT_g = H5I_INVALID_HID; /* Unable to split node */ +hid_t H5E_CANTSWAP_g = H5I_INVALID_HID; /* Unable to swap records */ +hid_t H5E_EXISTS_g = H5I_INVALID_HID; /* Object already exists */ +hid_t H5E_NOTFOUND_g = H5I_INVALID_HID; /* Object not found */ + +/* CACHE: Cache related errors */ +hid_t H5E_CANTCLEAN_g = H5I_INVALID_HID; /* Unable to mark metadata as clean */ +hid_t H5E_CANTCORK_g = H5I_INVALID_HID; /* Unable to cork an object */ +hid_t H5E_CANTDEPEND_g = H5I_INVALID_HID; /* Unable to create a flush dependency */ +hid_t H5E_CANTDIRTY_g = H5I_INVALID_HID; /* Unable to mark metadata as dirty */ +hid_t H5E_CANTEXPUNGE_g = H5I_INVALID_HID; /* Unable to expunge a metadata cache entry */ +hid_t H5E_CANTFLUSH_g = H5I_INVALID_HID; /* Unable to flush data from cache */ +hid_t H5E_CANTINS_g = H5I_INVALID_HID; /* Unable to insert metadata into cache */ +hid_t H5E_CANTLOAD_g = H5I_INVALID_HID; /* Unable to load metadata into cache */ +hid_t H5E_CANTMARKCLEAN_g = H5I_INVALID_HID; /* Unable to mark a pinned entry as clean */ +hid_t H5E_CANTMARKDIRTY_g = H5I_INVALID_HID; /* Unable to mark a pinned entry as dirty */ +hid_t H5E_CANTMARKSERIALIZED_g = H5I_INVALID_HID; /* Unable to mark an entry as serialized */ +hid_t H5E_CANTMARKUNSERIALIZED_g = H5I_INVALID_HID; /* Unable to mark an entry as unserialized */ +hid_t H5E_CANTNOTIFY_g = H5I_INVALID_HID; /* Unable to notify object about action */ +hid_t H5E_CANTPIN_g = H5I_INVALID_HID; /* Unable to pin cache entry */ +hid_t H5E_CANTPROTECT_g = H5I_INVALID_HID; /* Unable to protect metadata */ +hid_t H5E_CANTRESIZE_g = H5I_INVALID_HID; /* Unable to resize a metadata cache entry */ +hid_t H5E_CANTSERIALIZE_g = H5I_INVALID_HID; /* Unable to serialize data from cache */ +hid_t H5E_CANTTAG_g = H5I_INVALID_HID; /* Unable to tag metadata in the cache */ +hid_t H5E_CANTUNCORK_g = H5I_INVALID_HID; /* Unable to uncork an object */ +hid_t H5E_CANTUNDEPEND_g = H5I_INVALID_HID; /* Unable to destroy a flush dependency */ +hid_t H5E_CANTUNPIN_g = H5I_INVALID_HID; /* Unable to un-pin cache entry */ +hid_t H5E_CANTUNPROTECT_g = H5I_INVALID_HID; /* Unable to unprotect metadata */ +hid_t H5E_CANTUNSERIALIZE_g = H5I_INVALID_HID; /* Unable to mark metadata as unserialized */ +hid_t H5E_LOGGING_g = H5I_INVALID_HID; /* Failure in the cache logging framework */ +hid_t H5E_NOTCACHED_g = H5I_INVALID_HID; /* Metadata not currently cached */ +hid_t H5E_PROTECT_g = H5I_INVALID_HID; /* Protected metadata error */ +hid_t H5E_SYSTEM_g = H5I_INVALID_HID; /* Internal error detected */ + +/* DSPACE: Dataspace errors */ +hid_t H5E_BADSELECT_g = H5I_INVALID_HID; /* Invalid selection */ +hid_t H5E_CANTAPPEND_g = H5I_INVALID_HID; /* Can't append object */ +hid_t H5E_CANTCLIP_g = H5I_INVALID_HID; /* Can't clip hyperslab region */ +hid_t H5E_CANTCOMPARE_g = H5I_INVALID_HID; /* Can't compare objects */ +hid_t H5E_CANTCOUNT_g = H5I_INVALID_HID; /* Can't count elements */ +hid_t H5E_CANTNEXT_g = H5I_INVALID_HID; /* Can't move to next iterator location */ +hid_t H5E_CANTSELECT_g = H5I_INVALID_HID; /* Can't select hyperslab */ +hid_t H5E_INCONSISTENTSTATE_g = H5I_INVALID_HID; /* Internal states are inconsistent */ + +/* FILE: Generic low-level file I/O errors */ +hid_t H5E_CLOSEERROR_g = H5I_INVALID_HID; /* Close failed */ +hid_t H5E_FCNTL_g = H5I_INVALID_HID; /* File control (fcntl) failed */ +hid_t H5E_OVERFLOW_g = H5I_INVALID_HID; /* Address overflowed */ +hid_t H5E_READERROR_g = H5I_INVALID_HID; /* Read failed */ +hid_t H5E_SEEKERROR_g = H5I_INVALID_HID; /* Seek failed */ +hid_t H5E_WRITEERROR_g = H5I_INVALID_HID; /* Write failed */ + +/* FILEACC: File accessibility errors */ +hid_t H5E_BADFILE_g = H5I_INVALID_HID; /* Bad file ID accessed */ +hid_t H5E_CANTCLOSEFILE_g = H5I_INVALID_HID; /* Unable to close file */ +hid_t H5E_CANTCREATE_g = H5I_INVALID_HID; /* Unable to create file */ +hid_t H5E_CANTDELETEFILE_g = H5I_INVALID_HID; /* Unable to delete file */ +hid_t H5E_CANTLOCKFILE_g = H5I_INVALID_HID; /* Unable to lock file */ +hid_t H5E_CANTOPENFILE_g = H5I_INVALID_HID; /* Unable to open file */ +hid_t H5E_CANTUNLOCKFILE_g = H5I_INVALID_HID; /* Unable to unlock file */ +hid_t H5E_FILEEXISTS_g = H5I_INVALID_HID; /* File already exists */ +hid_t H5E_FILEOPEN_g = H5I_INVALID_HID; /* File already open */ +hid_t H5E_MOUNT_g = H5I_INVALID_HID; /* File mount error */ +hid_t H5E_NOTHDF5_g = H5I_INVALID_HID; /* Not an HDF5 file */ +hid_t H5E_TRUNCATED_g = H5I_INVALID_HID; /* File has been truncated */ +hid_t H5E_UNMOUNT_g = H5I_INVALID_HID; /* File unmount error */ + +/* FSPACE: Free space errors */ +hid_t H5E_CANTMERGE_g = H5I_INVALID_HID; /* Can't merge objects */ +hid_t H5E_CANTREVIVE_g = H5I_INVALID_HID; /* Can't revive object */ +hid_t H5E_CANTSHRINK_g = H5I_INVALID_HID; /* Can't shrink container */ + +/* FUNC: Function entry/exit interface errors */ +hid_t H5E_ALREADYINIT_g = H5I_INVALID_HID; /* Object already initialized */ +hid_t H5E_CANTINIT_g = H5I_INVALID_HID; /* Unable to initialize object */ +hid_t H5E_CANTRELEASE_g = H5I_INVALID_HID; /* Unable to release object */ + +/* GROUP: Group related errors */ +hid_t H5E_CANTCLOSEOBJ_g = H5I_INVALID_HID; /* Can't close object */ +hid_t H5E_CANTOPENOBJ_g = H5I_INVALID_HID; /* Can't open object */ +hid_t H5E_COMPLEN_g = H5I_INVALID_HID; /* Name component is too long */ +hid_t H5E_PATH_g = H5I_INVALID_HID; /* Problem with path to object */ + +/* HEAP: Heap errors */ +hid_t H5E_CANTATTACH_g = H5I_INVALID_HID; /* Can't attach object */ +hid_t H5E_CANTCOMPUTE_g = H5I_INVALID_HID; /* Can't compute value */ +hid_t H5E_CANTEXTEND_g = H5I_INVALID_HID; /* Can't extend heap's space */ +hid_t H5E_CANTOPERATE_g = H5I_INVALID_HID; /* Can't operate on object */ +hid_t H5E_CANTRESTORE_g = H5I_INVALID_HID; /* Can't restore condition */ +hid_t H5E_CANTUPDATE_g = H5I_INVALID_HID; /* Can't update object */ + +/* ID: Object ID related errors */ +hid_t H5E_BADGROUP_g = H5I_INVALID_HID; /* Unable to find ID group information */ +hid_t H5E_BADID_g = H5I_INVALID_HID; /* Unable to find ID information (already closed?) */ +hid_t H5E_CANTDEC_g = H5I_INVALID_HID; /* Unable to decrement reference count */ +hid_t H5E_CANTINC_g = H5I_INVALID_HID; /* Unable to increment reference count */ +hid_t H5E_CANTREGISTER_g = H5I_INVALID_HID; /* Unable to register new ID */ +hid_t H5E_NOIDS_g = H5I_INVALID_HID; /* Out of IDs for group */ + +/* LINK: Link related errors */ +hid_t H5E_CANTMOVE_g = H5I_INVALID_HID; /* Can't move object */ +hid_t H5E_CANTSORT_g = H5I_INVALID_HID; /* Can't sort objects */ +hid_t H5E_NLINKS_g = H5I_INVALID_HID; /* Too many soft links in path */ +hid_t H5E_NOTREGISTERED_g = H5I_INVALID_HID; /* Link class not registered */ +hid_t H5E_TRAVERSE_g = H5I_INVALID_HID; /* Link traversal failure */ + +/* MAP: Map related errors */ +hid_t H5E_CANTPUT_g = H5I_INVALID_HID; /* Can't put value */ + +/* MPI: Parallel MPI errors */ +hid_t H5E_CANTGATHER_g = H5I_INVALID_HID; /* Can't gather data */ +hid_t H5E_CANTRECV_g = H5I_INVALID_HID; /* Can't receive data */ +hid_t H5E_MPI_g = H5I_INVALID_HID; /* Some MPI function failed */ +hid_t H5E_MPIERRSTR_g = H5I_INVALID_HID; /* MPI Error String */ +hid_t H5E_NO_INDEPENDENT_g = H5I_INVALID_HID; /* Can't perform independent IO */ + +/* NONE: No error */ +hid_t H5E_NONE_MINOR_g = H5I_INVALID_HID; /* No error */ + +/* OHDR: Object header related errors */ +hid_t H5E_ALIGNMENT_g = H5I_INVALID_HID; /* Alignment error */ +hid_t H5E_BADITER_g = H5I_INVALID_HID; /* Iteration failed */ +hid_t H5E_BADMESG_g = H5I_INVALID_HID; /* Unrecognized message */ +hid_t H5E_CANTDELETE_g = H5I_INVALID_HID; /* Can't delete message */ +hid_t H5E_CANTPACK_g = H5I_INVALID_HID; /* Can't pack messages */ +hid_t H5E_CANTRENAME_g = H5I_INVALID_HID; /* Unable to rename object */ +hid_t H5E_CANTRESET_g = H5I_INVALID_HID; /* Can't reset object */ +hid_t H5E_LINKCOUNT_g = H5I_INVALID_HID; /* Bad object header link count */ +hid_t H5E_VERSION_g = H5I_INVALID_HID; /* Wrong version number */ + +/* PIPELINE: I/O pipeline errors */ +hid_t H5E_CALLBACK_g = H5I_INVALID_HID; /* Callback failed */ +hid_t H5E_CANAPPLY_g = H5I_INVALID_HID; /* Error from filter 'can apply' callback */ +hid_t H5E_CANTFILTER_g = H5I_INVALID_HID; /* Filter operation failed */ +hid_t H5E_NOENCODER_g = H5I_INVALID_HID; /* Filter present but encoding disabled */ +hid_t H5E_NOFILTER_g = H5I_INVALID_HID; /* Requested filter is not available */ +hid_t H5E_SETLOCAL_g = H5I_INVALID_HID; /* Error from filter 'set local' callback */ + +/* PLIST: Property list errors */ +hid_t H5E_CANTGET_g = H5I_INVALID_HID; /* Can't get value */ +hid_t H5E_CANTSET_g = H5I_INVALID_HID; /* Can't set value */ +hid_t H5E_DUPCLASS_g = H5I_INVALID_HID; /* Duplicate class name in parent class */ +hid_t H5E_SETDISALLOWED_g = H5I_INVALID_HID; /* Disallowed operation */ + +/* PLUGIN: Plugin errors */ +hid_t H5E_OPENERROR_g = H5I_INVALID_HID; /* Can't open directory or file */ + +/* RESOURCE: Resource errors */ +hid_t H5E_ALREADYEXISTS_g = H5I_INVALID_HID; /* Object already exists */ +hid_t H5E_CANTALLOC_g = H5I_INVALID_HID; /* Can't allocate space */ +hid_t H5E_CANTCOPY_g = H5I_INVALID_HID; /* Unable to copy object */ +hid_t H5E_CANTFREE_g = H5I_INVALID_HID; /* Unable to free object */ +hid_t H5E_CANTGC_g = H5I_INVALID_HID; /* Unable to garbage collect */ +hid_t H5E_CANTGETSIZE_g = H5I_INVALID_HID; /* Unable to compute size */ +hid_t H5E_CANTLOCK_g = H5I_INVALID_HID; /* Unable to lock object */ +hid_t H5E_CANTUNLOCK_g = H5I_INVALID_HID; /* Unable to unlock object */ +hid_t H5E_NOSPACE_g = H5I_INVALID_HID; /* No space available for allocation */ +hid_t H5E_OBJOPEN_g = H5I_INVALID_HID; /* Object is already open */ + +/* SYSTEM: System level errors */ +hid_t H5E_SYSERRSTR_g = H5I_INVALID_HID; /* System error message */ + +/* TYPECONV: Datatype conversion errors */ +hid_t H5E_BADSIZE_g = H5I_INVALID_HID; /* Bad size for object */ +hid_t H5E_CANTCONVERT_g = H5I_INVALID_HID; /* Can't convert datatypes */ + +/* Number of minor error messages */ +#define H5E_NUM_MIN_ERRORS 140 + +#endif /* H5Edefin_H */ diff --git a/src/H5Einit.h b/src/H5Einit.h new file mode 100644 index 00000000000..95c1ddec733 --- /dev/null +++ b/src/H5Einit.h @@ -0,0 +1,814 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the LICENSE file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* Generated automatically by bin/make_err -- do not edit */ +/* Add new errors to H5err.txt file */ + +#ifndef H5Einit_H +#define H5Einit_H + +/*********************/ +/* Major error codes */ +/*********************/ + +/* H5E_ARGS */ +assert(H5I_INVALID_HID == H5E_ARGS_g); +if((H5E_ARGS_g = H5I_register(H5I_ERROR_MSG, &H5E_ARGS_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Remember first major error code ID */ +assert(H5E_first_maj_id_g==H5I_INVALID_HID); +H5E_first_maj_id_g = H5E_ARGS_g; + +/* H5E_ATTR */ +assert(H5I_INVALID_HID == H5E_ATTR_g); +if((H5E_ATTR_g = H5I_register(H5I_ERROR_MSG, &H5E_ATTR_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_BTREE */ +assert(H5I_INVALID_HID == H5E_BTREE_g); +if((H5E_BTREE_g = H5I_register(H5I_ERROR_MSG, &H5E_BTREE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CACHE */ +assert(H5I_INVALID_HID == H5E_CACHE_g); +if((H5E_CACHE_g = H5I_register(H5I_ERROR_MSG, &H5E_CACHE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CONTEXT */ +assert(H5I_INVALID_HID == H5E_CONTEXT_g); +if((H5E_CONTEXT_g = H5I_register(H5I_ERROR_MSG, &H5E_CONTEXT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_DATASET */ +assert(H5I_INVALID_HID == H5E_DATASET_g); +if((H5E_DATASET_g = H5I_register(H5I_ERROR_MSG, &H5E_DATASET_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_DATASPACE */ +assert(H5I_INVALID_HID == H5E_DATASPACE_g); +if((H5E_DATASPACE_g = H5I_register(H5I_ERROR_MSG, &H5E_DATASPACE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_DATATYPE */ +assert(H5I_INVALID_HID == H5E_DATATYPE_g); +if((H5E_DATATYPE_g = H5I_register(H5I_ERROR_MSG, &H5E_DATATYPE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_EARRAY */ +assert(H5I_INVALID_HID == H5E_EARRAY_g); +if((H5E_EARRAY_g = H5I_register(H5I_ERROR_MSG, &H5E_EARRAY_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_EFL */ +assert(H5I_INVALID_HID == H5E_EFL_g); +if((H5E_EFL_g = H5I_register(H5I_ERROR_MSG, &H5E_EFL_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_ERROR */ +assert(H5I_INVALID_HID == H5E_ERROR_g); +if((H5E_ERROR_g = H5I_register(H5I_ERROR_MSG, &H5E_ERROR_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_EVENTSET */ +assert(H5I_INVALID_HID == H5E_EVENTSET_g); +if((H5E_EVENTSET_g = H5I_register(H5I_ERROR_MSG, &H5E_EVENTSET_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_FARRAY */ +assert(H5I_INVALID_HID == H5E_FARRAY_g); +if((H5E_FARRAY_g = H5I_register(H5I_ERROR_MSG, &H5E_FARRAY_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_FILE */ +assert(H5I_INVALID_HID == H5E_FILE_g); +if((H5E_FILE_g = H5I_register(H5I_ERROR_MSG, &H5E_FILE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_FSPACE */ +assert(H5I_INVALID_HID == H5E_FSPACE_g); +if((H5E_FSPACE_g = H5I_register(H5I_ERROR_MSG, &H5E_FSPACE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_FUNC */ +assert(H5I_INVALID_HID == H5E_FUNC_g); +if((H5E_FUNC_g = H5I_register(H5I_ERROR_MSG, &H5E_FUNC_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_HEAP */ +assert(H5I_INVALID_HID == H5E_HEAP_g); +if((H5E_HEAP_g = H5I_register(H5I_ERROR_MSG, &H5E_HEAP_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_ID */ +assert(H5I_INVALID_HID == H5E_ID_g); +if((H5E_ID_g = H5I_register(H5I_ERROR_MSG, &H5E_ID_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_INTERNAL */ +assert(H5I_INVALID_HID == H5E_INTERNAL_g); +if((H5E_INTERNAL_g = H5I_register(H5I_ERROR_MSG, &H5E_INTERNAL_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_IO */ +assert(H5I_INVALID_HID == H5E_IO_g); +if((H5E_IO_g = H5I_register(H5I_ERROR_MSG, &H5E_IO_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_LIB */ +assert(H5I_INVALID_HID == H5E_LIB_g); +if((H5E_LIB_g = H5I_register(H5I_ERROR_MSG, &H5E_LIB_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_LINK */ +assert(H5I_INVALID_HID == H5E_LINK_g); +if((H5E_LINK_g = H5I_register(H5I_ERROR_MSG, &H5E_LINK_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_MAP */ +assert(H5I_INVALID_HID == H5E_MAP_g); +if((H5E_MAP_g = H5I_register(H5I_ERROR_MSG, &H5E_MAP_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_NONE_MAJOR */ +assert(H5I_INVALID_HID == H5E_NONE_MAJOR_g); +if((H5E_NONE_MAJOR_g = H5I_register(H5I_ERROR_MSG, &H5E_NONE_MAJOR_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_OHDR */ +assert(H5I_INVALID_HID == H5E_OHDR_g); +if((H5E_OHDR_g = H5I_register(H5I_ERROR_MSG, &H5E_OHDR_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_PAGEBUF */ +assert(H5I_INVALID_HID == H5E_PAGEBUF_g); +if((H5E_PAGEBUF_g = H5I_register(H5I_ERROR_MSG, &H5E_PAGEBUF_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_PLINE */ +assert(H5I_INVALID_HID == H5E_PLINE_g); +if((H5E_PLINE_g = H5I_register(H5I_ERROR_MSG, &H5E_PLINE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_PLIST */ +assert(H5I_INVALID_HID == H5E_PLIST_g); +if((H5E_PLIST_g = H5I_register(H5I_ERROR_MSG, &H5E_PLIST_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_PLUGIN */ +assert(H5I_INVALID_HID == H5E_PLUGIN_g); +if((H5E_PLUGIN_g = H5I_register(H5I_ERROR_MSG, &H5E_PLUGIN_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_REFERENCE */ +assert(H5I_INVALID_HID == H5E_REFERENCE_g); +if((H5E_REFERENCE_g = H5I_register(H5I_ERROR_MSG, &H5E_REFERENCE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_RESOURCE */ +assert(H5I_INVALID_HID == H5E_RESOURCE_g); +if((H5E_RESOURCE_g = H5I_register(H5I_ERROR_MSG, &H5E_RESOURCE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_RS */ +assert(H5I_INVALID_HID == H5E_RS_g); +if((H5E_RS_g = H5I_register(H5I_ERROR_MSG, &H5E_RS_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_SLIST */ +assert(H5I_INVALID_HID == H5E_SLIST_g); +if((H5E_SLIST_g = H5I_register(H5I_ERROR_MSG, &H5E_SLIST_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_SOHM */ +assert(H5I_INVALID_HID == H5E_SOHM_g); +if((H5E_SOHM_g = H5I_register(H5I_ERROR_MSG, &H5E_SOHM_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_STORAGE */ +assert(H5I_INVALID_HID == H5E_STORAGE_g); +if((H5E_STORAGE_g = H5I_register(H5I_ERROR_MSG, &H5E_STORAGE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_SYM */ +assert(H5I_INVALID_HID == H5E_SYM_g); +if((H5E_SYM_g = H5I_register(H5I_ERROR_MSG, &H5E_SYM_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_THREADSAFE */ +assert(H5I_INVALID_HID == H5E_THREADSAFE_g); +if((H5E_THREADSAFE_g = H5I_register(H5I_ERROR_MSG, &H5E_THREADSAFE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_TST */ +assert(H5I_INVALID_HID == H5E_TST_g); +if((H5E_TST_g = H5I_register(H5I_ERROR_MSG, &H5E_TST_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_VFL */ +assert(H5I_INVALID_HID == H5E_VFL_g); +if((H5E_VFL_g = H5I_register(H5I_ERROR_MSG, &H5E_VFL_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_VOL */ +assert(H5I_INVALID_HID == H5E_VOL_g); +if((H5E_VOL_g = H5I_register(H5I_ERROR_MSG, &H5E_VOL_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Remember last major error code ID */ +assert(H5E_last_maj_id_g==H5I_INVALID_HID); +H5E_last_maj_id_g = H5E_VOL_g; + + +/*********************/ +/* Minor error codes */ +/*********************/ + + +/* Argument errors */ +/* H5E_BADRANGE */ +assert(H5I_INVALID_HID == H5E_BADRANGE_g); +if((H5E_BADRANGE_g = H5I_register(H5I_ERROR_MSG, &H5E_BADRANGE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Remember first minor error code ID */ +assert(H5E_first_min_id_g==H5I_INVALID_HID); +H5E_first_min_id_g = H5E_BADRANGE_g; + +/* H5E_BADTYPE */ +assert(H5I_INVALID_HID == H5E_BADTYPE_g); +if((H5E_BADTYPE_g = H5I_register(H5I_ERROR_MSG, &H5E_BADTYPE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_BADVALUE */ +assert(H5I_INVALID_HID == H5E_BADVALUE_g); +if((H5E_BADVALUE_g = H5I_register(H5I_ERROR_MSG, &H5E_BADVALUE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_UNINITIALIZED */ +assert(H5I_INVALID_HID == H5E_UNINITIALIZED_g); +if((H5E_UNINITIALIZED_g = H5I_register(H5I_ERROR_MSG, &H5E_UNINITIALIZED_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_UNSUPPORTED */ +assert(H5I_INVALID_HID == H5E_UNSUPPORTED_g); +if((H5E_UNSUPPORTED_g = H5I_register(H5I_ERROR_MSG, &H5E_UNSUPPORTED_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Asynchronous operation errors */ +/* H5E_CANTCANCEL */ +assert(H5I_INVALID_HID == H5E_CANTCANCEL_g); +if((H5E_CANTCANCEL_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTCANCEL_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTWAIT */ +assert(H5I_INVALID_HID == H5E_CANTWAIT_g); +if((H5E_CANTWAIT_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTWAIT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* B-tree related errors */ +/* H5E_CANTDECODE */ +assert(H5I_INVALID_HID == H5E_CANTDECODE_g); +if((H5E_CANTDECODE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTDECODE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTENCODE */ +assert(H5I_INVALID_HID == H5E_CANTENCODE_g); +if((H5E_CANTENCODE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTENCODE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTFIND */ +assert(H5I_INVALID_HID == H5E_CANTFIND_g); +if((H5E_CANTFIND_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTFIND_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTINSERT */ +assert(H5I_INVALID_HID == H5E_CANTINSERT_g); +if((H5E_CANTINSERT_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTINSERT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTLIST */ +assert(H5I_INVALID_HID == H5E_CANTLIST_g); +if((H5E_CANTLIST_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTLIST_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTMODIFY */ +assert(H5I_INVALID_HID == H5E_CANTMODIFY_g); +if((H5E_CANTMODIFY_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTMODIFY_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTREDISTRIBUTE */ +assert(H5I_INVALID_HID == H5E_CANTREDISTRIBUTE_g); +if((H5E_CANTREDISTRIBUTE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTREDISTRIBUTE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTREMOVE */ +assert(H5I_INVALID_HID == H5E_CANTREMOVE_g); +if((H5E_CANTREMOVE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTREMOVE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTSPLIT */ +assert(H5I_INVALID_HID == H5E_CANTSPLIT_g); +if((H5E_CANTSPLIT_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTSPLIT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTSWAP */ +assert(H5I_INVALID_HID == H5E_CANTSWAP_g); +if((H5E_CANTSWAP_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTSWAP_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_EXISTS */ +assert(H5I_INVALID_HID == H5E_EXISTS_g); +if((H5E_EXISTS_g = H5I_register(H5I_ERROR_MSG, &H5E_EXISTS_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_NOTFOUND */ +assert(H5I_INVALID_HID == H5E_NOTFOUND_g); +if((H5E_NOTFOUND_g = H5I_register(H5I_ERROR_MSG, &H5E_NOTFOUND_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Cache related errors */ +/* H5E_CANTCLEAN */ +assert(H5I_INVALID_HID == H5E_CANTCLEAN_g); +if((H5E_CANTCLEAN_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTCLEAN_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTCORK */ +assert(H5I_INVALID_HID == H5E_CANTCORK_g); +if((H5E_CANTCORK_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTCORK_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTDEPEND */ +assert(H5I_INVALID_HID == H5E_CANTDEPEND_g); +if((H5E_CANTDEPEND_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTDEPEND_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTDIRTY */ +assert(H5I_INVALID_HID == H5E_CANTDIRTY_g); +if((H5E_CANTDIRTY_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTDIRTY_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTEXPUNGE */ +assert(H5I_INVALID_HID == H5E_CANTEXPUNGE_g); +if((H5E_CANTEXPUNGE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTEXPUNGE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTFLUSH */ +assert(H5I_INVALID_HID == H5E_CANTFLUSH_g); +if((H5E_CANTFLUSH_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTFLUSH_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTINS */ +assert(H5I_INVALID_HID == H5E_CANTINS_g); +if((H5E_CANTINS_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTINS_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTLOAD */ +assert(H5I_INVALID_HID == H5E_CANTLOAD_g); +if((H5E_CANTLOAD_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTLOAD_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTMARKCLEAN */ +assert(H5I_INVALID_HID == H5E_CANTMARKCLEAN_g); +if((H5E_CANTMARKCLEAN_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTMARKCLEAN_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTMARKDIRTY */ +assert(H5I_INVALID_HID == H5E_CANTMARKDIRTY_g); +if((H5E_CANTMARKDIRTY_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTMARKDIRTY_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTMARKSERIALIZED */ +assert(H5I_INVALID_HID == H5E_CANTMARKSERIALIZED_g); +if((H5E_CANTMARKSERIALIZED_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTMARKSERIALIZED_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTMARKUNSERIALIZED */ +assert(H5I_INVALID_HID == H5E_CANTMARKUNSERIALIZED_g); +if((H5E_CANTMARKUNSERIALIZED_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTMARKUNSERIALIZED_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTNOTIFY */ +assert(H5I_INVALID_HID == H5E_CANTNOTIFY_g); +if((H5E_CANTNOTIFY_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTNOTIFY_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTPIN */ +assert(H5I_INVALID_HID == H5E_CANTPIN_g); +if((H5E_CANTPIN_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTPIN_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTPROTECT */ +assert(H5I_INVALID_HID == H5E_CANTPROTECT_g); +if((H5E_CANTPROTECT_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTPROTECT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTRESIZE */ +assert(H5I_INVALID_HID == H5E_CANTRESIZE_g); +if((H5E_CANTRESIZE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTRESIZE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTSERIALIZE */ +assert(H5I_INVALID_HID == H5E_CANTSERIALIZE_g); +if((H5E_CANTSERIALIZE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTSERIALIZE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTTAG */ +assert(H5I_INVALID_HID == H5E_CANTTAG_g); +if((H5E_CANTTAG_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTTAG_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTUNCORK */ +assert(H5I_INVALID_HID == H5E_CANTUNCORK_g); +if((H5E_CANTUNCORK_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTUNCORK_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTUNDEPEND */ +assert(H5I_INVALID_HID == H5E_CANTUNDEPEND_g); +if((H5E_CANTUNDEPEND_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTUNDEPEND_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTUNPIN */ +assert(H5I_INVALID_HID == H5E_CANTUNPIN_g); +if((H5E_CANTUNPIN_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTUNPIN_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTUNPROTECT */ +assert(H5I_INVALID_HID == H5E_CANTUNPROTECT_g); +if((H5E_CANTUNPROTECT_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTUNPROTECT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTUNSERIALIZE */ +assert(H5I_INVALID_HID == H5E_CANTUNSERIALIZE_g); +if((H5E_CANTUNSERIALIZE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTUNSERIALIZE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_LOGGING */ +assert(H5I_INVALID_HID == H5E_LOGGING_g); +if((H5E_LOGGING_g = H5I_register(H5I_ERROR_MSG, &H5E_LOGGING_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_NOTCACHED */ +assert(H5I_INVALID_HID == H5E_NOTCACHED_g); +if((H5E_NOTCACHED_g = H5I_register(H5I_ERROR_MSG, &H5E_NOTCACHED_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_PROTECT */ +assert(H5I_INVALID_HID == H5E_PROTECT_g); +if((H5E_PROTECT_g = H5I_register(H5I_ERROR_MSG, &H5E_PROTECT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_SYSTEM */ +assert(H5I_INVALID_HID == H5E_SYSTEM_g); +if((H5E_SYSTEM_g = H5I_register(H5I_ERROR_MSG, &H5E_SYSTEM_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Dataspace errors */ +/* H5E_BADSELECT */ +assert(H5I_INVALID_HID == H5E_BADSELECT_g); +if((H5E_BADSELECT_g = H5I_register(H5I_ERROR_MSG, &H5E_BADSELECT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTAPPEND */ +assert(H5I_INVALID_HID == H5E_CANTAPPEND_g); +if((H5E_CANTAPPEND_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTAPPEND_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTCLIP */ +assert(H5I_INVALID_HID == H5E_CANTCLIP_g); +if((H5E_CANTCLIP_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTCLIP_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTCOMPARE */ +assert(H5I_INVALID_HID == H5E_CANTCOMPARE_g); +if((H5E_CANTCOMPARE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTCOMPARE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTCOUNT */ +assert(H5I_INVALID_HID == H5E_CANTCOUNT_g); +if((H5E_CANTCOUNT_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTCOUNT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTNEXT */ +assert(H5I_INVALID_HID == H5E_CANTNEXT_g); +if((H5E_CANTNEXT_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTNEXT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTSELECT */ +assert(H5I_INVALID_HID == H5E_CANTSELECT_g); +if((H5E_CANTSELECT_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTSELECT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_INCONSISTENTSTATE */ +assert(H5I_INVALID_HID == H5E_INCONSISTENTSTATE_g); +if((H5E_INCONSISTENTSTATE_g = H5I_register(H5I_ERROR_MSG, &H5E_INCONSISTENTSTATE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Generic low-level file I/O errors */ +/* H5E_CLOSEERROR */ +assert(H5I_INVALID_HID == H5E_CLOSEERROR_g); +if((H5E_CLOSEERROR_g = H5I_register(H5I_ERROR_MSG, &H5E_CLOSEERROR_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_FCNTL */ +assert(H5I_INVALID_HID == H5E_FCNTL_g); +if((H5E_FCNTL_g = H5I_register(H5I_ERROR_MSG, &H5E_FCNTL_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_OVERFLOW */ +assert(H5I_INVALID_HID == H5E_OVERFLOW_g); +if((H5E_OVERFLOW_g = H5I_register(H5I_ERROR_MSG, &H5E_OVERFLOW_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_READERROR */ +assert(H5I_INVALID_HID == H5E_READERROR_g); +if((H5E_READERROR_g = H5I_register(H5I_ERROR_MSG, &H5E_READERROR_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_SEEKERROR */ +assert(H5I_INVALID_HID == H5E_SEEKERROR_g); +if((H5E_SEEKERROR_g = H5I_register(H5I_ERROR_MSG, &H5E_SEEKERROR_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_WRITEERROR */ +assert(H5I_INVALID_HID == H5E_WRITEERROR_g); +if((H5E_WRITEERROR_g = H5I_register(H5I_ERROR_MSG, &H5E_WRITEERROR_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* File accessibility errors */ +/* H5E_BADFILE */ +assert(H5I_INVALID_HID == H5E_BADFILE_g); +if((H5E_BADFILE_g = H5I_register(H5I_ERROR_MSG, &H5E_BADFILE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTCLOSEFILE */ +assert(H5I_INVALID_HID == H5E_CANTCLOSEFILE_g); +if((H5E_CANTCLOSEFILE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTCLOSEFILE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTCREATE */ +assert(H5I_INVALID_HID == H5E_CANTCREATE_g); +if((H5E_CANTCREATE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTCREATE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTDELETEFILE */ +assert(H5I_INVALID_HID == H5E_CANTDELETEFILE_g); +if((H5E_CANTDELETEFILE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTDELETEFILE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTLOCKFILE */ +assert(H5I_INVALID_HID == H5E_CANTLOCKFILE_g); +if((H5E_CANTLOCKFILE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTLOCKFILE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTOPENFILE */ +assert(H5I_INVALID_HID == H5E_CANTOPENFILE_g); +if((H5E_CANTOPENFILE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTOPENFILE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTUNLOCKFILE */ +assert(H5I_INVALID_HID == H5E_CANTUNLOCKFILE_g); +if((H5E_CANTUNLOCKFILE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTUNLOCKFILE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_FILEEXISTS */ +assert(H5I_INVALID_HID == H5E_FILEEXISTS_g); +if((H5E_FILEEXISTS_g = H5I_register(H5I_ERROR_MSG, &H5E_FILEEXISTS_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_FILEOPEN */ +assert(H5I_INVALID_HID == H5E_FILEOPEN_g); +if((H5E_FILEOPEN_g = H5I_register(H5I_ERROR_MSG, &H5E_FILEOPEN_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_MOUNT */ +assert(H5I_INVALID_HID == H5E_MOUNT_g); +if((H5E_MOUNT_g = H5I_register(H5I_ERROR_MSG, &H5E_MOUNT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_NOTHDF5 */ +assert(H5I_INVALID_HID == H5E_NOTHDF5_g); +if((H5E_NOTHDF5_g = H5I_register(H5I_ERROR_MSG, &H5E_NOTHDF5_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_TRUNCATED */ +assert(H5I_INVALID_HID == H5E_TRUNCATED_g); +if((H5E_TRUNCATED_g = H5I_register(H5I_ERROR_MSG, &H5E_TRUNCATED_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_UNMOUNT */ +assert(H5I_INVALID_HID == H5E_UNMOUNT_g); +if((H5E_UNMOUNT_g = H5I_register(H5I_ERROR_MSG, &H5E_UNMOUNT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Free space errors */ +/* H5E_CANTMERGE */ +assert(H5I_INVALID_HID == H5E_CANTMERGE_g); +if((H5E_CANTMERGE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTMERGE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTREVIVE */ +assert(H5I_INVALID_HID == H5E_CANTREVIVE_g); +if((H5E_CANTREVIVE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTREVIVE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTSHRINK */ +assert(H5I_INVALID_HID == H5E_CANTSHRINK_g); +if((H5E_CANTSHRINK_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTSHRINK_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Function entry/exit interface errors */ +/* H5E_ALREADYINIT */ +assert(H5I_INVALID_HID == H5E_ALREADYINIT_g); +if((H5E_ALREADYINIT_g = H5I_register(H5I_ERROR_MSG, &H5E_ALREADYINIT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTINIT */ +assert(H5I_INVALID_HID == H5E_CANTINIT_g); +if((H5E_CANTINIT_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTINIT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTRELEASE */ +assert(H5I_INVALID_HID == H5E_CANTRELEASE_g); +if((H5E_CANTRELEASE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTRELEASE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Group related errors */ +/* H5E_CANTCLOSEOBJ */ +assert(H5I_INVALID_HID == H5E_CANTCLOSEOBJ_g); +if((H5E_CANTCLOSEOBJ_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTCLOSEOBJ_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTOPENOBJ */ +assert(H5I_INVALID_HID == H5E_CANTOPENOBJ_g); +if((H5E_CANTOPENOBJ_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTOPENOBJ_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_COMPLEN */ +assert(H5I_INVALID_HID == H5E_COMPLEN_g); +if((H5E_COMPLEN_g = H5I_register(H5I_ERROR_MSG, &H5E_COMPLEN_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_PATH */ +assert(H5I_INVALID_HID == H5E_PATH_g); +if((H5E_PATH_g = H5I_register(H5I_ERROR_MSG, &H5E_PATH_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Heap errors */ +/* H5E_CANTATTACH */ +assert(H5I_INVALID_HID == H5E_CANTATTACH_g); +if((H5E_CANTATTACH_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTATTACH_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTCOMPUTE */ +assert(H5I_INVALID_HID == H5E_CANTCOMPUTE_g); +if((H5E_CANTCOMPUTE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTCOMPUTE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTEXTEND */ +assert(H5I_INVALID_HID == H5E_CANTEXTEND_g); +if((H5E_CANTEXTEND_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTEXTEND_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTOPERATE */ +assert(H5I_INVALID_HID == H5E_CANTOPERATE_g); +if((H5E_CANTOPERATE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTOPERATE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTRESTORE */ +assert(H5I_INVALID_HID == H5E_CANTRESTORE_g); +if((H5E_CANTRESTORE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTRESTORE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTUPDATE */ +assert(H5I_INVALID_HID == H5E_CANTUPDATE_g); +if((H5E_CANTUPDATE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTUPDATE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Object ID related errors */ +/* H5E_BADGROUP */ +assert(H5I_INVALID_HID == H5E_BADGROUP_g); +if((H5E_BADGROUP_g = H5I_register(H5I_ERROR_MSG, &H5E_BADGROUP_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_BADID */ +assert(H5I_INVALID_HID == H5E_BADID_g); +if((H5E_BADID_g = H5I_register(H5I_ERROR_MSG, &H5E_BADID_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTDEC */ +assert(H5I_INVALID_HID == H5E_CANTDEC_g); +if((H5E_CANTDEC_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTDEC_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTINC */ +assert(H5I_INVALID_HID == H5E_CANTINC_g); +if((H5E_CANTINC_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTINC_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTREGISTER */ +assert(H5I_INVALID_HID == H5E_CANTREGISTER_g); +if((H5E_CANTREGISTER_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTREGISTER_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_NOIDS */ +assert(H5I_INVALID_HID == H5E_NOIDS_g); +if((H5E_NOIDS_g = H5I_register(H5I_ERROR_MSG, &H5E_NOIDS_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Link related errors */ +/* H5E_CANTMOVE */ +assert(H5I_INVALID_HID == H5E_CANTMOVE_g); +if((H5E_CANTMOVE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTMOVE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTSORT */ +assert(H5I_INVALID_HID == H5E_CANTSORT_g); +if((H5E_CANTSORT_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTSORT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_NLINKS */ +assert(H5I_INVALID_HID == H5E_NLINKS_g); +if((H5E_NLINKS_g = H5I_register(H5I_ERROR_MSG, &H5E_NLINKS_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_NOTREGISTERED */ +assert(H5I_INVALID_HID == H5E_NOTREGISTERED_g); +if((H5E_NOTREGISTERED_g = H5I_register(H5I_ERROR_MSG, &H5E_NOTREGISTERED_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_TRAVERSE */ +assert(H5I_INVALID_HID == H5E_TRAVERSE_g); +if((H5E_TRAVERSE_g = H5I_register(H5I_ERROR_MSG, &H5E_TRAVERSE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Map related errors */ +/* H5E_CANTPUT */ +assert(H5I_INVALID_HID == H5E_CANTPUT_g); +if((H5E_CANTPUT_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTPUT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Parallel MPI errors */ +/* H5E_CANTGATHER */ +assert(H5I_INVALID_HID == H5E_CANTGATHER_g); +if((H5E_CANTGATHER_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTGATHER_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTRECV */ +assert(H5I_INVALID_HID == H5E_CANTRECV_g); +if((H5E_CANTRECV_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTRECV_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_MPI */ +assert(H5I_INVALID_HID == H5E_MPI_g); +if((H5E_MPI_g = H5I_register(H5I_ERROR_MSG, &H5E_MPI_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_MPIERRSTR */ +assert(H5I_INVALID_HID == H5E_MPIERRSTR_g); +if((H5E_MPIERRSTR_g = H5I_register(H5I_ERROR_MSG, &H5E_MPIERRSTR_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_NO_INDEPENDENT */ +assert(H5I_INVALID_HID == H5E_NO_INDEPENDENT_g); +if((H5E_NO_INDEPENDENT_g = H5I_register(H5I_ERROR_MSG, &H5E_NO_INDEPENDENT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* No error */ +/* H5E_NONE_MINOR */ +assert(H5I_INVALID_HID == H5E_NONE_MINOR_g); +if((H5E_NONE_MINOR_g = H5I_register(H5I_ERROR_MSG, &H5E_NONE_MINOR_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Object header related errors */ +/* H5E_ALIGNMENT */ +assert(H5I_INVALID_HID == H5E_ALIGNMENT_g); +if((H5E_ALIGNMENT_g = H5I_register(H5I_ERROR_MSG, &H5E_ALIGNMENT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_BADITER */ +assert(H5I_INVALID_HID == H5E_BADITER_g); +if((H5E_BADITER_g = H5I_register(H5I_ERROR_MSG, &H5E_BADITER_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_BADMESG */ +assert(H5I_INVALID_HID == H5E_BADMESG_g); +if((H5E_BADMESG_g = H5I_register(H5I_ERROR_MSG, &H5E_BADMESG_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTDELETE */ +assert(H5I_INVALID_HID == H5E_CANTDELETE_g); +if((H5E_CANTDELETE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTDELETE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTPACK */ +assert(H5I_INVALID_HID == H5E_CANTPACK_g); +if((H5E_CANTPACK_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTPACK_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTRENAME */ +assert(H5I_INVALID_HID == H5E_CANTRENAME_g); +if((H5E_CANTRENAME_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTRENAME_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTRESET */ +assert(H5I_INVALID_HID == H5E_CANTRESET_g); +if((H5E_CANTRESET_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTRESET_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_LINKCOUNT */ +assert(H5I_INVALID_HID == H5E_LINKCOUNT_g); +if((H5E_LINKCOUNT_g = H5I_register(H5I_ERROR_MSG, &H5E_LINKCOUNT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_VERSION */ +assert(H5I_INVALID_HID == H5E_VERSION_g); +if((H5E_VERSION_g = H5I_register(H5I_ERROR_MSG, &H5E_VERSION_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* I/O pipeline errors */ +/* H5E_CALLBACK */ +assert(H5I_INVALID_HID == H5E_CALLBACK_g); +if((H5E_CALLBACK_g = H5I_register(H5I_ERROR_MSG, &H5E_CALLBACK_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANAPPLY */ +assert(H5I_INVALID_HID == H5E_CANAPPLY_g); +if((H5E_CANAPPLY_g = H5I_register(H5I_ERROR_MSG, &H5E_CANAPPLY_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTFILTER */ +assert(H5I_INVALID_HID == H5E_CANTFILTER_g); +if((H5E_CANTFILTER_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTFILTER_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_NOENCODER */ +assert(H5I_INVALID_HID == H5E_NOENCODER_g); +if((H5E_NOENCODER_g = H5I_register(H5I_ERROR_MSG, &H5E_NOENCODER_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_NOFILTER */ +assert(H5I_INVALID_HID == H5E_NOFILTER_g); +if((H5E_NOFILTER_g = H5I_register(H5I_ERROR_MSG, &H5E_NOFILTER_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_SETLOCAL */ +assert(H5I_INVALID_HID == H5E_SETLOCAL_g); +if((H5E_SETLOCAL_g = H5I_register(H5I_ERROR_MSG, &H5E_SETLOCAL_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Property list errors */ +/* H5E_CANTGET */ +assert(H5I_INVALID_HID == H5E_CANTGET_g); +if((H5E_CANTGET_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTGET_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTSET */ +assert(H5I_INVALID_HID == H5E_CANTSET_g); +if((H5E_CANTSET_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTSET_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_DUPCLASS */ +assert(H5I_INVALID_HID == H5E_DUPCLASS_g); +if((H5E_DUPCLASS_g = H5I_register(H5I_ERROR_MSG, &H5E_DUPCLASS_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_SETDISALLOWED */ +assert(H5I_INVALID_HID == H5E_SETDISALLOWED_g); +if((H5E_SETDISALLOWED_g = H5I_register(H5I_ERROR_MSG, &H5E_SETDISALLOWED_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Plugin errors */ +/* H5E_OPENERROR */ +assert(H5I_INVALID_HID == H5E_OPENERROR_g); +if((H5E_OPENERROR_g = H5I_register(H5I_ERROR_MSG, &H5E_OPENERROR_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Resource errors */ +/* H5E_ALREADYEXISTS */ +assert(H5I_INVALID_HID == H5E_ALREADYEXISTS_g); +if((H5E_ALREADYEXISTS_g = H5I_register(H5I_ERROR_MSG, &H5E_ALREADYEXISTS_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTALLOC */ +assert(H5I_INVALID_HID == H5E_CANTALLOC_g); +if((H5E_CANTALLOC_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTALLOC_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTCOPY */ +assert(H5I_INVALID_HID == H5E_CANTCOPY_g); +if((H5E_CANTCOPY_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTCOPY_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTFREE */ +assert(H5I_INVALID_HID == H5E_CANTFREE_g); +if((H5E_CANTFREE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTFREE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTGC */ +assert(H5I_INVALID_HID == H5E_CANTGC_g); +if((H5E_CANTGC_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTGC_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTGETSIZE */ +assert(H5I_INVALID_HID == H5E_CANTGETSIZE_g); +if((H5E_CANTGETSIZE_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTGETSIZE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTLOCK */ +assert(H5I_INVALID_HID == H5E_CANTLOCK_g); +if((H5E_CANTLOCK_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTLOCK_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTUNLOCK */ +assert(H5I_INVALID_HID == H5E_CANTUNLOCK_g); +if((H5E_CANTUNLOCK_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTUNLOCK_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_NOSPACE */ +assert(H5I_INVALID_HID == H5E_NOSPACE_g); +if((H5E_NOSPACE_g = H5I_register(H5I_ERROR_MSG, &H5E_NOSPACE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_OBJOPEN */ +assert(H5I_INVALID_HID == H5E_OBJOPEN_g); +if((H5E_OBJOPEN_g = H5I_register(H5I_ERROR_MSG, &H5E_OBJOPEN_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* System level errors */ +/* H5E_SYSERRSTR */ +assert(H5I_INVALID_HID == H5E_SYSERRSTR_g); +if((H5E_SYSERRSTR_g = H5I_register(H5I_ERROR_MSG, &H5E_SYSERRSTR_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Datatype conversion errors */ +/* H5E_BADSIZE */ +assert(H5I_INVALID_HID == H5E_BADSIZE_g); +if((H5E_BADSIZE_g = H5I_register(H5I_ERROR_MSG, &H5E_BADSIZE_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); +/* H5E_CANTCONVERT */ +assert(H5I_INVALID_HID == H5E_CANTCONVERT_g); +if((H5E_CANTCONVERT_g = H5I_register(H5I_ERROR_MSG, &H5E_CANTCONVERT_msg_s, false)) < 0) + HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message"); + +/* Remember last minor error code ID */ +assert(H5E_last_min_id_g==H5I_INVALID_HID); +H5E_last_min_id_g = H5E_CANTCONVERT_g; + +#endif /* H5Einit_H */ diff --git a/src/H5Emajdef.h b/src/H5Emajdef.h new file mode 100644 index 00000000000..7062a5036a7 --- /dev/null +++ b/src/H5Emajdef.h @@ -0,0 +1,66 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the LICENSE file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* Generated automatically by bin/make_err -- do not edit */ +/* Add new errors to H5err.txt file */ + +#ifndef H5Emajdef_H +#define H5Emajdef_H + +/***********************************/ +/* Major error message definitions */ +/***********************************/ + +/* clang-format off */ +static const H5E_msg_t H5E_ARGS_msg_s = {false, "Invalid arguments to routine", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_ATTR_msg_s = {false, "Attribute", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_BTREE_msg_s = {false, "B-Tree node", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CACHE_msg_s = {false, "Object cache", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CONTEXT_msg_s = {false, "API Context", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_DATASET_msg_s = {false, "Dataset", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_DATASPACE_msg_s = {false, "Dataspace", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_DATATYPE_msg_s = {false, "Datatype", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_EARRAY_msg_s = {false, "Extensible Array", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_EFL_msg_s = {false, "External file list", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_ERROR_msg_s = {false, "Error API", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_EVENTSET_msg_s = {false, "Event Set", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_FARRAY_msg_s = {false, "Fixed Array", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_FILE_msg_s = {false, "File accessibility", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_FSPACE_msg_s = {false, "Free Space Manager", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_FUNC_msg_s = {false, "Function entry/exit", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_HEAP_msg_s = {false, "Heap", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_ID_msg_s = {false, "Object ID", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_INTERNAL_msg_s = {false, "Internal error (too specific to document in detail)", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_IO_msg_s = {false, "Low-level I/O", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_LIB_msg_s = {false, "General library infrastructure", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_LINK_msg_s = {false, "Links", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_MAP_msg_s = {false, "Map", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_NONE_MAJOR_msg_s = {false, "No error", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_OHDR_msg_s = {false, "Object header", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_PAGEBUF_msg_s = {false, "Page Buffering", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_PLINE_msg_s = {false, "Data filters", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_PLIST_msg_s = {false, "Property lists", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_PLUGIN_msg_s = {false, "Plugin for dynamically loaded library", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_REFERENCE_msg_s = {false, "References", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_RESOURCE_msg_s = {false, "Resource unavailable", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_RS_msg_s = {false, "Reference Counted Strings", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_SLIST_msg_s = {false, "Skip Lists", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_SOHM_msg_s = {false, "Shared Object Header Messages", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_STORAGE_msg_s = {false, "Data storage", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_SYM_msg_s = {false, "Symbol table", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_THREADSAFE_msg_s = {false, "Threadsafety", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_TST_msg_s = {false, "Ternary Search Trees", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_VFL_msg_s = {false, "Virtual File Layer", H5E_MAJOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_VOL_msg_s = {false, "Virtual Object Layer", H5E_MAJOR, &H5E_err_cls_s}; +/* clang-format on */ + +#endif /* H5Emajdef_H */ diff --git a/src/H5Emindef.h b/src/H5Emindef.h new file mode 100644 index 00000000000..5bcb99f9f04 --- /dev/null +++ b/src/H5Emindef.h @@ -0,0 +1,212 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the LICENSE file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* Generated automatically by bin/make_err -- do not edit */ +/* Add new errors to H5err.txt file */ + +#ifndef H5Emindef_H +#define H5Emindef_H + +/***********************************/ +/* Minor error message definitions */ +/***********************************/ + +/* clang-format off */ + +/* ARGS: Argument errors */ +static const H5E_msg_t H5E_BADRANGE_msg_s = {false, "Out of range", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_BADTYPE_msg_s = {false, "Inappropriate type", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_BADVALUE_msg_s = {false, "Bad value", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_UNINITIALIZED_msg_s = {false, "Information is uinitialized", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_UNSUPPORTED_msg_s = {false, "Feature is unsupported", H5E_MINOR, &H5E_err_cls_s}; + +/* ASYNC: Asynchronous operation errors */ +static const H5E_msg_t H5E_CANTCANCEL_msg_s = {false, "Can't cancel operation", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTWAIT_msg_s = {false, "Can't wait on operation", H5E_MINOR, &H5E_err_cls_s}; + +/* BTREE: B-tree related errors */ +static const H5E_msg_t H5E_CANTDECODE_msg_s = {false, "Unable to decode value", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTENCODE_msg_s = {false, "Unable to encode value", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTFIND_msg_s = {false, "Unable to check for record", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTINSERT_msg_s = {false, "Unable to insert object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTLIST_msg_s = {false, "Unable to list node", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTMODIFY_msg_s = {false, "Unable to modify record", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTREDISTRIBUTE_msg_s = {false, "Unable to redistribute records", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTREMOVE_msg_s = {false, "Unable to remove object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTSPLIT_msg_s = {false, "Unable to split node", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTSWAP_msg_s = {false, "Unable to swap records", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_EXISTS_msg_s = {false, "Object already exists", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_NOTFOUND_msg_s = {false, "Object not found", H5E_MINOR, &H5E_err_cls_s}; + +/* CACHE: Cache related errors */ +static const H5E_msg_t H5E_CANTCLEAN_msg_s = {false, "Unable to mark metadata as clean", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTCORK_msg_s = {false, "Unable to cork an object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTDEPEND_msg_s = {false, "Unable to create a flush dependency", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTDIRTY_msg_s = {false, "Unable to mark metadata as dirty", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTEXPUNGE_msg_s = {false, "Unable to expunge a metadata cache entry", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTFLUSH_msg_s = {false, "Unable to flush data from cache", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTINS_msg_s = {false, "Unable to insert metadata into cache", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTLOAD_msg_s = {false, "Unable to load metadata into cache", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTMARKCLEAN_msg_s = {false, "Unable to mark a pinned entry as clean", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTMARKDIRTY_msg_s = {false, "Unable to mark a pinned entry as dirty", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTMARKSERIALIZED_msg_s = {false, "Unable to mark an entry as serialized", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTMARKUNSERIALIZED_msg_s = {false, "Unable to mark an entry as unserialized", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTNOTIFY_msg_s = {false, "Unable to notify object about action", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTPIN_msg_s = {false, "Unable to pin cache entry", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTPROTECT_msg_s = {false, "Unable to protect metadata", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTRESIZE_msg_s = {false, "Unable to resize a metadata cache entry", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTSERIALIZE_msg_s = {false, "Unable to serialize data from cache", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTTAG_msg_s = {false, "Unable to tag metadata in the cache", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTUNCORK_msg_s = {false, "Unable to uncork an object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTUNDEPEND_msg_s = {false, "Unable to destroy a flush dependency", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTUNPIN_msg_s = {false, "Unable to un-pin cache entry", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTUNPROTECT_msg_s = {false, "Unable to unprotect metadata", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTUNSERIALIZE_msg_s = {false, "Unable to mark metadata as unserialized", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_LOGGING_msg_s = {false, "Failure in the cache logging framework", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_NOTCACHED_msg_s = {false, "Metadata not currently cached", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_PROTECT_msg_s = {false, "Protected metadata error", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_SYSTEM_msg_s = {false, "Internal error detected", H5E_MINOR, &H5E_err_cls_s}; + +/* DSPACE: Dataspace errors */ +static const H5E_msg_t H5E_BADSELECT_msg_s = {false, "Invalid selection", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTAPPEND_msg_s = {false, "Can't append object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTCLIP_msg_s = {false, "Can't clip hyperslab region", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTCOMPARE_msg_s = {false, "Can't compare objects", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTCOUNT_msg_s = {false, "Can't count elements", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTNEXT_msg_s = {false, "Can't move to next iterator location", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTSELECT_msg_s = {false, "Can't select hyperslab", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_INCONSISTENTSTATE_msg_s = {false, "Internal states are inconsistent", H5E_MINOR, &H5E_err_cls_s}; + +/* FILE: Generic low-level file I/O errors */ +static const H5E_msg_t H5E_CLOSEERROR_msg_s = {false, "Close failed", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_FCNTL_msg_s = {false, "File control (fcntl) failed", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_OVERFLOW_msg_s = {false, "Address overflowed", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_READERROR_msg_s = {false, "Read failed", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_SEEKERROR_msg_s = {false, "Seek failed", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_WRITEERROR_msg_s = {false, "Write failed", H5E_MINOR, &H5E_err_cls_s}; + +/* FILEACC: File accessibility errors */ +static const H5E_msg_t H5E_BADFILE_msg_s = {false, "Bad file ID accessed", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTCLOSEFILE_msg_s = {false, "Unable to close file", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTCREATE_msg_s = {false, "Unable to create file", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTDELETEFILE_msg_s = {false, "Unable to delete file", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTLOCKFILE_msg_s = {false, "Unable to lock file", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTOPENFILE_msg_s = {false, "Unable to open file", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTUNLOCKFILE_msg_s = {false, "Unable to unlock file", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_FILEEXISTS_msg_s = {false, "File already exists", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_FILEOPEN_msg_s = {false, "File already open", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_MOUNT_msg_s = {false, "File mount error", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_NOTHDF5_msg_s = {false, "Not an HDF5 file", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_TRUNCATED_msg_s = {false, "File has been truncated", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_UNMOUNT_msg_s = {false, "File unmount error", H5E_MINOR, &H5E_err_cls_s}; + +/* FSPACE: Free space errors */ +static const H5E_msg_t H5E_CANTMERGE_msg_s = {false, "Can't merge objects", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTREVIVE_msg_s = {false, "Can't revive object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTSHRINK_msg_s = {false, "Can't shrink container", H5E_MINOR, &H5E_err_cls_s}; + +/* FUNC: Function entry/exit interface errors */ +static const H5E_msg_t H5E_ALREADYINIT_msg_s = {false, "Object already initialized", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTINIT_msg_s = {false, "Unable to initialize object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTRELEASE_msg_s = {false, "Unable to release object", H5E_MINOR, &H5E_err_cls_s}; + +/* GROUP: Group related errors */ +static const H5E_msg_t H5E_CANTCLOSEOBJ_msg_s = {false, "Can't close object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTOPENOBJ_msg_s = {false, "Can't open object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_COMPLEN_msg_s = {false, "Name component is too long", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_PATH_msg_s = {false, "Problem with path to object", H5E_MINOR, &H5E_err_cls_s}; + +/* HEAP: Heap errors */ +static const H5E_msg_t H5E_CANTATTACH_msg_s = {false, "Can't attach object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTCOMPUTE_msg_s = {false, "Can't compute value", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTEXTEND_msg_s = {false, "Can't extend heap's space", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTOPERATE_msg_s = {false, "Can't operate on object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTRESTORE_msg_s = {false, "Can't restore condition", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTUPDATE_msg_s = {false, "Can't update object", H5E_MINOR, &H5E_err_cls_s}; + +/* ID: Object ID related errors */ +static const H5E_msg_t H5E_BADGROUP_msg_s = {false, "Unable to find ID group information", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_BADID_msg_s = {false, "Unable to find ID information (already closed?)", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTDEC_msg_s = {false, "Unable to decrement reference count", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTINC_msg_s = {false, "Unable to increment reference count", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTREGISTER_msg_s = {false, "Unable to register new ID", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_NOIDS_msg_s = {false, "Out of IDs for group", H5E_MINOR, &H5E_err_cls_s}; + +/* LINK: Link related errors */ +static const H5E_msg_t H5E_CANTMOVE_msg_s = {false, "Can't move object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTSORT_msg_s = {false, "Can't sort objects", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_NLINKS_msg_s = {false, "Too many soft links in path", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_NOTREGISTERED_msg_s = {false, "Link class not registered", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_TRAVERSE_msg_s = {false, "Link traversal failure", H5E_MINOR, &H5E_err_cls_s}; + +/* MAP: Map related errors */ +static const H5E_msg_t H5E_CANTPUT_msg_s = {false, "Can't put value", H5E_MINOR, &H5E_err_cls_s}; + +/* MPI: Parallel MPI errors */ +static const H5E_msg_t H5E_CANTGATHER_msg_s = {false, "Can't gather data", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTRECV_msg_s = {false, "Can't receive data", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_MPI_msg_s = {false, "Some MPI function failed", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_MPIERRSTR_msg_s = {false, "MPI Error String", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_NO_INDEPENDENT_msg_s = {false, "Can't perform independent IO", H5E_MINOR, &H5E_err_cls_s}; + +/* NONE: No error */ +static const H5E_msg_t H5E_NONE_MINOR_msg_s = {false, "No error", H5E_MINOR, &H5E_err_cls_s}; + +/* OHDR: Object header related errors */ +static const H5E_msg_t H5E_ALIGNMENT_msg_s = {false, "Alignment error", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_BADITER_msg_s = {false, "Iteration failed", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_BADMESG_msg_s = {false, "Unrecognized message", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTDELETE_msg_s = {false, "Can't delete message", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTPACK_msg_s = {false, "Can't pack messages", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTRENAME_msg_s = {false, "Unable to rename object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTRESET_msg_s = {false, "Can't reset object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_LINKCOUNT_msg_s = {false, "Bad object header link count", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_VERSION_msg_s = {false, "Wrong version number", H5E_MINOR, &H5E_err_cls_s}; + +/* PIPELINE: I/O pipeline errors */ +static const H5E_msg_t H5E_CALLBACK_msg_s = {false, "Callback failed", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANAPPLY_msg_s = {false, "Error from filter 'can apply' callback", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTFILTER_msg_s = {false, "Filter operation failed", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_NOENCODER_msg_s = {false, "Filter present but encoding disabled", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_NOFILTER_msg_s = {false, "Requested filter is not available", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_SETLOCAL_msg_s = {false, "Error from filter 'set local' callback", H5E_MINOR, &H5E_err_cls_s}; + +/* PLIST: Property list errors */ +static const H5E_msg_t H5E_CANTGET_msg_s = {false, "Can't get value", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTSET_msg_s = {false, "Can't set value", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_DUPCLASS_msg_s = {false, "Duplicate class name in parent class", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_SETDISALLOWED_msg_s = {false, "Disallowed operation", H5E_MINOR, &H5E_err_cls_s}; + +/* PLUGIN: Plugin errors */ +static const H5E_msg_t H5E_OPENERROR_msg_s = {false, "Can't open directory or file", H5E_MINOR, &H5E_err_cls_s}; + +/* RESOURCE: Resource errors */ +static const H5E_msg_t H5E_ALREADYEXISTS_msg_s = {false, "Object already exists", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTALLOC_msg_s = {false, "Can't allocate space", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTCOPY_msg_s = {false, "Unable to copy object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTFREE_msg_s = {false, "Unable to free object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTGC_msg_s = {false, "Unable to garbage collect", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTGETSIZE_msg_s = {false, "Unable to compute size", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTLOCK_msg_s = {false, "Unable to lock object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTUNLOCK_msg_s = {false, "Unable to unlock object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_NOSPACE_msg_s = {false, "No space available for allocation", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_OBJOPEN_msg_s = {false, "Object is already open", H5E_MINOR, &H5E_err_cls_s}; + +/* SYSTEM: System level errors */ +static const H5E_msg_t H5E_SYSERRSTR_msg_s = {false, "System error message", H5E_MINOR, &H5E_err_cls_s}; + +/* TYPECONV: Datatype conversion errors */ +static const H5E_msg_t H5E_BADSIZE_msg_s = {false, "Bad size for object", H5E_MINOR, &H5E_err_cls_s}; +static const H5E_msg_t H5E_CANTCONVERT_msg_s = {false, "Can't convert datatypes", H5E_MINOR, &H5E_err_cls_s}; +/* clang-format on */ + +#endif /* H5Emindef_H */ diff --git a/src/H5Epubgen.h b/src/H5Epubgen.h new file mode 100644 index 00000000000..aca2ccbd948 --- /dev/null +++ b/src/H5Epubgen.h @@ -0,0 +1,442 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the LICENSE file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* Generated automatically by bin/make_err -- do not edit */ +/* Add new errors to H5err.txt file */ + +#ifndef H5Epubgen_H +#define H5Epubgen_H + +#ifdef __cplusplus +extern "C" { +#endif + +/*********************/ +/* Major error codes */ +/*********************/ + +#define H5E_ARGS (H5OPEN H5E_ARGS_g) +#define H5E_ATTR (H5OPEN H5E_ATTR_g) +#define H5E_BTREE (H5OPEN H5E_BTREE_g) +#define H5E_CACHE (H5OPEN H5E_CACHE_g) +#define H5E_CONTEXT (H5OPEN H5E_CONTEXT_g) +#define H5E_DATASET (H5OPEN H5E_DATASET_g) +#define H5E_DATASPACE (H5OPEN H5E_DATASPACE_g) +#define H5E_DATATYPE (H5OPEN H5E_DATATYPE_g) +#define H5E_EARRAY (H5OPEN H5E_EARRAY_g) +#define H5E_EFL (H5OPEN H5E_EFL_g) +#define H5E_ERROR (H5OPEN H5E_ERROR_g) +#define H5E_EVENTSET (H5OPEN H5E_EVENTSET_g) +#define H5E_FARRAY (H5OPEN H5E_FARRAY_g) +#define H5E_FILE (H5OPEN H5E_FILE_g) +#define H5E_FSPACE (H5OPEN H5E_FSPACE_g) +#define H5E_FUNC (H5OPEN H5E_FUNC_g) +#define H5E_HEAP (H5OPEN H5E_HEAP_g) +#define H5E_ID (H5OPEN H5E_ID_g) +#define H5E_INTERNAL (H5OPEN H5E_INTERNAL_g) +#define H5E_IO (H5OPEN H5E_IO_g) +#define H5E_LIB (H5OPEN H5E_LIB_g) +#define H5E_LINK (H5OPEN H5E_LINK_g) +#define H5E_MAP (H5OPEN H5E_MAP_g) +#define H5E_NONE_MAJOR (H5OPEN H5E_NONE_MAJOR_g) +#define H5E_OHDR (H5OPEN H5E_OHDR_g) +#define H5E_PAGEBUF (H5OPEN H5E_PAGEBUF_g) +#define H5E_PLINE (H5OPEN H5E_PLINE_g) +#define H5E_PLIST (H5OPEN H5E_PLIST_g) +#define H5E_PLUGIN (H5OPEN H5E_PLUGIN_g) +#define H5E_REFERENCE (H5OPEN H5E_REFERENCE_g) +#define H5E_RESOURCE (H5OPEN H5E_RESOURCE_g) +#define H5E_RS (H5OPEN H5E_RS_g) +#define H5E_SLIST (H5OPEN H5E_SLIST_g) +#define H5E_SOHM (H5OPEN H5E_SOHM_g) +#define H5E_STORAGE (H5OPEN H5E_STORAGE_g) +#define H5E_SYM (H5OPEN H5E_SYM_g) +#define H5E_THREADSAFE (H5OPEN H5E_THREADSAFE_g) +#define H5E_TST (H5OPEN H5E_TST_g) +#define H5E_VFL (H5OPEN H5E_VFL_g) +#define H5E_VOL (H5OPEN H5E_VOL_g) +H5_DLLVAR hid_t H5E_ARGS_g; /* Invalid arguments to routine */ +H5_DLLVAR hid_t H5E_ATTR_g; /* Attribute */ +H5_DLLVAR hid_t H5E_BTREE_g; /* B-Tree node */ +H5_DLLVAR hid_t H5E_CACHE_g; /* Object cache */ +H5_DLLVAR hid_t H5E_CONTEXT_g; /* API Context */ +H5_DLLVAR hid_t H5E_DATASET_g; /* Dataset */ +H5_DLLVAR hid_t H5E_DATASPACE_g; /* Dataspace */ +H5_DLLVAR hid_t H5E_DATATYPE_g; /* Datatype */ +H5_DLLVAR hid_t H5E_EARRAY_g; /* Extensible Array */ +H5_DLLVAR hid_t H5E_EFL_g; /* External file list */ +H5_DLLVAR hid_t H5E_ERROR_g; /* Error API */ +H5_DLLVAR hid_t H5E_EVENTSET_g; /* Event Set */ +H5_DLLVAR hid_t H5E_FARRAY_g; /* Fixed Array */ +H5_DLLVAR hid_t H5E_FILE_g; /* File accessibility */ +H5_DLLVAR hid_t H5E_FSPACE_g; /* Free Space Manager */ +H5_DLLVAR hid_t H5E_FUNC_g; /* Function entry/exit */ +H5_DLLVAR hid_t H5E_HEAP_g; /* Heap */ +H5_DLLVAR hid_t H5E_ID_g; /* Object ID */ +H5_DLLVAR hid_t H5E_INTERNAL_g; /* Internal error (too specific to document in detail) */ +H5_DLLVAR hid_t H5E_IO_g; /* Low-level I/O */ +H5_DLLVAR hid_t H5E_LIB_g; /* General library infrastructure */ +H5_DLLVAR hid_t H5E_LINK_g; /* Links */ +H5_DLLVAR hid_t H5E_MAP_g; /* Map */ +H5_DLLVAR hid_t H5E_NONE_MAJOR_g; /* No error */ +H5_DLLVAR hid_t H5E_OHDR_g; /* Object header */ +H5_DLLVAR hid_t H5E_PAGEBUF_g; /* Page Buffering */ +H5_DLLVAR hid_t H5E_PLINE_g; /* Data filters */ +H5_DLLVAR hid_t H5E_PLIST_g; /* Property lists */ +H5_DLLVAR hid_t H5E_PLUGIN_g; /* Plugin for dynamically loaded library */ +H5_DLLVAR hid_t H5E_REFERENCE_g; /* References */ +H5_DLLVAR hid_t H5E_RESOURCE_g; /* Resource unavailable */ +H5_DLLVAR hid_t H5E_RS_g; /* Reference Counted Strings */ +H5_DLLVAR hid_t H5E_SLIST_g; /* Skip Lists */ +H5_DLLVAR hid_t H5E_SOHM_g; /* Shared Object Header Messages */ +H5_DLLVAR hid_t H5E_STORAGE_g; /* Data storage */ +H5_DLLVAR hid_t H5E_SYM_g; /* Symbol table */ +H5_DLLVAR hid_t H5E_THREADSAFE_g; /* Threadsafety */ +H5_DLLVAR hid_t H5E_TST_g; /* Ternary Search Trees */ +H5_DLLVAR hid_t H5E_VFL_g; /* Virtual File Layer */ +H5_DLLVAR hid_t H5E_VOL_g; /* Virtual Object Layer */ + +/*********************/ +/* Minor error codes */ +/*********************/ + +/* Argument errors */ +#define H5E_BADRANGE (H5OPEN H5E_BADRANGE_g) +#define H5E_BADTYPE (H5OPEN H5E_BADTYPE_g) +#define H5E_BADVALUE (H5OPEN H5E_BADVALUE_g) +#define H5E_UNINITIALIZED (H5OPEN H5E_UNINITIALIZED_g) +#define H5E_UNSUPPORTED (H5OPEN H5E_UNSUPPORTED_g) +H5_DLLVAR hid_t H5E_BADRANGE_g; /* Out of range */ +H5_DLLVAR hid_t H5E_BADTYPE_g; /* Inappropriate type */ +H5_DLLVAR hid_t H5E_BADVALUE_g; /* Bad value */ +H5_DLLVAR hid_t H5E_UNINITIALIZED_g; /* Information is uinitialized */ +H5_DLLVAR hid_t H5E_UNSUPPORTED_g; /* Feature is unsupported */ + +/* Asynchronous operation errors */ +#define H5E_CANTCANCEL (H5OPEN H5E_CANTCANCEL_g) +#define H5E_CANTWAIT (H5OPEN H5E_CANTWAIT_g) +H5_DLLVAR hid_t H5E_CANTCANCEL_g; /* Can't cancel operation */ +H5_DLLVAR hid_t H5E_CANTWAIT_g; /* Can't wait on operation */ + +/* B-tree related errors */ +#define H5E_CANTDECODE (H5OPEN H5E_CANTDECODE_g) +#define H5E_CANTENCODE (H5OPEN H5E_CANTENCODE_g) +#define H5E_CANTFIND (H5OPEN H5E_CANTFIND_g) +#define H5E_CANTINSERT (H5OPEN H5E_CANTINSERT_g) +#define H5E_CANTLIST (H5OPEN H5E_CANTLIST_g) +#define H5E_CANTMODIFY (H5OPEN H5E_CANTMODIFY_g) +#define H5E_CANTREDISTRIBUTE (H5OPEN H5E_CANTREDISTRIBUTE_g) +#define H5E_CANTREMOVE (H5OPEN H5E_CANTREMOVE_g) +#define H5E_CANTSPLIT (H5OPEN H5E_CANTSPLIT_g) +#define H5E_CANTSWAP (H5OPEN H5E_CANTSWAP_g) +#define H5E_EXISTS (H5OPEN H5E_EXISTS_g) +#define H5E_NOTFOUND (H5OPEN H5E_NOTFOUND_g) +H5_DLLVAR hid_t H5E_CANTDECODE_g; /* Unable to decode value */ +H5_DLLVAR hid_t H5E_CANTENCODE_g; /* Unable to encode value */ +H5_DLLVAR hid_t H5E_CANTFIND_g; /* Unable to check for record */ +H5_DLLVAR hid_t H5E_CANTINSERT_g; /* Unable to insert object */ +H5_DLLVAR hid_t H5E_CANTLIST_g; /* Unable to list node */ +H5_DLLVAR hid_t H5E_CANTMODIFY_g; /* Unable to modify record */ +H5_DLLVAR hid_t H5E_CANTREDISTRIBUTE_g; /* Unable to redistribute records */ +H5_DLLVAR hid_t H5E_CANTREMOVE_g; /* Unable to remove object */ +H5_DLLVAR hid_t H5E_CANTSPLIT_g; /* Unable to split node */ +H5_DLLVAR hid_t H5E_CANTSWAP_g; /* Unable to swap records */ +H5_DLLVAR hid_t H5E_EXISTS_g; /* Object already exists */ +H5_DLLVAR hid_t H5E_NOTFOUND_g; /* Object not found */ + +/* Cache related errors */ +#define H5E_CANTCLEAN (H5OPEN H5E_CANTCLEAN_g) +#define H5E_CANTCORK (H5OPEN H5E_CANTCORK_g) +#define H5E_CANTDEPEND (H5OPEN H5E_CANTDEPEND_g) +#define H5E_CANTDIRTY (H5OPEN H5E_CANTDIRTY_g) +#define H5E_CANTEXPUNGE (H5OPEN H5E_CANTEXPUNGE_g) +#define H5E_CANTFLUSH (H5OPEN H5E_CANTFLUSH_g) +#define H5E_CANTINS (H5OPEN H5E_CANTINS_g) +#define H5E_CANTLOAD (H5OPEN H5E_CANTLOAD_g) +#define H5E_CANTMARKCLEAN (H5OPEN H5E_CANTMARKCLEAN_g) +#define H5E_CANTMARKDIRTY (H5OPEN H5E_CANTMARKDIRTY_g) +#define H5E_CANTMARKSERIALIZED (H5OPEN H5E_CANTMARKSERIALIZED_g) +#define H5E_CANTMARKUNSERIALIZED (H5OPEN H5E_CANTMARKUNSERIALIZED_g) +#define H5E_CANTNOTIFY (H5OPEN H5E_CANTNOTIFY_g) +#define H5E_CANTPIN (H5OPEN H5E_CANTPIN_g) +#define H5E_CANTPROTECT (H5OPEN H5E_CANTPROTECT_g) +#define H5E_CANTRESIZE (H5OPEN H5E_CANTRESIZE_g) +#define H5E_CANTSERIALIZE (H5OPEN H5E_CANTSERIALIZE_g) +#define H5E_CANTTAG (H5OPEN H5E_CANTTAG_g) +#define H5E_CANTUNCORK (H5OPEN H5E_CANTUNCORK_g) +#define H5E_CANTUNDEPEND (H5OPEN H5E_CANTUNDEPEND_g) +#define H5E_CANTUNPIN (H5OPEN H5E_CANTUNPIN_g) +#define H5E_CANTUNPROTECT (H5OPEN H5E_CANTUNPROTECT_g) +#define H5E_CANTUNSERIALIZE (H5OPEN H5E_CANTUNSERIALIZE_g) +#define H5E_LOGGING (H5OPEN H5E_LOGGING_g) +#define H5E_NOTCACHED (H5OPEN H5E_NOTCACHED_g) +#define H5E_PROTECT (H5OPEN H5E_PROTECT_g) +#define H5E_SYSTEM (H5OPEN H5E_SYSTEM_g) +H5_DLLVAR hid_t H5E_CANTCLEAN_g; /* Unable to mark metadata as clean */ +H5_DLLVAR hid_t H5E_CANTCORK_g; /* Unable to cork an object */ +H5_DLLVAR hid_t H5E_CANTDEPEND_g; /* Unable to create a flush dependency */ +H5_DLLVAR hid_t H5E_CANTDIRTY_g; /* Unable to mark metadata as dirty */ +H5_DLLVAR hid_t H5E_CANTEXPUNGE_g; /* Unable to expunge a metadata cache entry */ +H5_DLLVAR hid_t H5E_CANTFLUSH_g; /* Unable to flush data from cache */ +H5_DLLVAR hid_t H5E_CANTINS_g; /* Unable to insert metadata into cache */ +H5_DLLVAR hid_t H5E_CANTLOAD_g; /* Unable to load metadata into cache */ +H5_DLLVAR hid_t H5E_CANTMARKCLEAN_g; /* Unable to mark a pinned entry as clean */ +H5_DLLVAR hid_t H5E_CANTMARKDIRTY_g; /* Unable to mark a pinned entry as dirty */ +H5_DLLVAR hid_t H5E_CANTMARKSERIALIZED_g; /* Unable to mark an entry as serialized */ +H5_DLLVAR hid_t H5E_CANTMARKUNSERIALIZED_g; /* Unable to mark an entry as unserialized */ +H5_DLLVAR hid_t H5E_CANTNOTIFY_g; /* Unable to notify object about action */ +H5_DLLVAR hid_t H5E_CANTPIN_g; /* Unable to pin cache entry */ +H5_DLLVAR hid_t H5E_CANTPROTECT_g; /* Unable to protect metadata */ +H5_DLLVAR hid_t H5E_CANTRESIZE_g; /* Unable to resize a metadata cache entry */ +H5_DLLVAR hid_t H5E_CANTSERIALIZE_g; /* Unable to serialize data from cache */ +H5_DLLVAR hid_t H5E_CANTTAG_g; /* Unable to tag metadata in the cache */ +H5_DLLVAR hid_t H5E_CANTUNCORK_g; /* Unable to uncork an object */ +H5_DLLVAR hid_t H5E_CANTUNDEPEND_g; /* Unable to destroy a flush dependency */ +H5_DLLVAR hid_t H5E_CANTUNPIN_g; /* Unable to un-pin cache entry */ +H5_DLLVAR hid_t H5E_CANTUNPROTECT_g; /* Unable to unprotect metadata */ +H5_DLLVAR hid_t H5E_CANTUNSERIALIZE_g; /* Unable to mark metadata as unserialized */ +H5_DLLVAR hid_t H5E_LOGGING_g; /* Failure in the cache logging framework */ +H5_DLLVAR hid_t H5E_NOTCACHED_g; /* Metadata not currently cached */ +H5_DLLVAR hid_t H5E_PROTECT_g; /* Protected metadata error */ +H5_DLLVAR hid_t H5E_SYSTEM_g; /* Internal error detected */ + +/* Dataspace errors */ +#define H5E_BADSELECT (H5OPEN H5E_BADSELECT_g) +#define H5E_CANTAPPEND (H5OPEN H5E_CANTAPPEND_g) +#define H5E_CANTCLIP (H5OPEN H5E_CANTCLIP_g) +#define H5E_CANTCOMPARE (H5OPEN H5E_CANTCOMPARE_g) +#define H5E_CANTCOUNT (H5OPEN H5E_CANTCOUNT_g) +#define H5E_CANTNEXT (H5OPEN H5E_CANTNEXT_g) +#define H5E_CANTSELECT (H5OPEN H5E_CANTSELECT_g) +#define H5E_INCONSISTENTSTATE (H5OPEN H5E_INCONSISTENTSTATE_g) +H5_DLLVAR hid_t H5E_BADSELECT_g; /* Invalid selection */ +H5_DLLVAR hid_t H5E_CANTAPPEND_g; /* Can't append object */ +H5_DLLVAR hid_t H5E_CANTCLIP_g; /* Can't clip hyperslab region */ +H5_DLLVAR hid_t H5E_CANTCOMPARE_g; /* Can't compare objects */ +H5_DLLVAR hid_t H5E_CANTCOUNT_g; /* Can't count elements */ +H5_DLLVAR hid_t H5E_CANTNEXT_g; /* Can't move to next iterator location */ +H5_DLLVAR hid_t H5E_CANTSELECT_g; /* Can't select hyperslab */ +H5_DLLVAR hid_t H5E_INCONSISTENTSTATE_g; /* Internal states are inconsistent */ + +/* Generic low-level file I/O errors */ +#define H5E_CLOSEERROR (H5OPEN H5E_CLOSEERROR_g) +#define H5E_FCNTL (H5OPEN H5E_FCNTL_g) +#define H5E_OVERFLOW (H5OPEN H5E_OVERFLOW_g) +#define H5E_READERROR (H5OPEN H5E_READERROR_g) +#define H5E_SEEKERROR (H5OPEN H5E_SEEKERROR_g) +#define H5E_WRITEERROR (H5OPEN H5E_WRITEERROR_g) +H5_DLLVAR hid_t H5E_CLOSEERROR_g; /* Close failed */ +H5_DLLVAR hid_t H5E_FCNTL_g; /* File control (fcntl) failed */ +H5_DLLVAR hid_t H5E_OVERFLOW_g; /* Address overflowed */ +H5_DLLVAR hid_t H5E_READERROR_g; /* Read failed */ +H5_DLLVAR hid_t H5E_SEEKERROR_g; /* Seek failed */ +H5_DLLVAR hid_t H5E_WRITEERROR_g; /* Write failed */ + +/* File accessibility errors */ +#define H5E_BADFILE (H5OPEN H5E_BADFILE_g) +#define H5E_CANTCLOSEFILE (H5OPEN H5E_CANTCLOSEFILE_g) +#define H5E_CANTCREATE (H5OPEN H5E_CANTCREATE_g) +#define H5E_CANTDELETEFILE (H5OPEN H5E_CANTDELETEFILE_g) +#define H5E_CANTLOCKFILE (H5OPEN H5E_CANTLOCKFILE_g) +#define H5E_CANTOPENFILE (H5OPEN H5E_CANTOPENFILE_g) +#define H5E_CANTUNLOCKFILE (H5OPEN H5E_CANTUNLOCKFILE_g) +#define H5E_FILEEXISTS (H5OPEN H5E_FILEEXISTS_g) +#define H5E_FILEOPEN (H5OPEN H5E_FILEOPEN_g) +#define H5E_MOUNT (H5OPEN H5E_MOUNT_g) +#define H5E_NOTHDF5 (H5OPEN H5E_NOTHDF5_g) +#define H5E_TRUNCATED (H5OPEN H5E_TRUNCATED_g) +#define H5E_UNMOUNT (H5OPEN H5E_UNMOUNT_g) +H5_DLLVAR hid_t H5E_BADFILE_g; /* Bad file ID accessed */ +H5_DLLVAR hid_t H5E_CANTCLOSEFILE_g; /* Unable to close file */ +H5_DLLVAR hid_t H5E_CANTCREATE_g; /* Unable to create file */ +H5_DLLVAR hid_t H5E_CANTDELETEFILE_g; /* Unable to delete file */ +H5_DLLVAR hid_t H5E_CANTLOCKFILE_g; /* Unable to lock file */ +H5_DLLVAR hid_t H5E_CANTOPENFILE_g; /* Unable to open file */ +H5_DLLVAR hid_t H5E_CANTUNLOCKFILE_g; /* Unable to unlock file */ +H5_DLLVAR hid_t H5E_FILEEXISTS_g; /* File already exists */ +H5_DLLVAR hid_t H5E_FILEOPEN_g; /* File already open */ +H5_DLLVAR hid_t H5E_MOUNT_g; /* File mount error */ +H5_DLLVAR hid_t H5E_NOTHDF5_g; /* Not an HDF5 file */ +H5_DLLVAR hid_t H5E_TRUNCATED_g; /* File has been truncated */ +H5_DLLVAR hid_t H5E_UNMOUNT_g; /* File unmount error */ + +/* Free space errors */ +#define H5E_CANTMERGE (H5OPEN H5E_CANTMERGE_g) +#define H5E_CANTREVIVE (H5OPEN H5E_CANTREVIVE_g) +#define H5E_CANTSHRINK (H5OPEN H5E_CANTSHRINK_g) +H5_DLLVAR hid_t H5E_CANTMERGE_g; /* Can't merge objects */ +H5_DLLVAR hid_t H5E_CANTREVIVE_g; /* Can't revive object */ +H5_DLLVAR hid_t H5E_CANTSHRINK_g; /* Can't shrink container */ + +/* Function entry/exit interface errors */ +#define H5E_ALREADYINIT (H5OPEN H5E_ALREADYINIT_g) +#define H5E_CANTINIT (H5OPEN H5E_CANTINIT_g) +#define H5E_CANTRELEASE (H5OPEN H5E_CANTRELEASE_g) +H5_DLLVAR hid_t H5E_ALREADYINIT_g; /* Object already initialized */ +H5_DLLVAR hid_t H5E_CANTINIT_g; /* Unable to initialize object */ +H5_DLLVAR hid_t H5E_CANTRELEASE_g; /* Unable to release object */ + +/* Group related errors */ +#define H5E_CANTCLOSEOBJ (H5OPEN H5E_CANTCLOSEOBJ_g) +#define H5E_CANTOPENOBJ (H5OPEN H5E_CANTOPENOBJ_g) +#define H5E_COMPLEN (H5OPEN H5E_COMPLEN_g) +#define H5E_PATH (H5OPEN H5E_PATH_g) +H5_DLLVAR hid_t H5E_CANTCLOSEOBJ_g; /* Can't close object */ +H5_DLLVAR hid_t H5E_CANTOPENOBJ_g; /* Can't open object */ +H5_DLLVAR hid_t H5E_COMPLEN_g; /* Name component is too long */ +H5_DLLVAR hid_t H5E_PATH_g; /* Problem with path to object */ + +/* Heap errors */ +#define H5E_CANTATTACH (H5OPEN H5E_CANTATTACH_g) +#define H5E_CANTCOMPUTE (H5OPEN H5E_CANTCOMPUTE_g) +#define H5E_CANTEXTEND (H5OPEN H5E_CANTEXTEND_g) +#define H5E_CANTOPERATE (H5OPEN H5E_CANTOPERATE_g) +#define H5E_CANTRESTORE (H5OPEN H5E_CANTRESTORE_g) +#define H5E_CANTUPDATE (H5OPEN H5E_CANTUPDATE_g) +H5_DLLVAR hid_t H5E_CANTATTACH_g; /* Can't attach object */ +H5_DLLVAR hid_t H5E_CANTCOMPUTE_g; /* Can't compute value */ +H5_DLLVAR hid_t H5E_CANTEXTEND_g; /* Can't extend heap's space */ +H5_DLLVAR hid_t H5E_CANTOPERATE_g; /* Can't operate on object */ +H5_DLLVAR hid_t H5E_CANTRESTORE_g; /* Can't restore condition */ +H5_DLLVAR hid_t H5E_CANTUPDATE_g; /* Can't update object */ + +/* Object ID related errors */ +#define H5E_BADGROUP (H5OPEN H5E_BADGROUP_g) +#define H5E_BADID (H5OPEN H5E_BADID_g) +#define H5E_CANTDEC (H5OPEN H5E_CANTDEC_g) +#define H5E_CANTINC (H5OPEN H5E_CANTINC_g) +#define H5E_CANTREGISTER (H5OPEN H5E_CANTREGISTER_g) +#define H5E_NOIDS (H5OPEN H5E_NOIDS_g) +H5_DLLVAR hid_t H5E_BADGROUP_g; /* Unable to find ID group information */ +H5_DLLVAR hid_t H5E_BADID_g; /* Unable to find ID information (already closed?) */ +H5_DLLVAR hid_t H5E_CANTDEC_g; /* Unable to decrement reference count */ +H5_DLLVAR hid_t H5E_CANTINC_g; /* Unable to increment reference count */ +H5_DLLVAR hid_t H5E_CANTREGISTER_g; /* Unable to register new ID */ +H5_DLLVAR hid_t H5E_NOIDS_g; /* Out of IDs for group */ + +/* Link related errors */ +#define H5E_CANTMOVE (H5OPEN H5E_CANTMOVE_g) +#define H5E_CANTSORT (H5OPEN H5E_CANTSORT_g) +#define H5E_NLINKS (H5OPEN H5E_NLINKS_g) +#define H5E_NOTREGISTERED (H5OPEN H5E_NOTREGISTERED_g) +#define H5E_TRAVERSE (H5OPEN H5E_TRAVERSE_g) +H5_DLLVAR hid_t H5E_CANTMOVE_g; /* Can't move object */ +H5_DLLVAR hid_t H5E_CANTSORT_g; /* Can't sort objects */ +H5_DLLVAR hid_t H5E_NLINKS_g; /* Too many soft links in path */ +H5_DLLVAR hid_t H5E_NOTREGISTERED_g; /* Link class not registered */ +H5_DLLVAR hid_t H5E_TRAVERSE_g; /* Link traversal failure */ + +/* Map related errors */ +#define H5E_CANTPUT (H5OPEN H5E_CANTPUT_g) +H5_DLLVAR hid_t H5E_CANTPUT_g; /* Can't put value */ + +/* Parallel MPI errors */ +#define H5E_CANTGATHER (H5OPEN H5E_CANTGATHER_g) +#define H5E_CANTRECV (H5OPEN H5E_CANTRECV_g) +#define H5E_MPI (H5OPEN H5E_MPI_g) +#define H5E_MPIERRSTR (H5OPEN H5E_MPIERRSTR_g) +#define H5E_NO_INDEPENDENT (H5OPEN H5E_NO_INDEPENDENT_g) +H5_DLLVAR hid_t H5E_CANTGATHER_g; /* Can't gather data */ +H5_DLLVAR hid_t H5E_CANTRECV_g; /* Can't receive data */ +H5_DLLVAR hid_t H5E_MPI_g; /* Some MPI function failed */ +H5_DLLVAR hid_t H5E_MPIERRSTR_g; /* MPI Error String */ +H5_DLLVAR hid_t H5E_NO_INDEPENDENT_g; /* Can't perform independent IO */ + +/* No error */ +#define H5E_NONE_MINOR (H5OPEN H5E_NONE_MINOR_g) +H5_DLLVAR hid_t H5E_NONE_MINOR_g; /* No error */ + +/* Object header related errors */ +#define H5E_ALIGNMENT (H5OPEN H5E_ALIGNMENT_g) +#define H5E_BADITER (H5OPEN H5E_BADITER_g) +#define H5E_BADMESG (H5OPEN H5E_BADMESG_g) +#define H5E_CANTDELETE (H5OPEN H5E_CANTDELETE_g) +#define H5E_CANTPACK (H5OPEN H5E_CANTPACK_g) +#define H5E_CANTRENAME (H5OPEN H5E_CANTRENAME_g) +#define H5E_CANTRESET (H5OPEN H5E_CANTRESET_g) +#define H5E_LINKCOUNT (H5OPEN H5E_LINKCOUNT_g) +#define H5E_VERSION (H5OPEN H5E_VERSION_g) +H5_DLLVAR hid_t H5E_ALIGNMENT_g; /* Alignment error */ +H5_DLLVAR hid_t H5E_BADITER_g; /* Iteration failed */ +H5_DLLVAR hid_t H5E_BADMESG_g; /* Unrecognized message */ +H5_DLLVAR hid_t H5E_CANTDELETE_g; /* Can't delete message */ +H5_DLLVAR hid_t H5E_CANTPACK_g; /* Can't pack messages */ +H5_DLLVAR hid_t H5E_CANTRENAME_g; /* Unable to rename object */ +H5_DLLVAR hid_t H5E_CANTRESET_g; /* Can't reset object */ +H5_DLLVAR hid_t H5E_LINKCOUNT_g; /* Bad object header link count */ +H5_DLLVAR hid_t H5E_VERSION_g; /* Wrong version number */ + +/* I/O pipeline errors */ +#define H5E_CALLBACK (H5OPEN H5E_CALLBACK_g) +#define H5E_CANAPPLY (H5OPEN H5E_CANAPPLY_g) +#define H5E_CANTFILTER (H5OPEN H5E_CANTFILTER_g) +#define H5E_NOENCODER (H5OPEN H5E_NOENCODER_g) +#define H5E_NOFILTER (H5OPEN H5E_NOFILTER_g) +#define H5E_SETLOCAL (H5OPEN H5E_SETLOCAL_g) +H5_DLLVAR hid_t H5E_CALLBACK_g; /* Callback failed */ +H5_DLLVAR hid_t H5E_CANAPPLY_g; /* Error from filter 'can apply' callback */ +H5_DLLVAR hid_t H5E_CANTFILTER_g; /* Filter operation failed */ +H5_DLLVAR hid_t H5E_NOENCODER_g; /* Filter present but encoding disabled */ +H5_DLLVAR hid_t H5E_NOFILTER_g; /* Requested filter is not available */ +H5_DLLVAR hid_t H5E_SETLOCAL_g; /* Error from filter 'set local' callback */ + +/* Property list errors */ +#define H5E_CANTGET (H5OPEN H5E_CANTGET_g) +#define H5E_CANTSET (H5OPEN H5E_CANTSET_g) +#define H5E_DUPCLASS (H5OPEN H5E_DUPCLASS_g) +#define H5E_SETDISALLOWED (H5OPEN H5E_SETDISALLOWED_g) +H5_DLLVAR hid_t H5E_CANTGET_g; /* Can't get value */ +H5_DLLVAR hid_t H5E_CANTSET_g; /* Can't set value */ +H5_DLLVAR hid_t H5E_DUPCLASS_g; /* Duplicate class name in parent class */ +H5_DLLVAR hid_t H5E_SETDISALLOWED_g; /* Disallowed operation */ + +/* Plugin errors */ +#define H5E_OPENERROR (H5OPEN H5E_OPENERROR_g) +H5_DLLVAR hid_t H5E_OPENERROR_g; /* Can't open directory or file */ + +/* Resource errors */ +#define H5E_ALREADYEXISTS (H5OPEN H5E_ALREADYEXISTS_g) +#define H5E_CANTALLOC (H5OPEN H5E_CANTALLOC_g) +#define H5E_CANTCOPY (H5OPEN H5E_CANTCOPY_g) +#define H5E_CANTFREE (H5OPEN H5E_CANTFREE_g) +#define H5E_CANTGC (H5OPEN H5E_CANTGC_g) +#define H5E_CANTGETSIZE (H5OPEN H5E_CANTGETSIZE_g) +#define H5E_CANTLOCK (H5OPEN H5E_CANTLOCK_g) +#define H5E_CANTUNLOCK (H5OPEN H5E_CANTUNLOCK_g) +#define H5E_NOSPACE (H5OPEN H5E_NOSPACE_g) +#define H5E_OBJOPEN (H5OPEN H5E_OBJOPEN_g) +H5_DLLVAR hid_t H5E_ALREADYEXISTS_g; /* Object already exists */ +H5_DLLVAR hid_t H5E_CANTALLOC_g; /* Can't allocate space */ +H5_DLLVAR hid_t H5E_CANTCOPY_g; /* Unable to copy object */ +H5_DLLVAR hid_t H5E_CANTFREE_g; /* Unable to free object */ +H5_DLLVAR hid_t H5E_CANTGC_g; /* Unable to garbage collect */ +H5_DLLVAR hid_t H5E_CANTGETSIZE_g; /* Unable to compute size */ +H5_DLLVAR hid_t H5E_CANTLOCK_g; /* Unable to lock object */ +H5_DLLVAR hid_t H5E_CANTUNLOCK_g; /* Unable to unlock object */ +H5_DLLVAR hid_t H5E_NOSPACE_g; /* No space available for allocation */ +H5_DLLVAR hid_t H5E_OBJOPEN_g; /* Object is already open */ + +/* System level errors */ +#define H5E_SYSERRSTR (H5OPEN H5E_SYSERRSTR_g) +H5_DLLVAR hid_t H5E_SYSERRSTR_g; /* System error message */ + +/* Datatype conversion errors */ +#define H5E_BADSIZE (H5OPEN H5E_BADSIZE_g) +#define H5E_CANTCONVERT (H5OPEN H5E_CANTCONVERT_g) +H5_DLLVAR hid_t H5E_BADSIZE_g; /* Bad size for object */ +H5_DLLVAR hid_t H5E_CANTCONVERT_g; /* Can't convert datatypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* H5Epubgen_H */ diff --git a/src/H5Eterm.h b/src/H5Eterm.h new file mode 100644 index 00000000000..63f9e4b0903 --- /dev/null +++ b/src/H5Eterm.h @@ -0,0 +1,259 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the LICENSE file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* Generated automatically by bin/make_err -- do not edit */ +/* Add new errors to H5err.txt file */ + +#ifndef H5Eterm_H +#define H5Eterm_H + +/* Reset major error IDs */ + H5E_ARGS_g = + H5E_ATTR_g = + H5E_BTREE_g = + H5E_CACHE_g = + H5E_CONTEXT_g = + H5E_DATASET_g = + H5E_DATASPACE_g = + H5E_DATATYPE_g = + H5E_EARRAY_g = + H5E_EFL_g = + H5E_ERROR_g = + H5E_EVENTSET_g = + H5E_FARRAY_g = + H5E_FILE_g = + H5E_FSPACE_g = + H5E_FUNC_g = + H5E_HEAP_g = + H5E_ID_g = + H5E_INTERNAL_g = + H5E_IO_g = + H5E_LIB_g = + H5E_LINK_g = + H5E_MAP_g = + H5E_NONE_MAJOR_g = + H5E_OHDR_g = + H5E_PAGEBUF_g = + H5E_PLINE_g = + H5E_PLIST_g = + H5E_PLUGIN_g = + H5E_REFERENCE_g = + H5E_RESOURCE_g = + H5E_RS_g = + H5E_SLIST_g = + H5E_SOHM_g = + H5E_STORAGE_g = + H5E_SYM_g = + H5E_THREADSAFE_g = + H5E_TST_g = + H5E_VFL_g = + H5E_VOL_g = + H5I_INVALID_HID; + +H5E_first_maj_id_g = H5I_INVALID_HID; +H5E_last_maj_id_g = H5I_INVALID_HID; + + +/* Reset minor error IDs */ + +/* ARGS: Argument errors */ + H5E_BADRANGE_g = + H5E_BADTYPE_g = + H5E_BADVALUE_g = + H5E_UNINITIALIZED_g = + H5E_UNSUPPORTED_g = + +/* ASYNC: Asynchronous operation errors */ + H5E_CANTCANCEL_g = + H5E_CANTWAIT_g = + +/* BTREE: B-tree related errors */ + H5E_CANTDECODE_g = + H5E_CANTENCODE_g = + H5E_CANTFIND_g = + H5E_CANTINSERT_g = + H5E_CANTLIST_g = + H5E_CANTMODIFY_g = + H5E_CANTREDISTRIBUTE_g = + H5E_CANTREMOVE_g = + H5E_CANTSPLIT_g = + H5E_CANTSWAP_g = + H5E_EXISTS_g = + H5E_NOTFOUND_g = + +/* CACHE: Cache related errors */ + H5E_CANTCLEAN_g = + H5E_CANTCORK_g = + H5E_CANTDEPEND_g = + H5E_CANTDIRTY_g = + H5E_CANTEXPUNGE_g = + H5E_CANTFLUSH_g = + H5E_CANTINS_g = + H5E_CANTLOAD_g = + H5E_CANTMARKCLEAN_g = + H5E_CANTMARKDIRTY_g = + H5E_CANTMARKSERIALIZED_g = + H5E_CANTMARKUNSERIALIZED_g = + H5E_CANTNOTIFY_g = + H5E_CANTPIN_g = + H5E_CANTPROTECT_g = + H5E_CANTRESIZE_g = + H5E_CANTSERIALIZE_g = + H5E_CANTTAG_g = + H5E_CANTUNCORK_g = + H5E_CANTUNDEPEND_g = + H5E_CANTUNPIN_g = + H5E_CANTUNPROTECT_g = + H5E_CANTUNSERIALIZE_g = + H5E_LOGGING_g = + H5E_NOTCACHED_g = + H5E_PROTECT_g = + H5E_SYSTEM_g = + +/* DSPACE: Dataspace errors */ + H5E_BADSELECT_g = + H5E_CANTAPPEND_g = + H5E_CANTCLIP_g = + H5E_CANTCOMPARE_g = + H5E_CANTCOUNT_g = + H5E_CANTNEXT_g = + H5E_CANTSELECT_g = + H5E_INCONSISTENTSTATE_g = + +/* FILE: Generic low-level file I/O errors */ + H5E_CLOSEERROR_g = + H5E_FCNTL_g = + H5E_OVERFLOW_g = + H5E_READERROR_g = + H5E_SEEKERROR_g = + H5E_WRITEERROR_g = + +/* FILEACC: File accessibility errors */ + H5E_BADFILE_g = + H5E_CANTCLOSEFILE_g = + H5E_CANTCREATE_g = + H5E_CANTDELETEFILE_g = + H5E_CANTLOCKFILE_g = + H5E_CANTOPENFILE_g = + H5E_CANTUNLOCKFILE_g = + H5E_FILEEXISTS_g = + H5E_FILEOPEN_g = + H5E_MOUNT_g = + H5E_NOTHDF5_g = + H5E_TRUNCATED_g = + H5E_UNMOUNT_g = + +/* FSPACE: Free space errors */ + H5E_CANTMERGE_g = + H5E_CANTREVIVE_g = + H5E_CANTSHRINK_g = + +/* FUNC: Function entry/exit interface errors */ + H5E_ALREADYINIT_g = + H5E_CANTINIT_g = + H5E_CANTRELEASE_g = + +/* GROUP: Group related errors */ + H5E_CANTCLOSEOBJ_g = + H5E_CANTOPENOBJ_g = + H5E_COMPLEN_g = + H5E_PATH_g = + +/* HEAP: Heap errors */ + H5E_CANTATTACH_g = + H5E_CANTCOMPUTE_g = + H5E_CANTEXTEND_g = + H5E_CANTOPERATE_g = + H5E_CANTRESTORE_g = + H5E_CANTUPDATE_g = + +/* ID: Object ID related errors */ + H5E_BADGROUP_g = + H5E_BADID_g = + H5E_CANTDEC_g = + H5E_CANTINC_g = + H5E_CANTREGISTER_g = + H5E_NOIDS_g = + +/* LINK: Link related errors */ + H5E_CANTMOVE_g = + H5E_CANTSORT_g = + H5E_NLINKS_g = + H5E_NOTREGISTERED_g = + H5E_TRAVERSE_g = + +/* MAP: Map related errors */ + H5E_CANTPUT_g = + +/* MPI: Parallel MPI errors */ + H5E_CANTGATHER_g = + H5E_CANTRECV_g = + H5E_MPI_g = + H5E_MPIERRSTR_g = + H5E_NO_INDEPENDENT_g = + +/* NONE: No error */ + H5E_NONE_MINOR_g = + +/* OHDR: Object header related errors */ + H5E_ALIGNMENT_g = + H5E_BADITER_g = + H5E_BADMESG_g = + H5E_CANTDELETE_g = + H5E_CANTPACK_g = + H5E_CANTRENAME_g = + H5E_CANTRESET_g = + H5E_LINKCOUNT_g = + H5E_VERSION_g = + +/* PIPELINE: I/O pipeline errors */ + H5E_CALLBACK_g = + H5E_CANAPPLY_g = + H5E_CANTFILTER_g = + H5E_NOENCODER_g = + H5E_NOFILTER_g = + H5E_SETLOCAL_g = + +/* PLIST: Property list errors */ + H5E_CANTGET_g = + H5E_CANTSET_g = + H5E_DUPCLASS_g = + H5E_SETDISALLOWED_g = + +/* PLUGIN: Plugin errors */ + H5E_OPENERROR_g = + +/* RESOURCE: Resource errors */ + H5E_ALREADYEXISTS_g = + H5E_CANTALLOC_g = + H5E_CANTCOPY_g = + H5E_CANTFREE_g = + H5E_CANTGC_g = + H5E_CANTGETSIZE_g = + H5E_CANTLOCK_g = + H5E_CANTUNLOCK_g = + H5E_NOSPACE_g = + H5E_OBJOPEN_g = + +/* SYSTEM: System level errors */ + H5E_SYSERRSTR_g = + +/* TYPECONV: Datatype conversion errors */ + H5E_BADSIZE_g = + H5E_CANTCONVERT_g = + H5I_INVALID_HID; + +H5E_first_min_id_g = H5I_INVALID_HID; +H5E_last_min_id_g = H5I_INVALID_HID; + + +#endif /* H5Eterm_H */ diff --git a/src/H5overflow.h b/src/H5overflow.h new file mode 100644 index 00000000000..022261c857d --- /dev/null +++ b/src/H5overflow.h @@ -0,0 +1,2953 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the LICENSE file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* Generated automatically by bin/make_overflow -- do not edit */ +/* Add new types to H5overflow.txt file */ + + +#ifndef H5overflow_H +#define H5overflow_H + + +/* Each type in this file is tested for assignment to the other types, + * and range checks are defined for bad assignments at run-time. + */ + +/* Assignment checks for unsigned */ + +/* src: unsigned, dst: int8_t */ +#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_INT8_T + #define ASSIGN_unsigned_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_INT8_T + #define ASSIGN_unsigned_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_INT8_T */ + #define ASSIGN_unsigned_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: unsigned dst: int8_t */ + +/* src: unsigned, dst: int */ +#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_INT + #define ASSIGN_unsigned_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_INT + #define ASSIGN_unsigned_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_INT */ + #define ASSIGN_unsigned_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: unsigned dst: int */ + +/* src: unsigned, dst: long */ +#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_LONG + #define ASSIGN_unsigned_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_LONG + #define ASSIGN_unsigned_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_LONG */ + #define ASSIGN_unsigned_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: unsigned dst: long */ + +/* src: unsigned, dst: int64_t */ +#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_INT64_T + #define ASSIGN_unsigned_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_INT64_T + #define ASSIGN_unsigned_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_INT64_T */ + #define ASSIGN_unsigned_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: unsigned dst: int64_t */ + +/* src: unsigned, dst: uint8_t */ +#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_UINT8_T + #define ASSIGN_unsigned_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_UINT8_T + #define ASSIGN_unsigned_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_UINT8_T */ + #define ASSIGN_unsigned_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: unsigned dst: uint8_t */ + +/* src: unsigned, dst: uint16_t */ +#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_UINT16_T + #define ASSIGN_unsigned_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_UINT16_T + #define ASSIGN_unsigned_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_UINT16_T */ + #define ASSIGN_unsigned_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: unsigned dst: uint16_t */ + +/* src: unsigned, dst: uint32_t */ +#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_UINT32_T + #define ASSIGN_unsigned_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_UINT32_T + #define ASSIGN_unsigned_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_UINT32_T */ + #define ASSIGN_unsigned_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: unsigned dst: uint32_t */ + +/* src: unsigned, dst: uint64_t */ +#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_UINT64_T + #define ASSIGN_unsigned_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_UINT64_T + #define ASSIGN_unsigned_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_UINT64_T */ + #define ASSIGN_unsigned_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: unsigned dst: uint64_t */ + +/* src: unsigned, dst: ptrdiff_t */ +#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_PTRDIFF_T + #define ASSIGN_unsigned_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_PTRDIFF_T + #define ASSIGN_unsigned_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_PTRDIFF_T */ + #define ASSIGN_unsigned_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: unsigned dst: ptrdiff_t */ + +/* src: unsigned, dst: size_t */ +#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_SIZE_T + #define ASSIGN_unsigned_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_SIZE_T + #define ASSIGN_unsigned_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_SIZE_T */ + #define ASSIGN_unsigned_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: unsigned dst: size_t */ + +/* src: unsigned, dst: ssize_t */ +#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_SSIZE_T + #define ASSIGN_unsigned_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_SSIZE_T + #define ASSIGN_unsigned_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_SSIZE_T */ + #define ASSIGN_unsigned_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: unsigned dst: ssize_t */ + +/* src: unsigned, dst: haddr_t */ +#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_HADDR_T + #define ASSIGN_unsigned_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_HADDR_T + #define ASSIGN_unsigned_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_HADDR_T */ + #define ASSIGN_unsigned_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: unsigned dst: haddr_t */ + +/* src: unsigned, dst: hsize_t */ +#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_HSIZE_T + #define ASSIGN_unsigned_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_HSIZE_T + #define ASSIGN_unsigned_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_HSIZE_T */ + #define ASSIGN_unsigned_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: unsigned dst: hsize_t */ + +/* src: unsigned, dst: hssize_t */ +#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_HSSIZE_T + #define ASSIGN_unsigned_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_HSSIZE_T + #define ASSIGN_unsigned_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_HSSIZE_T */ + #define ASSIGN_unsigned_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: unsigned dst: hssize_t */ + +/* src: unsigned, dst: h5_stat_size_t */ +#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_unsigned_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_unsigned_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_H5_STAT_SIZE_T */ + #define ASSIGN_unsigned_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: unsigned dst: h5_stat_size_t */ + + +/* Assignment checks for int8_t */ + +/* src: int8_t, dst: unsigned */ +#if H5_SIZEOF_INT8_T < H5_SIZEOF_UNSIGNED + #define ASSIGN_int8_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT8_T > H5_SIZEOF_UNSIGNED + #define ASSIGN_int8_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT8_T == H5_SIZEOF_UNSIGNED */ + #define ASSIGN_int8_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int8_t dst: unsigned */ + +/* src: int8_t, dst: int */ +#if H5_SIZEOF_INT8_T < H5_SIZEOF_INT + #define ASSIGN_int8_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT8_T > H5_SIZEOF_INT + #define ASSIGN_int8_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT8_T == H5_SIZEOF_INT */ + #define ASSIGN_int8_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int8_t dst: int */ + +/* src: int8_t, dst: long */ +#if H5_SIZEOF_INT8_T < H5_SIZEOF_LONG + #define ASSIGN_int8_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT8_T > H5_SIZEOF_LONG + #define ASSIGN_int8_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT8_T == H5_SIZEOF_LONG */ + #define ASSIGN_int8_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int8_t dst: long */ + +/* src: int8_t, dst: int64_t */ +#if H5_SIZEOF_INT8_T < H5_SIZEOF_INT64_T + #define ASSIGN_int8_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT8_T > H5_SIZEOF_INT64_T + #define ASSIGN_int8_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT8_T == H5_SIZEOF_INT64_T */ + #define ASSIGN_int8_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int8_t dst: int64_t */ + +/* src: int8_t, dst: uint8_t */ +#if H5_SIZEOF_INT8_T < H5_SIZEOF_UINT8_T + #define ASSIGN_int8_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT8_T > H5_SIZEOF_UINT8_T + #define ASSIGN_int8_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT8_T == H5_SIZEOF_UINT8_T */ + #define ASSIGN_int8_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int8_t dst: uint8_t */ + +/* src: int8_t, dst: uint16_t */ +#if H5_SIZEOF_INT8_T < H5_SIZEOF_UINT16_T + #define ASSIGN_int8_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT8_T > H5_SIZEOF_UINT16_T + #define ASSIGN_int8_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT8_T == H5_SIZEOF_UINT16_T */ + #define ASSIGN_int8_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int8_t dst: uint16_t */ + +/* src: int8_t, dst: uint32_t */ +#if H5_SIZEOF_INT8_T < H5_SIZEOF_UINT32_T + #define ASSIGN_int8_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT8_T > H5_SIZEOF_UINT32_T + #define ASSIGN_int8_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT8_T == H5_SIZEOF_UINT32_T */ + #define ASSIGN_int8_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int8_t dst: uint32_t */ + +/* src: int8_t, dst: uint64_t */ +#if H5_SIZEOF_INT8_T < H5_SIZEOF_UINT64_T + #define ASSIGN_int8_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT8_T > H5_SIZEOF_UINT64_T + #define ASSIGN_int8_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT8_T == H5_SIZEOF_UINT64_T */ + #define ASSIGN_int8_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int8_t dst: uint64_t */ + +/* src: int8_t, dst: ptrdiff_t */ +#if H5_SIZEOF_INT8_T < H5_SIZEOF_PTRDIFF_T + #define ASSIGN_int8_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT8_T > H5_SIZEOF_PTRDIFF_T + #define ASSIGN_int8_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT8_T == H5_SIZEOF_PTRDIFF_T */ + #define ASSIGN_int8_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int8_t dst: ptrdiff_t */ + +/* src: int8_t, dst: size_t */ +#if H5_SIZEOF_INT8_T < H5_SIZEOF_SIZE_T + #define ASSIGN_int8_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT8_T > H5_SIZEOF_SIZE_T + #define ASSIGN_int8_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT8_T == H5_SIZEOF_SIZE_T */ + #define ASSIGN_int8_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int8_t dst: size_t */ + +/* src: int8_t, dst: ssize_t */ +#if H5_SIZEOF_INT8_T < H5_SIZEOF_SSIZE_T + #define ASSIGN_int8_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT8_T > H5_SIZEOF_SSIZE_T + #define ASSIGN_int8_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT8_T == H5_SIZEOF_SSIZE_T */ + #define ASSIGN_int8_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int8_t dst: ssize_t */ + +/* src: int8_t, dst: haddr_t */ +#if H5_SIZEOF_INT8_T < H5_SIZEOF_HADDR_T + #define ASSIGN_int8_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT8_T > H5_SIZEOF_HADDR_T + #define ASSIGN_int8_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT8_T == H5_SIZEOF_HADDR_T */ + #define ASSIGN_int8_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int8_t dst: haddr_t */ + +/* src: int8_t, dst: hsize_t */ +#if H5_SIZEOF_INT8_T < H5_SIZEOF_HSIZE_T + #define ASSIGN_int8_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT8_T > H5_SIZEOF_HSIZE_T + #define ASSIGN_int8_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT8_T == H5_SIZEOF_HSIZE_T */ + #define ASSIGN_int8_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int8_t dst: hsize_t */ + +/* src: int8_t, dst: hssize_t */ +#if H5_SIZEOF_INT8_T < H5_SIZEOF_HSSIZE_T + #define ASSIGN_int8_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT8_T > H5_SIZEOF_HSSIZE_T + #define ASSIGN_int8_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT8_T == H5_SIZEOF_HSSIZE_T */ + #define ASSIGN_int8_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int8_t dst: hssize_t */ + +/* src: int8_t, dst: h5_stat_size_t */ +#if H5_SIZEOF_INT8_T < H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_int8_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT8_T > H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_int8_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT8_T == H5_SIZEOF_H5_STAT_SIZE_T */ + #define ASSIGN_int8_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int8_t dst: h5_stat_size_t */ + + +/* Assignment checks for int */ + +/* src: int, dst: unsigned */ +#if H5_SIZEOF_INT < H5_SIZEOF_UNSIGNED + #define ASSIGN_int_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT > H5_SIZEOF_UNSIGNED + #define ASSIGN_int_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT == H5_SIZEOF_UNSIGNED */ + #define ASSIGN_int_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int dst: unsigned */ + +/* src: int, dst: int8_t */ +#if H5_SIZEOF_INT < H5_SIZEOF_INT8_T + #define ASSIGN_int_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT > H5_SIZEOF_INT8_T + #define ASSIGN_int_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT == H5_SIZEOF_INT8_T */ + #define ASSIGN_int_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int dst: int8_t */ + +/* src: int, dst: long */ +#if H5_SIZEOF_INT < H5_SIZEOF_LONG + #define ASSIGN_int_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT > H5_SIZEOF_LONG + #define ASSIGN_int_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT == H5_SIZEOF_LONG */ + #define ASSIGN_int_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int dst: long */ + +/* src: int, dst: int64_t */ +#if H5_SIZEOF_INT < H5_SIZEOF_INT64_T + #define ASSIGN_int_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT > H5_SIZEOF_INT64_T + #define ASSIGN_int_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT == H5_SIZEOF_INT64_T */ + #define ASSIGN_int_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int dst: int64_t */ + +/* src: int, dst: uint8_t */ +#if H5_SIZEOF_INT < H5_SIZEOF_UINT8_T + #define ASSIGN_int_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT > H5_SIZEOF_UINT8_T + #define ASSIGN_int_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT == H5_SIZEOF_UINT8_T */ + #define ASSIGN_int_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int dst: uint8_t */ + +/* src: int, dst: uint16_t */ +#if H5_SIZEOF_INT < H5_SIZEOF_UINT16_T + #define ASSIGN_int_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT > H5_SIZEOF_UINT16_T + #define ASSIGN_int_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT == H5_SIZEOF_UINT16_T */ + #define ASSIGN_int_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int dst: uint16_t */ + +/* src: int, dst: uint32_t */ +#if H5_SIZEOF_INT < H5_SIZEOF_UINT32_T + #define ASSIGN_int_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT > H5_SIZEOF_UINT32_T + #define ASSIGN_int_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT == H5_SIZEOF_UINT32_T */ + #define ASSIGN_int_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int dst: uint32_t */ + +/* src: int, dst: uint64_t */ +#if H5_SIZEOF_INT < H5_SIZEOF_UINT64_T + #define ASSIGN_int_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT > H5_SIZEOF_UINT64_T + #define ASSIGN_int_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT == H5_SIZEOF_UINT64_T */ + #define ASSIGN_int_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int dst: uint64_t */ + +/* src: int, dst: ptrdiff_t */ +#if H5_SIZEOF_INT < H5_SIZEOF_PTRDIFF_T + #define ASSIGN_int_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT > H5_SIZEOF_PTRDIFF_T + #define ASSIGN_int_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT == H5_SIZEOF_PTRDIFF_T */ + #define ASSIGN_int_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int dst: ptrdiff_t */ + +/* src: int, dst: size_t */ +#if H5_SIZEOF_INT < H5_SIZEOF_SIZE_T + #define ASSIGN_int_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT > H5_SIZEOF_SIZE_T + #define ASSIGN_int_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT == H5_SIZEOF_SIZE_T */ + #define ASSIGN_int_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int dst: size_t */ + +/* src: int, dst: ssize_t */ +#if H5_SIZEOF_INT < H5_SIZEOF_SSIZE_T + #define ASSIGN_int_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT > H5_SIZEOF_SSIZE_T + #define ASSIGN_int_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT == H5_SIZEOF_SSIZE_T */ + #define ASSIGN_int_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int dst: ssize_t */ + +/* src: int, dst: haddr_t */ +#if H5_SIZEOF_INT < H5_SIZEOF_HADDR_T + #define ASSIGN_int_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT > H5_SIZEOF_HADDR_T + #define ASSIGN_int_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT == H5_SIZEOF_HADDR_T */ + #define ASSIGN_int_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int dst: haddr_t */ + +/* src: int, dst: hsize_t */ +#if H5_SIZEOF_INT < H5_SIZEOF_HSIZE_T + #define ASSIGN_int_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT > H5_SIZEOF_HSIZE_T + #define ASSIGN_int_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT == H5_SIZEOF_HSIZE_T */ + #define ASSIGN_int_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int dst: hsize_t */ + +/* src: int, dst: hssize_t */ +#if H5_SIZEOF_INT < H5_SIZEOF_HSSIZE_T + #define ASSIGN_int_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT > H5_SIZEOF_HSSIZE_T + #define ASSIGN_int_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT == H5_SIZEOF_HSSIZE_T */ + #define ASSIGN_int_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int dst: hssize_t */ + +/* src: int, dst: h5_stat_size_t */ +#if H5_SIZEOF_INT < H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_int_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT > H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_int_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT == H5_SIZEOF_H5_STAT_SIZE_T */ + #define ASSIGN_int_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int dst: h5_stat_size_t */ + + +/* Assignment checks for long */ + +/* src: long, dst: unsigned */ +#if H5_SIZEOF_LONG < H5_SIZEOF_UNSIGNED + #define ASSIGN_long_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_LONG > H5_SIZEOF_UNSIGNED + #define ASSIGN_long_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_LONG == H5_SIZEOF_UNSIGNED */ + #define ASSIGN_long_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: long dst: unsigned */ + +/* src: long, dst: int8_t */ +#if H5_SIZEOF_LONG < H5_SIZEOF_INT8_T + #define ASSIGN_long_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_LONG > H5_SIZEOF_INT8_T + #define ASSIGN_long_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_LONG == H5_SIZEOF_INT8_T */ + #define ASSIGN_long_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: long dst: int8_t */ + +/* src: long, dst: int */ +#if H5_SIZEOF_LONG < H5_SIZEOF_INT + #define ASSIGN_long_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_LONG > H5_SIZEOF_INT + #define ASSIGN_long_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_LONG == H5_SIZEOF_INT */ + #define ASSIGN_long_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: long dst: int */ + +/* src: long, dst: int64_t */ +#if H5_SIZEOF_LONG < H5_SIZEOF_INT64_T + #define ASSIGN_long_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_LONG > H5_SIZEOF_INT64_T + #define ASSIGN_long_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_LONG == H5_SIZEOF_INT64_T */ + #define ASSIGN_long_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: long dst: int64_t */ + +/* src: long, dst: uint8_t */ +#if H5_SIZEOF_LONG < H5_SIZEOF_UINT8_T + #define ASSIGN_long_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_LONG > H5_SIZEOF_UINT8_T + #define ASSIGN_long_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_LONG == H5_SIZEOF_UINT8_T */ + #define ASSIGN_long_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: long dst: uint8_t */ + +/* src: long, dst: uint16_t */ +#if H5_SIZEOF_LONG < H5_SIZEOF_UINT16_T + #define ASSIGN_long_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_LONG > H5_SIZEOF_UINT16_T + #define ASSIGN_long_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_LONG == H5_SIZEOF_UINT16_T */ + #define ASSIGN_long_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: long dst: uint16_t */ + +/* src: long, dst: uint32_t */ +#if H5_SIZEOF_LONG < H5_SIZEOF_UINT32_T + #define ASSIGN_long_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_LONG > H5_SIZEOF_UINT32_T + #define ASSIGN_long_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_LONG == H5_SIZEOF_UINT32_T */ + #define ASSIGN_long_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: long dst: uint32_t */ + +/* src: long, dst: uint64_t */ +#if H5_SIZEOF_LONG < H5_SIZEOF_UINT64_T + #define ASSIGN_long_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_LONG > H5_SIZEOF_UINT64_T + #define ASSIGN_long_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_LONG == H5_SIZEOF_UINT64_T */ + #define ASSIGN_long_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: long dst: uint64_t */ + +/* src: long, dst: ptrdiff_t */ +#if H5_SIZEOF_LONG < H5_SIZEOF_PTRDIFF_T + #define ASSIGN_long_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_LONG > H5_SIZEOF_PTRDIFF_T + #define ASSIGN_long_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_LONG == H5_SIZEOF_PTRDIFF_T */ + #define ASSIGN_long_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: long dst: ptrdiff_t */ + +/* src: long, dst: size_t */ +#if H5_SIZEOF_LONG < H5_SIZEOF_SIZE_T + #define ASSIGN_long_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_LONG > H5_SIZEOF_SIZE_T + #define ASSIGN_long_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_LONG == H5_SIZEOF_SIZE_T */ + #define ASSIGN_long_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: long dst: size_t */ + +/* src: long, dst: ssize_t */ +#if H5_SIZEOF_LONG < H5_SIZEOF_SSIZE_T + #define ASSIGN_long_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_LONG > H5_SIZEOF_SSIZE_T + #define ASSIGN_long_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_LONG == H5_SIZEOF_SSIZE_T */ + #define ASSIGN_long_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: long dst: ssize_t */ + +/* src: long, dst: haddr_t */ +#if H5_SIZEOF_LONG < H5_SIZEOF_HADDR_T + #define ASSIGN_long_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_LONG > H5_SIZEOF_HADDR_T + #define ASSIGN_long_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_LONG == H5_SIZEOF_HADDR_T */ + #define ASSIGN_long_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: long dst: haddr_t */ + +/* src: long, dst: hsize_t */ +#if H5_SIZEOF_LONG < H5_SIZEOF_HSIZE_T + #define ASSIGN_long_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_LONG > H5_SIZEOF_HSIZE_T + #define ASSIGN_long_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_LONG == H5_SIZEOF_HSIZE_T */ + #define ASSIGN_long_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: long dst: hsize_t */ + +/* src: long, dst: hssize_t */ +#if H5_SIZEOF_LONG < H5_SIZEOF_HSSIZE_T + #define ASSIGN_long_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_LONG > H5_SIZEOF_HSSIZE_T + #define ASSIGN_long_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_LONG == H5_SIZEOF_HSSIZE_T */ + #define ASSIGN_long_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: long dst: hssize_t */ + +/* src: long, dst: h5_stat_size_t */ +#if H5_SIZEOF_LONG < H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_long_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_LONG > H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_long_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_LONG == H5_SIZEOF_H5_STAT_SIZE_T */ + #define ASSIGN_long_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: long dst: h5_stat_size_t */ + + +/* Assignment checks for int64_t */ + +/* src: int64_t, dst: unsigned */ +#if H5_SIZEOF_INT64_T < H5_SIZEOF_UNSIGNED + #define ASSIGN_int64_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT64_T > H5_SIZEOF_UNSIGNED + #define ASSIGN_int64_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT64_T == H5_SIZEOF_UNSIGNED */ + #define ASSIGN_int64_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int64_t dst: unsigned */ + +/* src: int64_t, dst: int8_t */ +#if H5_SIZEOF_INT64_T < H5_SIZEOF_INT8_T + #define ASSIGN_int64_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT64_T > H5_SIZEOF_INT8_T + #define ASSIGN_int64_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT64_T == H5_SIZEOF_INT8_T */ + #define ASSIGN_int64_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int64_t dst: int8_t */ + +/* src: int64_t, dst: int */ +#if H5_SIZEOF_INT64_T < H5_SIZEOF_INT + #define ASSIGN_int64_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT64_T > H5_SIZEOF_INT + #define ASSIGN_int64_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT64_T == H5_SIZEOF_INT */ + #define ASSIGN_int64_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int64_t dst: int */ + +/* src: int64_t, dst: long */ +#if H5_SIZEOF_INT64_T < H5_SIZEOF_LONG + #define ASSIGN_int64_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT64_T > H5_SIZEOF_LONG + #define ASSIGN_int64_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT64_T == H5_SIZEOF_LONG */ + #define ASSIGN_int64_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int64_t dst: long */ + +/* src: int64_t, dst: uint8_t */ +#if H5_SIZEOF_INT64_T < H5_SIZEOF_UINT8_T + #define ASSIGN_int64_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT64_T > H5_SIZEOF_UINT8_T + #define ASSIGN_int64_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT64_T == H5_SIZEOF_UINT8_T */ + #define ASSIGN_int64_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int64_t dst: uint8_t */ + +/* src: int64_t, dst: uint16_t */ +#if H5_SIZEOF_INT64_T < H5_SIZEOF_UINT16_T + #define ASSIGN_int64_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT64_T > H5_SIZEOF_UINT16_T + #define ASSIGN_int64_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT64_T == H5_SIZEOF_UINT16_T */ + #define ASSIGN_int64_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int64_t dst: uint16_t */ + +/* src: int64_t, dst: uint32_t */ +#if H5_SIZEOF_INT64_T < H5_SIZEOF_UINT32_T + #define ASSIGN_int64_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT64_T > H5_SIZEOF_UINT32_T + #define ASSIGN_int64_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT64_T == H5_SIZEOF_UINT32_T */ + #define ASSIGN_int64_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int64_t dst: uint32_t */ + +/* src: int64_t, dst: uint64_t */ +#if H5_SIZEOF_INT64_T < H5_SIZEOF_UINT64_T + #define ASSIGN_int64_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT64_T > H5_SIZEOF_UINT64_T + #define ASSIGN_int64_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT64_T == H5_SIZEOF_UINT64_T */ + #define ASSIGN_int64_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int64_t dst: uint64_t */ + +/* src: int64_t, dst: ptrdiff_t */ +#if H5_SIZEOF_INT64_T < H5_SIZEOF_PTRDIFF_T + #define ASSIGN_int64_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT64_T > H5_SIZEOF_PTRDIFF_T + #define ASSIGN_int64_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT64_T == H5_SIZEOF_PTRDIFF_T */ + #define ASSIGN_int64_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int64_t dst: ptrdiff_t */ + +/* src: int64_t, dst: size_t */ +#if H5_SIZEOF_INT64_T < H5_SIZEOF_SIZE_T + #define ASSIGN_int64_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT64_T > H5_SIZEOF_SIZE_T + #define ASSIGN_int64_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT64_T == H5_SIZEOF_SIZE_T */ + #define ASSIGN_int64_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int64_t dst: size_t */ + +/* src: int64_t, dst: ssize_t */ +#if H5_SIZEOF_INT64_T < H5_SIZEOF_SSIZE_T + #define ASSIGN_int64_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT64_T > H5_SIZEOF_SSIZE_T + #define ASSIGN_int64_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT64_T == H5_SIZEOF_SSIZE_T */ + #define ASSIGN_int64_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int64_t dst: ssize_t */ + +/* src: int64_t, dst: haddr_t */ +#if H5_SIZEOF_INT64_T < H5_SIZEOF_HADDR_T + #define ASSIGN_int64_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT64_T > H5_SIZEOF_HADDR_T + #define ASSIGN_int64_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT64_T == H5_SIZEOF_HADDR_T */ + #define ASSIGN_int64_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int64_t dst: haddr_t */ + +/* src: int64_t, dst: hsize_t */ +#if H5_SIZEOF_INT64_T < H5_SIZEOF_HSIZE_T + #define ASSIGN_int64_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT64_T > H5_SIZEOF_HSIZE_T + #define ASSIGN_int64_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT64_T == H5_SIZEOF_HSIZE_T */ + #define ASSIGN_int64_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int64_t dst: hsize_t */ + +/* src: int64_t, dst: hssize_t */ +#if H5_SIZEOF_INT64_T < H5_SIZEOF_HSSIZE_T + #define ASSIGN_int64_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT64_T > H5_SIZEOF_HSSIZE_T + #define ASSIGN_int64_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT64_T == H5_SIZEOF_HSSIZE_T */ + #define ASSIGN_int64_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: int64_t dst: hssize_t */ + +/* src: int64_t, dst: h5_stat_size_t */ +#if H5_SIZEOF_INT64_T < H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_int64_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_INT64_T > H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_int64_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_INT64_T == H5_SIZEOF_H5_STAT_SIZE_T */ + #define ASSIGN_int64_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: int64_t dst: h5_stat_size_t */ + + +/* Assignment checks for uint8_t */ + +/* src: uint8_t, dst: unsigned */ +#if H5_SIZEOF_UINT8_T < H5_SIZEOF_UNSIGNED + #define ASSIGN_uint8_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_UNSIGNED + #define ASSIGN_uint8_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_UNSIGNED */ + #define ASSIGN_uint8_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint8_t dst: unsigned */ + +/* src: uint8_t, dst: int8_t */ +#if H5_SIZEOF_UINT8_T < H5_SIZEOF_INT8_T + #define ASSIGN_uint8_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_INT8_T + #define ASSIGN_uint8_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_INT8_T */ + #define ASSIGN_uint8_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint8_t dst: int8_t */ + +/* src: uint8_t, dst: int */ +#if H5_SIZEOF_UINT8_T < H5_SIZEOF_INT + #define ASSIGN_uint8_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_INT + #define ASSIGN_uint8_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_INT */ + #define ASSIGN_uint8_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint8_t dst: int */ + +/* src: uint8_t, dst: long */ +#if H5_SIZEOF_UINT8_T < H5_SIZEOF_LONG + #define ASSIGN_uint8_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_LONG + #define ASSIGN_uint8_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_LONG */ + #define ASSIGN_uint8_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint8_t dst: long */ + +/* src: uint8_t, dst: int64_t */ +#if H5_SIZEOF_UINT8_T < H5_SIZEOF_INT64_T + #define ASSIGN_uint8_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_INT64_T + #define ASSIGN_uint8_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_INT64_T */ + #define ASSIGN_uint8_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint8_t dst: int64_t */ + +/* src: uint8_t, dst: uint16_t */ +#if H5_SIZEOF_UINT8_T < H5_SIZEOF_UINT16_T + #define ASSIGN_uint8_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_UINT16_T + #define ASSIGN_uint8_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_UINT16_T */ + #define ASSIGN_uint8_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint8_t dst: uint16_t */ + +/* src: uint8_t, dst: uint32_t */ +#if H5_SIZEOF_UINT8_T < H5_SIZEOF_UINT32_T + #define ASSIGN_uint8_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_UINT32_T + #define ASSIGN_uint8_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_UINT32_T */ + #define ASSIGN_uint8_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint8_t dst: uint32_t */ + +/* src: uint8_t, dst: uint64_t */ +#if H5_SIZEOF_UINT8_T < H5_SIZEOF_UINT64_T + #define ASSIGN_uint8_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_UINT64_T + #define ASSIGN_uint8_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_UINT64_T */ + #define ASSIGN_uint8_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint8_t dst: uint64_t */ + +/* src: uint8_t, dst: ptrdiff_t */ +#if H5_SIZEOF_UINT8_T < H5_SIZEOF_PTRDIFF_T + #define ASSIGN_uint8_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_PTRDIFF_T + #define ASSIGN_uint8_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_PTRDIFF_T */ + #define ASSIGN_uint8_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint8_t dst: ptrdiff_t */ + +/* src: uint8_t, dst: size_t */ +#if H5_SIZEOF_UINT8_T < H5_SIZEOF_SIZE_T + #define ASSIGN_uint8_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_SIZE_T + #define ASSIGN_uint8_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_SIZE_T */ + #define ASSIGN_uint8_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint8_t dst: size_t */ + +/* src: uint8_t, dst: ssize_t */ +#if H5_SIZEOF_UINT8_T < H5_SIZEOF_SSIZE_T + #define ASSIGN_uint8_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_SSIZE_T + #define ASSIGN_uint8_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_SSIZE_T */ + #define ASSIGN_uint8_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint8_t dst: ssize_t */ + +/* src: uint8_t, dst: haddr_t */ +#if H5_SIZEOF_UINT8_T < H5_SIZEOF_HADDR_T + #define ASSIGN_uint8_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_HADDR_T + #define ASSIGN_uint8_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_HADDR_T */ + #define ASSIGN_uint8_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint8_t dst: haddr_t */ + +/* src: uint8_t, dst: hsize_t */ +#if H5_SIZEOF_UINT8_T < H5_SIZEOF_HSIZE_T + #define ASSIGN_uint8_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_HSIZE_T + #define ASSIGN_uint8_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_HSIZE_T */ + #define ASSIGN_uint8_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint8_t dst: hsize_t */ + +/* src: uint8_t, dst: hssize_t */ +#if H5_SIZEOF_UINT8_T < H5_SIZEOF_HSSIZE_T + #define ASSIGN_uint8_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_HSSIZE_T + #define ASSIGN_uint8_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_HSSIZE_T */ + #define ASSIGN_uint8_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint8_t dst: hssize_t */ + +/* src: uint8_t, dst: h5_stat_size_t */ +#if H5_SIZEOF_UINT8_T < H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_uint8_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_uint8_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_H5_STAT_SIZE_T */ + #define ASSIGN_uint8_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint8_t dst: h5_stat_size_t */ + + +/* Assignment checks for uint16_t */ + +/* src: uint16_t, dst: unsigned */ +#if H5_SIZEOF_UINT16_T < H5_SIZEOF_UNSIGNED + #define ASSIGN_uint16_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_UNSIGNED + #define ASSIGN_uint16_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_UNSIGNED */ + #define ASSIGN_uint16_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint16_t dst: unsigned */ + +/* src: uint16_t, dst: int8_t */ +#if H5_SIZEOF_UINT16_T < H5_SIZEOF_INT8_T + #define ASSIGN_uint16_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_INT8_T + #define ASSIGN_uint16_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_INT8_T */ + #define ASSIGN_uint16_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint16_t dst: int8_t */ + +/* src: uint16_t, dst: int */ +#if H5_SIZEOF_UINT16_T < H5_SIZEOF_INT + #define ASSIGN_uint16_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_INT + #define ASSIGN_uint16_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_INT */ + #define ASSIGN_uint16_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint16_t dst: int */ + +/* src: uint16_t, dst: long */ +#if H5_SIZEOF_UINT16_T < H5_SIZEOF_LONG + #define ASSIGN_uint16_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_LONG + #define ASSIGN_uint16_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_LONG */ + #define ASSIGN_uint16_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint16_t dst: long */ + +/* src: uint16_t, dst: int64_t */ +#if H5_SIZEOF_UINT16_T < H5_SIZEOF_INT64_T + #define ASSIGN_uint16_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_INT64_T + #define ASSIGN_uint16_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_INT64_T */ + #define ASSIGN_uint16_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint16_t dst: int64_t */ + +/* src: uint16_t, dst: uint8_t */ +#if H5_SIZEOF_UINT16_T < H5_SIZEOF_UINT8_T + #define ASSIGN_uint16_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_UINT8_T + #define ASSIGN_uint16_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_UINT8_T */ + #define ASSIGN_uint16_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint16_t dst: uint8_t */ + +/* src: uint16_t, dst: uint32_t */ +#if H5_SIZEOF_UINT16_T < H5_SIZEOF_UINT32_T + #define ASSIGN_uint16_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_UINT32_T + #define ASSIGN_uint16_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_UINT32_T */ + #define ASSIGN_uint16_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint16_t dst: uint32_t */ + +/* src: uint16_t, dst: uint64_t */ +#if H5_SIZEOF_UINT16_T < H5_SIZEOF_UINT64_T + #define ASSIGN_uint16_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_UINT64_T + #define ASSIGN_uint16_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_UINT64_T */ + #define ASSIGN_uint16_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint16_t dst: uint64_t */ + +/* src: uint16_t, dst: ptrdiff_t */ +#if H5_SIZEOF_UINT16_T < H5_SIZEOF_PTRDIFF_T + #define ASSIGN_uint16_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_PTRDIFF_T + #define ASSIGN_uint16_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_PTRDIFF_T */ + #define ASSIGN_uint16_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint16_t dst: ptrdiff_t */ + +/* src: uint16_t, dst: size_t */ +#if H5_SIZEOF_UINT16_T < H5_SIZEOF_SIZE_T + #define ASSIGN_uint16_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_SIZE_T + #define ASSIGN_uint16_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_SIZE_T */ + #define ASSIGN_uint16_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint16_t dst: size_t */ + +/* src: uint16_t, dst: ssize_t */ +#if H5_SIZEOF_UINT16_T < H5_SIZEOF_SSIZE_T + #define ASSIGN_uint16_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_SSIZE_T + #define ASSIGN_uint16_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_SSIZE_T */ + #define ASSIGN_uint16_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint16_t dst: ssize_t */ + +/* src: uint16_t, dst: haddr_t */ +#if H5_SIZEOF_UINT16_T < H5_SIZEOF_HADDR_T + #define ASSIGN_uint16_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_HADDR_T + #define ASSIGN_uint16_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_HADDR_T */ + #define ASSIGN_uint16_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint16_t dst: haddr_t */ + +/* src: uint16_t, dst: hsize_t */ +#if H5_SIZEOF_UINT16_T < H5_SIZEOF_HSIZE_T + #define ASSIGN_uint16_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_HSIZE_T + #define ASSIGN_uint16_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_HSIZE_T */ + #define ASSIGN_uint16_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint16_t dst: hsize_t */ + +/* src: uint16_t, dst: hssize_t */ +#if H5_SIZEOF_UINT16_T < H5_SIZEOF_HSSIZE_T + #define ASSIGN_uint16_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_HSSIZE_T + #define ASSIGN_uint16_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_HSSIZE_T */ + #define ASSIGN_uint16_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint16_t dst: hssize_t */ + +/* src: uint16_t, dst: h5_stat_size_t */ +#if H5_SIZEOF_UINT16_T < H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_uint16_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_uint16_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_H5_STAT_SIZE_T */ + #define ASSIGN_uint16_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint16_t dst: h5_stat_size_t */ + + +/* Assignment checks for uint32_t */ + +/* src: uint32_t, dst: unsigned */ +#if H5_SIZEOF_UINT32_T < H5_SIZEOF_UNSIGNED + #define ASSIGN_uint32_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_UNSIGNED + #define ASSIGN_uint32_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_UNSIGNED */ + #define ASSIGN_uint32_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint32_t dst: unsigned */ + +/* src: uint32_t, dst: int8_t */ +#if H5_SIZEOF_UINT32_T < H5_SIZEOF_INT8_T + #define ASSIGN_uint32_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_INT8_T + #define ASSIGN_uint32_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_INT8_T */ + #define ASSIGN_uint32_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint32_t dst: int8_t */ + +/* src: uint32_t, dst: int */ +#if H5_SIZEOF_UINT32_T < H5_SIZEOF_INT + #define ASSIGN_uint32_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_INT + #define ASSIGN_uint32_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_INT */ + #define ASSIGN_uint32_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint32_t dst: int */ + +/* src: uint32_t, dst: long */ +#if H5_SIZEOF_UINT32_T < H5_SIZEOF_LONG + #define ASSIGN_uint32_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_LONG + #define ASSIGN_uint32_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_LONG */ + #define ASSIGN_uint32_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint32_t dst: long */ + +/* src: uint32_t, dst: int64_t */ +#if H5_SIZEOF_UINT32_T < H5_SIZEOF_INT64_T + #define ASSIGN_uint32_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_INT64_T + #define ASSIGN_uint32_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_INT64_T */ + #define ASSIGN_uint32_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint32_t dst: int64_t */ + +/* src: uint32_t, dst: uint8_t */ +#if H5_SIZEOF_UINT32_T < H5_SIZEOF_UINT8_T + #define ASSIGN_uint32_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_UINT8_T + #define ASSIGN_uint32_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_UINT8_T */ + #define ASSIGN_uint32_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint32_t dst: uint8_t */ + +/* src: uint32_t, dst: uint16_t */ +#if H5_SIZEOF_UINT32_T < H5_SIZEOF_UINT16_T + #define ASSIGN_uint32_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_UINT16_T + #define ASSIGN_uint32_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_UINT16_T */ + #define ASSIGN_uint32_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint32_t dst: uint16_t */ + +/* src: uint32_t, dst: uint64_t */ +#if H5_SIZEOF_UINT32_T < H5_SIZEOF_UINT64_T + #define ASSIGN_uint32_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_UINT64_T + #define ASSIGN_uint32_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_UINT64_T */ + #define ASSIGN_uint32_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint32_t dst: uint64_t */ + +/* src: uint32_t, dst: ptrdiff_t */ +#if H5_SIZEOF_UINT32_T < H5_SIZEOF_PTRDIFF_T + #define ASSIGN_uint32_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_PTRDIFF_T + #define ASSIGN_uint32_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_PTRDIFF_T */ + #define ASSIGN_uint32_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint32_t dst: ptrdiff_t */ + +/* src: uint32_t, dst: size_t */ +#if H5_SIZEOF_UINT32_T < H5_SIZEOF_SIZE_T + #define ASSIGN_uint32_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_SIZE_T + #define ASSIGN_uint32_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_SIZE_T */ + #define ASSIGN_uint32_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint32_t dst: size_t */ + +/* src: uint32_t, dst: ssize_t */ +#if H5_SIZEOF_UINT32_T < H5_SIZEOF_SSIZE_T + #define ASSIGN_uint32_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_SSIZE_T + #define ASSIGN_uint32_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_SSIZE_T */ + #define ASSIGN_uint32_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint32_t dst: ssize_t */ + +/* src: uint32_t, dst: haddr_t */ +#if H5_SIZEOF_UINT32_T < H5_SIZEOF_HADDR_T + #define ASSIGN_uint32_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_HADDR_T + #define ASSIGN_uint32_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_HADDR_T */ + #define ASSIGN_uint32_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint32_t dst: haddr_t */ + +/* src: uint32_t, dst: hsize_t */ +#if H5_SIZEOF_UINT32_T < H5_SIZEOF_HSIZE_T + #define ASSIGN_uint32_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_HSIZE_T + #define ASSIGN_uint32_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_HSIZE_T */ + #define ASSIGN_uint32_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint32_t dst: hsize_t */ + +/* src: uint32_t, dst: hssize_t */ +#if H5_SIZEOF_UINT32_T < H5_SIZEOF_HSSIZE_T + #define ASSIGN_uint32_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_HSSIZE_T + #define ASSIGN_uint32_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_HSSIZE_T */ + #define ASSIGN_uint32_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint32_t dst: hssize_t */ + +/* src: uint32_t, dst: h5_stat_size_t */ +#if H5_SIZEOF_UINT32_T < H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_uint32_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_uint32_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_H5_STAT_SIZE_T */ + #define ASSIGN_uint32_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint32_t dst: h5_stat_size_t */ + + +/* Assignment checks for uint64_t */ + +/* src: uint64_t, dst: unsigned */ +#if H5_SIZEOF_UINT64_T < H5_SIZEOF_UNSIGNED + #define ASSIGN_uint64_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_UNSIGNED + #define ASSIGN_uint64_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_UNSIGNED */ + #define ASSIGN_uint64_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint64_t dst: unsigned */ + +/* src: uint64_t, dst: int8_t */ +#if H5_SIZEOF_UINT64_T < H5_SIZEOF_INT8_T + #define ASSIGN_uint64_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_INT8_T + #define ASSIGN_uint64_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_INT8_T */ + #define ASSIGN_uint64_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint64_t dst: int8_t */ + +/* src: uint64_t, dst: int */ +#if H5_SIZEOF_UINT64_T < H5_SIZEOF_INT + #define ASSIGN_uint64_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_INT + #define ASSIGN_uint64_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_INT */ + #define ASSIGN_uint64_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint64_t dst: int */ + +/* src: uint64_t, dst: long */ +#if H5_SIZEOF_UINT64_T < H5_SIZEOF_LONG + #define ASSIGN_uint64_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_LONG + #define ASSIGN_uint64_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_LONG */ + #define ASSIGN_uint64_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint64_t dst: long */ + +/* src: uint64_t, dst: int64_t */ +#if H5_SIZEOF_UINT64_T < H5_SIZEOF_INT64_T + #define ASSIGN_uint64_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_INT64_T + #define ASSIGN_uint64_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_INT64_T */ + #define ASSIGN_uint64_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint64_t dst: int64_t */ + +/* src: uint64_t, dst: uint8_t */ +#if H5_SIZEOF_UINT64_T < H5_SIZEOF_UINT8_T + #define ASSIGN_uint64_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_UINT8_T + #define ASSIGN_uint64_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_UINT8_T */ + #define ASSIGN_uint64_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint64_t dst: uint8_t */ + +/* src: uint64_t, dst: uint16_t */ +#if H5_SIZEOF_UINT64_T < H5_SIZEOF_UINT16_T + #define ASSIGN_uint64_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_UINT16_T + #define ASSIGN_uint64_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_UINT16_T */ + #define ASSIGN_uint64_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint64_t dst: uint16_t */ + +/* src: uint64_t, dst: uint32_t */ +#if H5_SIZEOF_UINT64_T < H5_SIZEOF_UINT32_T + #define ASSIGN_uint64_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_UINT32_T + #define ASSIGN_uint64_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_UINT32_T */ + #define ASSIGN_uint64_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint64_t dst: uint32_t */ + +/* src: uint64_t, dst: ptrdiff_t */ +#if H5_SIZEOF_UINT64_T < H5_SIZEOF_PTRDIFF_T + #define ASSIGN_uint64_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_PTRDIFF_T + #define ASSIGN_uint64_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_PTRDIFF_T */ + #define ASSIGN_uint64_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint64_t dst: ptrdiff_t */ + +/* src: uint64_t, dst: size_t */ +#if H5_SIZEOF_UINT64_T < H5_SIZEOF_SIZE_T + #define ASSIGN_uint64_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_SIZE_T + #define ASSIGN_uint64_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_SIZE_T */ + #define ASSIGN_uint64_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint64_t dst: size_t */ + +/* src: uint64_t, dst: ssize_t */ +#if H5_SIZEOF_UINT64_T < H5_SIZEOF_SSIZE_T + #define ASSIGN_uint64_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_SSIZE_T + #define ASSIGN_uint64_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_SSIZE_T */ + #define ASSIGN_uint64_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint64_t dst: ssize_t */ + +/* src: uint64_t, dst: haddr_t */ +#if H5_SIZEOF_UINT64_T < H5_SIZEOF_HADDR_T + #define ASSIGN_uint64_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_HADDR_T + #define ASSIGN_uint64_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_HADDR_T */ + #define ASSIGN_uint64_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint64_t dst: haddr_t */ + +/* src: uint64_t, dst: hsize_t */ +#if H5_SIZEOF_UINT64_T < H5_SIZEOF_HSIZE_T + #define ASSIGN_uint64_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_HSIZE_T + #define ASSIGN_uint64_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_HSIZE_T */ + #define ASSIGN_uint64_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint64_t dst: hsize_t */ + +/* src: uint64_t, dst: hssize_t */ +#if H5_SIZEOF_UINT64_T < H5_SIZEOF_HSSIZE_T + #define ASSIGN_uint64_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_HSSIZE_T + #define ASSIGN_uint64_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_HSSIZE_T */ + #define ASSIGN_uint64_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint64_t dst: hssize_t */ + +/* src: uint64_t, dst: h5_stat_size_t */ +#if H5_SIZEOF_UINT64_T < H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_uint64_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_uint64_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_H5_STAT_SIZE_T */ + #define ASSIGN_uint64_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: uint64_t dst: h5_stat_size_t */ + + +/* Assignment checks for ptrdiff_t */ + +/* src: ptrdiff_t, dst: unsigned */ +#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_UNSIGNED + #define ASSIGN_ptrdiff_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_UNSIGNED + #define ASSIGN_ptrdiff_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_UNSIGNED */ + #define ASSIGN_ptrdiff_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ptrdiff_t dst: unsigned */ + +/* src: ptrdiff_t, dst: int8_t */ +#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_INT8_T + #define ASSIGN_ptrdiff_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_INT8_T + #define ASSIGN_ptrdiff_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_INT8_T */ + #define ASSIGN_ptrdiff_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: ptrdiff_t dst: int8_t */ + +/* src: ptrdiff_t, dst: int */ +#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_INT + #define ASSIGN_ptrdiff_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_INT + #define ASSIGN_ptrdiff_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_INT */ + #define ASSIGN_ptrdiff_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: ptrdiff_t dst: int */ + +/* src: ptrdiff_t, dst: long */ +#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_LONG + #define ASSIGN_ptrdiff_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_LONG + #define ASSIGN_ptrdiff_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_LONG */ + #define ASSIGN_ptrdiff_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: ptrdiff_t dst: long */ + +/* src: ptrdiff_t, dst: int64_t */ +#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_INT64_T + #define ASSIGN_ptrdiff_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_INT64_T + #define ASSIGN_ptrdiff_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_INT64_T */ + #define ASSIGN_ptrdiff_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: ptrdiff_t dst: int64_t */ + +/* src: ptrdiff_t, dst: uint8_t */ +#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_UINT8_T + #define ASSIGN_ptrdiff_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_UINT8_T + #define ASSIGN_ptrdiff_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_UINT8_T */ + #define ASSIGN_ptrdiff_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ptrdiff_t dst: uint8_t */ + +/* src: ptrdiff_t, dst: uint16_t */ +#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_UINT16_T + #define ASSIGN_ptrdiff_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_UINT16_T + #define ASSIGN_ptrdiff_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_UINT16_T */ + #define ASSIGN_ptrdiff_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ptrdiff_t dst: uint16_t */ + +/* src: ptrdiff_t, dst: uint32_t */ +#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_UINT32_T + #define ASSIGN_ptrdiff_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_UINT32_T + #define ASSIGN_ptrdiff_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_UINT32_T */ + #define ASSIGN_ptrdiff_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ptrdiff_t dst: uint32_t */ + +/* src: ptrdiff_t, dst: uint64_t */ +#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_UINT64_T + #define ASSIGN_ptrdiff_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_UINT64_T + #define ASSIGN_ptrdiff_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_UINT64_T */ + #define ASSIGN_ptrdiff_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ptrdiff_t dst: uint64_t */ + +/* src: ptrdiff_t, dst: size_t */ +#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_SIZE_T + #define ASSIGN_ptrdiff_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_SIZE_T + #define ASSIGN_ptrdiff_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_SIZE_T */ + #define ASSIGN_ptrdiff_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ptrdiff_t dst: size_t */ + +/* src: ptrdiff_t, dst: ssize_t */ +#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_SSIZE_T + #define ASSIGN_ptrdiff_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_SSIZE_T + #define ASSIGN_ptrdiff_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_SSIZE_T */ + #define ASSIGN_ptrdiff_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: ptrdiff_t dst: ssize_t */ + +/* src: ptrdiff_t, dst: haddr_t */ +#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_HADDR_T + #define ASSIGN_ptrdiff_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_HADDR_T + #define ASSIGN_ptrdiff_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_HADDR_T */ + #define ASSIGN_ptrdiff_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ptrdiff_t dst: haddr_t */ + +/* src: ptrdiff_t, dst: hsize_t */ +#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_HSIZE_T + #define ASSIGN_ptrdiff_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_HSIZE_T + #define ASSIGN_ptrdiff_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_HSIZE_T */ + #define ASSIGN_ptrdiff_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ptrdiff_t dst: hsize_t */ + +/* src: ptrdiff_t, dst: hssize_t */ +#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_HSSIZE_T + #define ASSIGN_ptrdiff_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_HSSIZE_T + #define ASSIGN_ptrdiff_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_HSSIZE_T */ + #define ASSIGN_ptrdiff_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: ptrdiff_t dst: hssize_t */ + +/* src: ptrdiff_t, dst: h5_stat_size_t */ +#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_ptrdiff_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_ptrdiff_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_H5_STAT_SIZE_T */ + #define ASSIGN_ptrdiff_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ptrdiff_t dst: h5_stat_size_t */ + + +/* Assignment checks for size_t */ + +/* src: size_t, dst: unsigned */ +#if H5_SIZEOF_SIZE_T < H5_SIZEOF_UNSIGNED + #define ASSIGN_size_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_UNSIGNED + #define ASSIGN_size_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_UNSIGNED */ + #define ASSIGN_size_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: size_t dst: unsigned */ + +/* src: size_t, dst: int8_t */ +#if H5_SIZEOF_SIZE_T < H5_SIZEOF_INT8_T + #define ASSIGN_size_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_INT8_T + #define ASSIGN_size_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_INT8_T */ + #define ASSIGN_size_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: size_t dst: int8_t */ + +/* src: size_t, dst: int */ +#if H5_SIZEOF_SIZE_T < H5_SIZEOF_INT + #define ASSIGN_size_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_INT + #define ASSIGN_size_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_INT */ + #define ASSIGN_size_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: size_t dst: int */ + +/* src: size_t, dst: long */ +#if H5_SIZEOF_SIZE_T < H5_SIZEOF_LONG + #define ASSIGN_size_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_LONG + #define ASSIGN_size_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_LONG */ + #define ASSIGN_size_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: size_t dst: long */ + +/* src: size_t, dst: int64_t */ +#if H5_SIZEOF_SIZE_T < H5_SIZEOF_INT64_T + #define ASSIGN_size_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_INT64_T + #define ASSIGN_size_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_INT64_T */ + #define ASSIGN_size_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: size_t dst: int64_t */ + +/* src: size_t, dst: uint8_t */ +#if H5_SIZEOF_SIZE_T < H5_SIZEOF_UINT8_T + #define ASSIGN_size_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_UINT8_T + #define ASSIGN_size_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_UINT8_T */ + #define ASSIGN_size_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: size_t dst: uint8_t */ + +/* src: size_t, dst: uint16_t */ +#if H5_SIZEOF_SIZE_T < H5_SIZEOF_UINT16_T + #define ASSIGN_size_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_UINT16_T + #define ASSIGN_size_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_UINT16_T */ + #define ASSIGN_size_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: size_t dst: uint16_t */ + +/* src: size_t, dst: uint32_t */ +#if H5_SIZEOF_SIZE_T < H5_SIZEOF_UINT32_T + #define ASSIGN_size_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_UINT32_T + #define ASSIGN_size_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_UINT32_T */ + #define ASSIGN_size_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: size_t dst: uint32_t */ + +/* src: size_t, dst: uint64_t */ +#if H5_SIZEOF_SIZE_T < H5_SIZEOF_UINT64_T + #define ASSIGN_size_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_UINT64_T + #define ASSIGN_size_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_UINT64_T */ + #define ASSIGN_size_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: size_t dst: uint64_t */ + +/* src: size_t, dst: ptrdiff_t */ +#if H5_SIZEOF_SIZE_T < H5_SIZEOF_PTRDIFF_T + #define ASSIGN_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_PTRDIFF_T + #define ASSIGN_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_PTRDIFF_T */ + #define ASSIGN_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: size_t dst: ptrdiff_t */ + +/* src: size_t, dst: ssize_t */ +#if H5_SIZEOF_SIZE_T < H5_SIZEOF_SSIZE_T + #define ASSIGN_size_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_SSIZE_T + #define ASSIGN_size_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_SSIZE_T */ + #define ASSIGN_size_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: size_t dst: ssize_t */ + +/* src: size_t, dst: haddr_t */ +#if H5_SIZEOF_SIZE_T < H5_SIZEOF_HADDR_T + #define ASSIGN_size_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_HADDR_T + #define ASSIGN_size_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_HADDR_T */ + #define ASSIGN_size_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: size_t dst: haddr_t */ + +/* src: size_t, dst: hsize_t */ +#if H5_SIZEOF_SIZE_T < H5_SIZEOF_HSIZE_T + #define ASSIGN_size_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_HSIZE_T + #define ASSIGN_size_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_HSIZE_T */ + #define ASSIGN_size_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: size_t dst: hsize_t */ + +/* src: size_t, dst: hssize_t */ +#if H5_SIZEOF_SIZE_T < H5_SIZEOF_HSSIZE_T + #define ASSIGN_size_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_HSSIZE_T + #define ASSIGN_size_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_HSSIZE_T */ + #define ASSIGN_size_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: size_t dst: hssize_t */ + +/* src: size_t, dst: h5_stat_size_t */ +#if H5_SIZEOF_SIZE_T < H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_size_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_size_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_H5_STAT_SIZE_T */ + #define ASSIGN_size_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: size_t dst: h5_stat_size_t */ + + +/* Assignment checks for ssize_t */ + +/* src: ssize_t, dst: unsigned */ +#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_UNSIGNED + #define ASSIGN_ssize_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_UNSIGNED + #define ASSIGN_ssize_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_UNSIGNED */ + #define ASSIGN_ssize_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ssize_t dst: unsigned */ + +/* src: ssize_t, dst: int8_t */ +#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_INT8_T + #define ASSIGN_ssize_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_INT8_T + #define ASSIGN_ssize_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_INT8_T */ + #define ASSIGN_ssize_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: ssize_t dst: int8_t */ + +/* src: ssize_t, dst: int */ +#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_INT + #define ASSIGN_ssize_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_INT + #define ASSIGN_ssize_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_INT */ + #define ASSIGN_ssize_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: ssize_t dst: int */ + +/* src: ssize_t, dst: long */ +#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_LONG + #define ASSIGN_ssize_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_LONG + #define ASSIGN_ssize_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_LONG */ + #define ASSIGN_ssize_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: ssize_t dst: long */ + +/* src: ssize_t, dst: int64_t */ +#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_INT64_T + #define ASSIGN_ssize_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_INT64_T + #define ASSIGN_ssize_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_INT64_T */ + #define ASSIGN_ssize_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: ssize_t dst: int64_t */ + +/* src: ssize_t, dst: uint8_t */ +#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_UINT8_T + #define ASSIGN_ssize_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_UINT8_T + #define ASSIGN_ssize_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_UINT8_T */ + #define ASSIGN_ssize_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ssize_t dst: uint8_t */ + +/* src: ssize_t, dst: uint16_t */ +#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_UINT16_T + #define ASSIGN_ssize_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_UINT16_T + #define ASSIGN_ssize_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_UINT16_T */ + #define ASSIGN_ssize_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ssize_t dst: uint16_t */ + +/* src: ssize_t, dst: uint32_t */ +#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_UINT32_T + #define ASSIGN_ssize_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_UINT32_T + #define ASSIGN_ssize_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_UINT32_T */ + #define ASSIGN_ssize_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ssize_t dst: uint32_t */ + +/* src: ssize_t, dst: uint64_t */ +#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_UINT64_T + #define ASSIGN_ssize_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_UINT64_T + #define ASSIGN_ssize_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_UINT64_T */ + #define ASSIGN_ssize_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ssize_t dst: uint64_t */ + +/* src: ssize_t, dst: ptrdiff_t */ +#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_PTRDIFF_T + #define ASSIGN_ssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_PTRDIFF_T + #define ASSIGN_ssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_PTRDIFF_T */ + #define ASSIGN_ssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: ssize_t dst: ptrdiff_t */ + +/* src: ssize_t, dst: size_t */ +#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_SIZE_T + #define ASSIGN_ssize_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_SIZE_T + #define ASSIGN_ssize_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_SIZE_T */ + #define ASSIGN_ssize_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ssize_t dst: size_t */ + +/* src: ssize_t, dst: haddr_t */ +#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_HADDR_T + #define ASSIGN_ssize_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_HADDR_T + #define ASSIGN_ssize_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_HADDR_T */ + #define ASSIGN_ssize_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ssize_t dst: haddr_t */ + +/* src: ssize_t, dst: hsize_t */ +#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_HSIZE_T + #define ASSIGN_ssize_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_HSIZE_T + #define ASSIGN_ssize_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_HSIZE_T */ + #define ASSIGN_ssize_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ssize_t dst: hsize_t */ + +/* src: ssize_t, dst: hssize_t */ +#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_HSSIZE_T + #define ASSIGN_ssize_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_HSSIZE_T + #define ASSIGN_ssize_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_HSSIZE_T */ + #define ASSIGN_ssize_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: ssize_t dst: hssize_t */ + +/* src: ssize_t, dst: h5_stat_size_t */ +#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_ssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_ssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_H5_STAT_SIZE_T */ + #define ASSIGN_ssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: ssize_t dst: h5_stat_size_t */ + + +/* Assignment checks for haddr_t */ + +/* src: haddr_t, dst: unsigned */ +#if H5_SIZEOF_HADDR_T < H5_SIZEOF_UNSIGNED + #define ASSIGN_haddr_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_UNSIGNED + #define ASSIGN_haddr_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_UNSIGNED */ + #define ASSIGN_haddr_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: haddr_t dst: unsigned */ + +/* src: haddr_t, dst: int8_t */ +#if H5_SIZEOF_HADDR_T < H5_SIZEOF_INT8_T + #define ASSIGN_haddr_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_INT8_T + #define ASSIGN_haddr_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_INT8_T */ + #define ASSIGN_haddr_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: haddr_t dst: int8_t */ + +/* src: haddr_t, dst: int */ +#if H5_SIZEOF_HADDR_T < H5_SIZEOF_INT + #define ASSIGN_haddr_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_INT + #define ASSIGN_haddr_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_INT */ + #define ASSIGN_haddr_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: haddr_t dst: int */ + +/* src: haddr_t, dst: long */ +#if H5_SIZEOF_HADDR_T < H5_SIZEOF_LONG + #define ASSIGN_haddr_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_LONG + #define ASSIGN_haddr_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_LONG */ + #define ASSIGN_haddr_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: haddr_t dst: long */ + +/* src: haddr_t, dst: int64_t */ +#if H5_SIZEOF_HADDR_T < H5_SIZEOF_INT64_T + #define ASSIGN_haddr_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_INT64_T + #define ASSIGN_haddr_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_INT64_T */ + #define ASSIGN_haddr_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: haddr_t dst: int64_t */ + +/* src: haddr_t, dst: uint8_t */ +#if H5_SIZEOF_HADDR_T < H5_SIZEOF_UINT8_T + #define ASSIGN_haddr_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_UINT8_T + #define ASSIGN_haddr_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_UINT8_T */ + #define ASSIGN_haddr_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: haddr_t dst: uint8_t */ + +/* src: haddr_t, dst: uint16_t */ +#if H5_SIZEOF_HADDR_T < H5_SIZEOF_UINT16_T + #define ASSIGN_haddr_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_UINT16_T + #define ASSIGN_haddr_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_UINT16_T */ + #define ASSIGN_haddr_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: haddr_t dst: uint16_t */ + +/* src: haddr_t, dst: uint32_t */ +#if H5_SIZEOF_HADDR_T < H5_SIZEOF_UINT32_T + #define ASSIGN_haddr_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_UINT32_T + #define ASSIGN_haddr_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_UINT32_T */ + #define ASSIGN_haddr_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: haddr_t dst: uint32_t */ + +/* src: haddr_t, dst: uint64_t */ +#if H5_SIZEOF_HADDR_T < H5_SIZEOF_UINT64_T + #define ASSIGN_haddr_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_UINT64_T + #define ASSIGN_haddr_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_UINT64_T */ + #define ASSIGN_haddr_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: haddr_t dst: uint64_t */ + +/* src: haddr_t, dst: ptrdiff_t */ +#if H5_SIZEOF_HADDR_T < H5_SIZEOF_PTRDIFF_T + #define ASSIGN_haddr_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_PTRDIFF_T + #define ASSIGN_haddr_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_PTRDIFF_T */ + #define ASSIGN_haddr_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: haddr_t dst: ptrdiff_t */ + +/* src: haddr_t, dst: size_t */ +#if H5_SIZEOF_HADDR_T < H5_SIZEOF_SIZE_T + #define ASSIGN_haddr_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_SIZE_T + #define ASSIGN_haddr_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_SIZE_T */ + #define ASSIGN_haddr_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: haddr_t dst: size_t */ + +/* src: haddr_t, dst: ssize_t */ +#if H5_SIZEOF_HADDR_T < H5_SIZEOF_SSIZE_T + #define ASSIGN_haddr_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_SSIZE_T + #define ASSIGN_haddr_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_SSIZE_T */ + #define ASSIGN_haddr_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: haddr_t dst: ssize_t */ + +/* src: haddr_t, dst: hsize_t */ +#if H5_SIZEOF_HADDR_T < H5_SIZEOF_HSIZE_T + #define ASSIGN_haddr_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_HSIZE_T + #define ASSIGN_haddr_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_HSIZE_T */ + #define ASSIGN_haddr_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: haddr_t dst: hsize_t */ + +/* src: haddr_t, dst: hssize_t */ +#if H5_SIZEOF_HADDR_T < H5_SIZEOF_HSSIZE_T + #define ASSIGN_haddr_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_HSSIZE_T + #define ASSIGN_haddr_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_HSSIZE_T */ + #define ASSIGN_haddr_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: haddr_t dst: hssize_t */ + +/* src: haddr_t, dst: h5_stat_size_t */ +#if H5_SIZEOF_HADDR_T < H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_haddr_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_haddr_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_H5_STAT_SIZE_T */ + #define ASSIGN_haddr_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: haddr_t dst: h5_stat_size_t */ + + +/* Assignment checks for hsize_t */ + +/* src: hsize_t, dst: unsigned */ +#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_UNSIGNED + #define ASSIGN_hsize_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_UNSIGNED + #define ASSIGN_hsize_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_UNSIGNED */ + #define ASSIGN_hsize_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hsize_t dst: unsigned */ + +/* src: hsize_t, dst: int8_t */ +#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_INT8_T + #define ASSIGN_hsize_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_INT8_T + #define ASSIGN_hsize_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_INT8_T */ + #define ASSIGN_hsize_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hsize_t dst: int8_t */ + +/* src: hsize_t, dst: int */ +#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_INT + #define ASSIGN_hsize_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_INT + #define ASSIGN_hsize_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_INT */ + #define ASSIGN_hsize_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hsize_t dst: int */ + +/* src: hsize_t, dst: long */ +#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_LONG + #define ASSIGN_hsize_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_LONG + #define ASSIGN_hsize_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_LONG */ + #define ASSIGN_hsize_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hsize_t dst: long */ + +/* src: hsize_t, dst: int64_t */ +#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_INT64_T + #define ASSIGN_hsize_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_INT64_T + #define ASSIGN_hsize_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_INT64_T */ + #define ASSIGN_hsize_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hsize_t dst: int64_t */ + +/* src: hsize_t, dst: uint8_t */ +#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_UINT8_T + #define ASSIGN_hsize_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_UINT8_T + #define ASSIGN_hsize_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_UINT8_T */ + #define ASSIGN_hsize_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hsize_t dst: uint8_t */ + +/* src: hsize_t, dst: uint16_t */ +#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_UINT16_T + #define ASSIGN_hsize_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_UINT16_T + #define ASSIGN_hsize_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_UINT16_T */ + #define ASSIGN_hsize_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hsize_t dst: uint16_t */ + +/* src: hsize_t, dst: uint32_t */ +#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_UINT32_T + #define ASSIGN_hsize_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_UINT32_T + #define ASSIGN_hsize_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_UINT32_T */ + #define ASSIGN_hsize_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hsize_t dst: uint32_t */ + +/* src: hsize_t, dst: uint64_t */ +#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_UINT64_T + #define ASSIGN_hsize_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_UINT64_T + #define ASSIGN_hsize_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_UINT64_T */ + #define ASSIGN_hsize_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hsize_t dst: uint64_t */ + +/* src: hsize_t, dst: ptrdiff_t */ +#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_PTRDIFF_T + #define ASSIGN_hsize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_PTRDIFF_T + #define ASSIGN_hsize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_PTRDIFF_T */ + #define ASSIGN_hsize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hsize_t dst: ptrdiff_t */ + +/* src: hsize_t, dst: size_t */ +#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_SIZE_T + #define ASSIGN_hsize_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_SIZE_T + #define ASSIGN_hsize_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_SIZE_T */ + #define ASSIGN_hsize_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hsize_t dst: size_t */ + +/* src: hsize_t, dst: ssize_t */ +#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_SSIZE_T + #define ASSIGN_hsize_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_SSIZE_T + #define ASSIGN_hsize_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_SSIZE_T */ + #define ASSIGN_hsize_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hsize_t dst: ssize_t */ + +/* src: hsize_t, dst: haddr_t */ +#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_HADDR_T + #define ASSIGN_hsize_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_HADDR_T + #define ASSIGN_hsize_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_HADDR_T */ + #define ASSIGN_hsize_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hsize_t dst: haddr_t */ + +/* src: hsize_t, dst: hssize_t */ +#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_HSSIZE_T + #define ASSIGN_hsize_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_HSSIZE_T + #define ASSIGN_hsize_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_HSSIZE_T */ + #define ASSIGN_hsize_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hsize_t dst: hssize_t */ + +/* src: hsize_t, dst: h5_stat_size_t */ +#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_hsize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_hsize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_H5_STAT_SIZE_T */ + #define ASSIGN_hsize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hsize_t dst: h5_stat_size_t */ + + +/* Assignment checks for hssize_t */ + +/* src: hssize_t, dst: unsigned */ +#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_UNSIGNED + #define ASSIGN_hssize_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_UNSIGNED + #define ASSIGN_hssize_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_UNSIGNED */ + #define ASSIGN_hssize_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: hssize_t dst: unsigned */ + +/* src: hssize_t, dst: int8_t */ +#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_INT8_T + #define ASSIGN_hssize_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_INT8_T + #define ASSIGN_hssize_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_INT8_T */ + #define ASSIGN_hssize_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hssize_t dst: int8_t */ + +/* src: hssize_t, dst: int */ +#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_INT + #define ASSIGN_hssize_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_INT + #define ASSIGN_hssize_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_INT */ + #define ASSIGN_hssize_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hssize_t dst: int */ + +/* src: hssize_t, dst: long */ +#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_LONG + #define ASSIGN_hssize_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_LONG + #define ASSIGN_hssize_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_LONG */ + #define ASSIGN_hssize_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hssize_t dst: long */ + +/* src: hssize_t, dst: int64_t */ +#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_INT64_T + #define ASSIGN_hssize_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_INT64_T + #define ASSIGN_hssize_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_INT64_T */ + #define ASSIGN_hssize_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hssize_t dst: int64_t */ + +/* src: hssize_t, dst: uint8_t */ +#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_UINT8_T + #define ASSIGN_hssize_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_UINT8_T + #define ASSIGN_hssize_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_UINT8_T */ + #define ASSIGN_hssize_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: hssize_t dst: uint8_t */ + +/* src: hssize_t, dst: uint16_t */ +#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_UINT16_T + #define ASSIGN_hssize_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_UINT16_T + #define ASSIGN_hssize_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_UINT16_T */ + #define ASSIGN_hssize_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: hssize_t dst: uint16_t */ + +/* src: hssize_t, dst: uint32_t */ +#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_UINT32_T + #define ASSIGN_hssize_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_UINT32_T + #define ASSIGN_hssize_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_UINT32_T */ + #define ASSIGN_hssize_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: hssize_t dst: uint32_t */ + +/* src: hssize_t, dst: uint64_t */ +#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_UINT64_T + #define ASSIGN_hssize_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_UINT64_T + #define ASSIGN_hssize_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_UINT64_T */ + #define ASSIGN_hssize_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: hssize_t dst: uint64_t */ + +/* src: hssize_t, dst: ptrdiff_t */ +#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_PTRDIFF_T + #define ASSIGN_hssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_PTRDIFF_T + #define ASSIGN_hssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_PTRDIFF_T */ + #define ASSIGN_hssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hssize_t dst: ptrdiff_t */ + +/* src: hssize_t, dst: size_t */ +#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_SIZE_T + #define ASSIGN_hssize_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_SIZE_T + #define ASSIGN_hssize_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_SIZE_T */ + #define ASSIGN_hssize_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: hssize_t dst: size_t */ + +/* src: hssize_t, dst: ssize_t */ +#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_SSIZE_T + #define ASSIGN_hssize_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_SSIZE_T + #define ASSIGN_hssize_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_SSIZE_T */ + #define ASSIGN_hssize_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: hssize_t dst: ssize_t */ + +/* src: hssize_t, dst: haddr_t */ +#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_HADDR_T + #define ASSIGN_hssize_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_HADDR_T + #define ASSIGN_hssize_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_HADDR_T */ + #define ASSIGN_hssize_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: hssize_t dst: haddr_t */ + +/* src: hssize_t, dst: hsize_t */ +#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_HSIZE_T + #define ASSIGN_hssize_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_HSIZE_T + #define ASSIGN_hssize_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_HSIZE_T */ + #define ASSIGN_hssize_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: hssize_t dst: hsize_t */ + +/* src: hssize_t, dst: h5_stat_size_t */ +#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_hssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_H5_STAT_SIZE_T + #define ASSIGN_hssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_H5_STAT_SIZE_T */ + #define ASSIGN_hssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) +#endif /* src: hssize_t dst: h5_stat_size_t */ + + +/* Assignment checks for h5_stat_size_t */ + +/* src: h5_stat_size_t, dst: unsigned */ +#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_UNSIGNED + #define ASSIGN_h5_stat_size_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_UNSIGNED + #define ASSIGN_h5_stat_size_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_UNSIGNED */ + #define ASSIGN_h5_stat_size_t_TO_unsigned(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: h5_stat_size_t dst: unsigned */ + +/* src: h5_stat_size_t, dst: int8_t */ +#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_INT8_T + #define ASSIGN_h5_stat_size_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_INT8_T + #define ASSIGN_h5_stat_size_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_INT8_T */ + #define ASSIGN_h5_stat_size_t_TO_int8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: h5_stat_size_t dst: int8_t */ + +/* src: h5_stat_size_t, dst: int */ +#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_INT + #define ASSIGN_h5_stat_size_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_INT + #define ASSIGN_h5_stat_size_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_INT */ + #define ASSIGN_h5_stat_size_t_TO_int(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: h5_stat_size_t dst: int */ + +/* src: h5_stat_size_t, dst: long */ +#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_LONG + #define ASSIGN_h5_stat_size_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_LONG + #define ASSIGN_h5_stat_size_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_LONG */ + #define ASSIGN_h5_stat_size_t_TO_long(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: h5_stat_size_t dst: long */ + +/* src: h5_stat_size_t, dst: int64_t */ +#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_INT64_T + #define ASSIGN_h5_stat_size_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_INT64_T + #define ASSIGN_h5_stat_size_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_INT64_T */ + #define ASSIGN_h5_stat_size_t_TO_int64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: h5_stat_size_t dst: int64_t */ + +/* src: h5_stat_size_t, dst: uint8_t */ +#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_UINT8_T + #define ASSIGN_h5_stat_size_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_UINT8_T + #define ASSIGN_h5_stat_size_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_UINT8_T */ + #define ASSIGN_h5_stat_size_t_TO_uint8_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: h5_stat_size_t dst: uint8_t */ + +/* src: h5_stat_size_t, dst: uint16_t */ +#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_UINT16_T + #define ASSIGN_h5_stat_size_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_UINT16_T + #define ASSIGN_h5_stat_size_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_UINT16_T */ + #define ASSIGN_h5_stat_size_t_TO_uint16_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: h5_stat_size_t dst: uint16_t */ + +/* src: h5_stat_size_t, dst: uint32_t */ +#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_UINT32_T + #define ASSIGN_h5_stat_size_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_UINT32_T + #define ASSIGN_h5_stat_size_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_UINT32_T */ + #define ASSIGN_h5_stat_size_t_TO_uint32_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: h5_stat_size_t dst: uint32_t */ + +/* src: h5_stat_size_t, dst: uint64_t */ +#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_UINT64_T + #define ASSIGN_h5_stat_size_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_UINT64_T + #define ASSIGN_h5_stat_size_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_UINT64_T */ + #define ASSIGN_h5_stat_size_t_TO_uint64_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: h5_stat_size_t dst: uint64_t */ + +/* src: h5_stat_size_t, dst: ptrdiff_t */ +#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_PTRDIFF_T + #define ASSIGN_h5_stat_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_PTRDIFF_T + #define ASSIGN_h5_stat_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_PTRDIFF_T */ + #define ASSIGN_h5_stat_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: h5_stat_size_t dst: ptrdiff_t */ + +/* src: h5_stat_size_t, dst: size_t */ +#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_SIZE_T + #define ASSIGN_h5_stat_size_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_SIZE_T + #define ASSIGN_h5_stat_size_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_SIZE_T */ + #define ASSIGN_h5_stat_size_t_TO_size_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: h5_stat_size_t dst: size_t */ + +/* src: h5_stat_size_t, dst: ssize_t */ +#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_SSIZE_T + #define ASSIGN_h5_stat_size_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_SSIZE_T + #define ASSIGN_h5_stat_size_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_SSIZE_T */ + #define ASSIGN_h5_stat_size_t_TO_ssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: h5_stat_size_t dst: ssize_t */ + +/* src: h5_stat_size_t, dst: haddr_t */ +#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_HADDR_T + #define ASSIGN_h5_stat_size_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_HADDR_T + #define ASSIGN_h5_stat_size_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_HADDR_T */ + #define ASSIGN_h5_stat_size_t_TO_haddr_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: h5_stat_size_t dst: haddr_t */ + +/* src: h5_stat_size_t, dst: hsize_t */ +#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_HSIZE_T + #define ASSIGN_h5_stat_size_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_HSIZE_T + #define ASSIGN_h5_stat_size_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_HSIZE_T */ + #define ASSIGN_h5_stat_size_t_TO_hsize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) +#endif /* src: h5_stat_size_t dst: hsize_t */ + +/* src: h5_stat_size_t, dst: hssize_t */ +#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_HSSIZE_T + #define ASSIGN_h5_stat_size_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_HSSIZE_T + #define ASSIGN_h5_stat_size_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) +#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_HSSIZE_T */ + #define ASSIGN_h5_stat_size_t_TO_hssize_t(dst, dsttype, src, srctype) \ + ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) +#endif /* src: h5_stat_size_t dst: hssize_t */ + +#endif /* H5overflow_H */ + diff --git a/src/H5version.h b/src/H5version.h new file mode 100644 index 00000000000..089e6e9f2de --- /dev/null +++ b/src/H5version.h @@ -0,0 +1,1342 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the LICENSE file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* Generated automatically by bin/make_vers -- do not edit */ +/* Add new versioned symbols to H5vers.txt file */ + + +#ifndef H5version_H +#define H5version_H + + +/* If a particular default "global" version of the library's interfaces is + * chosen, set the corresponding version macro for API symbols. + * + */ + +#if defined(H5_USE_16_API_DEFAULT) && !defined(H5_USE_16_API) + #define H5_USE_16_API 1 +#endif /* H5_USE_16_API_DEFAULT && !H5_USE_16_API */ + +#if defined(H5_USE_18_API_DEFAULT) && !defined(H5_USE_18_API) + #define H5_USE_18_API 1 +#endif /* H5_USE_18_API_DEFAULT && !H5_USE_18_API */ + +#if defined(H5_USE_110_API_DEFAULT) && !defined(H5_USE_110_API) + #define H5_USE_110_API 1 +#endif /* H5_USE_110_API_DEFAULT && !H5_USE_110_API */ + +#if defined(H5_USE_112_API_DEFAULT) && !defined(H5_USE_112_API) + #define H5_USE_112_API 1 +#endif /* H5_USE_112_API_DEFAULT && !H5_USE_112_API */ + +#if defined(H5_USE_114_API_DEFAULT) && !defined(H5_USE_114_API) + #define H5_USE_114_API 1 +#endif /* H5_USE_114_API_DEFAULT && !H5_USE_114_API */ + + +/* Issue error if contradicting macros have been defined. */ +/* (Can't use an older (deprecated) API version if deprecated symbols have been disabled) */ +#if (defined(H5_USE_16_API) || defined(H5_USE_18_API) || defined(H5_USE_110_API) || defined(H5_USE_112_API) || defined(H5_USE_114_API)) && defined(H5_NO_DEPRECATED_SYMBOLS) + #error "Can't choose old API versions when deprecated APIs are disabled" +#endif /* (defined(H5_USE_16_API) || defined(H5_USE_18_API) || defined(H5_USE_110_API) || defined(H5_USE_112_API) || defined(H5_USE_114_API)) && defined(H5_NO_DEPRECATED_SYMBOLS) */ + + +/* If a particular "global" version of the library's interfaces is chosen, + * set the versions for the API symbols affected. + * + * Note: If an application has already chosen a particular version for an + * API symbol, the individual API version macro takes priority. + */ + +#ifdef H5_USE_16_API + +/*************/ +/* Functions */ +/*************/ + +#if !defined(H5Acreate_vers) + #define H5Acreate_vers 1 +#endif /* !defined(H5Acreate_vers) */ + +#if !defined(H5Aiterate_vers) + #define H5Aiterate_vers 1 +#endif /* !defined(H5Aiterate_vers) */ + +#if !defined(H5Dcreate_vers) + #define H5Dcreate_vers 1 +#endif /* !defined(H5Dcreate_vers) */ + +#if !defined(H5Dopen_vers) + #define H5Dopen_vers 1 +#endif /* !defined(H5Dopen_vers) */ + +#if !defined(H5Eclear_vers) + #define H5Eclear_vers 1 +#endif /* !defined(H5Eclear_vers) */ + +#if !defined(H5Eget_auto_vers) + #define H5Eget_auto_vers 1 +#endif /* !defined(H5Eget_auto_vers) */ + +#if !defined(H5Eprint_vers) + #define H5Eprint_vers 1 +#endif /* !defined(H5Eprint_vers) */ + +#if !defined(H5Epush_vers) + #define H5Epush_vers 1 +#endif /* !defined(H5Epush_vers) */ + +#if !defined(H5Eset_auto_vers) + #define H5Eset_auto_vers 1 +#endif /* !defined(H5Eset_auto_vers) */ + +#if !defined(H5Ewalk_vers) + #define H5Ewalk_vers 1 +#endif /* !defined(H5Ewalk_vers) */ + +#if !defined(H5Gcreate_vers) + #define H5Gcreate_vers 1 +#endif /* !defined(H5Gcreate_vers) */ + +#if !defined(H5Gopen_vers) + #define H5Gopen_vers 1 +#endif /* !defined(H5Gopen_vers) */ + +#if !defined(H5Pget_filter_vers) + #define H5Pget_filter_vers 1 +#endif /* !defined(H5Pget_filter_vers) */ + +#if !defined(H5Pget_filter_by_id_vers) + #define H5Pget_filter_by_id_vers 1 +#endif /* !defined(H5Pget_filter_by_id_vers) */ + +#if !defined(H5Pinsert_vers) + #define H5Pinsert_vers 1 +#endif /* !defined(H5Pinsert_vers) */ + +#if !defined(H5Pregister_vers) + #define H5Pregister_vers 1 +#endif /* !defined(H5Pregister_vers) */ + +#if !defined(H5Rdereference_vers) + #define H5Rdereference_vers 1 +#endif /* !defined(H5Rdereference_vers) */ + +#if !defined(H5Rget_obj_type_vers) + #define H5Rget_obj_type_vers 1 +#endif /* !defined(H5Rget_obj_type_vers) */ + +#if !defined(H5Tarray_create_vers) + #define H5Tarray_create_vers 1 +#endif /* !defined(H5Tarray_create_vers) */ + +#if !defined(H5Tcommit_vers) + #define H5Tcommit_vers 1 +#endif /* !defined(H5Tcommit_vers) */ + +#if !defined(H5Tget_array_dims_vers) + #define H5Tget_array_dims_vers 1 +#endif /* !defined(H5Tget_array_dims_vers) */ + +#if !defined(H5Topen_vers) + #define H5Topen_vers 1 +#endif /* !defined(H5Topen_vers) */ + +/************/ +/* Typedefs */ +/************/ + +#if !defined(H5E_auto_t_vers) + #define H5E_auto_t_vers 1 +#endif /* !defined(H5E_auto_t_vers) */ + +#if !defined(H5Z_class_t_vers) + #define H5Z_class_t_vers 1 +#endif /* !defined(H5Z_class_t_vers) */ + +#endif /* H5_USE_16_API */ + +#ifdef H5_USE_18_API + +/*************/ +/* Functions */ +/*************/ + +#if !defined(H5Acreate_vers) + #define H5Acreate_vers 2 +#endif /* !defined(H5Acreate_vers) */ + +#if !defined(H5Aiterate_vers) + #define H5Aiterate_vers 2 +#endif /* !defined(H5Aiterate_vers) */ + +#if !defined(H5Dcreate_vers) + #define H5Dcreate_vers 2 +#endif /* !defined(H5Dcreate_vers) */ + +#if !defined(H5Dopen_vers) + #define H5Dopen_vers 2 +#endif /* !defined(H5Dopen_vers) */ + +#if !defined(H5Eclear_vers) + #define H5Eclear_vers 2 +#endif /* !defined(H5Eclear_vers) */ + +#if !defined(H5Eget_auto_vers) + #define H5Eget_auto_vers 2 +#endif /* !defined(H5Eget_auto_vers) */ + +#if !defined(H5Eprint_vers) + #define H5Eprint_vers 2 +#endif /* !defined(H5Eprint_vers) */ + +#if !defined(H5Epush_vers) + #define H5Epush_vers 2 +#endif /* !defined(H5Epush_vers) */ + +#if !defined(H5Eset_auto_vers) + #define H5Eset_auto_vers 2 +#endif /* !defined(H5Eset_auto_vers) */ + +#if !defined(H5Ewalk_vers) + #define H5Ewalk_vers 2 +#endif /* !defined(H5Ewalk_vers) */ + +#if !defined(H5Fget_info_vers) + #define H5Fget_info_vers 1 +#endif /* !defined(H5Fget_info_vers) */ + +#if !defined(H5Gcreate_vers) + #define H5Gcreate_vers 2 +#endif /* !defined(H5Gcreate_vers) */ + +#if !defined(H5Gopen_vers) + #define H5Gopen_vers 2 +#endif /* !defined(H5Gopen_vers) */ + +#if !defined(H5Lget_info_vers) + #define H5Lget_info_vers 1 +#endif /* !defined(H5Lget_info_vers) */ + +#if !defined(H5Lget_info_by_idx_vers) + #define H5Lget_info_by_idx_vers 1 +#endif /* !defined(H5Lget_info_by_idx_vers) */ + +#if !defined(H5Literate_vers) + #define H5Literate_vers 1 +#endif /* !defined(H5Literate_vers) */ + +#if !defined(H5Literate_by_name_vers) + #define H5Literate_by_name_vers 1 +#endif /* !defined(H5Literate_by_name_vers) */ + +#if !defined(H5Lvisit_vers) + #define H5Lvisit_vers 1 +#endif /* !defined(H5Lvisit_vers) */ + +#if !defined(H5Lvisit_by_name_vers) + #define H5Lvisit_by_name_vers 1 +#endif /* !defined(H5Lvisit_by_name_vers) */ + +#if !defined(H5Oget_info_vers) + #define H5Oget_info_vers 1 +#endif /* !defined(H5Oget_info_vers) */ + +#if !defined(H5Oget_info_by_idx_vers) + #define H5Oget_info_by_idx_vers 1 +#endif /* !defined(H5Oget_info_by_idx_vers) */ + +#if !defined(H5Oget_info_by_name_vers) + #define H5Oget_info_by_name_vers 1 +#endif /* !defined(H5Oget_info_by_name_vers) */ + +#if !defined(H5Ovisit_vers) + #define H5Ovisit_vers 1 +#endif /* !defined(H5Ovisit_vers) */ + +#if !defined(H5Ovisit_by_name_vers) + #define H5Ovisit_by_name_vers 1 +#endif /* !defined(H5Ovisit_by_name_vers) */ + +#if !defined(H5Pget_filter_vers) + #define H5Pget_filter_vers 2 +#endif /* !defined(H5Pget_filter_vers) */ + +#if !defined(H5Pget_filter_by_id_vers) + #define H5Pget_filter_by_id_vers 2 +#endif /* !defined(H5Pget_filter_by_id_vers) */ + +#if !defined(H5Pinsert_vers) + #define H5Pinsert_vers 2 +#endif /* !defined(H5Pinsert_vers) */ + +#if !defined(H5Pregister_vers) + #define H5Pregister_vers 2 +#endif /* !defined(H5Pregister_vers) */ + +#if !defined(H5Rdereference_vers) + #define H5Rdereference_vers 1 +#endif /* !defined(H5Rdereference_vers) */ + +#if !defined(H5Rget_obj_type_vers) + #define H5Rget_obj_type_vers 2 +#endif /* !defined(H5Rget_obj_type_vers) */ + +#if !defined(H5Sencode_vers) + #define H5Sencode_vers 1 +#endif /* !defined(H5Sencode_vers) */ + +#if !defined(H5Tarray_create_vers) + #define H5Tarray_create_vers 2 +#endif /* !defined(H5Tarray_create_vers) */ + +#if !defined(H5Tcommit_vers) + #define H5Tcommit_vers 2 +#endif /* !defined(H5Tcommit_vers) */ + +#if !defined(H5Tget_array_dims_vers) + #define H5Tget_array_dims_vers 2 +#endif /* !defined(H5Tget_array_dims_vers) */ + +#if !defined(H5Topen_vers) + #define H5Topen_vers 2 +#endif /* !defined(H5Topen_vers) */ + +/************/ +/* Typedefs */ +/************/ + +#if !defined(H5E_auto_t_vers) + #define H5E_auto_t_vers 2 +#endif /* !defined(H5E_auto_t_vers) */ + +#if !defined(H5O_info_t_vers) + #define H5O_info_t_vers 1 +#endif /* !defined(H5O_info_t_vers) */ + +#if !defined(H5O_iterate_t_vers) + #define H5O_iterate_t_vers 1 +#endif /* !defined(H5O_iterate_t_vers) */ + +#if !defined(H5Z_class_t_vers) + #define H5Z_class_t_vers 2 +#endif /* !defined(H5Z_class_t_vers) */ + +#endif /* H5_USE_18_API */ + +#ifdef H5_USE_110_API + +/*************/ +/* Functions */ +/*************/ + +#if !defined(H5Acreate_vers) + #define H5Acreate_vers 2 +#endif /* !defined(H5Acreate_vers) */ + +#if !defined(H5Aiterate_vers) + #define H5Aiterate_vers 2 +#endif /* !defined(H5Aiterate_vers) */ + +#if !defined(H5Dcreate_vers) + #define H5Dcreate_vers 2 +#endif /* !defined(H5Dcreate_vers) */ + +#if !defined(H5Dopen_vers) + #define H5Dopen_vers 2 +#endif /* !defined(H5Dopen_vers) */ + +#if !defined(H5Eclear_vers) + #define H5Eclear_vers 2 +#endif /* !defined(H5Eclear_vers) */ + +#if !defined(H5Eget_auto_vers) + #define H5Eget_auto_vers 2 +#endif /* !defined(H5Eget_auto_vers) */ + +#if !defined(H5Eprint_vers) + #define H5Eprint_vers 2 +#endif /* !defined(H5Eprint_vers) */ + +#if !defined(H5Epush_vers) + #define H5Epush_vers 2 +#endif /* !defined(H5Epush_vers) */ + +#if !defined(H5Eset_auto_vers) + #define H5Eset_auto_vers 2 +#endif /* !defined(H5Eset_auto_vers) */ + +#if !defined(H5Ewalk_vers) + #define H5Ewalk_vers 2 +#endif /* !defined(H5Ewalk_vers) */ + +#if !defined(H5Fget_info_vers) + #define H5Fget_info_vers 2 +#endif /* !defined(H5Fget_info_vers) */ + +#if !defined(H5Gcreate_vers) + #define H5Gcreate_vers 2 +#endif /* !defined(H5Gcreate_vers) */ + +#if !defined(H5Gopen_vers) + #define H5Gopen_vers 2 +#endif /* !defined(H5Gopen_vers) */ + +#if !defined(H5Lget_info_vers) + #define H5Lget_info_vers 1 +#endif /* !defined(H5Lget_info_vers) */ + +#if !defined(H5Lget_info_by_idx_vers) + #define H5Lget_info_by_idx_vers 1 +#endif /* !defined(H5Lget_info_by_idx_vers) */ + +#if !defined(H5Literate_vers) + #define H5Literate_vers 1 +#endif /* !defined(H5Literate_vers) */ + +#if !defined(H5Literate_by_name_vers) + #define H5Literate_by_name_vers 1 +#endif /* !defined(H5Literate_by_name_vers) */ + +#if !defined(H5Lvisit_vers) + #define H5Lvisit_vers 1 +#endif /* !defined(H5Lvisit_vers) */ + +#if !defined(H5Lvisit_by_name_vers) + #define H5Lvisit_by_name_vers 1 +#endif /* !defined(H5Lvisit_by_name_vers) */ + +#if !defined(H5Oget_info_vers) + #define H5Oget_info_vers 1 +#endif /* !defined(H5Oget_info_vers) */ + +#if !defined(H5Oget_info_by_idx_vers) + #define H5Oget_info_by_idx_vers 1 +#endif /* !defined(H5Oget_info_by_idx_vers) */ + +#if !defined(H5Oget_info_by_name_vers) + #define H5Oget_info_by_name_vers 1 +#endif /* !defined(H5Oget_info_by_name_vers) */ + +#if !defined(H5Ovisit_vers) + #define H5Ovisit_vers 1 +#endif /* !defined(H5Ovisit_vers) */ + +#if !defined(H5Ovisit_by_name_vers) + #define H5Ovisit_by_name_vers 1 +#endif /* !defined(H5Ovisit_by_name_vers) */ + +#if !defined(H5Pencode_vers) + #define H5Pencode_vers 1 +#endif /* !defined(H5Pencode_vers) */ + +#if !defined(H5Pget_filter_vers) + #define H5Pget_filter_vers 2 +#endif /* !defined(H5Pget_filter_vers) */ + +#if !defined(H5Pget_filter_by_id_vers) + #define H5Pget_filter_by_id_vers 2 +#endif /* !defined(H5Pget_filter_by_id_vers) */ + +#if !defined(H5Pinsert_vers) + #define H5Pinsert_vers 2 +#endif /* !defined(H5Pinsert_vers) */ + +#if !defined(H5Pregister_vers) + #define H5Pregister_vers 2 +#endif /* !defined(H5Pregister_vers) */ + +#if !defined(H5Rdereference_vers) + #define H5Rdereference_vers 2 +#endif /* !defined(H5Rdereference_vers) */ + +#if !defined(H5Rget_obj_type_vers) + #define H5Rget_obj_type_vers 2 +#endif /* !defined(H5Rget_obj_type_vers) */ + +#if !defined(H5Sencode_vers) + #define H5Sencode_vers 1 +#endif /* !defined(H5Sencode_vers) */ + +#if !defined(H5Tarray_create_vers) + #define H5Tarray_create_vers 2 +#endif /* !defined(H5Tarray_create_vers) */ + +#if !defined(H5Tcommit_vers) + #define H5Tcommit_vers 2 +#endif /* !defined(H5Tcommit_vers) */ + +#if !defined(H5Tget_array_dims_vers) + #define H5Tget_array_dims_vers 2 +#endif /* !defined(H5Tget_array_dims_vers) */ + +#if !defined(H5Topen_vers) + #define H5Topen_vers 2 +#endif /* !defined(H5Topen_vers) */ + +/************/ +/* Typedefs */ +/************/ + +#if !defined(H5E_auto_t_vers) + #define H5E_auto_t_vers 2 +#endif /* !defined(H5E_auto_t_vers) */ + +#if !defined(H5O_info_t_vers) + #define H5O_info_t_vers 1 +#endif /* !defined(H5O_info_t_vers) */ + +#if !defined(H5O_iterate_t_vers) + #define H5O_iterate_t_vers 1 +#endif /* !defined(H5O_iterate_t_vers) */ + +#if !defined(H5Z_class_t_vers) + #define H5Z_class_t_vers 2 +#endif /* !defined(H5Z_class_t_vers) */ + +#endif /* H5_USE_110_API */ + +#ifdef H5_USE_112_API + +/*************/ +/* Functions */ +/*************/ + +#if !defined(H5Acreate_vers) + #define H5Acreate_vers 2 +#endif /* !defined(H5Acreate_vers) */ + +#if !defined(H5Aiterate_vers) + #define H5Aiterate_vers 2 +#endif /* !defined(H5Aiterate_vers) */ + +#if !defined(H5Dcreate_vers) + #define H5Dcreate_vers 2 +#endif /* !defined(H5Dcreate_vers) */ + +#if !defined(H5Dopen_vers) + #define H5Dopen_vers 2 +#endif /* !defined(H5Dopen_vers) */ + +#if !defined(H5Eclear_vers) + #define H5Eclear_vers 2 +#endif /* !defined(H5Eclear_vers) */ + +#if !defined(H5Eget_auto_vers) + #define H5Eget_auto_vers 2 +#endif /* !defined(H5Eget_auto_vers) */ + +#if !defined(H5Eprint_vers) + #define H5Eprint_vers 2 +#endif /* !defined(H5Eprint_vers) */ + +#if !defined(H5Epush_vers) + #define H5Epush_vers 2 +#endif /* !defined(H5Epush_vers) */ + +#if !defined(H5Eset_auto_vers) + #define H5Eset_auto_vers 2 +#endif /* !defined(H5Eset_auto_vers) */ + +#if !defined(H5Ewalk_vers) + #define H5Ewalk_vers 2 +#endif /* !defined(H5Ewalk_vers) */ + +#if !defined(H5Fget_info_vers) + #define H5Fget_info_vers 2 +#endif /* !defined(H5Fget_info_vers) */ + +#if !defined(H5Gcreate_vers) + #define H5Gcreate_vers 2 +#endif /* !defined(H5Gcreate_vers) */ + +#if !defined(H5Gopen_vers) + #define H5Gopen_vers 2 +#endif /* !defined(H5Gopen_vers) */ + +#if !defined(H5Lget_info_vers) + #define H5Lget_info_vers 2 +#endif /* !defined(H5Lget_info_vers) */ + +#if !defined(H5Lget_info_by_idx_vers) + #define H5Lget_info_by_idx_vers 2 +#endif /* !defined(H5Lget_info_by_idx_vers) */ + +#if !defined(H5Literate_vers) + #define H5Literate_vers 2 +#endif /* !defined(H5Literate_vers) */ + +#if !defined(H5Literate_by_name_vers) + #define H5Literate_by_name_vers 2 +#endif /* !defined(H5Literate_by_name_vers) */ + +#if !defined(H5Lvisit_vers) + #define H5Lvisit_vers 2 +#endif /* !defined(H5Lvisit_vers) */ + +#if !defined(H5Lvisit_by_name_vers) + #define H5Lvisit_by_name_vers 2 +#endif /* !defined(H5Lvisit_by_name_vers) */ + +#if !defined(H5Oget_info_vers) + #define H5Oget_info_vers 3 +#endif /* !defined(H5Oget_info_vers) */ + +#if !defined(H5Oget_info_by_idx_vers) + #define H5Oget_info_by_idx_vers 3 +#endif /* !defined(H5Oget_info_by_idx_vers) */ + +#if !defined(H5Oget_info_by_name_vers) + #define H5Oget_info_by_name_vers 3 +#endif /* !defined(H5Oget_info_by_name_vers) */ + +#if !defined(H5Ovisit_vers) + #define H5Ovisit_vers 3 +#endif /* !defined(H5Ovisit_vers) */ + +#if !defined(H5Ovisit_by_name_vers) + #define H5Ovisit_by_name_vers 3 +#endif /* !defined(H5Ovisit_by_name_vers) */ + +#if !defined(H5Pencode_vers) + #define H5Pencode_vers 2 +#endif /* !defined(H5Pencode_vers) */ + +#if !defined(H5Pget_filter_vers) + #define H5Pget_filter_vers 2 +#endif /* !defined(H5Pget_filter_vers) */ + +#if !defined(H5Pget_filter_by_id_vers) + #define H5Pget_filter_by_id_vers 2 +#endif /* !defined(H5Pget_filter_by_id_vers) */ + +#if !defined(H5Pinsert_vers) + #define H5Pinsert_vers 2 +#endif /* !defined(H5Pinsert_vers) */ + +#if !defined(H5Pregister_vers) + #define H5Pregister_vers 2 +#endif /* !defined(H5Pregister_vers) */ + +#if !defined(H5Rdereference_vers) + #define H5Rdereference_vers 2 +#endif /* !defined(H5Rdereference_vers) */ + +#if !defined(H5Rget_obj_type_vers) + #define H5Rget_obj_type_vers 2 +#endif /* !defined(H5Rget_obj_type_vers) */ + +#if !defined(H5Sencode_vers) + #define H5Sencode_vers 2 +#endif /* !defined(H5Sencode_vers) */ + +#if !defined(H5Tarray_create_vers) + #define H5Tarray_create_vers 2 +#endif /* !defined(H5Tarray_create_vers) */ + +#if !defined(H5Tcommit_vers) + #define H5Tcommit_vers 2 +#endif /* !defined(H5Tcommit_vers) */ + +#if !defined(H5Tget_array_dims_vers) + #define H5Tget_array_dims_vers 2 +#endif /* !defined(H5Tget_array_dims_vers) */ + +#if !defined(H5Topen_vers) + #define H5Topen_vers 2 +#endif /* !defined(H5Topen_vers) */ + +/************/ +/* Typedefs */ +/************/ + +#if !defined(H5E_auto_t_vers) + #define H5E_auto_t_vers 2 +#endif /* !defined(H5E_auto_t_vers) */ + +#if !defined(H5O_info_t_vers) + #define H5O_info_t_vers 2 +#endif /* !defined(H5O_info_t_vers) */ + +#if !defined(H5O_iterate_t_vers) + #define H5O_iterate_t_vers 2 +#endif /* !defined(H5O_iterate_t_vers) */ + +#if !defined(H5Z_class_t_vers) + #define H5Z_class_t_vers 2 +#endif /* !defined(H5Z_class_t_vers) */ + +#endif /* H5_USE_112_API */ + +#ifdef H5_USE_114_API + +/*************/ +/* Functions */ +/*************/ + +#if !defined(H5Acreate_vers) + #define H5Acreate_vers 2 +#endif /* !defined(H5Acreate_vers) */ + +#if !defined(H5Aiterate_vers) + #define H5Aiterate_vers 2 +#endif /* !defined(H5Aiterate_vers) */ + +#if !defined(H5Dcreate_vers) + #define H5Dcreate_vers 2 +#endif /* !defined(H5Dcreate_vers) */ + +#if !defined(H5Dopen_vers) + #define H5Dopen_vers 2 +#endif /* !defined(H5Dopen_vers) */ + +#if !defined(H5Eclear_vers) + #define H5Eclear_vers 2 +#endif /* !defined(H5Eclear_vers) */ + +#if !defined(H5Eget_auto_vers) + #define H5Eget_auto_vers 2 +#endif /* !defined(H5Eget_auto_vers) */ + +#if !defined(H5Eprint_vers) + #define H5Eprint_vers 2 +#endif /* !defined(H5Eprint_vers) */ + +#if !defined(H5Epush_vers) + #define H5Epush_vers 2 +#endif /* !defined(H5Epush_vers) */ + +#if !defined(H5Eset_auto_vers) + #define H5Eset_auto_vers 2 +#endif /* !defined(H5Eset_auto_vers) */ + +#if !defined(H5Ewalk_vers) + #define H5Ewalk_vers 2 +#endif /* !defined(H5Ewalk_vers) */ + +#if !defined(H5Fget_info_vers) + #define H5Fget_info_vers 2 +#endif /* !defined(H5Fget_info_vers) */ + +#if !defined(H5Gcreate_vers) + #define H5Gcreate_vers 2 +#endif /* !defined(H5Gcreate_vers) */ + +#if !defined(H5Gopen_vers) + #define H5Gopen_vers 2 +#endif /* !defined(H5Gopen_vers) */ + +#if !defined(H5Lget_info_vers) + #define H5Lget_info_vers 2 +#endif /* !defined(H5Lget_info_vers) */ + +#if !defined(H5Lget_info_by_idx_vers) + #define H5Lget_info_by_idx_vers 2 +#endif /* !defined(H5Lget_info_by_idx_vers) */ + +#if !defined(H5Literate_vers) + #define H5Literate_vers 2 +#endif /* !defined(H5Literate_vers) */ + +#if !defined(H5Literate_by_name_vers) + #define H5Literate_by_name_vers 2 +#endif /* !defined(H5Literate_by_name_vers) */ + +#if !defined(H5Lvisit_vers) + #define H5Lvisit_vers 2 +#endif /* !defined(H5Lvisit_vers) */ + +#if !defined(H5Lvisit_by_name_vers) + #define H5Lvisit_by_name_vers 2 +#endif /* !defined(H5Lvisit_by_name_vers) */ + +#if !defined(H5Oget_info_vers) + #define H5Oget_info_vers 3 +#endif /* !defined(H5Oget_info_vers) */ + +#if !defined(H5Oget_info_by_idx_vers) + #define H5Oget_info_by_idx_vers 3 +#endif /* !defined(H5Oget_info_by_idx_vers) */ + +#if !defined(H5Oget_info_by_name_vers) + #define H5Oget_info_by_name_vers 3 +#endif /* !defined(H5Oget_info_by_name_vers) */ + +#if !defined(H5Ovisit_vers) + #define H5Ovisit_vers 3 +#endif /* !defined(H5Ovisit_vers) */ + +#if !defined(H5Ovisit_by_name_vers) + #define H5Ovisit_by_name_vers 3 +#endif /* !defined(H5Ovisit_by_name_vers) */ + +#if !defined(H5Pencode_vers) + #define H5Pencode_vers 2 +#endif /* !defined(H5Pencode_vers) */ + +#if !defined(H5Pget_filter_vers) + #define H5Pget_filter_vers 2 +#endif /* !defined(H5Pget_filter_vers) */ + +#if !defined(H5Pget_filter_by_id_vers) + #define H5Pget_filter_by_id_vers 2 +#endif /* !defined(H5Pget_filter_by_id_vers) */ + +#if !defined(H5Pinsert_vers) + #define H5Pinsert_vers 2 +#endif /* !defined(H5Pinsert_vers) */ + +#if !defined(H5Pregister_vers) + #define H5Pregister_vers 2 +#endif /* !defined(H5Pregister_vers) */ + +#if !defined(H5Rdereference_vers) + #define H5Rdereference_vers 2 +#endif /* !defined(H5Rdereference_vers) */ + +#if !defined(H5Rget_obj_type_vers) + #define H5Rget_obj_type_vers 2 +#endif /* !defined(H5Rget_obj_type_vers) */ + +#if !defined(H5Sencode_vers) + #define H5Sencode_vers 2 +#endif /* !defined(H5Sencode_vers) */ + +#if !defined(H5Tarray_create_vers) + #define H5Tarray_create_vers 2 +#endif /* !defined(H5Tarray_create_vers) */ + +#if !defined(H5Tcommit_vers) + #define H5Tcommit_vers 2 +#endif /* !defined(H5Tcommit_vers) */ + +#if !defined(H5Tget_array_dims_vers) + #define H5Tget_array_dims_vers 2 +#endif /* !defined(H5Tget_array_dims_vers) */ + +#if !defined(H5Topen_vers) + #define H5Topen_vers 2 +#endif /* !defined(H5Topen_vers) */ + +/************/ +/* Typedefs */ +/************/ + +#if !defined(H5E_auto_t_vers) + #define H5E_auto_t_vers 2 +#endif /* !defined(H5E_auto_t_vers) */ + +#if !defined(H5O_info_t_vers) + #define H5O_info_t_vers 2 +#endif /* !defined(H5O_info_t_vers) */ + +#if !defined(H5O_iterate_t_vers) + #define H5O_iterate_t_vers 2 +#endif /* !defined(H5O_iterate_t_vers) */ + +#if !defined(H5Z_class_t_vers) + #define H5Z_class_t_vers 2 +#endif /* !defined(H5Z_class_t_vers) */ + +#endif /* H5_USE_114_API */ + + +/* Choose the correct version of each API symbol, defaulting to the latest + * version of each. The "best" name for API parameters/data structures + * that have changed definitions is also set. An error is issued for + * specifying an invalid API version. + */ + +/*************/ +/* Functions */ +/*************/ + +#if !defined(H5Acreate_vers) || H5Acreate_vers == 2 + #ifndef H5Acreate_vers + #define H5Acreate_vers 2 + #endif /* H5Acreate_vers */ + #define H5Acreate H5Acreate2 +#elif H5Acreate_vers == 1 + #define H5Acreate H5Acreate1 +#else /* H5Acreate_vers */ + #error "H5Acreate_vers set to invalid value" +#endif /* H5Acreate_vers */ + +#if !defined(H5Aiterate_vers) || H5Aiterate_vers == 2 + #ifndef H5Aiterate_vers + #define H5Aiterate_vers 2 + #endif /* H5Aiterate_vers */ + #define H5Aiterate H5Aiterate2 + #define H5A_operator_t H5A_operator2_t +#elif H5Aiterate_vers == 1 + #define H5Aiterate H5Aiterate1 + #define H5A_operator_t H5A_operator1_t +#else /* H5Aiterate_vers */ + #error "H5Aiterate_vers set to invalid value" +#endif /* H5Aiterate_vers */ + +#if !defined(H5Dcreate_vers) || H5Dcreate_vers == 2 + #ifndef H5Dcreate_vers + #define H5Dcreate_vers 2 + #endif /* H5Dcreate_vers */ + #define H5Dcreate H5Dcreate2 +#elif H5Dcreate_vers == 1 + #define H5Dcreate H5Dcreate1 +#else /* H5Dcreate_vers */ + #error "H5Dcreate_vers set to invalid value" +#endif /* H5Dcreate_vers */ + +#if !defined(H5Dopen_vers) || H5Dopen_vers == 2 + #ifndef H5Dopen_vers + #define H5Dopen_vers 2 + #endif /* H5Dopen_vers */ + #define H5Dopen H5Dopen2 +#elif H5Dopen_vers == 1 + #define H5Dopen H5Dopen1 +#else /* H5Dopen_vers */ + #error "H5Dopen_vers set to invalid value" +#endif /* H5Dopen_vers */ + +#if !defined(H5Eclear_vers) || H5Eclear_vers == 2 + #ifndef H5Eclear_vers + #define H5Eclear_vers 2 + #endif /* H5Eclear_vers */ + #define H5Eclear H5Eclear2 +#elif H5Eclear_vers == 1 + #define H5Eclear H5Eclear1 +#else /* H5Eclear_vers */ + #error "H5Eclear_vers set to invalid value" +#endif /* H5Eclear_vers */ + +#if !defined(H5Eget_auto_vers) || H5Eget_auto_vers == 2 + #ifndef H5Eget_auto_vers + #define H5Eget_auto_vers 2 + #endif /* H5Eget_auto_vers */ + #define H5Eget_auto H5Eget_auto2 +#elif H5Eget_auto_vers == 1 + #define H5Eget_auto H5Eget_auto1 +#else /* H5Eget_auto_vers */ + #error "H5Eget_auto_vers set to invalid value" +#endif /* H5Eget_auto_vers */ + +#if !defined(H5Eprint_vers) || H5Eprint_vers == 2 + #ifndef H5Eprint_vers + #define H5Eprint_vers 2 + #endif /* H5Eprint_vers */ + #define H5Eprint H5Eprint2 +#elif H5Eprint_vers == 1 + #define H5Eprint H5Eprint1 +#else /* H5Eprint_vers */ + #error "H5Eprint_vers set to invalid value" +#endif /* H5Eprint_vers */ + +#if !defined(H5Epush_vers) || H5Epush_vers == 2 + #ifndef H5Epush_vers + #define H5Epush_vers 2 + #endif /* H5Epush_vers */ + #define H5Epush H5Epush2 +#elif H5Epush_vers == 1 + #define H5Epush H5Epush1 +#else /* H5Epush_vers */ + #error "H5Epush_vers set to invalid value" +#endif /* H5Epush_vers */ + +#if !defined(H5Eset_auto_vers) || H5Eset_auto_vers == 2 + #ifndef H5Eset_auto_vers + #define H5Eset_auto_vers 2 + #endif /* H5Eset_auto_vers */ + #define H5Eset_auto H5Eset_auto2 +#elif H5Eset_auto_vers == 1 + #define H5Eset_auto H5Eset_auto1 +#else /* H5Eset_auto_vers */ + #error "H5Eset_auto_vers set to invalid value" +#endif /* H5Eset_auto_vers */ + +#if !defined(H5Ewalk_vers) || H5Ewalk_vers == 2 + #ifndef H5Ewalk_vers + #define H5Ewalk_vers 2 + #endif /* H5Ewalk_vers */ + #define H5Ewalk H5Ewalk2 + #define H5E_error_t H5E_error2_t + #define H5E_walk_t H5E_walk2_t +#elif H5Ewalk_vers == 1 + #define H5Ewalk H5Ewalk1 + #define H5E_error_t H5E_error1_t + #define H5E_walk_t H5E_walk1_t +#else /* H5Ewalk_vers */ + #error "H5Ewalk_vers set to invalid value" +#endif /* H5Ewalk_vers */ + +#if !defined(H5Fget_info_vers) || H5Fget_info_vers == 2 + #ifndef H5Fget_info_vers + #define H5Fget_info_vers 2 + #endif /* H5Fget_info_vers */ + #define H5Fget_info H5Fget_info2 + #define H5F_info_t H5F_info2_t +#elif H5Fget_info_vers == 1 + #define H5Fget_info H5Fget_info1 + #define H5F_info_t H5F_info1_t +#else /* H5Fget_info_vers */ + #error "H5Fget_info_vers set to invalid value" +#endif /* H5Fget_info_vers */ + +#if !defined(H5Gcreate_vers) || H5Gcreate_vers == 2 + #ifndef H5Gcreate_vers + #define H5Gcreate_vers 2 + #endif /* H5Gcreate_vers */ + #define H5Gcreate H5Gcreate2 +#elif H5Gcreate_vers == 1 + #define H5Gcreate H5Gcreate1 +#else /* H5Gcreate_vers */ + #error "H5Gcreate_vers set to invalid value" +#endif /* H5Gcreate_vers */ + +#if !defined(H5Gopen_vers) || H5Gopen_vers == 2 + #ifndef H5Gopen_vers + #define H5Gopen_vers 2 + #endif /* H5Gopen_vers */ + #define H5Gopen H5Gopen2 +#elif H5Gopen_vers == 1 + #define H5Gopen H5Gopen1 +#else /* H5Gopen_vers */ + #error "H5Gopen_vers set to invalid value" +#endif /* H5Gopen_vers */ + +#if !defined(H5Lget_info_vers) || H5Lget_info_vers == 2 + #ifndef H5Lget_info_vers + #define H5Lget_info_vers 2 + #endif /* H5Lget_info_vers */ + #define H5Lget_info H5Lget_info2 + #define H5L_info_t H5L_info2_t +#elif H5Lget_info_vers == 1 + #define H5Lget_info H5Lget_info1 + #define H5L_info_t H5L_info1_t +#else /* H5Lget_info_vers */ + #error "H5Lget_info_vers set to invalid value" +#endif /* H5Lget_info_vers */ + +#if !defined(H5Lget_info_by_idx_vers) || H5Lget_info_by_idx_vers == 2 + #ifndef H5Lget_info_by_idx_vers + #define H5Lget_info_by_idx_vers 2 + #endif /* H5Lget_info_by_idx_vers */ + #define H5Lget_info_by_idx H5Lget_info_by_idx2 + #define H5L_info_t H5L_info2_t +#elif H5Lget_info_by_idx_vers == 1 + #define H5Lget_info_by_idx H5Lget_info_by_idx1 + #define H5L_info_t H5L_info1_t +#else /* H5Lget_info_by_idx_vers */ + #error "H5Lget_info_by_idx_vers set to invalid value" +#endif /* H5Lget_info_by_idx_vers */ + +#if !defined(H5Literate_vers) || H5Literate_vers == 2 + #ifndef H5Literate_vers + #define H5Literate_vers 2 + #endif /* H5Literate_vers */ + #define H5Literate H5Literate2 + #define H5L_iterate_t H5L_iterate2_t +#elif H5Literate_vers == 1 + #define H5Literate H5Literate1 + #define H5L_iterate_t H5L_iterate1_t +#else /* H5Literate_vers */ + #error "H5Literate_vers set to invalid value" +#endif /* H5Literate_vers */ + +#if !defined(H5Literate_by_name_vers) || H5Literate_by_name_vers == 2 + #ifndef H5Literate_by_name_vers + #define H5Literate_by_name_vers 2 + #endif /* H5Literate_by_name_vers */ + #define H5Literate_by_name H5Literate_by_name2 + #define H5L_iterate_t H5L_iterate2_t +#elif H5Literate_by_name_vers == 1 + #define H5Literate_by_name H5Literate_by_name1 + #define H5L_iterate_t H5L_iterate1_t +#else /* H5Literate_by_name_vers */ + #error "H5Literate_by_name_vers set to invalid value" +#endif /* H5Literate_by_name_vers */ + +#if !defined(H5Lvisit_vers) || H5Lvisit_vers == 2 + #ifndef H5Lvisit_vers + #define H5Lvisit_vers 2 + #endif /* H5Lvisit_vers */ + #define H5Lvisit H5Lvisit2 + #define H5L_iterate_t H5L_iterate2_t +#elif H5Lvisit_vers == 1 + #define H5Lvisit H5Lvisit1 + #define H5L_iterate_t H5L_iterate1_t +#else /* H5Lvisit_vers */ + #error "H5Lvisit_vers set to invalid value" +#endif /* H5Lvisit_vers */ + +#if !defined(H5Lvisit_by_name_vers) || H5Lvisit_by_name_vers == 2 + #ifndef H5Lvisit_by_name_vers + #define H5Lvisit_by_name_vers 2 + #endif /* H5Lvisit_by_name_vers */ + #define H5Lvisit_by_name H5Lvisit_by_name2 + #define H5L_iterate_t H5L_iterate2_t +#elif H5Lvisit_by_name_vers == 1 + #define H5Lvisit_by_name H5Lvisit_by_name1 + #define H5L_iterate_t H5L_iterate1_t +#else /* H5Lvisit_by_name_vers */ + #error "H5Lvisit_by_name_vers set to invalid value" +#endif /* H5Lvisit_by_name_vers */ + +#if !defined(H5Oget_info_vers) || H5Oget_info_vers == 3 + #ifndef H5Oget_info_vers + #define H5Oget_info_vers 3 + #endif /* H5Oget_info_vers */ + #define H5Oget_info H5Oget_info3 +#elif H5Oget_info_vers == 2 + #define H5Oget_info H5Oget_info2 +#elif H5Oget_info_vers == 1 + #define H5Oget_info H5Oget_info1 +#else /* H5Oget_info_vers */ + #error "H5Oget_info_vers set to invalid value" +#endif /* H5Oget_info_vers */ + +#if !defined(H5Oget_info_by_idx_vers) || H5Oget_info_by_idx_vers == 3 + #ifndef H5Oget_info_by_idx_vers + #define H5Oget_info_by_idx_vers 3 + #endif /* H5Oget_info_by_idx_vers */ + #define H5Oget_info_by_idx H5Oget_info_by_idx3 +#elif H5Oget_info_by_idx_vers == 2 + #define H5Oget_info_by_idx H5Oget_info_by_idx2 +#elif H5Oget_info_by_idx_vers == 1 + #define H5Oget_info_by_idx H5Oget_info_by_idx1 +#else /* H5Oget_info_by_idx_vers */ + #error "H5Oget_info_by_idx_vers set to invalid value" +#endif /* H5Oget_info_by_idx_vers */ + +#if !defined(H5Oget_info_by_name_vers) || H5Oget_info_by_name_vers == 3 + #ifndef H5Oget_info_by_name_vers + #define H5Oget_info_by_name_vers 3 + #endif /* H5Oget_info_by_name_vers */ + #define H5Oget_info_by_name H5Oget_info_by_name3 +#elif H5Oget_info_by_name_vers == 2 + #define H5Oget_info_by_name H5Oget_info_by_name2 +#elif H5Oget_info_by_name_vers == 1 + #define H5Oget_info_by_name H5Oget_info_by_name1 +#else /* H5Oget_info_by_name_vers */ + #error "H5Oget_info_by_name_vers set to invalid value" +#endif /* H5Oget_info_by_name_vers */ + +#if !defined(H5Ovisit_vers) || H5Ovisit_vers == 3 + #ifndef H5Ovisit_vers + #define H5Ovisit_vers 3 + #endif /* H5Ovisit_vers */ + #define H5Ovisit H5Ovisit3 +#elif H5Ovisit_vers == 2 + #define H5Ovisit H5Ovisit2 +#elif H5Ovisit_vers == 1 + #define H5Ovisit H5Ovisit1 +#else /* H5Ovisit_vers */ + #error "H5Ovisit_vers set to invalid value" +#endif /* H5Ovisit_vers */ + +#if !defined(H5Ovisit_by_name_vers) || H5Ovisit_by_name_vers == 3 + #ifndef H5Ovisit_by_name_vers + #define H5Ovisit_by_name_vers 3 + #endif /* H5Ovisit_by_name_vers */ + #define H5Ovisit_by_name H5Ovisit_by_name3 +#elif H5Ovisit_by_name_vers == 2 + #define H5Ovisit_by_name H5Ovisit_by_name2 +#elif H5Ovisit_by_name_vers == 1 + #define H5Ovisit_by_name H5Ovisit_by_name1 +#else /* H5Ovisit_by_name_vers */ + #error "H5Ovisit_by_name_vers set to invalid value" +#endif /* H5Ovisit_by_name_vers */ + +#if !defined(H5Pencode_vers) || H5Pencode_vers == 2 + #ifndef H5Pencode_vers + #define H5Pencode_vers 2 + #endif /* H5Pencode_vers */ + #define H5Pencode H5Pencode2 +#elif H5Pencode_vers == 1 + #define H5Pencode H5Pencode1 +#else /* H5Pencode_vers */ + #error "H5Pencode_vers set to invalid value" +#endif /* H5Pencode_vers */ + +#if !defined(H5Pget_filter_vers) || H5Pget_filter_vers == 2 + #ifndef H5Pget_filter_vers + #define H5Pget_filter_vers 2 + #endif /* H5Pget_filter_vers */ + #define H5Pget_filter H5Pget_filter2 +#elif H5Pget_filter_vers == 1 + #define H5Pget_filter H5Pget_filter1 +#else /* H5Pget_filter_vers */ + #error "H5Pget_filter_vers set to invalid value" +#endif /* H5Pget_filter_vers */ + +#if !defined(H5Pget_filter_by_id_vers) || H5Pget_filter_by_id_vers == 2 + #ifndef H5Pget_filter_by_id_vers + #define H5Pget_filter_by_id_vers 2 + #endif /* H5Pget_filter_by_id_vers */ + #define H5Pget_filter_by_id H5Pget_filter_by_id2 +#elif H5Pget_filter_by_id_vers == 1 + #define H5Pget_filter_by_id H5Pget_filter_by_id1 +#else /* H5Pget_filter_by_id_vers */ + #error "H5Pget_filter_by_id_vers set to invalid value" +#endif /* H5Pget_filter_by_id_vers */ + +#if !defined(H5Pinsert_vers) || H5Pinsert_vers == 2 + #ifndef H5Pinsert_vers + #define H5Pinsert_vers 2 + #endif /* H5Pinsert_vers */ + #define H5Pinsert H5Pinsert2 +#elif H5Pinsert_vers == 1 + #define H5Pinsert H5Pinsert1 +#else /* H5Pinsert_vers */ + #error "H5Pinsert_vers set to invalid value" +#endif /* H5Pinsert_vers */ + +#if !defined(H5Pregister_vers) || H5Pregister_vers == 2 + #ifndef H5Pregister_vers + #define H5Pregister_vers 2 + #endif /* H5Pregister_vers */ + #define H5Pregister H5Pregister2 +#elif H5Pregister_vers == 1 + #define H5Pregister H5Pregister1 +#else /* H5Pregister_vers */ + #error "H5Pregister_vers set to invalid value" +#endif /* H5Pregister_vers */ + +#if !defined(H5Rdereference_vers) || H5Rdereference_vers == 2 + #ifndef H5Rdereference_vers + #define H5Rdereference_vers 2 + #endif /* H5Rdereference_vers */ + #define H5Rdereference H5Rdereference2 +#elif H5Rdereference_vers == 1 + #define H5Rdereference H5Rdereference1 +#else /* H5Rdereference_vers */ + #error "H5Rdereference_vers set to invalid value" +#endif /* H5Rdereference_vers */ + +#if !defined(H5Rget_obj_type_vers) || H5Rget_obj_type_vers == 2 + #ifndef H5Rget_obj_type_vers + #define H5Rget_obj_type_vers 2 + #endif /* H5Rget_obj_type_vers */ + #define H5Rget_obj_type H5Rget_obj_type2 +#elif H5Rget_obj_type_vers == 1 + #define H5Rget_obj_type H5Rget_obj_type1 +#else /* H5Rget_obj_type_vers */ + #error "H5Rget_obj_type_vers set to invalid value" +#endif /* H5Rget_obj_type_vers */ + +#if !defined(H5Sencode_vers) || H5Sencode_vers == 2 + #ifndef H5Sencode_vers + #define H5Sencode_vers 2 + #endif /* H5Sencode_vers */ + #define H5Sencode H5Sencode2 +#elif H5Sencode_vers == 1 + #define H5Sencode H5Sencode1 +#else /* H5Sencode_vers */ + #error "H5Sencode_vers set to invalid value" +#endif /* H5Sencode_vers */ + +#if !defined(H5Tarray_create_vers) || H5Tarray_create_vers == 2 + #ifndef H5Tarray_create_vers + #define H5Tarray_create_vers 2 + #endif /* H5Tarray_create_vers */ + #define H5Tarray_create H5Tarray_create2 +#elif H5Tarray_create_vers == 1 + #define H5Tarray_create H5Tarray_create1 +#else /* H5Tarray_create_vers */ + #error "H5Tarray_create_vers set to invalid value" +#endif /* H5Tarray_create_vers */ + +#if !defined(H5Tcommit_vers) || H5Tcommit_vers == 2 + #ifndef H5Tcommit_vers + #define H5Tcommit_vers 2 + #endif /* H5Tcommit_vers */ + #define H5Tcommit H5Tcommit2 +#elif H5Tcommit_vers == 1 + #define H5Tcommit H5Tcommit1 +#else /* H5Tcommit_vers */ + #error "H5Tcommit_vers set to invalid value" +#endif /* H5Tcommit_vers */ + +#if !defined(H5Tget_array_dims_vers) || H5Tget_array_dims_vers == 2 + #ifndef H5Tget_array_dims_vers + #define H5Tget_array_dims_vers 2 + #endif /* H5Tget_array_dims_vers */ + #define H5Tget_array_dims H5Tget_array_dims2 +#elif H5Tget_array_dims_vers == 1 + #define H5Tget_array_dims H5Tget_array_dims1 +#else /* H5Tget_array_dims_vers */ + #error "H5Tget_array_dims_vers set to invalid value" +#endif /* H5Tget_array_dims_vers */ + +#if !defined(H5Topen_vers) || H5Topen_vers == 2 + #ifndef H5Topen_vers + #define H5Topen_vers 2 + #endif /* H5Topen_vers */ + #define H5Topen H5Topen2 +#elif H5Topen_vers == 1 + #define H5Topen H5Topen1 +#else /* H5Topen_vers */ + #error "H5Topen_vers set to invalid value" +#endif /* H5Topen_vers */ + +/************/ +/* Typedefs */ +/************/ + +#if !defined(H5E_auto_t_vers) || H5E_auto_t_vers == 2 + #ifndef H5E_auto_t_vers + #define H5E_auto_t_vers 2 + #endif /* H5E_auto_t_vers */ + #define H5E_auto_t H5E_auto2_t +#elif H5E_auto_t_vers == 1 + #define H5E_auto_t H5E_auto1_t +#else /* H5E_auto_t_vers */ + #error "H5E_auto_t_vers set to invalid value" +#endif /* H5E_auto_t_vers */ + + +#if !defined(H5O_info_t_vers) || H5O_info_t_vers == 2 + #ifndef H5O_info_t_vers + #define H5O_info_t_vers 2 + #endif /* H5O_info_t_vers */ + #define H5O_info_t H5O_info2_t +#elif H5O_info_t_vers == 1 + #define H5O_info_t H5O_info1_t +#else /* H5O_info_t_vers */ + #error "H5O_info_t_vers set to invalid value" +#endif /* H5O_info_t_vers */ + + +#if !defined(H5O_iterate_t_vers) || H5O_iterate_t_vers == 2 + #ifndef H5O_iterate_t_vers + #define H5O_iterate_t_vers 2 + #endif /* H5O_iterate_t_vers */ + #define H5O_iterate_t H5O_iterate2_t +#elif H5O_iterate_t_vers == 1 + #define H5O_iterate_t H5O_iterate1_t +#else /* H5O_iterate_t_vers */ + #error "H5O_iterate_t_vers set to invalid value" +#endif /* H5O_iterate_t_vers */ + + +#if !defined(H5Z_class_t_vers) || H5Z_class_t_vers == 2 + #ifndef H5Z_class_t_vers + #define H5Z_class_t_vers 2 + #endif /* H5Z_class_t_vers */ + #define H5Z_class_t H5Z_class2_t +#elif H5Z_class_t_vers == 1 + #define H5Z_class_t H5Z_class1_t +#else /* H5Z_class_t_vers */ + #error "H5Z_class_t_vers set to invalid value" +#endif /* H5Z_class_t_vers */ + +#endif /* H5version_H */ + From 877c6d88324be6ca4ad4e2e1736fb26afa4bfb38 Mon Sep 17 00:00:00 2001 From: jhendersonHDF Date: Mon, 21 Oct 2024 10:36:23 -0500 Subject: [PATCH 025/179] Move h5_test_init() calls after MPI_Init (#4988) --- testpar/t_pmulti_dset.c | 4 ++-- testpar/t_select_io_dset.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/testpar/t_pmulti_dset.c b/testpar/t_pmulti_dset.c index 6cd5116ebb7..9d045cab22a 100644 --- a/testpar/t_pmulti_dset.c +++ b/testpar/t_pmulti_dset.c @@ -650,13 +650,13 @@ main(int argc, char *argv[]) unsigned i; int ret; - h5_test_init(); - /* Initialize MPI */ MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &mpi_size); MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); + h5_test_init(); + /* Generate random number seed, if rank 0 */ if (MAINPROCESS) seed = (unsigned)time(NULL); diff --git a/testpar/t_select_io_dset.c b/testpar/t_select_io_dset.c index e069e2af44a..2414a9a0a2c 100644 --- a/testpar/t_select_io_dset.c +++ b/testpar/t_select_io_dset.c @@ -4086,13 +4086,13 @@ main(int argc, char *argv[]) unsigned select; unsigned mwbuf; - h5_test_init(); - /* Initialize MPI */ MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &mpi_size); MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); + h5_test_init(); + if ((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0) P_TEST_ERROR; From 6db28d6f9f55a6d270f53a17f0e7f213abfb253f Mon Sep 17 00:00:00 2001 From: Dana Robinson Date: Tue, 22 Oct 2024 11:42:40 -0700 Subject: [PATCH 026/179] Remove bin/cmakehdf5 This was an unsupported build script to make building the library with CMake look like building it with the Autotools. It hasn't been maintained in a long time and we've had it marked as deprecated for years. --- bin/README.md | 1 - bin/cmakehdf5 | 387 --------------------------------------- release_docs/RELEASE.txt | 6 + 3 files changed, 6 insertions(+), 388 deletions(-) delete mode 100755 bin/cmakehdf5 diff --git a/bin/README.md b/bin/README.md index 28559f0ba60..a7f786ba216 100644 --- a/bin/README.md +++ b/bin/README.md @@ -7,7 +7,6 @@ Programs run via `autogen.sh` (or the equivalent in CMake) are indicated. |`buildhdf5`|Convenience script to build HDF5 using the Autotools| |`checkapi`|Checks if public API calls are used in internal functions| |`chkcopyright`|Checks if files have appropriate copyright statements| -|`cmakehdf5`|Convenience script to build HDF5 using CMake| |`debug-ohdr`|Examines debug output from `H5O_open/close` to look for open objects| |`format_source`|Runs `clang-format` over the source files, applying our rules| |`genparser`|Creates the flex/bison-based parser files in the high-level library| diff --git a/bin/cmakehdf5 b/bin/cmakehdf5 deleted file mode 100755 index 2ce05d12b81..00000000000 --- a/bin/cmakehdf5 +++ /dev/null @@ -1,387 +0,0 @@ -#!/bin/sh -echo "Deprecated: This will be removed in a future release" -# Build and Test HDF5 using cmake. - -# Copyright: The HDF Group, 2012-14 - -# Debug Print: remove the comment hash if you want DPRINT to do echo -DPRINT=: -#DPRINT=echo - -# variable names -# The "extra" number is the step number and easier to see all logfiles in -# the sorted order of steps -progname=`basename $0` # program name -configlog="#${progname}_1config.log" -makelog="#${progname}_2build.log" -testlog="#${progname}_3test.log" -packlog="#${progname}_4pack.log" -installlog="#${progname}_5install.log" -vflag=1 # verbose flag default to on. -config_summary=libhdf5.settings -exit_code=0 - -# This command should be in the source directory's bin/ -# and should have invoked as "$srcdir/bin/$progname" or -# "bin/$progname". So, by striping bin/$program from $0, -# we can find $srcdir. -if [ "$0" = "bin/${progname}" ]; then - srcdir="." # current directory -else - # $0 is $srdir/bin/$progname - srcdir=`echo $0 | sed -e s%/bin/$progname\$%%` -fi -# Sanity check -if [ ! -r $srcdir/bin/$progname ]; then - echo "encountered error while trying to find srcdir($srdir)" - exit 1 -fi - -# Cmake build options -cacheinit=$srcdir/config/cmake/cacheinit.cmake -build_cpp_lib=-DHDF5_BUILD_CPP_LIB:BOOL=OFF # C++ interface default off -build_fortran=-DHDF5_BUILD_FORTRAN:BOOL=OFF # Fortran interface default off -build_java=-DHDF5_BUILD_JAVA:BOOL=OFF # Java interface default off -build_hl_lib=-DHDF5_BUILD_HL_LIB:BOOL=ON # High Level interface default on -build_threadsafe=-DHDF5_ENABLE_THREADSAFE:BOOL=OFF # Threadsafe feature default off -build_testing=-DBUILD_TESTING:BOOL=ON # Build tests default on -build_test_shell=-DTEST_SHELL_SCRIPTS:BOOL=ON # Run shell script tests default on -build_tools=-DHDF5_BUILD_TOOLS:BOOL=ON # Build tools default on -with_zlib=-DHDF5_ENABLE_Z_LIB_SUPPORT=ON # enable zlib filter default on -with_szlib=-DHDF5_ENABLE_SZIP_SUPPORT=OFF # enables szip filter default off -szlib_path="" # szip lib path default off -shared_lib=-DBUILD_SHARED_LIBS:BOOL=ON # enables shared lib; default on -njobs="" # number of jobs (commands) to - # run simultaneously; default is - # value from $MAKE if defined, - # otherwise none (1) - -#============= -# Function definitions -#============= - -# Show user brief help page -HELP_BRIEF() -{ -cat << EOF -Usage: $progname [options] - --help: shows details help page -EOF -} - -# Show user detail help page -HELP() -{ -cat << EOF -Usage: $progname [] - where options are: - --enable-fortran | --disable-fortran: - enable or disable fortran API. Default is off. - --enable-cxx | --disable-cxx: - enable or disable c++ API. Default is off. - --enable-java | --disable-java: - enable or disable Java API. Default is off. - --enable-hl | --disable-hl: - enable or disable high level API. Default is on. - --enable-threadsafe | --disable-threadsafe: - enable or disable threadsafe feature. Default is off - --enable-shared | --disable-shared: - enable or disable shared lib. Default is on. - --enable-tools | --disable-tools: - enable or disable building tools. Default is on. - --enable-testing | --disable-testing: - enable or disable building tests. Default is on. - --with-zlib | --with-zlib= | --without-zlib: - Use zlib library for external deflate I/O filter. Default is on. - --with-szlib | --with-szlib= | --without-szlib: - Use szlib library for external deflate I/O filter. Default is on. - --njobs=<-j N>: - number of jobs (commands) to run simultaneously; default is value from - $MAKE if defined, otherwise none - --enable-verbose | --disable-verbose: - enable or disable verbose output. Default is on. - --help: shows details help page - - : the file path to the library, expect /lib and /include. -EOF -} - -# Display a time stamp -TIMESTAMP() -{ - echo "=====" "`date`" "=====" -} - - -# Do one step bracketed with time stamps -# The '< /dev/null' is needed to prevent some applications like MPI -# jobs blocked for reading when they read stdin unnecessary. -# $1 is banner message to be displayed. -# $2 is command to run -# $3 is logfile name for saving output from the command -STEP() -{ - banner="$1" - command="$2" - logfile="$3" - - echo "$banner" with output saved in $logfile - (TIMESTAMP; nerror=0 ; - echo "eval $command" - eval $command || nerror=1 ; - TIMESTAMP; exit $nerror) < /dev/null > "$logfile" 2>&1 - if [ $? -ne 0 ]; then - echo "error in '$banner'. $progname aborted." - exit 1 - fi -} - - -# Install the generated installation image file. Different platform uses -# different image files. -# Linux: HDF5--Linux.sh file -# Mac OS X: Not implemented yet -# Others: Not implemented yet -INSTALL_HDF5() -{ - myos="`uname -s`" - case "$myos" in - Linux) - install_file=./HDF5-${version}-Linux.sh - $install_file --skip-license $* - ;; - Darwin) # MacOS DMG file - # These steps were a kludge. Need proper support from Cmake engineering. - echo Darwin install step needs proper implementation. Quit. - return 1 - # - install_file=HDF5-${version}-Darwin.dmg - test -d hdf5 || mkdir hdf5 - basename=`basename $install_file .dmg` - # mount the DMG file as /Volumes/$basename - # echo 'Y' as yes for license. - echo Y | hdiutil mount $install_file - # copy the contents to the install location - cp -R "/Volumes/$basename/HDF_Group" hdf5 - # unmount the DMG file - hdiutil unmount /Volumes/$basename - ;; - *) # unknown/unsupported OS. - echo "INSTALL_HDF5: Error--unknown/unsupported OS($myos)" - return 1 - ;; - esac -} - - -# Print logfiles. -# $*: logfiles -DUMP_LOGFILE() -{ - for x in $*; do - if [ -f $x ]; then - echo "==================================" - echo "Dumping $x" - echo "==================================" - cat $x - echo "==== END $x =====" - echo - fi - done -} - - -#========== -# main -#========== - -# Show a start time stamp -TIMESTAMP - -# Initialize njobs if $MAKE is defined -if [ -n "$MAKE" ]; then - # assume all arguments are for --jobs - njobs=`echo $MAKE | cut -s -d' ' -f2-` -fi - -# Parse Cmake configure options -# --enable-XXX or --disable-XXX will enable or disable feature XXX. -# XXX can be: -# fortran Fortran interface -# cxx C++ interface -# java Java interface -# hl Highlevel interface -# testing Build tests -# tools Build tools -while [ $# -gt 0 ]; do - case "$1" in - --enable-fortran) - build_fortran=-DHDF5_BUILD_FORTRAN:BOOL=ON - ;; - --disable-fortran) - build_fortran=-DHDF5_BUILD_FORTRAN:BOOL=OFF - ;; - --enable-cxx) - build_cpp_lib=-DHDF5_BUILD_CPP_LIB:BOOL=ON - ;; - --disable-cxx) - build_cpp_lib=-DHDF5_BUILD_CPP_LIB:BOOL=OFF - ;; - --enable-java) - build_java=-DHDF5_BUILD_JAVA:BOOL=ON - ;; - --disable-java) - build_java=-DHDF5_BUILD_JAVA:BOOL=OFF - ;; - --enable-hl) - build_hl_lib=-DHDF5_BUILD_HL_LIB:BOOL=ON - ;; - --disable-hl) - build_hl_lib=-DHDF5_BUILD_HL_LIB:BOOL=OFF - ;; - --enable-threadsafe) - build_threadsafe=-DHDF5_ENABLE_THREADSAFE:BOOL=ON - ;; - --disable-threadsafe) - build_threadsafe=-DHDF5_ENABLE_THREADSAFE:BOOL=OFF - ;; - --enable-shared) - shared_lib=-DBUILD_SHARED_LIBS:BOOL=ON - ;; - --disable-shared) - shared_lib=-DBUILD_SHARED_LIBS:BOOL=OFF - ;; - --enable-tools) - build_tools=-DHDF5_BUILD_TOOLS:BOOL=ON - ;; - --disable-tools) - build_tools=-DHDF5_BUILD_TOOLS:BOOL=OFF - ;; - --enable-testing) - build_testing=-DBUILD_TESTING:BOOL=ON - ;; - --disable-testing) - build_testing=-DBUILD_TESTING:BOOL=OFF - ;; - --enable-shell-testing) - build_test_shell=-DTEST_SHELL_SCRIPTS:BOOL=ON - ;; - --disable-shell-testing) - build_test_shell=-DTEST_SHELL_SCRIPTS:BOOL=OFF - ;; - --with-zlib) - with_zlib=-DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=ON - ;; - --with-zlib=*) - xarg=`echo $1 | cut -d= -f2-` - with_zlib="-DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=ON -DZLIB_ROOT=$xarg" - ;; - --without-zlib) - with_zlib=-DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=OFF - ;; - --with-szlib) - with_szlib=-DHDF5_ENABLE_SZIP_SUPPORT:BOOL=ON - szlib_path="" # szlib is in default paths - ;; - --with-szlib=*) - xarg=`echo $1 | cut -d= -f2-` - with_szlib="-DHDF5_ENABLE_SZIP_SUPPORT:BOOL=ON" - szlib_path="SZIP_INSTALL=$xarg" - ;; - --without-szlib) - with_szlib=-DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF - szlib_path="" # reset the path - ;; - --njobs=*) - njobs=`echo $1 | cut -d= -f2-` - ;; - --enable-verbose) - vflag=1 - ;; - --disable-verbose) - vflag=0 - ;; - --help) - # print the detail help page and exit - HELP - exit 0 - ;; - *) - echo "Unknown options: $1" - HELP - exit 1 - ;; - esac - shift -done -$DPRINT after option parsing vflag=$vflag - -# Always display the brief help page -HELP_BRIEF - -# Verify there is a valid hdf5 source directory present -if [ ! -d $srcdir ]; then - echo $srcdir not found. Aborted. - exit 1 -fi - -# figure out version information -vers=bin/h5vers -if [ ! -x $srcdir/$vers ]; then - echo $srcdir/$vers not found or not executable. Aborted. - exit 1 -fi -version=`cd $srcdir; $vers` -if [ $? != 0 ]; then - echo $vers failed. Aborted. - exit 1 -fi - -# setup output of all the log files if verbose is on upon exit -trap \ - "if [ $vflag -ne 0 ]; then DUMP_LOGFILE \$configlog \$makelog \$testlog \$packlog \$installlog; fi" \ - 0 - -echo Running Cmake for HDF5-${version} ... -# 4. Configure the C library, tools and tests with this command: -# If successful, append the configure summary to the configure logfile. -STEP "Configure..." \ - "env ${szlib_path} \ - cmake \ - -C $cacheinit \ - $build_cpp_lib \ - $build_fortran \ - $build_java \ - $build_hl_lib \ - $build_threadsafe \ - $shared_lib \ - $build_testing \ - $build_test_shell \ - $build_tools \ - $with_zlib \ - $with_szlib \ - $srcdir" $configlog &&\ - cat src/$config_summary >> $configlog - -# 5. Build the C library, tools and tests with this command: -STEP "Build the library, tools and tests, ..." "cmake --build . --config Release -- $njobs" $makelog - -# 6. Test the C library and tools with this command: -STEP "Test the library and tools..." "ctest . -C Release $njobs" $testlog - -# 7. Create an install image with this command: -STEP "Create an install image..." "cpack -C Release CPackConfig.cmake" $packlog - -# The implementation of installation is incomplete (only works for linux). -# Screen it out for now till it is completed. -if false; then -# 8. Install with this command: -STEP "Install..." "INSTALL_HDF5" $installlog -fi - -# save the last exit code -exit_code=$? - -# Show a closing time stamp -TIMESTAMP -exit $exit_code diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 066d5a6ec2c..8442839e2fb 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -47,6 +47,12 @@ New Features Configuration: ------------- + - bin/cmakehdf5 has been removed + + This was an unsupported build script that made building HDF5 via CMake + work like building HDF5 via the Autotools. It has been unmaintained + for a long time, has been marked deprecated, and is being removed. + - Generated files in src are now checked into version control These files are infrequently updated and generating them adds a From 720b0057baa18ca535fbcc96ec4baee3bf7aef2e Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Tue, 22 Oct 2024 17:39:35 -0500 Subject: [PATCH 027/179] Replace COPYING with LICENSE in workflows (#4989) --- .autom4te.cfg | 2 +- .gitattributes | 1 - .github/workflows/autotools.yml | 2 +- .github/workflows/cmake-ctest.yml | 24 ++++++++++++------------ .github/workflows/cmake.yml | 2 +- .github/workflows/cve.yml | 2 +- .github/workflows/hdfeos5.yml | 2 +- .github/workflows/netcdf.yml | 2 +- .h5chkright.ini | 6 +++--- 9 files changed, 21 insertions(+), 22 deletions(-) diff --git a/.autom4te.cfg b/.autom4te.cfg index 3872ddb4400..d386cef175a 100644 --- a/.autom4te.cfg +++ b/.autom4te.cfg @@ -3,7 +3,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. diff --git a/.gitattributes b/.gitattributes index b03dddfc95d..7e37bf00fee 100644 --- a/.gitattributes +++ b/.gitattributes @@ -72,7 +72,6 @@ hl/tools/gif2h5/testfiles/ex_image2.h5 -text hl/tools/gif2h5/testfiles/h52giftst.h5 -text hl/tools/gif2h5/testfiles/image1.gif -text java/CMakeLists.txt -text -java/COPYING -text java/Makefile.am -text java/examples/CMakeLists.txt -text java/examples/Makefile.am -text diff --git a/.github/workflows/autotools.yml b/.github/workflows/autotools.yml index a202076005a..6bf5a8813cf 100644 --- a/.github/workflows/autotools.yml +++ b/.github/workflows/autotools.yml @@ -12,7 +12,7 @@ on: - 'doc/**' - 'release_docs/**' - 'ACKNOWLEDGEMENTS' - - 'COPYING**' + - 'LICENSE**' - '**.md' # Using concurrency to cancel any in-progress job or run diff --git a/.github/workflows/cmake-ctest.yml b/.github/workflows/cmake-ctest.yml index b927b3ce403..77e490269fc 100644 --- a/.github/workflows/cmake-ctest.yml +++ b/.github/workflows/cmake-ctest.yml @@ -169,8 +169,8 @@ jobs: run: | mkdir "${{ runner.workspace }}/build" mkdir "${{ runner.workspace }}/build/hdf5" - Copy-Item -Path ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING -Destination ${{ runner.workspace }}/build/hdf5/ - Copy-Item -Path ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING_LBNL_HDF5 -Destination ${{ runner.workspace }}/build/hdf5/ + Copy-Item -Path ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/LICENSE -Destination ${{ runner.workspace }}/build/hdf5/ + Copy-Item -Path ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/LICENSE_LBNL_HDF5 -Destination ${{ runner.workspace }}/build/hdf5/ Copy-Item -Path ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-MSVC/README.md -Destination ${{ runner.workspace }}/build/hdf5/ Copy-Item -Path ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-MSVC/* -Destination ${{ runner.workspace }}/build/hdf5/ -Include *.zip cd "${{ runner.workspace }}/build" @@ -261,8 +261,8 @@ jobs: run: | mkdir "${{ runner.workspace }}/build" mkdir "${{ runner.workspace }}/build/hdf5" - cp ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING ${{ runner.workspace }}/build/hdf5 - cp ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING_LBNL_HDF5 ${{ runner.workspace }}/build/hdf5 + cp ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/LICENSE ${{ runner.workspace }}/build/hdf5 + cp ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/LICENSE_LBNL_HDF5 ${{ runner.workspace }}/build/hdf5 cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-GNUC/README.md ${{ runner.workspace }}/build/hdf5 cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-GNUC/*.tar.gz ${{ runner.workspace }}/build/hdf5 cd "${{ runner.workspace }}/build" @@ -498,8 +498,8 @@ jobs: run: | mkdir "${{ runner.workspace }}/build" mkdir "${{ runner.workspace }}/build/hdf5" - cp ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING ${{ runner.workspace }}/build/hdf5 - cp ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING_LBNL_HDF5 ${{ runner.workspace }}/build/hdf5 + cp ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/LICENSE ${{ runner.workspace }}/build/hdf5 + cp ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/LICENSE_LBNL_HDF5 ${{ runner.workspace }}/build/hdf5 cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-macos-Clang/README.md ${{ runner.workspace }}/build/hdf5 cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-macos-Clang/*.tar.gz ${{ runner.workspace }}/build/hdf5 cd "${{ runner.workspace }}/build" @@ -584,8 +584,8 @@ jobs: run: | mkdir "${{ runner.workspace }}/build" mkdir "${{ runner.workspace }}/build/hdf5" - cp ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING ${{ runner.workspace }}/build/hdf5 - cp ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING_LBNL_HDF5 ${{ runner.workspace }}/build/hdf5 + cp ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/LICENSE ${{ runner.workspace }}/build/hdf5 + cp ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/LICENSE_LBNL_HDF5 ${{ runner.workspace }}/build/hdf5 cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-GNUC-S3/README.md ${{ runner.workspace }}/build/hdf5 cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-GNUC-S3/*.tar.gz ${{ runner.workspace }}/build/hdf5 cd "${{ runner.workspace }}/build" @@ -709,8 +709,8 @@ jobs: run: | mkdir "${{ runner.workspace }}/build" mkdir "${{ runner.workspace }}/build/hdf5" - Copy-Item -Path ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING -Destination ${{ runner.workspace }}/build/hdf5/ - Copy-Item -Path ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING_LBNL_HDF5 -Destination ${{ runner.workspace }}/build/hdf5/ + Copy-Item -Path ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/LICENSE -Destination ${{ runner.workspace }}/build/hdf5/ + Copy-Item -Path ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/LICENSE_LBNL_HDF5 -Destination ${{ runner.workspace }}/build/hdf5/ Copy-Item -Path ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-Intel/README.md -Destination ${{ runner.workspace }}/build/hdf5/ Copy-Item -Path ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-Intel/* -Destination ${{ runner.workspace }}/build/hdf5/ -Include *.zip cd "${{ runner.workspace }}/build" @@ -807,8 +807,8 @@ jobs: run: | mkdir "${{ runner.workspace }}/build" mkdir "${{ runner.workspace }}/build/hdf5" - cp ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING ${{ runner.workspace }}/build/hdf5 - cp ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/COPYING_LBNL_HDF5 ${{ runner.workspace }}/build/hdf5 + cp ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/LICENSE ${{ runner.workspace }}/build/hdf5 + cp ${{ runner.workspace }}/hdf5/${{ steps.set-file-base.outputs.SOURCE_BASE }}/LICENSE_LBNL_HDF5 ${{ runner.workspace }}/build/hdf5 cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-Intel/README.md ${{ runner.workspace }}/build/hdf5 cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-Intel/*.tar.gz ${{ runner.workspace }}/build/hdf5 cd "${{ runner.workspace }}/build" diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 7fe99c2f3cb..b15205f38ae 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -12,7 +12,7 @@ on: - 'doc/**' - 'release_docs/**' - 'ACKNOWLEDGEMENTS' - - 'COPYING**' + - 'LICENSE**' - '**.md' # Using concurrency to cancel any in-progress job or run diff --git a/.github/workflows/cve.yml b/.github/workflows/cve.yml index a3abb664897..8562bce6d66 100644 --- a/.github/workflows/cve.yml +++ b/.github/workflows/cve.yml @@ -12,7 +12,7 @@ on: - 'doc/**' - 'release_docs/**' - 'ACKNOWLEDGEMENTS' - - 'COPYING**' + - 'LICENSE**' - '**.md' # Using concurrency to cancel any in-progress job or run diff --git a/.github/workflows/hdfeos5.yml b/.github/workflows/hdfeos5.yml index 0d5cf969382..2f766ce36bb 100644 --- a/.github/workflows/hdfeos5.yml +++ b/.github/workflows/hdfeos5.yml @@ -12,7 +12,7 @@ on: - 'doc/**' - 'release_docs/**' - 'ACKNOWLEDGEMENTS' - - 'COPYING**' + - 'LICENSE**' - '**.md' # Using concurrency to cancel any in-progress job or run diff --git a/.github/workflows/netcdf.yml b/.github/workflows/netcdf.yml index 963f9dce673..080160d086d 100644 --- a/.github/workflows/netcdf.yml +++ b/.github/workflows/netcdf.yml @@ -12,7 +12,7 @@ on: - 'doc/**' - 'release_docs/**' - 'ACKNOWLEDGEMENTS' - - 'COPYING**' + - 'LICENSE**' - '**.md' permissions: diff --git a/.h5chkright.ini b/.h5chkright.ini index 02d3cadd48f..77eb740cfff 100644 --- a/.h5chkright.ini +++ b/.h5chkright.ini @@ -3,7 +3,7 @@ # # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code +# the LICENSE file, which can be found at the root of the source code # distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. @@ -17,8 +17,8 @@ # with the same name. E.g., # "prune test" skips test, fortran/test, c++/test, ... -# Skip COPYING since it is the detail Copyright notice. -skip COPYING +# Skip LICENSE since it is the detail Copyright notice. +skip LICENSE # Sort of strange to have a copyright notice in README skip README From baa1e8e2922e520df740146141d24670db970a5e Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Tue, 22 Oct 2024 17:40:54 -0500 Subject: [PATCH 028/179] Prefix remaining CMake options except for CMake BUILD* variables (#4990) --- .github/workflows/cmake-analysis.yml | 6 +-- .github/workflows/main-cmake-spc.yml | 12 ++--- .github/workflows/vol_adios2.yml | 2 +- .github/workflows/vol_async.yml | 2 +- .github/workflows/vol_cache.yml | 2 +- .github/workflows/vol_log.yml | 2 +- .github/workflows/vol_rest.yml | 2 +- CMakeLists.txt | 58 ++++++++++++------------ config/cmake-presets/hidden-presets.json | 10 ++-- config/cmake/HDF5ExampleCache.cmake | 16 +++---- config/cmake/HDFMacros.cmake | 8 ++-- config/cmake/hdf5-config.cmake.in | 2 +- config/cmake/scripts/HDF5options.cmake | 2 +- config/sanitizer/README.md | 4 +- config/sanitizer/sanitizers.cmake | 36 +++++++-------- doc/cmake-vols-fetchcontent.md | 2 +- release_docs/INSTALL_CMake.txt | 22 ++++----- release_docs/RELEASE.txt | 9 ++++ src/H5build_settings.cmake.c.in | 2 +- src/libhdf5.settings.cmake.in | 2 +- test/CMakeTests.cmake | 6 +-- 21 files changed, 108 insertions(+), 99 deletions(-) diff --git a/.github/workflows/cmake-analysis.yml b/.github/workflows/cmake-analysis.yml index 58eb6ce584f..28d0cbd54eb 100644 --- a/.github/workflows/cmake-analysis.yml +++ b/.github/workflows/cmake-analysis.yml @@ -195,7 +195,7 @@ jobs: set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_CPP_LIB:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SANITIZERS:BOOL=ON") - set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DUSE_SANITIZER:STRING=Leak") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_USE_SANITIZER:STRING=Leak") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_ENCODING:BOOL=OFF") @@ -295,7 +295,7 @@ jobs: set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_CPP_LIB:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SANITIZERS:BOOL=ON") - set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DUSE_SANITIZER:STRING=Address") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_USE_SANITIZER:STRING=Address") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_ENCODING:BOOL=OFF") @@ -395,7 +395,7 @@ jobs: set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_CPP_LIB:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SANITIZERS:BOOL=ON") - set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DUSE_SANITIZER:STRING=Undefined") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_USE_SANITIZER:STRING=Undefined") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_ENCODING:BOOL=OFF") diff --git a/.github/workflows/main-cmake-spc.yml b/.github/workflows/main-cmake-spc.yml index b83c80beb9f..0cee38a1608 100644 --- a/.github/workflows/main-cmake-spc.yml +++ b/.github/workflows/main-cmake-spc.yml @@ -61,7 +61,7 @@ jobs: -DHDF5_ENABLE_DIRECT_VFD:BOOL=ON \ -DHDF5_ENABLE_ROS3_VFD:BOOL=ON \ -DH5_NO_DEPRECATED_SYMBOLS:BOOL=OFF \ - -DDEFAULT_API_VERSION:STRING=v16 \ + -DHDF5_DEFAULT_API_VERSION:STRING=v16 \ $GITHUB_WORKSPACE shell: bash @@ -121,7 +121,7 @@ jobs: -DHDF5_ENABLE_DIRECT_VFD:BOOL=ON \ -DHDF5_ENABLE_ROS3_VFD:BOOL=ON \ -DH5_NO_DEPRECATED_SYMBOLS:BOOL=OFF \ - -DDEFAULT_API_VERSION:STRING=v18 \ + -DHDF5_DEFAULT_API_VERSION:STRING=v18 \ $GITHUB_WORKSPACE shell: bash @@ -181,7 +181,7 @@ jobs: -DHDF5_ENABLE_DIRECT_VFD:BOOL=ON \ -DHDF5_ENABLE_ROS3_VFD:BOOL=ON \ -DH5_NO_DEPRECATED_SYMBOLS:BOOL=OFF \ - -DDEFAULT_API_VERSION:STRING=v110 \ + -DHDF5_DEFAULT_API_VERSION:STRING=v110 \ $GITHUB_WORKSPACE shell: bash @@ -241,7 +241,7 @@ jobs: -DHDF5_ENABLE_DIRECT_VFD:BOOL=ON \ -DHDF5_ENABLE_ROS3_VFD:BOOL=ON \ -DH5_NO_DEPRECATED_SYMBOLS:BOOL=OFF \ - -DDEFAULT_API_VERSION:STRING=v112 \ + -DHDF5_DEFAULT_API_VERSION:STRING=v112 \ $GITHUB_WORKSPACE shell: bash @@ -301,7 +301,7 @@ jobs: -DHDF5_ENABLE_DIRECT_VFD:BOOL=ON \ -DHDF5_ENABLE_ROS3_VFD:BOOL=ON \ -DH5_NO_DEPRECATED_SYMBOLS:BOOL=OFF \ - -DDEFAULT_API_VERSION:STRING=v114 \ + -DHDF5_DEFAULT_API_VERSION:STRING=v114 \ $GITHUB_WORKSPACE shell: bash @@ -361,7 +361,7 @@ jobs: -DHDF5_ENABLE_DIRECT_VFD:BOOL=ON \ -DHDF5_ENABLE_ROS3_VFD:BOOL=ON \ -DH5_NO_DEPRECATED_SYMBOLS:BOOL=OFF \ - -DDEFAULT_API_VERSION:STRING=v116 \ + -DHDF5_DEFAULT_API_VERSION:STRING=v116 \ $GITHUB_WORKSPACE shell: bash diff --git a/.github/workflows/vol_adios2.yml b/.github/workflows/vol_adios2.yml index d05d35427d5..ad781c10a28 100644 --- a/.github/workflows/vol_adios2.yml +++ b/.github/workflows/vol_adios2.yml @@ -42,7 +42,7 @@ jobs: -DHDF5_TEST_API_ENABLE_ASYNC:BOOL=ON \ -DHDF5_ENABLE_PARALLEL:BOOL=ON \ -DHDF5_ENABLE_THREADSAFE:BOOL=ON \ - -DALLOW_UNSUPPORTED:BOOL=ON \ + -DHDF5_ALLOW_UNSUPPORTED:BOOL=ON \ -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF \ ${{ github.workspace }}/hdf5 cat src/libhdf5.settings diff --git a/.github/workflows/vol_async.yml b/.github/workflows/vol_async.yml index 1d6861ac503..cd631ff4def 100644 --- a/.github/workflows/vol_async.yml +++ b/.github/workflows/vol_async.yml @@ -54,7 +54,7 @@ jobs: -DHDF5_TEST_API_ENABLE_ASYNC:BOOL=ON \ -DHDF5_ENABLE_PARALLEL:BOOL=ON \ -DHDF5_ENABLE_THREADSAFE:BOOL=ON \ - -DALLOW_UNSUPPORTED:BOOL=ON \ + -DHDF5_ALLOW_UNSUPPORTED:BOOL=ON \ -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF \ -DHDF5_VOL_ALLOW_EXTERNAL:STRING="GIT" \ -DHDF5_VOL_URL01:STRING="https://github.com/HDFGroup/vol-async.git" \ diff --git a/.github/workflows/vol_cache.yml b/.github/workflows/vol_cache.yml index 70f325ca2dd..4f6a55ad04a 100644 --- a/.github/workflows/vol_cache.yml +++ b/.github/workflows/vol_cache.yml @@ -82,7 +82,7 @@ jobs: -DHDF5_TEST_API_ENABLE_ASYNC:BOOL=ON \ -DHDF5_ENABLE_PARALLEL:BOOL=ON \ -DHDF5_ENABLE_THREADSAFE:BOOL=ON \ - -DALLOW_UNSUPPORTED:BOOL=ON \ + -DHDF5_ALLOW_UNSUPPORTED:BOOL=ON \ -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF \ -DHDF5_VOL_ALLOW_EXTERNAL:STRING="GIT" \ -DHDF5_VOL_URL01:STRING="https://github.com/HDFGroup/vol-async.git" \ diff --git a/.github/workflows/vol_log.yml b/.github/workflows/vol_log.yml index a7becfd4830..20c4a816ed9 100644 --- a/.github/workflows/vol_log.yml +++ b/.github/workflows/vol_log.yml @@ -40,7 +40,7 @@ jobs: -DHDF5_TEST_API_ENABLE_ASYNC:BOOL=ON \ -DHDF5_ENABLE_PARALLEL:BOOL=ON \ -DHDF5_ENABLE_THREADSAFE:BOOL=ON \ - -DALLOW_UNSUPPORTED:BOOL=ON \ + -DHDF5_ALLOW_UNSUPPORTED:BOOL=ON \ -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF \ ${{ github.workspace }}/hdf5 cat src/libhdf5.settings diff --git a/.github/workflows/vol_rest.yml b/.github/workflows/vol_rest.yml index 487f854e9f1..882835c752e 100644 --- a/.github/workflows/vol_rest.yml +++ b/.github/workflows/vol_rest.yml @@ -56,7 +56,7 @@ jobs: -DBUILD_STATIC_LIBS=OFF \ -DHDF5_BUILD_HL_LIB:BOOL=ON \ -DHDF5_TEST_API:BOOL=ON \ - -DALLOW_UNSUPPORTED:BOOL=ON \ + -DHDF5_ALLOW_UNSUPPORTED:BOOL=ON \ -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF \ -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=OFF \ -DHDF5_VOL_ALLOW_EXTERNAL:STRING="GIT" \ diff --git a/CMakeLists.txt b/CMakeLists.txt index 5522dc35aad..1a60d9c0c5c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -147,8 +147,8 @@ if (HDF5_USE_FOLDERS) endif () option (HDF5_NO_PACKAGES "CPACK - Disable packaging" OFF) mark_as_advanced (HDF5_NO_PACKAGES) -option (ALLOW_UNSUPPORTED "Allow unsupported combinations of configure options" OFF) -mark_as_advanced (ALLOW_UNSUPPORTED) +option (HDF5_ALLOW_UNSUPPORTED "Allow unsupported combinations of configure options" OFF) +mark_as_advanced (HDF5_ALLOW_UNSUPPORTED) #----------------------------------------------------------------------------- # Set the core names of all the libraries CORENAME is the base library name @@ -519,8 +519,8 @@ endif () #----------------------------------------------------------------------------- # Option to Build Shared and Static libs, default is both #----------------------------------------------------------------------------- -option (ONLY_SHARED_LIBS "Only Build Shared Libraries" OFF) -mark_as_advanced (ONLY_SHARED_LIBS) +option (HDF5_ONLY_SHARED_LIBS "Only Build Shared Libraries" OFF) +mark_as_advanced (HDF5_ONLY_SHARED_LIBS) option (BUILD_STATIC_LIBS "Build Static Libraries" ON) set (H5_ENABLE_STATIC_LIB NO) option (BUILD_SHARED_LIBS "Build Shared Libraries" ON) @@ -530,11 +530,11 @@ option (HDF5_BUILD_STATIC_TOOLS "Build Static Tools NOT Shared Tools" OFF) # only shared libraries/tools is true if user forces static OFF if (NOT BUILD_STATIC_LIBS) - set (ONLY_SHARED_LIBS ON CACHE BOOL "Only Build Shared Libraries" FORCE) + set (HDF5_ONLY_SHARED_LIBS ON CACHE BOOL "Only Build Shared Libraries" FORCE) endif () # only shared libraries is set ON by user then force settings -if (ONLY_SHARED_LIBS) +if (HDF5_ONLY_SHARED_LIBS) set (H5_ENABLE_STATIC_LIB NO) set (BUILD_SHARED_LIBS ON CACHE BOOL "Build Shared Libraries" FORCE) set (BUILD_STATIC_LIBS OFF CACHE BOOL "Build Static Libraries" FORCE) @@ -858,13 +858,13 @@ if (HDF5_ENABLE_SUBFILING_VFD) endif() -set (DEFAULT_API_VERSION "v118" CACHE STRING "Enable v1.16 API (v16, v18, v110, v112, v114, v116, v118)") -set_property (CACHE DEFAULT_API_VERSION PROPERTY STRINGS v16 v18 v110 v112 v114 v116 v118) +set (HDF5_DEFAULT_API_VERSION "v118" CACHE STRING "Enable v1.16 API (v16, v18, v110, v112, v114, v116, v118)") +set_property (CACHE HDF5_DEFAULT_API_VERSION PROPERTY STRINGS v16 v18 v110 v112 v114 v116 v118) #----------------------------------------------------------------------------- # Option to use 1.6.x API #----------------------------------------------------------------------------- set (H5_USE_16_API_DEFAULT 0) -if (DEFAULT_API_VERSION MATCHES "v16") +if (HDF5_DEFAULT_API_VERSION MATCHES "v16") set (H5_USE_16_API_DEFAULT 1) endif () @@ -872,7 +872,7 @@ endif () # Option to use 1.8.x API #----------------------------------------------------------------------------- set (H5_USE_18_API_DEFAULT 0) -if (DEFAULT_API_VERSION MATCHES "v18") +if (HDF5_DEFAULT_API_VERSION MATCHES "v18") set (H5_USE_18_API_DEFAULT 1) endif () @@ -880,7 +880,7 @@ endif () # Option to use 1.10.x API #----------------------------------------------------------------------------- set (H5_USE_110_API_DEFAULT 0) -if (DEFAULT_API_VERSION MATCHES "v110") +if (HDF5_DEFAULT_API_VERSION MATCHES "v110") set (H5_USE_110_API_DEFAULT 1) endif () @@ -888,7 +888,7 @@ endif () # Option to use 1.12.x API #----------------------------------------------------------------------------- set (H5_USE_112_API_DEFAULT 0) -if (DEFAULT_API_VERSION MATCHES "v112") +if (HDF5_DEFAULT_API_VERSION MATCHES "v112") set (H5_USE_112_API_DEFAULT 1) endif () @@ -896,7 +896,7 @@ endif () # Option to use 1.14.x API #----------------------------------------------------------------------------- set (H5_USE_114_API_DEFAULT 0) -if (DEFAULT_API_VERSION MATCHES "v114") +if (HDF5_DEFAULT_API_VERSION MATCHES "v114") set (H5_USE_114_API_DEFAULT 1) endif () @@ -904,18 +904,18 @@ endif () # Option to use 1.16.x API #----------------------------------------------------------------------------- set (H5_USE_116_API_DEFAULT 0) -if (DEFAULT_API_VERSION MATCHES "v116") +if (HDF5_DEFAULT_API_VERSION MATCHES "v116") set (H5_USE_116_API_DEFAULT 1) endif () #----------------------------------------------------------------------------- # Option to use 1.18.x API #----------------------------------------------------------------------------- -if (NOT DEFAULT_API_VERSION) - set (DEFAULT_API_VERSION "v118") +if (NOT HDF5_DEFAULT_API_VERSION) + set (HDF5_DEFAULT_API_VERSION "v118") endif () set (H5_USE_118_API_DEFAULT 0) -if (DEFAULT_API_VERSION MATCHES "v118") +if (HDF5_DEFAULT_API_VERSION MATCHES "v118") set (H5_USE_118_API_DEFAULT 1) endif () @@ -956,29 +956,29 @@ if (HDF5_ENABLE_THREADSAFE) endif () endif () if (HDF_ENABLE_PARALLEL) - if (NOT ALLOW_UNSUPPORTED) - message (FATAL_ERROR " **** Parallel and thread-safety options are not supported, override with ALLOW_UNSUPPORTED option **** ") + if (NOT HDF5_ALLOW_UNSUPPORTED) + message (FATAL_ERROR " **** Parallel and thread-safety options are not supported, override with HDF5_ALLOW_UNSUPPORTED option **** ") else () message (VERBOSE " **** Allowing unsupported parallel and thread-safety options **** ") endif () endif () if (HDF5_BUILD_FORTRAN) - if (NOT ALLOW_UNSUPPORTED) - message (FATAL_ERROR " **** Fortran and thread-safety options are not supported, override with ALLOW_UNSUPPORTED option **** ") + if (NOT HDF5_ALLOW_UNSUPPORTED) + message (FATAL_ERROR " **** Fortran and thread-safety options are not supported, override with HDF5_ALLOW_UNSUPPORTED option **** ") else () message (VERBOSE " **** Allowing unsupported Fortran and thread-safety options **** ") endif () endif () if (HDF5_BUILD_CPP_LIB) - if (NOT ALLOW_UNSUPPORTED) - message (FATAL_ERROR " **** C++ and thread-safety options are not supported, override with ALLOW_UNSUPPORTED option **** ") + if (NOT HDF5_ALLOW_UNSUPPORTED) + message (FATAL_ERROR " **** C++ and thread-safety options are not supported, override with HDF5_ALLOW_UNSUPPORTED option **** ") else () message (VERBOSE " **** Allowing unsupported C++ and thread-safety options **** ") endif () endif () if (HDF5_BUILD_HL_LIB) - if (NOT ALLOW_UNSUPPORTED) - message (FATAL_ERROR " **** HL and thread-safety options are not supported, override with ALLOW_UNSUPPORTED option **** ") + if (NOT HDF5_ALLOW_UNSUPPORTED) + message (FATAL_ERROR " **** HL and thread-safety options are not supported, override with HDF5_ALLOW_UNSUPPORTED option **** ") else () message (VERBOSE " **** Allowing unsupported HL and thread-safety options **** ") endif () @@ -1093,7 +1093,7 @@ endif () #----------------------------------------------------------------------------- # Include filter plugins #----------------------------------------------------------------------------- -if (${H5_LIBVER_DIR} EQUAL 16 OR DEFAULT_API_VERSION MATCHES "v16") +if (${H5_LIBVER_DIR} EQUAL 16 OR HDF5_DEFAULT_API_VERSION MATCHES "v16") set (HDF5_ENABLE_PLUGIN_SUPPORT OFF CACHE BOOL "" FORCE) message (VERBOSE "Filter PLUGINs cannot be used with 1.6 API") else () @@ -1186,8 +1186,8 @@ if (EXISTS "${HDF5_SOURCE_DIR}/c++" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/c++") if (HDF5_BUILD_CPP_LIB) # check for unsupported options if (HDF5_ENABLE_PARALLEL) - if (NOT ALLOW_UNSUPPORTED) - message (FATAL_ERROR " **** Parallel and C++ options are mutually exclusive, override with ALLOW_UNSUPPORTED option **** ") + if (NOT HDF5_ALLOW_UNSUPPORTED) + message (FATAL_ERROR " **** Parallel and C++ options are mutually exclusive, override with HDF5_ALLOW_UNSUPPORTED option **** ") else () message (VERBOSE " **** Allowing unsupported Parallel and C++ options **** ") endif () @@ -1229,7 +1229,7 @@ configure_file (${HDF_RESOURCES_DIR}/H5pubconf.h.in ${HDF5_SRC_BINARY_DIR}/H5pub #----------------------------------------------------------------------------- if (EXISTS "${HDF5_SOURCE_DIR}/HDF5Examples" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/HDF5Examples") option (HDF5_BUILD_EXAMPLES "Build HDF5 Library Examples" ON) - if (HDF5_BUILD_EXAMPLES AND NOT USE_SANITIZER) + if (HDF5_BUILD_EXAMPLES AND NOT HDF5_USE_SANITIZER) include (${HDF_RESOURCES_DIR}/HDF5ExampleCache.cmake) set (HDF5_VERSION ${HDF5_PACKAGE_VERSION}) add_subdirectory (HDF5Examples) diff --git a/config/cmake-presets/hidden-presets.json b/config/cmake-presets/hidden-presets.json index 8051eb66be0..db2c56f9fbc 100644 --- a/config/cmake-presets/hidden-presets.json +++ b/config/cmake-presets/hidden-presets.json @@ -269,7 +269,7 @@ "hidden": true, "inherits": "ci-x64-Debug-MSVC", "cacheVariables": { - "USE_SANITIZER": "Address", + "HDF5_USE_SANITIZER": "Address", "HDF5_ENABLE_SANITIZERS": "ON" } }, @@ -278,7 +278,7 @@ "hidden": true, "inherits": "ci-x64-Debug-GNUC", "cacheVariables": { - "USE_SANITIZER": "Address", + "HDF5_USE_SANITIZER": "Address", "HDF5_ENABLE_SANITIZERS": "ON" } }, @@ -287,7 +287,7 @@ "hidden": true, "inherits": "ci-x64-Debug-GNUC", "cacheVariables": { - "USE_SANITIZER": "Thread", + "HDF5_USE_SANITIZER": "Thread", "HDF5_ENABLE_SANITIZERS": "ON" } }, @@ -296,7 +296,7 @@ "hidden": true, "inherits": "ci-x64-Debug-GNUC", "cacheVariables": { - "USE_SANITIZER": "Leak", + "HDF5_USE_SANITIZER": "Leak", "HDF5_ENABLE_SANITIZERS": "ON" } }, @@ -305,7 +305,7 @@ "hidden": true, "inherits": "ci-x64-Debug-GNUC", "cacheVariables": { - "USE_SANITIZER": "Undefined", + "HDF5_USE_SANITIZER": "Undefined", "HDF5_ENABLE_SANITIZERS": "ON" } } diff --git a/config/cmake/HDF5ExampleCache.cmake b/config/cmake/HDF5ExampleCache.cmake index 219d1c59902..2b2559e79cd 100644 --- a/config/cmake/HDF5ExampleCache.cmake +++ b/config/cmake/HDF5ExampleCache.cmake @@ -26,22 +26,22 @@ set (EXAMPLES_EXTERNALLY_CONFIGURED ON CACHE BOOL "Examples build is used in ano set (EXAMPLE_VARNAME "H5") set (H5EX_RESOURCES_DIR ${HDF_RESOURCES_DIR}) message (STATUS "HDF5 Example H5EX_RESOURCES_DIR: ${H5EX_RESOURCES_DIR}") -if (DEFAULT_API_VERSION MATCHES "v16") +if (HDF5_DEFAULT_API_VERSION MATCHES "v16") set (H5_USE_16_API ON) -elseif (DEFAULT_API_VERSION MATCHES "v18") +elseif (HDF5_DEFAULT_API_VERSION MATCHES "v18") set (H5_USE_18_API ON) -elseif (DEFAULT_API_VERSION MATCHES "v110") +elseif (HDF5_DEFAULT_API_VERSION MATCHES "v110") set (H5_USE_110_API ON) -elseif (DEFAULT_API_VERSION MATCHES "v112") +elseif (HDF5_DEFAULT_API_VERSION MATCHES "v112") set (H5_USE_112_API ON) -elseif (DEFAULT_API_VERSION MATCHES "v114") +elseif (HDF5_DEFAULT_API_VERSION MATCHES "v114") set (H5_USE_114_API ON) -elseif (DEFAULT_API_VERSION MATCHES "v116") +elseif (HDF5_DEFAULT_API_VERSION MATCHES "v116") set (H5_USE_116_API ON) -elseif (DEFAULT_API_VERSION MATCHES "v118") +elseif (HDF5_DEFAULT_API_VERSION MATCHES "v118") set (H5_USE_118_API ON) endif () -message (STATUS "HDF5 H5_LIBVER_DIR: ${H5_LIBVER_DIR} HDF5_API_VERSION: ${DEFAULT_API_VERSION}") +message (STATUS "HDF5 H5_LIBVER_DIR: ${H5_LIBVER_DIR} HDF5_API_VERSION: ${HDF5_DEFAULT_API_VERSION}") if (NOT BUILD_SHARED_LIBS AND BUILD_STATIC_LIBS) set (USE_SHARED_LIBS OFF CACHE BOOL "Use Shared Libraries for Examples" FORCE) diff --git a/config/cmake/HDFMacros.cmake b/config/cmake/HDFMacros.cmake index a8ce9bb2c5b..018c7d8daa0 100644 --- a/config/cmake/HDFMacros.cmake +++ b/config/cmake/HDFMacros.cmake @@ -122,9 +122,9 @@ endmacro () #------------------------------------------------------------------------------- macro (INSTALL_TARGET_PDB libtarget targetdestination targetcomponent) - option (DISABLE_PDB_FILES "Do not install PDB files" OFF) - mark_as_advanced (DISABLE_PDB_FILES) - if (WIN32 AND MSVC AND NOT DISABLE_PDB_FILES) + option (HDF5_DISABLE_PDB_FILES "Do not install PDB files" OFF) + mark_as_advanced (HDF5_DISABLE_PDB_FILES) + if (WIN32 AND MSVC AND NOT HDF5_DISABLE_PDB_FILES) get_target_property (target_type ${libtarget} TYPE) if (${target_type} MATCHES "SHARED") set (targetfilename $) @@ -354,7 +354,7 @@ macro (HDF_README_PROPERTIES target_fortran) set (BINARY_PLATFORM "${BINARY_PLATFORM} / ${CMAKE_Fortran_COMPILER_ID} Fortran") endif () - if (ONLY_SHARED_LIBS) + if (HDF5_ONLY_SHARED_LIBS) set (LIB_TYPE "Shared") elseif (BUILD_SHARED_LIBS) set (LIB_TYPE "Static and Shared") diff --git a/config/cmake/hdf5-config.cmake.in b/config/cmake/hdf5-config.cmake.in index 5ac036d26f0..b0909b9ac01 100644 --- a/config/cmake/hdf5-config.cmake.in +++ b/config/cmake/hdf5-config.cmake.in @@ -49,7 +49,7 @@ set (${HDF5_PACKAGE_NAME}_BUILD_STATIC_LIBS @H5_ENABLE_STATIC_LIB@) set (${HDF5_PACKAGE_NAME}_ENABLE_THREADS @HDF5_ENABLE_THREADS@) set (${HDF5_PACKAGE_NAME}_ENABLE_THREADSAFE @HDF5_ENABLE_THREADSAFE@) set (${HDF5_PACKAGE_NAME}_ENABLE_PARALLEL @HDF5_ENABLE_PARALLEL@) -set (${HDF5_PACKAGE_NAME}_DEFAULT_API_VERSION "@DEFAULT_API_VERSION@") +set (${HDF5_PACKAGE_NAME}_DEFAULT_API_VERSION "@HDF5_DEFAULT_API_VERSION@") set (${HDF5_PACKAGE_NAME}_ENABLE_DEPRECATED_SYMBOLS @HDF5_ENABLE_DEPRECATED_SYMBOLS@) set (${HDF5_PACKAGE_NAME}_BUILD_DIMENSION_SCALES_WITH_NEW_REF @DIMENSION_SCALES_WITH_NEW_REF@) #----------------------------------------------------------------------------- diff --git a/config/cmake/scripts/HDF5options.cmake b/config/cmake/scripts/HDF5options.cmake index aedbaa19242..5ad94fd2e3a 100644 --- a/config/cmake/scripts/HDF5options.cmake +++ b/config/cmake/scripts/HDF5options.cmake @@ -32,7 +32,7 @@ #### Only build static libraries #### #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF") #### Only build shared libraries #### -#set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DONLY_SHARED_LIBS:BOOL=OFF") +#set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ONLY_SHARED_LIBS:BOOL=OFF") #### Add PIC option on linux/mac #### #set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_ANSI_CFLAGS:STRING=-fPIC") diff --git a/config/sanitizer/README.md b/config/sanitizer/README.md index 62202ffa7ec..a5ce6494a61 100644 --- a/config/sanitizer/README.md +++ b/config/sanitizer/README.md @@ -54,7 +54,7 @@ A quick rundown of the tools available, and what they do: - [MemorySanitizer](https://clang.llvm.org/docs/MemorySanitizer.html) detects uninitialized reads. - [Control Flow Integrity](https://clang.llvm.org/docs/ControlFlowIntegrity.html) is designed to detect certain forms of undefined behaviour that can potentially allow attackers to subvert the program's control flow. -These are used by declaring the `USE_SANITIZER` CMake variable as string containing any of: +These are used by declaring the `HDF5_USE_SANITIZER` CMake variable as string containing any of: - Address - Memory - MemoryWithOrigins @@ -63,7 +63,7 @@ These are used by declaring the `USE_SANITIZER` CMake variable as string contain - Leak - CFI -Multiple values are allowed, e.g. `-DUSE_SANITIZER=Address,Leak` but some sanitizers cannot be combined together, e.g.`-DUSE_SANITIZER=Address,Memory` will result in configuration error. The delimiter character is not required and `-DUSE_SANITIZER=AddressLeak` would work as well. +Multiple values are allowed, e.g. `-DHDF5_USE_SANITIZER=Address,Leak` but some sanitizers cannot be combined together, e.g.`-DHDF5_USE_SANITIZER=Address,Memory` will result in configuration error. The delimiter character is not required and `-DHDF5_USE_SANITIZER=AddressLeak` would work as well. ## Code Coverage [`code-coverage.cmake`](code-coverage.cmake) diff --git a/config/sanitizer/sanitizers.cmake b/config/sanitizer/sanitizers.cmake index dea9f099f06..fa5d1059aeb 100644 --- a/config/sanitizer/sanitizers.cmake +++ b/config/sanitizer/sanitizers.cmake @@ -13,7 +13,7 @@ # License for the specific language governing permissions and limitations under # the License. -set(USE_SANITIZER +set(HDF5_USE_SANITIZER "" CACHE STRING @@ -50,8 +50,8 @@ function(test_san_flags return_var flags) set(CMAKE_REQUIRED_QUIET "${QUIET_BACKUP}") endfunction() -message(STATUS "USE_SANITIZER=${USE_SANITIZER}, CMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}") -if(USE_SANITIZER) +message(STATUS "HDF5_USE_SANITIZER=${HDF5_USE_SANITIZER}, CMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}") +if(HDF5_USE_SANITIZER) if(CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") set(CMAKE_EXPORT_COMPILE_COMMANDS ON) @@ -65,7 +65,7 @@ if(USE_SANITIZER) append("-O1" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) endif() - if(USE_SANITIZER MATCHES "([Aa]ddress)") + if(HDF5_USE_SANITIZER MATCHES "([Aa]ddress)") # Optional: -fno-optimize-sibling-calls -fsanitize-address-use-after-scope message(STATUS "Testing with Address sanitizer") set(SANITIZER_ADDR_FLAG "-fsanitize=address") @@ -85,9 +85,9 @@ if(USE_SANITIZER) endif() endif() - if(USE_SANITIZER MATCHES "([Mm]emory([Ww]ith[Oo]rigins)?)") + if(HDF5_USE_SANITIZER MATCHES "([Mm]emory([Ww]ith[Oo]rigins)?)") set(SANITIZER_MEM_FLAG "-fsanitize=memory") - if(USE_SANITIZER MATCHES "([Mm]emory[Ww]ith[Oo]rigins)") + if(HDF5_USE_SANITIZER MATCHES "([Mm]emory[Ww]ith[Oo]rigins)") message(STATUS "Testing with MemoryWithOrigins sanitizer") append("-fno-optimize-sibling-calls -fsanitize-memory-track-origins=2" SANITIZER_MEM_FLAG) else() @@ -95,7 +95,7 @@ if(USE_SANITIZER) endif() test_san_flags(SANITIZER_MEM_AVAILABLE ${SANITIZER_MEM_FLAG}) if(SANITIZER_MEM_AVAILABLE) - if(USE_SANITIZER MATCHES "([Mm]emory[Ww]ith[Oo]rigins)") + if(HDF5_USE_SANITIZER MATCHES "([Mm]emory[Ww]ith[Oo]rigins)") message(STATUS " Building with MemoryWithOrigins sanitizer") else() message(STATUS " Building with Memory sanitizer") @@ -113,7 +113,7 @@ if(USE_SANITIZER) endif() endif() - if(USE_SANITIZER MATCHES "([Uu]ndefined)") + if(HDF5_USE_SANITIZER MATCHES "([Uu]ndefined)") message(STATUS "Testing with Undefined Behaviour sanitizer") set(SANITIZER_UB_FLAG "-fsanitize=undefined") if(EXISTS "${BLACKLIST_FILE}") @@ -132,7 +132,7 @@ if(USE_SANITIZER) endif() endif() - if(USE_SANITIZER MATCHES "([Tt]hread)") + if(HDF5_USE_SANITIZER MATCHES "([Tt]hread)") message(STATUS "Testing with Thread sanitizer") set(SANITIZER_THREAD_FLAG "-fsanitize=thread") test_san_flags(SANITIZER_THREAD_AVAILABLE ${SANITIZER_THREAD_FLAG}) @@ -148,7 +148,7 @@ if(USE_SANITIZER) endif() endif() - if(USE_SANITIZER MATCHES "([Ll]eak)") + if(HDF5_USE_SANITIZER MATCHES "([Ll]eak)") message(STATUS "Testing with Leak sanitizer") set(SANITIZER_LEAK_FLAG "-fsanitize=leak") test_san_flags(SANITIZER_LEAK_AVAILABLE ${SANITIZER_LEAK_FLAG}) @@ -164,7 +164,7 @@ if(USE_SANITIZER) endif() endif() - if(USE_SANITIZER MATCHES "([Cc][Ff][Ii])") + if(HDF5_USE_SANITIZER MATCHES "([Cc][Ff][Ii])") message(STATUS "Testing with Control Flow Integrity(CFI) sanitizer") set(SANITIZER_CFI_FLAG "-fsanitize=cfi") test_san_flags(SANITIZER_CFI_AVAILABLE ${SANITIZER_CFI_FLAG}) @@ -186,10 +186,10 @@ if(USE_SANITIZER) message(STATUS " Building with ${SANITIZER_SELECTED_FLAGS}") append("${SANITIZER_SELECTED_FLAGS}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) else() - message(FATAL_ERROR "Unsupported value of USE_SANITIZER: ${USE_SANITIZER}") + message(FATAL_ERROR "Unsupported value of HDF5_USE_SANITIZER: ${HDF5_USE_SANITIZER}") endif() elseif(MSVC) - if(USE_SANITIZER MATCHES "([Aa]ddress)") + if(HDF5_USE_SANITIZER MATCHES "([Aa]ddress)") message(STATUS "Building with Address sanitizer") append("-fsanitize=address" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) @@ -197,19 +197,19 @@ if(USE_SANITIZER) append_quoteless(AFL_USE_ASAN=1 CMAKE_C_COMPILER_LAUNCHER CMAKE_CXX_COMPILER_LAUNCHER) endif() else() - message(FATAL_ERROR "This sanitizer not yet supported in the MSVC environment: ${USE_SANITIZER}") + message(FATAL_ERROR "This sanitizer not yet supported in the MSVC environment: ${HDF5_USE_SANITIZER}") endif() else() - message(FATAL_ERROR "USE_SANITIZER is not supported on this platform.") + message(FATAL_ERROR "HDF5_USE_SANITIZER is not supported on this platform.") endif() elseif(MSVC) - if(USE_SANITIZER MATCHES "([Aa]ddress)") + if(HDF5_USE_SANITIZER MATCHES "([Aa]ddress)") message(STATUS "Building with Address sanitizer") append("/fsanitize=address" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) else() - message(FATAL_ERROR "This sanitizer not yet supported in the MSVC environment: ${USE_SANITIZER}") + message(FATAL_ERROR "This sanitizer not yet supported in the MSVC environment: ${HDF5_USE_SANITIZER}") endif() else() - message(FATAL_ERROR "USE_SANITIZER is not supported on this platform.") + message(FATAL_ERROR "HDF5_USE_SANITIZER is not supported on this platform.") endif() endif() diff --git a/doc/cmake-vols-fetchcontent.md b/doc/cmake-vols-fetchcontent.md index ff0591311c4..f7b395dec7b 100644 --- a/doc/cmake-vols-fetchcontent.md +++ b/doc/cmake-vols-fetchcontent.md @@ -145,7 +145,7 @@ would typically be passed when building HDF5, such as `CMAKE_INSTALL_PREFIX`, cmake [hdf5 options] -DHDF5_ENABLE_THREADSAFE=ON -DHDF5_ENABLE_PARALLEL=ON - -DALLOW_UNSUPPORTED=ON + -DHDF5_ALLOW_UNSUPPORTED=ON -DHDF5_TEST_API=ON -DHDF5_VOL_ALLOW_EXTERNAL="GIT" -DHDF5_VOL_URL01=https://github.com/hpc-io/vol-async.git diff --git a/release_docs/INSTALL_CMake.txt b/release_docs/INSTALL_CMake.txt index 6db1b29cc6f..0b33946767b 100644 --- a/release_docs/INSTALL_CMake.txt +++ b/release_docs/INSTALL_CMake.txt @@ -817,7 +817,7 @@ BUILD_STATIC_LIBS "Build Static Libraries" ON BUILD_STATIC_EXECS "Build Static Executables" OFF BUILD_TESTING "Build HDF5 Unit Testing" ON if (WINDOWS) - DISABLE_PDB_FILES "Do not install PDB files" OFF + HDF5_DISABLE_PDB_FILES "Do not install PDB files" OFF ---------------- HDF5 Build Options ---------------------------------------- HDF5_BUILD_CPP_LIB "Build HDF5 C++ Library" OFF @@ -855,8 +855,8 @@ HDF5_INSTALL_DATA_DIR "share" HDF5_INSTALL_DOC_DIR "HDF5_INSTALL_DATA_DIR/doc/hdf5" ---------------- HDF5 Advanced Options --------------------- -ONLY_SHARED_LIBS "Only Build Shared Libraries" OFF -ALLOW_UNSUPPORTED "Allow unsupported combinations of configure options" OFF +HDF5_ONLY_SHARED_LIBS "Only Build Shared Libraries" OFF +HDF5_ALLOW_UNSUPPORTED "Allow unsupported combinations of configure options" OFF HDF5_ENABLE_PARALLEL "Enable parallel build (requires MPI)" OFF HDF5_ENABLE_THREADSAFE "Enable Threadsafety" OFF HDF5_DIMENSION_SCALES_NEW_REF "Use new-style references with dimension scale APIs" OFF @@ -888,7 +888,7 @@ HDF5_STRICT_FORMAT_CHECKS "Whether to perform strict file format checks" HDF5_WANT_DATA_ACCURACY "IF data accuracy is guaranteed during data conversions" ON HDF5_WANT_DCONV_EXCEPTION "exception handling functions is checked during data conversions" ON -DEFAULT_API_VERSION "Enable default API (v16, v18, v110, v112, v114, v116, v118)" "v118" +HDF5_DEFAULT_API_VERSION "Enable default API (v16, v18, v110, v112, v114, v116, v118)" "v118" HDF5_USE_FOLDERS "Enable folder grouping of projects in IDEs." ON HDF5_MSVC_NAMING_CONVENTION "Use MSVC Naming conventions for Shared Libraries" OFF HDF5_MINGW_STATIC_GCC_LIBS "Statically link libgcc/libstdc++" OFF @@ -898,10 +898,10 @@ if (CMAKE_BUILD_TYPE MATCHES Debug) HDF5_ENABLE_INSTRUMENT "Instrument The library" OFF if (HDF5_BUILD_FORTRAN) HDF5_INSTALL_MOD_FORTRAN "Copy FORTRAN mod files to include directory (NO SHARED STATIC)" SHARED - if (BUILD_SHARED_LIBS AND BUILD_STATIC_LIBS) default HDF5_INSTALL_MOD_FORTRAN is SHARED - if (BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS) default HDF5_INSTALL_MOD_FORTRAN is SHARED - if (NOT BUILD_SHARED_LIBS AND BUILD_STATIC_LIBS) default HDF5_INSTALL_MOD_FORTRAN is STATIC - if (NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS) default HDF5_INSTALL_MOD_FORTRAN is SHARED + if (BUILD_SHARED_LIBS AND BUILD_STATIC_LIBS) default HDF5_INSTALL_MOD_FORTRAN is SHARED + if (BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS) default HDF5_INSTALL_MOD_FORTRAN is SHARED + if (NOT BUILD_SHARED_LIBS AND BUILD_STATIC_LIBS) default HDF5_INSTALL_MOD_FORTRAN is STATIC + if (NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS) default HDF5_INSTALL_MOD_FORTRAN is SHARED HDF5_ENABLE_ANALYZER_TOOLS "enable the use of Clang tools" OFF HDF5_ENABLE_SANITIZERS "execute the Clang sanitizer" OFF @@ -933,7 +933,7 @@ if (BUILD_TESTING) HDF5_TEST_VFD "Execute tests with different VFDs" OFF if (HDF5_TEST_VFD) HDF5_TEST_FHEAP_VFD "Execute fheap test with different VFDs" ON - TEST_SHELL_SCRIPTS "Enable shell script tests" ON + HDF5_TEST_SHELL_SCRIPTS "Enable shell script tests" ON HDF5_DISABLE_TESTS_REGEX "Regex pattern to set execution of specific tests to DISABLED" "" HDF5_USING_ANALYSIS_TOOL "Indicate that an analysis checker is used" ON ---------------- External Library Options --------------------- @@ -981,14 +981,14 @@ NOTE: ---------------- Unsupported Library Options --------------------- The threadsafe, C++ and Java interfaces are not compatible with the HDF5_ENABLE_PARALLEL option. - Unless ALLOW_UNSUPPORTED has been specified, + Unless HDF5_ALLOW_UNSUPPORTED has been specified, the following options must be disabled: HDF5_ENABLE_THREADSAFE, HDF5_BUILD_CPP_LIB, HDF5_BUILD_JAVA The high-level, C++, Fortran and Java interfaces are not compatible with the HDF5_ENABLE_THREADSAFE option because the lock is not hoisted into the higher-level API calls. - Unless ALLOW_UNSUPPORTED has been specified, + Unless HDF5_ALLOW_UNSUPPORTED has been specified, the following options must be disabled: HDF5_BUILD_HL_LIB, HDF5_BUILD_CPP_LIB, HDF5_BUILD_FORTRAN, HDF5_BUILD_JAVA diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 8442839e2fb..7e5880ea590 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -47,6 +47,15 @@ New Features Configuration: ------------- + - Renamed remaining HDF5 library CMake options except for CMake BUILD* variables + + DEFAULT_API_VERSION to HDF5_DEFAULT_API_VERSION + DISABLE_PDB_FILES to HDF5_DISABLE_PDB_FILES + ONLY_SHARED_LIBS to HDF5_ONLY_SHARED_LIBS + ALLOW_UNSUPPORTED to HDF5_ALLOW_UNSUPPORTED + TEST_SHELL_SCRIPTS to HDF5_TEST_SHELL_SCRIPTS + + All other HDF5 library CMake options are prefixed with HDF5_ - bin/cmakehdf5 has been removed This was an unsupported build script that made building HDF5 via CMake diff --git a/src/H5build_settings.cmake.c.in b/src/H5build_settings.cmake.c.in index acb5c5bb169..6dac78d27b1 100644 --- a/src/H5build_settings.cmake.c.in +++ b/src/H5build_settings.cmake.c.in @@ -95,7 +95,7 @@ const char H5build_settings[]= " Build HDF5 Tools: @HDF5_BUILD_TOOLS@\n" " Build GIF Tools: @HDF5_BUILD_HL_GIF_TOOLS@\n" " Threadsafety: @HDF5_ENABLE_THREADSAFE@\n" - " Default API mapping: @DEFAULT_API_VERSION@\n" + " Default API mapping: @HDF5_DEFAULT_API_VERSION@\n" " With deprecated public symbols: @HDF5_ENABLE_DEPRECATED_SYMBOLS@\n" " I/O filters (external): @EXTERNAL_FILTERS@\n" " _Float16 support: @HDF5_ENABLE_NONSTANDARD_FEATURE_FLOAT16@\n" diff --git a/src/libhdf5.settings.cmake.in b/src/libhdf5.settings.cmake.in index 02d1796a0b4..2f9b5f5c960 100644 --- a/src/libhdf5.settings.cmake.in +++ b/src/libhdf5.settings.cmake.in @@ -76,7 +76,7 @@ Dimension scales w/ new references: @DIMENSION_SCALES_WITH_NEW_REF@ Build GIF Tools: @HDF5_BUILD_HL_GIF_TOOLS@ Threads: @HDF5_ENABLE_THREADS@ Threadsafety: @HDF5_ENABLE_THREADSAFE@ - Default API mapping: @DEFAULT_API_VERSION@ + Default API mapping: @HDF5_DEFAULT_API_VERSION@ With deprecated public symbols: @HDF5_ENABLE_DEPRECATED_SYMBOLS@ I/O filters (external): @EXTERNAL_FILTERS@ _Float16 support: @HDF5_ENABLE_NONSTANDARD_FEATURE_FLOAT16@ diff --git a/test/CMakeTests.cmake b/test/CMakeTests.cmake index 036b54798bc..37755a8551a 100644 --- a/test/CMakeTests.cmake +++ b/test/CMakeTests.cmake @@ -784,7 +784,7 @@ if ("H5TEST-err_compat" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") endif () #-- Adding test for error_test -if (DEFAULT_API_VERSION MATCHES "v16" OR MINGW) +if (HDF5_DEFAULT_API_VERSION MATCHES "v16" OR MINGW) add_test (NAME H5TEST-error_test COMMAND "${CMAKE_COMMAND}" -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$" @@ -914,8 +914,8 @@ if (BUILD_SHARED_LIBS) endif () endif () -option (TEST_SHELL_SCRIPTS "Enable shell script tests" ON) -if (TEST_SHELL_SCRIPTS) +option (HDF5_TEST_SHELL_SCRIPTS "Enable shell script tests" ON) +if (HDF5_TEST_SHELL_SCRIPTS) include (ShellTests.cmake) endif() From 9a02511d0c78dafa304395ae62cfacce0a825167 Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Wed, 23 Oct 2024 11:20:33 -0500 Subject: [PATCH 029/179] Add remaining CMake workflow versions of autotools workflows (#4998) * Add warnings as errors workflow for cmake * Add spc par workflow * Add workflow call * Add parallel special --- .github/workflows/cmake-analysis.yml | 2 +- .github/workflows/cmake.yml | 12 ++ .github/workflows/hdfeos5.yml | 53 ++++++-- .github/workflows/main-cmake-par-spc.yml | 79 +++++++++++ .github/workflows/main-cmake-par.yml | 4 +- .github/workflows/main-cmake-spc.yml | 164 ++++++++++++++++------- .github/workflows/netcdf.yml | 39 +++++- 7 files changed, 281 insertions(+), 72 deletions(-) create mode 100644 .github/workflows/main-cmake-par-spc.yml diff --git a/.github/workflows/cmake-analysis.yml b/.github/workflows/cmake-analysis.yml index 28d0cbd54eb..36dea0dc39e 100644 --- a/.github/workflows/cmake-analysis.yml +++ b/.github/workflows/cmake-analysis.yml @@ -90,7 +90,7 @@ jobs: set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_STATIC_LIBS:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_JAVA:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_CPP_LIB:BOOL=ON") - set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=OFF") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_COVERAGE:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCODE_COVERAGE:BOOL=ON") set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=ON") diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index b15205f38ae..b1137c3b944 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -75,6 +75,18 @@ jobs: with: build_mode: "Debug" + call-release-special-par: + name: "CMake Parallel Release Special Workflows" + uses: ./.github/workflows/main-cmake-par-spc.yml + with: + build_mode: "Release" + + call-debug-special-par: + name: "CMake Parallel Debug Special Workflows" + uses: ./.github/workflows/main-cmake-par-spc.yml + with: + build_mode: "Debug" + call-release-cmake-intel: name: "CMake Intel Workflows" uses: ./.github/workflows/intel-cmake.yml diff --git a/.github/workflows/hdfeos5.yml b/.github/workflows/hdfeos5.yml index 2f766ce36bb..01dad32f529 100644 --- a/.github/workflows/hdfeos5.yml +++ b/.github/workflows/hdfeos5.yml @@ -15,31 +15,59 @@ on: - 'LICENSE**' - '**.md' +permissions: + contents: read + # Using concurrency to cancel any in-progress job or run concurrency: group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} cancel-in-progress: true -permissions: - contents: read - jobs: build: name: Build hdfeos5 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4.1.7 + - name: Install System dependencies + run: | + sudo apt-get update + sudo apt-get install ninja-build + sudo apt install libssl3 libssl-dev libcurl4 + sudo apt install -y libaec-dev zlib1g-dev automake autoconf libcurl4-openssl-dev libjpeg-dev wget curl bzip2 m4 flex bison cmake libzip-dev doxygen openssl libtool libtool-bin - - name: Install Autotools Dependencies (Linux) + - name: Checkout HDF5 + uses: actions/checkout@v4.1.7 + + - name: CMake Configure run: | - sudo apt update - sudo apt install automake autoconf libtool libtool-bin + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DHDF5_ENABLE_PARALLEL:BOOL=OFF \ + -DHDF5_BUILD_CPP_LIB:BOOL=OFF \ + -DHDF5_BUILD_FORTRAN=OFF \ + -DHDF5_BUILD_JAVA=OFF \ + -DHDF5_BUILD_DOC=OFF \ + -DLIBAEC_USE_LOCALCONTENT=OFF \ + -DZLIB_USE_LOCALCONTENT=OFF \ + -DH5_NO_DEPRECATED_SYMBOLS:BOOL=OFF \ + -DBUILD_TESTING:BOOL=OFF \ + -DDEFAULT_API_VERSION:STRING=v16 \ + -DCMAKE_INSTALL_PREFIX:PATH=/usr/local \ + $GITHUB_WORKSPACE + shell: bash + + - name: CMake Build + run: cmake --build . --parallel 3 --config Release + working-directory: ${{ runner.workspace }}/build + - name: Install HDF5 run: | - ./autogen.sh - ./configure --prefix=/usr/local --disable-tests --with-default-api-version=v16 - make - sudo make install + sudo cmake --install . --config Release --prefix="/usr/local" + working-directory: ${{ runner.workspace }}/build + - name: Install HDF-EOS5 run: | wget -O HDF-EOS5.2.0.tar.gz "https://git.earthdata.nasa.gov/projects/DAS/repos/hdfeos5/raw/hdf-eos5-2.0-src.tar.gz?at=refs%2Fheads%2FHDFEOS5_2.0" @@ -47,5 +75,6 @@ jobs: cd hdf-eos5-2.0 ./configure CC=/usr/local/bin/h5cc --prefix=/usr/local/ --enable-install-include make - make check + LD_LIBRARY_PATH="/usr/local/lib:${LD_LIBRARY_PATH}" + LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make check sudo make install diff --git a/.github/workflows/main-cmake-par-spc.yml b/.github/workflows/main-cmake-par-spc.yml new file mode 100644 index 00000000000..72bc99bed11 --- /dev/null +++ b/.github/workflows/main-cmake-par-spc.yml @@ -0,0 +1,79 @@ +name: hdf5 dev parallel special CMake CI + +on: + workflow_call: + inputs: + build_mode: + description: "release vs. debug build" + required: true + type: string + +permissions: + contents: read + +jobs: + # + # The GitHub runners are inadequate for running parallel HDF5 tests, + # so we catch most issues in daily testing. What we have here is just + # a compile check to make sure nothing obvious is broken. + # A workflow that builds the library + # Parallel Linux (Ubuntu) w/ gcc + CMake + # + CMake_build_parallel_werror: + name: "Parallel GCC-${{ inputs.build_mode }}" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4.1.7 + + - name: Install Linux Dependencies + 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 gcc-12 g++-12 gfortran-12 + sudo apt install libaec0 libaec-dev + sudo apt install openmpi-bin openmpi-common mpi-default-dev + echo "CC=mpicc" >> $GITHUB_ENV + echo "FC=mpif90" >> $GITHUB_ENV + + - name: CMake Configure + shell: bash + run: | + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + CC=mpicc cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \ + --log-level=VERBOSE \ + -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ + -DBUILD_SHARED_LIBS=ON \ + -DHDF5_ENABLE_ALL_WARNINGS=ON \ + -DHDF5_ENABLE_WARNINGS_AS_ERRORS=ON \ + -DHDF5_ENABLE_PARALLEL:BOOL=ON \ + -DHDF5_ENABLE_SUBFILING_VFD:BOOL=ON \ + -DHDF5_BUILD_CPP_LIB:BOOL=OFF \ + -DHDF5_BUILD_FORTRAN=OFF \ + -DHDF5_BUILD_JAVA=OFF \ + -DLIBAEC_USE_LOCALCONTENT=OFF \ + -DZLIB_USE_LOCALCONTENT=OFF \ + -DHDF5_ENABLE_MIRROR_VFD:BOOL=OFF \ + -DHDF5_ENABLE_DIRECT_VFD:BOOL=ON \ + -DHDF5_ENABLE_ROS3_VFD:BOOL=OFF \ + -DHDF5_PACK_EXAMPLES:BOOL=OFF \ + $GITHUB_WORKSPACE + + # BUILD + - 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/main-cmake-par.yml b/.github/workflows/main-cmake-par.yml index c00caa713c9..c3d9900e857 100644 --- a/.github/workflows/main-cmake-par.yml +++ b/.github/workflows/main-cmake-par.yml @@ -1,4 +1,4 @@ -name: hdf5 dev PAR CMake CI +name: hdf5 dev parallel CMake CI on: workflow_call: @@ -17,7 +17,7 @@ jobs: # so we catch most issues in daily testing. What we have here is just # a compile check to make sure nothing obvious is broken. # A workflow that builds the library - # Parallel Linux (Ubuntu) w/ gcc + Autotools + # Parallel Linux (Ubuntu) w/ gcc + CMake # CMake_build_parallel: name: "Parallel GCC-${{ inputs.build_mode }}" diff --git a/.github/workflows/main-cmake-spc.yml b/.github/workflows/main-cmake-spc.yml index 0cee38a1608..a814cf1a09d 100644 --- a/.github/workflows/main-cmake-spc.yml +++ b/.github/workflows/main-cmake-spc.yml @@ -38,9 +38,7 @@ jobs: - name: Get Sources uses: actions/checkout@v4.1.7 - # # CMAKE CONFIGURE - # - name: CMake Configure run: | mkdir "${{ runner.workspace }}/build" @@ -65,16 +63,12 @@ jobs: $GITHUB_WORKSPACE shell: bash - # # BUILD - # - name: CMake Build run: cmake --build . --parallel 3 --config Debug working-directory: ${{ runner.workspace }}/build - # # RUN TESTS - disable until some tests are fixed - # # - name: CMake Run Tests # run: ctest . --parallel 2 -C Debug -V # working-directory: ${{ runner.workspace }}/build @@ -98,9 +92,7 @@ jobs: - name: Get Sources uses: actions/checkout@v4.1.7 - # # CMAKE CONFIGURE - # - name: CMake Configure run: | mkdir "${{ runner.workspace }}/build" @@ -125,9 +117,7 @@ jobs: $GITHUB_WORKSPACE shell: bash - # # BUILD - # - name: CMake Build run: cmake --build . --parallel 3 --config Debug working-directory: ${{ runner.workspace }}/build @@ -158,9 +148,7 @@ jobs: - name: Get Sources uses: actions/checkout@v4.1.7 - # # CMAKE CONFIGURE - # - name: CMake Configure run: | mkdir "${{ runner.workspace }}/build" @@ -185,9 +173,7 @@ jobs: $GITHUB_WORKSPACE shell: bash - # # BUILD - # - name: CMake Build run: cmake --build . --parallel 3 --config Debug working-directory: ${{ runner.workspace }}/build @@ -218,9 +204,7 @@ jobs: - name: Get Sources uses: actions/checkout@v4.1.7 - # # CMAKE CONFIGURE - # - name: CMake Configure run: | mkdir "${{ runner.workspace }}/build" @@ -245,16 +229,12 @@ jobs: $GITHUB_WORKSPACE shell: bash - # # BUILD - # - name: CMake Build run: cmake --build . --parallel 3 --config Debug working-directory: ${{ runner.workspace }}/build - # # RUN TESTS - # - name: CMake Run Tests run: ctest . --parallel 2 -C Debug -V working-directory: ${{ runner.workspace }}/build @@ -278,9 +258,7 @@ jobs: - name: Get Sources uses: actions/checkout@v4.1.7 - # # CMAKE CONFIGURE - # - name: CMake Configure run: | mkdir "${{ runner.workspace }}/build" @@ -305,16 +283,12 @@ jobs: $GITHUB_WORKSPACE shell: bash - # # BUILD - # - name: CMake Build run: cmake --build . --parallel 3 --config Debug working-directory: ${{ runner.workspace }}/build - # # RUN TESTS - # - name: CMake Run Tests run: ctest . --parallel 2 -C Debug -V working-directory: ${{ runner.workspace }}/build @@ -326,21 +300,19 @@ jobs: # SETUP - name: Install Linux Dependencies 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 gcc-12 g++-12 gfortran-12 - echo "CC=gcc-12" >> $GITHUB_ENV - echo "CXX=g++-12" >> $GITHUB_ENV - echo "FC=gfortran-12" >> $GITHUB_ENV + 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 gcc-12 g++-12 gfortran-12 + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + echo "FC=gfortran-12" >> $GITHUB_ENV # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources uses: actions/checkout@v4.1.7 - # # CMAKE CONFIGURE - # - name: CMake Configure run: | mkdir "${{ runner.workspace }}/build" @@ -365,16 +337,12 @@ jobs: $GITHUB_WORKSPACE shell: bash - # # BUILD - # - name: CMake Build run: cmake --build . --parallel 3 --config Debug working-directory: ${{ runner.workspace }}/build - # # RUN TESTS - # - name: CMake Run Tests run: ctest . --parallel 2 -C Debug -V working-directory: ${{ runner.workspace }}/build @@ -386,21 +354,19 @@ jobs: # SETUP - name: Install Linux Dependencies 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 gcc-12 g++-12 gfortran-12 - echo "CC=gcc-12" >> $GITHUB_ENV - echo "CXX=g++-12" >> $GITHUB_ENV - echo "FC=gfortran-12" >> $GITHUB_ENV + 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 gcc-12 g++-12 gfortran-12 + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + echo "FC=gfortran-12" >> $GITHUB_ENV # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources uses: actions/checkout@v4.1.7 - # # CMAKE CONFIGURE - # - name: CMake Configure run: | mkdir "${{ runner.workspace }}/build" @@ -425,16 +391,110 @@ jobs: $GITHUB_WORKSPACE shell: bash - # # BUILD - # - name: CMake Build run: cmake --build . --parallel 3 --config Release working-directory: ${{ runner.workspace }}/build - # # RUN TESTS - # - name: CMake Run Tests run: ctest . --parallel 2 -C Release -V working-directory: ${{ runner.workspace }}/build + + build_debug_werror: + name: "gcc DBG -Werror (build only)" + runs-on: ubuntu-latest + steps: + # SETUP + - name: Install Linux Dependencies + 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 gcc-12 g++-12 gfortran-12 + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + echo "FC=gfortran-12" >> $GITHUB_ENV + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4.1.7 + + # CMAKE CONFIGURE + - name: CMake Configure + run: | + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \ + -G Ninja \ + --log-level=VERBOSE \ + -DCMAKE_BUILD_TYPE=Debug \ + -DBUILD_SHARED_LIBS=ON \ + -DHDF5_ENABLE_ALL_WARNINGS=ON \ + -DHDF5_ENABLE_WARNINGS_AS_ERRORS=ON \ + -DHDF5_ENABLE_PARALLEL:BOOL=OFF \ + -DHDF5_BUILD_CPP_LIB:BOOL=ON \ + -DHDF5_BUILD_FORTRAN=OFF \ + -DHDF5_BUILD_JAVA=ON \ + -DHDF5_BUILD_DOC=OFF \ + -DLIBAEC_USE_LOCALCONTENT=OFF \ + -DZLIB_USE_LOCALCONTENT=OFF \ + -DHDF5_ENABLE_MIRROR_VFD:BOOL=ON \ + -DHDF5_ENABLE_DIRECT_VFD:BOOL=ON \ + -DHDF5_ENABLE_ROS3_VFD:BOOL=ON \ + $GITHUB_WORKSPACE + shell: bash + + # BUILD + - name: CMake Build + run: cmake --build . --parallel 3 --config Release + working-directory: ${{ runner.workspace }}/build + + build_release_werror: + name: "gcc REL -Werror (build only)" + runs-on: ubuntu-latest + steps: + # SETUP + - name: Install Linux Dependencies + 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 gcc-12 g++-12 gfortran-12 + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + echo "FC=gfortran-12" >> $GITHUB_ENV + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4.1.7 + + # CMAKE CONFIGURE + - name: CMake Configure + run: | + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \ + -G Ninja \ + --log-level=VERBOSE \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=ON \ + -DHDF5_ENABLE_ALL_WARNINGS=ON \ + -DHDF5_ENABLE_WARNINGS_AS_ERRORS=ON \ + -DHDF5_ENABLE_PARALLEL:BOOL=OFF \ + -DHDF5_BUILD_CPP_LIB:BOOL=ON \ + -DHDF5_BUILD_FORTRAN=ON \ + -DHDF5_BUILD_JAVA=ON \ + -DHDF5_BUILD_DOC=OFF \ + -DLIBAEC_USE_LOCALCONTENT=OFF \ + -DZLIB_USE_LOCALCONTENT=OFF \ + -DHDF5_ENABLE_MIRROR_VFD:BOOL=ON \ + -DHDF5_ENABLE_DIRECT_VFD:BOOL=ON \ + -DHDF5_ENABLE_ROS3_VFD:BOOL=ON \ + $GITHUB_WORKSPACE + shell: bash + + # BUILD + - name: CMake Build + run: cmake --build . --parallel 3 --config Release + working-directory: ${{ runner.workspace }}/build diff --git a/.github/workflows/netcdf.yml b/.github/workflows/netcdf.yml index 080160d086d..febc7b6fd8f 100644 --- a/.github/workflows/netcdf.yml +++ b/.github/workflows/netcdf.yml @@ -29,21 +29,50 @@ jobs: steps: - name: Install System dependencies run: | - sudo apt update + sudo apt-get update + sudo apt-get install ninja-build + sudo apt install libssl3 libssl-dev libcurl4 sudo apt install -y libaec-dev zlib1g-dev automake autoconf libcurl4-openssl-dev libjpeg-dev wget curl bzip2 m4 flex bison cmake libzip-dev doxygen openssl libtool libtool-bin + - name: Checkout HDF5 uses: actions/checkout@v4.1.7 + + - name: CMake Configure + run: | + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DONLY_SHARED_LIBS=ON \ + -DHDF5_ENABLE_PARALLEL:BOOL=OFF \ + -DHDF5_BUILD_CPP_LIB:BOOL=OFF \ + -DHDF5_BUILD_FORTRAN=OFF \ + -DHDF5_BUILD_JAVA=OFF \ + -DHDF5_BUILD_DOC=OFF \ + -DLIBAEC_USE_LOCALCONTENT=OFF \ + -DZLIB_USE_LOCALCONTENT=OFF \ + -DH5_NO_DEPRECATED_SYMBOLS:BOOL=OFF \ + -DBUILD_TESTING:BOOL=OFF \ + -DCMAKE_INSTALL_PREFIX:PATH=/usr/local \ + $GITHUB_WORKSPACE + shell: bash + + - name: CMake Build + run: cmake --build . --parallel 3 --config Release + working-directory: ${{ runner.workspace }}/build + - name: Install HDF5 run: | - ./autogen.sh - ./configure --prefix=/usr/local --disable-tests --disable-static --enable-shared --enable-hl --with-szlib - make -j - sudo make install -j + sudo cmake --install . --config Release --prefix="/usr/local" + working-directory: ${{ runner.workspace }}/build + - name: Checkout netCDF uses: actions/checkout@v4.1.7 with: repository: unidata/netcdf-c path: netcdf-c + - name: Test netCDF run: | cd netcdf-c From 63b1442127c59aead6f0341ed9d351df626b8469 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Wed, 23 Oct 2024 10:12:05 -0700 Subject: [PATCH 030/179] Disable Julia CI (#4999) PR #4968 fixes a bug that causes the Julia CI to fail due to buggy HDF5 behavior. The Julia CI will need to be updated to properly test the fixed feature. --- .github/workflows/autotools.yml | 10 +++++----- .github/workflows/cmake.yml | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/autotools.yml b/.github/workflows/autotools.yml index 6bf5a8813cf..e2dcacf9aa4 100644 --- a/.github/workflows/autotools.yml +++ b/.github/workflows/autotools.yml @@ -100,11 +100,11 @@ 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" +# 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" diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index b1137c3b944..0867f5757c3 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -115,8 +115,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" +# call-release-cmake-julia: +# name: "CMake Julia Workflows" +# uses: ./.github/workflows/julia-cmake.yml +# with: +# build_mode: "Release" From ed4419cc52d629ef2627a4cbc08916346cb9790c Mon Sep 17 00:00:00 2001 From: Quincey Koziol Date: Wed, 23 Oct 2024 12:13:57 -0500 Subject: [PATCH 031/179] Remove another couple of H5E_clear_stack calls (#4968) Also cleans up the links test, which had a ton of copy-and-pasted incorrect negative error checks (Calling TEST_ERROR within H5E_BEGIN_TRY / H5E_END_TRY pairs will goto out of the pair, leaving errors suppressed). --- release_docs/RELEASE.txt | 5 + src/H5Dvirtual.c | 26 +- src/H5Gloc.c | 13 +- src/H5Gtraverse.c | 13 +- test/links.c | 573 ++++++++++++++++++++++++--------------- 5 files changed, 386 insertions(+), 244 deletions(-) diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 7e5880ea590..e51bc71014d 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -198,6 +198,11 @@ Bug Fixes since HDF5-1.16.0 release =================================== Library ------- + - Fixed a bug in the H5Oexists and H5Oexists_by_name API routines that + would cause those routines to return FAIL instead of FALSE when checking + the existence of a non-existent object with a file ID instead of a + group ID. + - Only clear FE_INVALID when that symbol is present on the system When we initialize the floating-point types at library startup, it's diff --git a/src/H5Dvirtual.c b/src/H5Dvirtual.c index 4e30939241a..59c3a3f2e25 100644 --- a/src/H5Dvirtual.c +++ b/src/H5Dvirtual.c @@ -890,6 +890,7 @@ H5D__virtual_open_source_dset(const H5D_t *vdset, H5O_storage_virtual_ent_t *vir if (src_file) { H5G_loc_t src_root_loc; /* Object location of source file root group */ + bool exists = false; /* Set up the root group in the destination file */ if (NULL == (src_root_loc.oloc = H5G_oloc(H5G_rootof(src_file)))) @@ -897,18 +898,18 @@ H5D__virtual_open_source_dset(const H5D_t *vdset, H5O_storage_virtual_ent_t *vir if (NULL == (src_root_loc.path = H5G_nameof(H5G_rootof(src_file)))) HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "unable to get path for root group"); - /* Try opening the source dataset */ - source_dset->dset = H5D__open_name(&src_root_loc, source_dset->dset_name, - vdset->shared->layout.storage.u.virt.source_dapl); + /* Check if the source dataset exists */ + if (H5G_loc_exists(&src_root_loc, source_dset->dset_name, &exists /*out*/) < 0) + HGOTO_ERROR(H5E_OHDR, H5E_CANTFIND, FAIL, "can't check object's existence"); - /* Dataset does not exist */ - if (NULL == source_dset->dset) { - /* Reset the error stack */ - H5E_clear_stack(); + /* Dataset exists */ + if (exists) { + /* Try opening the source dataset */ + if (NULL == + (source_dset->dset = H5D__open_name(&src_root_loc, source_dset->dset_name, + vdset->shared->layout.storage.u.virt.source_dapl))) + HGOTO_ERROR(H5E_DATASET, H5E_CANTOPENOBJ, FAIL, "unable to open source dataset"); - source_dset->dset_exists = false; - } /* end if */ - else { /* Dataset exists */ source_dset->dset_exists = true; @@ -919,7 +920,10 @@ H5D__virtual_open_source_dset(const H5D_t *vdset, H5O_storage_virtual_ent_t *vir virtual_ent->source_space_status = H5O_VIRTUAL_STATUS_CORRECT; } /* end if */ } /* end else */ - } /* end if */ + else + /* Dataset does not exist */ + source_dset->dset_exists = false; + } /* end if */ done: /* Release resources */ diff --git a/src/H5Gloc.c b/src/H5Gloc.c index 00e6ba008a0..d22ffd6a779 100644 --- a/src/H5Gloc.c +++ b/src/H5Gloc.c @@ -581,17 +581,13 @@ H5G__loc_exists_cb(H5G_loc_t H5_ATTR_UNUSED *grp_loc /*in*/, const char H5_ATTR_ const H5O_link_t H5_ATTR_UNUSED *lnk, H5G_loc_t *obj_loc, void *_udata /*in,out*/, H5G_own_loc_t *own_loc /*out*/) { - bool *exists = (bool *)_udata; /* User data passed in */ - herr_t ret_value = SUCCEED; /* Return value */ + bool *exists = (bool *)_udata; /* User data passed in */ - FUNC_ENTER_PACKAGE + FUNC_ENTER_PACKAGE_NOERR /* Check if the name in this group resolved to a valid object */ if (obj_loc == NULL) - if (lnk) - *exists = false; - else - HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "no object or link info?"); + *exists = false; else *exists = true; @@ -599,8 +595,7 @@ H5G__loc_exists_cb(H5G_loc_t H5_ATTR_UNUSED *grp_loc /*in*/, const char H5_ATTR_ * location for the object */ *own_loc = H5G_OWN_NONE; -done: - FUNC_LEAVE_NOAPI(ret_value) + FUNC_LEAVE_NOAPI(SUCCEED) } /* end H5G__loc_exists_cb() */ /*------------------------------------------------------------------------- diff --git a/src/H5Gtraverse.c b/src/H5Gtraverse.c index f2dad1ce3f1..4f0e03fb849 100644 --- a/src/H5Gtraverse.c +++ b/src/H5Gtraverse.c @@ -180,7 +180,11 @@ H5G__traverse_ud(const H5G_loc_t *grp_loc /*in,out*/, const H5O_link_t *lnk, H5G if ((cur_grp = H5VL_wrap_register(H5I_GROUP, grp, false)) < 0) HGOTO_ERROR(H5E_SYM, H5E_CANTREGISTER, FAIL, "unable to register group"); - /* User-defined callback function */ + /* Pause recording errors, if we are just checking for object's existence */ + if (target & H5G_TARGET_EXISTS) + H5E_pause_stack(); + + /* Invoke user-defined callback function */ #ifndef H5_NO_DEPRECATED_SYMBOLS /* (Backwardly compatible with v0 H5L_class_t traversal callback) */ if (link_class->version == H5L_LINK_CLASS_T_VERS_0) @@ -194,13 +198,14 @@ H5G__traverse_ud(const H5G_loc_t *grp_loc /*in,out*/, const H5O_link_t *lnk, H5G H5CX_get_dxpl()); #endif /* H5_NO_DEPRECATED_SYMBOLS */ + /* Resume recording errors, if we were just checking for object's existence */ + if (target & H5G_TARGET_EXISTS) + H5E_resume_stack(); + /* Check for failing to locate the object */ if (cb_return < 0) { /* Check if we just needed to know if the object exists */ if (target & H5G_TARGET_EXISTS) { - /* Clear any errors from the stack */ - H5E_clear_stack(); - /* Indicate that the object doesn't exist */ *obj_exists = false; diff --git a/test/links.c b/test/links.c index 71cdf688dca..826211f1da3 100644 --- a/test/links.c +++ b/test/links.c @@ -495,6 +495,7 @@ new_links(hid_t fapl, bool new_format) hid_t dset1 = (H5I_INVALID_HID), dset2 = (H5I_INVALID_HID); char filename[NAME_BUF_SIZE]; hsize_t size[1] = {1}; + herr_t status; /* Generic return value */ if (new_format) TESTING("H5Lcreate functions (w/new group format)"); @@ -535,24 +536,27 @@ new_links(hid_t fapl, bool new_format) * H5L_SAME_LOC. Both hard and soft links should fail. */ H5E_BEGIN_TRY { - if (H5Lcreate_hard(H5L_SAME_LOC, "dataset1", H5L_SAME_LOC, "hard", H5P_DEFAULT, H5P_DEFAULT) != FAIL) - TEST_ERROR; + status = H5Lcreate_hard(H5L_SAME_LOC, "dataset1", H5L_SAME_LOC, "hard", H5P_DEFAULT, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; H5E_BEGIN_TRY { - if (H5Lcreate_soft("dataset1", H5L_SAME_LOC, "soft", H5P_DEFAULT, H5P_DEFAULT) != FAIL) - TEST_ERROR; + status = H5Lcreate_soft("dataset1", H5L_SAME_LOC, "soft", H5P_DEFAULT, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Create links across files with hard link. Should fail. */ H5E_BEGIN_TRY { - if (H5Lcreate_hard(file_a, "dataset1", file_b, "hard", H5P_DEFAULT, H5P_DEFAULT) != FAIL) - TEST_ERROR; + status = H5Lcreate_hard(file_a, "dataset1", file_b, "hard", H5P_DEFAULT, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Create hard link to test H5L_SAME_LOC */ if (H5Lcreate_hard(grp1_a, "dataset2", H5L_SAME_LOC, "hard1", H5P_DEFAULT, H5P_DEFAULT) < 0) @@ -1360,7 +1364,8 @@ test_move(hid_t fapl, bool new_format) hid_t file_a = H5I_INVALID_HID, file_b = H5I_INVALID_HID; hid_t grp_1 = H5I_INVALID_HID, grp_2 = H5I_INVALID_HID, grp_move = H5I_INVALID_HID, moved_grp = H5I_INVALID_HID; - char filename[1024]; + char filename[1024]; + herr_t status; /* Generic return value */ if (new_format) TESTING("H5Lmove (w/new group format)"); @@ -1395,19 +1400,21 @@ test_move(hid_t fapl, bool new_format) * H5L_SAME_LOC. Should fail. */ H5E_BEGIN_TRY { - if (H5Lmove(H5L_SAME_LOC, "group_move", H5L_SAME_LOC, "group_new_name", H5P_DEFAULT, H5P_DEFAULT) != - FAIL) - TEST_ERROR; + status = + H5Lmove(H5L_SAME_LOC, "group_move", H5L_SAME_LOC, "group_new_name", H5P_DEFAULT, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Move a group across files. Should fail. */ H5E_BEGIN_TRY { - if (H5Lmove(grp_1, "group_move", file_b, "group_new_name", H5P_DEFAULT, H5P_DEFAULT) != FAIL) - TEST_ERROR; + status = H5Lmove(grp_1, "group_move", file_b, "group_new_name", H5P_DEFAULT, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Move a soft link across files. Should succeed. */ if (H5Lmove(grp_2, "soft", file_b, "soft_new_name", H5P_DEFAULT, H5P_DEFAULT) < 0) @@ -1478,16 +1485,44 @@ test_move(hid_t fapl, bool new_format) /* Verify that the group is in no previous locations */ H5E_BEGIN_TRY { - if ((moved_grp = H5Gopen2(grp_1, "group_newer_name", H5P_DEFAULT)) >= 0) - FAIL_STACK_ERROR; - if ((moved_grp = H5Gopen2(grp_2, "group_newer_name", H5P_DEFAULT)) >= 0) - FAIL_STACK_ERROR; - if ((moved_grp = H5Gopen2(grp_2, "group_new_name", H5P_DEFAULT)) >= 0) - FAIL_STACK_ERROR; - if ((moved_grp = H5Gopen2(grp_1, "group_copy", H5P_DEFAULT)) >= 0) - FAIL_STACK_ERROR; + moved_grp = H5Gopen2(grp_1, "group_newer_name", H5P_DEFAULT); + } + H5E_END_TRY + if (moved_grp >= 0) { + H5_FAILED(); + puts(" Group still in earlier location?"); + TEST_ERROR; + } /* end if */ + H5E_BEGIN_TRY + { + moved_grp = H5Gopen2(grp_2, "group_newer_name", H5P_DEFAULT); + } + H5E_END_TRY + if (moved_grp >= 0) { + H5_FAILED(); + puts(" Group still in earlier location?"); + TEST_ERROR; + } /* end if */ + H5E_BEGIN_TRY + { + moved_grp = H5Gopen2(grp_2, "group_new_name", H5P_DEFAULT); + } + H5E_END_TRY + if (moved_grp >= 0) { + H5_FAILED(); + puts(" Group still in earlier location?"); + TEST_ERROR; + } /* end if */ + H5E_BEGIN_TRY + { + moved_grp = H5Gopen2(grp_1, "group_copy", H5P_DEFAULT); } H5E_END_TRY + if (moved_grp >= 0) { + H5_FAILED(); + puts(" Group still in earlier location?"); + TEST_ERROR; + } /* end if */ H5Gclose(grp_1); H5Gclose(grp_2); @@ -1528,7 +1563,8 @@ test_copy(hid_t fapl, bool new_format) hid_t file_a = H5I_INVALID_HID, file_b = H5I_INVALID_HID; hid_t grp_1 = H5I_INVALID_HID, grp_2 = H5I_INVALID_HID, grp_move = H5I_INVALID_HID, moved_grp = H5I_INVALID_HID; - char filename[1024]; + char filename[1024]; + herr_t status; /* Generic return value */ if (new_format) TESTING("H5Lcopy (w/new group format)"); @@ -1563,19 +1599,21 @@ test_copy(hid_t fapl, bool new_format) * H5L_SAME_LOC. Should fail. */ H5E_BEGIN_TRY { - if (H5Lcopy(H5L_SAME_LOC, "group_copy", H5L_SAME_LOC, "group_new_name", H5P_DEFAULT, H5P_DEFAULT) != - FAIL) - TEST_ERROR; + status = + H5Lcopy(H5L_SAME_LOC, "group_copy", H5L_SAME_LOC, "group_new_name", H5P_DEFAULT, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Copy a group across files. Should fail. */ H5E_BEGIN_TRY { - if (H5Lcopy(grp_1, "group_copy", file_b, "group_new_name", H5P_DEFAULT, H5P_DEFAULT) != FAIL) - TEST_ERROR; + status = H5Lcopy(grp_1, "group_copy", file_b, "group_new_name", H5P_DEFAULT, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Copy a soft link across files. Should succeed. */ if (H5Lcopy(grp_2, "soft", file_b, "soft_new_name", H5P_DEFAULT, H5P_DEFAULT) < 0) @@ -1946,12 +1984,14 @@ test_deprec(hid_t fapl, bool new_format) hid_t group1_id = H5I_INVALID_HID; hid_t group2_id = H5I_INVALID_HID; hid_t group3_id = H5I_INVALID_HID; + hid_t group4_id = H5I_INVALID_HID; H5G_stat_t sb_hard1, sb_hard2, sb_soft1, sb_soft2; H5G_obj_t obj_type; /* Object type */ hsize_t num_objs; /* Number of objects in a group */ char filename[1024]; char tmpstr[1024]; int len = 0; /* Length of comment */ + herr_t status; /* Generic return value */ if (new_format) TESTING("backwards compatibility (w/new group format)"); @@ -2006,10 +2046,11 @@ test_deprec(hid_t fapl, bool new_format) TEST_ERROR; H5E_BEGIN_TRY { - if (H5Gget_objname_by_idx(group1_id, (hsize_t)1, tmpstr, sizeof(tmpstr)) >= 0) - TEST_ERROR; + len = (int)H5Gget_objname_by_idx(group1_id, (hsize_t)1, tmpstr, sizeof(tmpstr)); } H5E_END_TRY + if (len >= 0) + TEST_ERROR; /* Test getting the type for objects */ if ((obj_type = H5Gget_objtype_by_idx(group1_id, (hsize_t)0)) < 0) @@ -2018,10 +2059,11 @@ test_deprec(hid_t fapl, bool new_format) TEST_ERROR; H5E_BEGIN_TRY { - if (H5Gget_objtype_by_idx(group1_id, (hsize_t)1) >= 0) - TEST_ERROR; + status = H5Gget_objtype_by_idx(group1_id, (hsize_t)1); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Test getting the number of objects in a group */ if (H5Gget_num_objs(file_id, &num_objs) < 0) @@ -2097,10 +2139,11 @@ test_deprec(hid_t fapl, bool new_format) /* Test non-existing links with H5Gget_objinfo */ H5E_BEGIN_TRY { - if (H5Gget_objinfo(file_id, "/group2/soft_link_no_exist", true, NULL) >= 0) - FAIL_STACK_ERROR; + status = H5Gget_objinfo(file_id, "/group2/soft_link_no_exist", true, NULL); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Test the dangling soft link */ if (H5Gget_objinfo(file_id, "/group2/dangle_soft_link", false, &sb_soft2) < 0) @@ -2140,20 +2183,20 @@ test_deprec(hid_t fapl, bool new_format) /* Test passing in invalid ID */ H5E_BEGIN_TRY { - hid_t bad_id = H5I_BADID; - if (H5Gmove2(bad_id, "group2", group1_id, "moved_group2") >= 0) - TEST_ERROR; + status = H5Gmove2(H5I_BADID, "group2", group1_id, "moved_group2"); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Test passing in invalid ID */ H5E_BEGIN_TRY { - hid_t bad_id = H5I_BADID; - if (H5Gmove2(file_id, "group2", bad_id, "moved_group2") >= 0) - TEST_ERROR; + status = H5Gmove2(H5I_BADID, "group2", H5I_BADID, "moved_group2"); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Ensure that both groups can be opened */ if (H5Gclose(group2_id) < 0) @@ -2180,10 +2223,11 @@ test_deprec(hid_t fapl, bool new_format) H5E_BEGIN_TRY { - if (H5Gopen2(file_id, "moved_group1/moved_group2", H5P_DEFAULT) >= 0) - TEST_ERROR; + group4_id = H5Gopen2(file_id, "moved_group1/moved_group2", H5P_DEFAULT); } H5E_END_TRY + if (group4_id >= 0) + TEST_ERROR; if (H5Fclose(file_id) < 0) FAIL_STACK_ERROR; @@ -3073,6 +3117,7 @@ external_link_query_deprec(hid_t fapl, bool new_format) H5L_info1_t li; /* Link information */ char filename1[NAME_BUF_SIZE], filename2[NAME_BUF_SIZE], /* Names of files to externally link across */ query_buf[NAME_BUF_SIZE]; /* Buffer to hold query result */ + herr_t status; /* Generic return value */ if (new_format) TESTING("query aspects of external link using deprecated routines (w/new group format)"); @@ -3170,28 +3215,32 @@ external_link_query_deprec(hid_t fapl, bool new_format) /* Make sure that bogus cases trigger errors in H5Lunpack_elink_val */ H5E_BEGIN_TRY { - if (H5Lunpack_elink_val(query_buf, li.u.val_size - 1, NULL, NULL, NULL) >= 0) - TEST_ERROR; + status = H5Lunpack_elink_val(query_buf, li.u.val_size - 1, NULL, NULL, NULL); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; H5E_BEGIN_TRY { - if (H5Lunpack_elink_val(query_buf, (size_t)0, NULL, NULL, NULL) >= 0) - TEST_ERROR; + status = H5Lunpack_elink_val(query_buf, (size_t)0, NULL, NULL, NULL); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; H5E_BEGIN_TRY { - if (H5Lunpack_elink_val(NULL, (size_t)0, NULL, NULL, NULL) >= 0) - TEST_ERROR; + status = H5Lunpack_elink_val(NULL, (size_t)0, NULL, NULL, NULL); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; H5E_BEGIN_TRY { - if (H5Lunpack_elink_val(NULL, (size_t)1000, NULL, NULL, NULL) >= 0) - TEST_ERROR; + status = H5Lunpack_elink_val(NULL, (size_t)1000, NULL, NULL, NULL); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; PASSED(); return SUCCEED; @@ -3231,6 +3280,7 @@ external_link_closing_deprec(hid_t fapl, bool new_format) H5L_info1_t li; H5O_info1_t oi; hobj_ref_t obj_ref; + herr_t status; /* Generic return value */ if (new_format) TESTING("that external files are closed during traversal (w/new group format)"); @@ -3390,12 +3440,18 @@ external_link_closing_deprec(hid_t fapl, bool new_format) TEST_ERROR; H5E_BEGIN_TRY { - if (H5Fmount(fid1, "elink/elink/elink/mnt", fid1, H5P_DEFAULT) >= 0) - TEST_ERROR; - if (H5Funmount(fid1, "elink/elink/elink/mnt") >= 0) - TEST_ERROR; + status = H5Fmount(fid1, "elink/elink/elink/mnt", fid1, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + status = H5Funmount(fid1, "elink/elink/elink/mnt"); + } + H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Test H5Rcreate */ if (H5Rcreate(&obj_ref, fid1, "elink/elink/elink/type1_moved", H5R_OBJECT, (hid_t)(-1)) < 0) @@ -3856,6 +3912,7 @@ ud_link_reregister_deprec(hid_t fapl) char objname[NAME_BUF_SIZE]; /* Object name */ char filename[NAME_BUF_SIZE]; h5_stat_size_t empty_size; /* Size of an empty file */ + herr_t status; /* Generic return value */ TESTING("registering a new class for existing UD links using deprecated routines (w/new group format)"); @@ -3915,19 +3972,21 @@ ud_link_reregister_deprec(hid_t fapl) /* Verify that we can't traverse the ud link anymore */ H5E_BEGIN_TRY { - if ((gid = H5Gopen2(fid, "ud_link", H5P_DEFAULT)) >= 0) - TEST_ERROR; + gid = H5Gopen2(fid, "ud_link", H5P_DEFAULT); } H5E_END_TRY + if (gid >= 0) + TEST_ERROR; /* Verify that we can't create any new links of this type */ H5E_BEGIN_TRY { - if (H5Lcreate_ud(fid, "ud_link2", (H5L_type_t)UD_HARD_TYPE, &(li.u.address), sizeof(li.u.address), - H5P_DEFAULT, H5P_DEFAULT) >= 0) - TEST_ERROR; + status = H5Lcreate_ud(fid, "ud_link2", (H5L_type_t)UD_HARD_TYPE, &(li.u.address), + sizeof(li.u.address), H5P_DEFAULT, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Register a new kind of link with the same ID number */ if (H5Lregister(UD_rereg_class) < 0) @@ -4041,6 +4100,7 @@ ud_callbacks_deprec(hid_t fapl, bool new_format) char ud_target_name[] = UD_CB_TARGET; /* Link target name */ char filename[NAME_BUF_SIZE]; char query_buf[NAME_BUF_SIZE]; + herr_t status; /* Generic return value */ if (new_format) TESTING("user-defined link callbacks using deprecated routines (w/new group format)"); @@ -4154,19 +4214,40 @@ ud_callbacks_deprec(hid_t fapl, bool new_format) /* Now test that each of the callbacks fails */ H5E_BEGIN_TRY { - if (H5Lcreate_ud(fid, NEW_UD_CB_LINK_NAME, (H5L_type_t)UD_CB_TYPE, ud_target_name, - (size_t)UD_CB_TARGET_LEN, H5P_DEFAULT, H5P_DEFAULT) >= 0) - FAIL_STACK_ERROR; - if (H5Lmove(fid, UD_CB_LINK_NAME, H5L_SAME_LOC, NEW_UD_CB_LINK_NAME, H5P_DEFAULT, H5P_DEFAULT) >= 0) - FAIL_STACK_ERROR; - if (H5Ldelete(fid, UD_CB_LINK_NAME, H5P_DEFAULT) >= 0) - FAIL_STACK_ERROR; - if ((gid = H5Gopen2(gid, UD_CB_LINK_NAME, H5P_DEFAULT)) >= 0) - FAIL_STACK_ERROR; - if (H5Ldelete(fid, UD_CB_LINK_NAME, H5P_DEFAULT) >= 0) - FAIL_STACK_ERROR; + status = H5Lcreate_ud(fid, NEW_UD_CB_LINK_NAME, (H5L_type_t)UD_CB_TYPE, ud_target_name, + (size_t)UD_CB_TARGET_LEN, H5P_DEFAULT, H5P_DEFAULT); + } + H5E_END_TRY + if (status >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + status = H5Lmove(fid, UD_CB_LINK_NAME, H5L_SAME_LOC, NEW_UD_CB_LINK_NAME, H5P_DEFAULT, H5P_DEFAULT); + } + H5E_END_TRY + if (status >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + status = H5Ldelete(fid, UD_CB_LINK_NAME, H5P_DEFAULT); + } + H5E_END_TRY + if (status >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + gid = H5Gopen2(gid, UD_CB_LINK_NAME, H5P_DEFAULT); + } + H5E_END_TRY + if (gid >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + status = H5Ldelete(fid, UD_CB_LINK_NAME, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* The query callback should NOT fail, but should be unable to give a linklen */ if (H5Lget_info1(fid, UD_CB_LINK_NAME, &li, H5P_DEFAULT) < 0) @@ -4427,14 +4508,25 @@ lapl_nlinks_deprec(hid_t fapl, bool new_format) /* Try to open the objects using too many symlinks with default *APLs */ H5E_BEGIN_TRY { - if ((gid = H5Gopen2(fid, "soft17", H5P_DEFAULT)) >= 0) - FAIL_PUTS_ERROR(" Should have failed for too many nested links."); - if ((tid = H5Topen2(fid, "soft17/datatype", H5P_DEFAULT)) >= 0) - FAIL_PUTS_ERROR(" Should have failed for too many nested links."); - if ((did = H5Dopen2(fid, "soft17/dataset", H5P_DEFAULT)) >= 0) - FAIL_PUTS_ERROR(" Should have failed for too many nested links."); + gid = H5Gopen2(fid, "soft17", H5P_DEFAULT); + } + H5E_END_TRY + if (gid >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + tid = H5Topen2(fid, "soft17/datatype", H5P_DEFAULT); + } + H5E_END_TRY + if (tid >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + did = H5Dopen2(fid, "soft17/dataset", H5P_DEFAULT); } H5E_END_TRY + if (did >= 0) + TEST_ERROR; /* Create property lists with nlinks set */ if ((gapl = H5Pcreate(H5P_GROUP_ACCESS)) < 0) @@ -9016,11 +9108,7 @@ external_link_chdir(hid_t fapl, bool new_format) TEST_ERROR; /* Open object through external link */ - H5E_BEGIN_TRY - { - gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT); - } - H5E_END_TRY + gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT); if (HDchdir("..") < 0) TEST_ERROR; @@ -10461,12 +10549,11 @@ external_link_win1(hid_t fapl, bool new_format) /* Open object through external link */ H5E_BEGIN_TRY { - gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT); } H5E_END_TRY /* should be able to find the target file via main file's CWD*/ - if (gid < 0) { + if ((gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT)) < 0) { H5_FAILED(); puts(" Should have found the file in CWD."); goto error; @@ -10555,14 +10642,8 @@ external_link_win2(hid_t fapl, bool new_format) TEST_ERROR; /* Open object through external link */ - H5E_BEGIN_TRY - { - gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT); - } - H5E_END_TRY - /* should be able to find the target file directly */ - if (gid < 0) { + if ((gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT)) < 0) { H5_FAILED(); puts(" Should have found the file in tmp_links."); goto error; @@ -10649,14 +10730,8 @@ external_link_win3(hid_t fapl, bool new_format) TEST_ERROR; /* Open object through external link */ - H5E_BEGIN_TRY - { - gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT); - } - H5E_END_TRY - /* should be able to find the target file directly */ - if (gid < 0) { + if ((gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT)) < 0) { H5_FAILED(); puts(" Should have found the file in tmp_links."); goto error; @@ -10740,14 +10815,8 @@ external_link_win4(hid_t fapl, bool new_format) TEST_ERROR; /* Open object through external link */ - H5E_BEGIN_TRY - { - gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT); - } - H5E_END_TRY - /* should be able to find the target file via main file's absolute drive/relative path */ - if (gid < 0) { + if ((gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT)) < 0) { H5_FAILED(); puts(" Should have found the file in CWD."); goto error; @@ -10841,14 +10910,8 @@ external_link_win5(hid_t fapl, bool new_format) TEST_ERROR; /* Open object through external link */ - H5E_BEGIN_TRY - { - gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT); - } - H5E_END_TRY - /* should be able to find the target file via main file's rel drive/abs path */ - if (gid < 0) { + if ((gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT)) < 0) { H5_FAILED(); puts(" Should have found the file in CWD."); goto error; @@ -10939,14 +11002,8 @@ external_link_win6(hid_t fapl, bool new_format) TEST_ERROR; /* Open object through external link */ - H5E_BEGIN_TRY - { - gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT); - } - H5E_END_TRY - /* should be able to find the target file via target file's rel path in current drive */ - if (gid < 0) { + if ((gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT)) < 0) { H5_FAILED(); puts(" Should have found the file in tmp_links."); goto error; @@ -11034,14 +11091,8 @@ external_link_win7(hid_t fapl, bool new_format) TEST_ERROR; /* Open object through external link */ - H5E_BEGIN_TRY - { - gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT); - } - H5E_END_TRY - /* should be able to find the target file via main file's local host/main drive*/ - if (gid < 0) { + if ((gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT)) < 0) { H5_FAILED(); puts(" Should have found the file in local host/main drive."); goto error; @@ -11134,14 +11185,8 @@ external_link_win8(hid_t fapl, bool new_format) TEST_ERROR; /* Open object through external link */ - H5E_BEGIN_TRY - { - gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT); - } - H5E_END_TRY - /* should be able to find the target file directly */ - if (gid < 0) { + if ((gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT)) < 0) { H5_FAILED(); puts(" Should have found the file in tmp_links."); goto error; @@ -11229,14 +11274,8 @@ external_link_win9(hid_t fapl, bool new_format) TEST_ERROR; /* Open object through external link */ - H5E_BEGIN_TRY - { - gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT); - } - H5E_END_TRY - /* should be able to find the target file via main file's local host/main drive*/ - if (gid < 0) { + if ((gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT)) < 0) { H5_FAILED(); puts(" Should have found the file in local host/main drive."); goto error; @@ -11353,6 +11392,7 @@ external_link_query(hid_t fapl, bool new_format) H5L_info2_t li; /* Link information */ char filename1[NAME_BUF_SIZE], filename2[NAME_BUF_SIZE], /* Names of files to externally link across */ query_buf[NAME_BUF_SIZE]; /* Buffer to hold query result */ + herr_t status; /* Generic return value */ if (new_format) TESTING("query aspects of external link (w/new group format)"); @@ -11450,28 +11490,32 @@ external_link_query(hid_t fapl, bool new_format) /* Make sure that bogus cases trigger errors in H5Lunpack_elink_val */ H5E_BEGIN_TRY { - if (H5Lunpack_elink_val(query_buf, li.u.val_size - 1, NULL, NULL, NULL) >= 0) - TEST_ERROR; + status = H5Lunpack_elink_val(query_buf, li.u.val_size - 1, NULL, NULL, NULL); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; H5E_BEGIN_TRY { - if (H5Lunpack_elink_val(query_buf, (size_t)0, NULL, NULL, NULL) >= 0) - TEST_ERROR; + status = H5Lunpack_elink_val(query_buf, (size_t)0, NULL, NULL, NULL); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; H5E_BEGIN_TRY { - if (H5Lunpack_elink_val(NULL, (size_t)0, NULL, NULL, NULL) >= 0) - TEST_ERROR; + status = H5Lunpack_elink_val(NULL, (size_t)0, NULL, NULL, NULL); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; H5E_BEGIN_TRY { - if (H5Lunpack_elink_val(NULL, (size_t)1000, NULL, NULL, NULL) >= 0) - TEST_ERROR; + status = H5Lunpack_elink_val(NULL, (size_t)1000, NULL, NULL, NULL); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; PASSED(); return SUCCEED; @@ -12247,6 +12291,7 @@ external_link_closing(hid_t fapl, bool new_format) H5L_info2_t li; H5O_info2_t oi; hobj_ref_t obj_ref; + herr_t status; /* Generic return value */ if (new_format) TESTING("that external files are closed during traversal (w/new group format)"); @@ -12405,12 +12450,18 @@ external_link_closing(hid_t fapl, bool new_format) TEST_ERROR; H5E_BEGIN_TRY { - if (H5Fmount(fid1, "elink/elink/elink/mnt", fid1, H5P_DEFAULT) >= 0) - TEST_ERROR; - if (H5Funmount(fid1, "elink/elink/elink/mnt") >= 0) - TEST_ERROR; + status = H5Fmount(fid1, "elink/elink/elink/mnt", fid1, H5P_DEFAULT); + } + H5E_END_TRY + if (status >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + status = H5Funmount(fid1, "elink/elink/elink/mnt"); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Test H5Rcreate */ if (H5Rcreate(&obj_ref, fid1, "elink/elink/elink/type1_moved", H5R_OBJECT, (hid_t)(-1)) < 0) @@ -14496,6 +14547,7 @@ ud_link_reregister(hid_t fapl) char objname[NAME_BUF_SIZE]; /* Object name */ char filename[NAME_BUF_SIZE]; h5_stat_size_t empty_size; /* Size of an empty file */ + herr_t status; /* Generic return value */ TESTING("registering a new class for existing UD links (w/new group format)"); @@ -14555,19 +14607,21 @@ ud_link_reregister(hid_t fapl) /* Verify that we can't traverse the ud link anymore */ H5E_BEGIN_TRY { - if ((gid = H5Gopen2(fid, "ud_link", H5P_DEFAULT)) >= 0) - TEST_ERROR; + gid = H5Gopen2(fid, "ud_link", H5P_DEFAULT); } H5E_END_TRY + if (gid >= 0) + TEST_ERROR; /* Verify that we can't create any new links of this type */ H5E_BEGIN_TRY { - if (H5Lcreate_ud(fid, "ud_link2", (H5L_type_t)UD_HARD_TYPE, &(li.u.token), sizeof(H5O_token_t), - H5P_DEFAULT, H5P_DEFAULT) >= 0) - TEST_ERROR; + status = H5Lcreate_ud(fid, "ud_link2", (H5L_type_t)UD_HARD_TYPE, &(li.u.token), sizeof(H5O_token_t), + H5P_DEFAULT, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Register a new kind of link with the same ID number */ if (H5Lregister(UD_rereg_class) < 0) @@ -14825,6 +14879,7 @@ ud_callbacks(hid_t fapl, bool new_format) char ud_target_name[] = UD_CB_TARGET; /* Link target name */ char filename[NAME_BUF_SIZE]; char query_buf[NAME_BUF_SIZE]; + herr_t status; /* Generic return value */ if (new_format) TESTING("user-defined link callbacks (w/new group format)"); @@ -14938,19 +14993,40 @@ ud_callbacks(hid_t fapl, bool new_format) /* Now test that each of the callbacks fails */ H5E_BEGIN_TRY { - if (H5Lcreate_ud(fid, NEW_UD_CB_LINK_NAME, (H5L_type_t)UD_CB_TYPE, ud_target_name, - (size_t)UD_CB_TARGET_LEN, H5P_DEFAULT, H5P_DEFAULT) >= 0) - FAIL_STACK_ERROR; - if (H5Lmove(fid, UD_CB_LINK_NAME, H5L_SAME_LOC, NEW_UD_CB_LINK_NAME, H5P_DEFAULT, H5P_DEFAULT) >= 0) - FAIL_STACK_ERROR; - if (H5Ldelete(fid, UD_CB_LINK_NAME, H5P_DEFAULT) >= 0) - FAIL_STACK_ERROR; - if ((gid = H5Gopen2(gid, UD_CB_LINK_NAME, H5P_DEFAULT)) >= 0) - FAIL_STACK_ERROR; - if (H5Ldelete(fid, UD_CB_LINK_NAME, H5P_DEFAULT) >= 0) - FAIL_STACK_ERROR; + status = H5Lcreate_ud(fid, NEW_UD_CB_LINK_NAME, (H5L_type_t)UD_CB_TYPE, ud_target_name, + (size_t)UD_CB_TARGET_LEN, H5P_DEFAULT, H5P_DEFAULT); + } + H5E_END_TRY + if (status >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + status = H5Lmove(fid, UD_CB_LINK_NAME, H5L_SAME_LOC, NEW_UD_CB_LINK_NAME, H5P_DEFAULT, H5P_DEFAULT); + } + H5E_END_TRY + if (status >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + status = H5Ldelete(fid, UD_CB_LINK_NAME, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + gid = H5Gopen2(gid, UD_CB_LINK_NAME, H5P_DEFAULT); + } + H5E_END_TRY + if (gid >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + status = H5Ldelete(fid, UD_CB_LINK_NAME, H5P_DEFAULT); + } + H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* The query callback should NOT fail, but should be unable to give a linklen */ if (H5Lget_info2(fid, UD_CB_LINK_NAME, &li, H5P_DEFAULT) < 0) @@ -15348,7 +15424,8 @@ ud_link_errors(hid_t fapl, bool new_format) char group_name[NAME_BUF_SIZE]; char filename[NAME_BUF_SIZE]; char query_buf[NAME_BUF_SIZE]; - H5L_info2_t li; /* Link information */ + H5L_info2_t li; /* Link information */ + herr_t status; /* Generic return value */ if (new_format) TESTING("user-defined link error conditions (w/new group format)"); @@ -15363,16 +15440,32 @@ ud_link_errors(hid_t fapl, bool new_format) /* Try to register some invalid link classes */ H5E_BEGIN_TRY { - if (H5Lregister(UD_error1_class) >= 0) - TEST_ERROR; - if (H5Lregister(UD_error2_class) >= 0) - TEST_ERROR; - if (H5Lregister(UD_error3_class) >= 0) - TEST_ERROR; - if (H5Lregister(UD_error4_class) >= 0) - TEST_ERROR; + status = H5Lregister(UD_error1_class); + } + H5E_END_TRY + if (status >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + status = H5Lregister(UD_error2_class); + } + H5E_END_TRY + if (status >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + status = H5Lregister(UD_error3_class); + } + H5E_END_TRY + if (status >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + status = H5Lregister(UD_error4_class); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Register the UD plist class. */ if (H5Lregister(UD_plist_class) < 0) @@ -15391,21 +15484,28 @@ ud_link_errors(hid_t fapl, bool new_format) /* Try to create internally defined links with H5Lcreate_ud */ H5E_BEGIN_TRY { - if (H5Lcreate_ud(fid, "/ud_link", H5L_TYPE_HARD, NULL, (size_t)0, H5P_DEFAULT, H5P_DEFAULT) >= 0) - TEST_ERROR; - if (H5Lcreate_ud(fid, "/ud_link", H5L_TYPE_SOFT, "str", (size_t)4, H5P_DEFAULT, H5P_DEFAULT) >= 0) - TEST_ERROR; + status = H5Lcreate_ud(fid, "/ud_link", H5L_TYPE_HARD, NULL, (size_t)0, H5P_DEFAULT, H5P_DEFAULT); + } + H5E_END_TRY + if (status >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + status = H5Lcreate_ud(fid, "/ud_link", H5L_TYPE_SOFT, "str", (size_t)4, H5P_DEFAULT, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Try to create a link with H5Lcreate_ud that has a NULL udata pointer, but a non-zero udata_size value */ H5E_BEGIN_TRY { - if (H5Lcreate_ud(fid, "/ud_link", (H5L_type_t)UD_CBFAIL_TYPE, NULL, 1, H5P_DEFAULT, H5P_DEFAULT) >= 0) - TEST_ERROR; + status = H5Lcreate_ud(fid, "/ud_link", (H5L_type_t)UD_CBFAIL_TYPE, NULL, 1, H5P_DEFAULT, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Create a user-defined link to the group. */ strcpy(group_name, "/group"); @@ -15423,31 +15523,57 @@ ud_link_errors(hid_t fapl, bool new_format) H5E_BEGIN_TRY { /* The create callback will fail if we pass in no udata */ - if (H5Lcreate_ud(fid, "fail", (H5L_type_t)UD_CBFAIL_TYPE, NULL, (size_t)0, H5P_DEFAULT, - H5P_DEFAULT) >= 0) - TEST_ERROR; + status = + H5Lcreate_ud(fid, "fail", (H5L_type_t)UD_CBFAIL_TYPE, NULL, (size_t)0, H5P_DEFAULT, H5P_DEFAULT); + } + H5E_END_TRY + if (status >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { /* The move and copy callbacks will fail */ - if (H5Lmove(fid, "ud_link", H5L_SAME_LOC, "move_fail", H5P_DEFAULT, H5P_DEFAULT) >= 0) - TEST_ERROR; - if (H5Lcopy(fid, "ud_link", fid, "copy_fail", H5P_DEFAULT, H5P_DEFAULT) >= 0) - TEST_ERROR; + status = H5Lmove(fid, "ud_link", H5L_SAME_LOC, "move_fail", H5P_DEFAULT, H5P_DEFAULT); + } + H5E_END_TRY + if (status >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + status = H5Lcopy(fid, "ud_link", fid, "copy_fail", H5P_DEFAULT, H5P_DEFAULT); + } + H5E_END_TRY + if (status >= 0) + TEST_ERROR; - /* The traversal callback will fail if we remove its target */ - if (H5Ldelete(fid, "group", H5P_DEFAULT) < 0) - TEST_ERROR; - if ((gid = H5Gopen2(gid, "ud_link", H5P_DEFAULT)) >= 0) - TEST_ERROR; + /* The traversal callback will fail (when opening the object) if we remove its target */ + if (H5Ldelete(fid, "group", H5P_DEFAULT) < 0) + FAIL_STACK_ERROR; + H5E_BEGIN_TRY + { + gid = H5Gopen2(gid, "ud_link", H5P_DEFAULT); + } + H5E_END_TRY + if (gid >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { /* The deletion callback will always fail */ - if (H5Ldelete(fid, "ud_link", H5P_DEFAULT) >= 0) - TEST_ERROR; + status = H5Ldelete(fid, "ud_link", H5P_DEFAULT); + } + H5E_END_TRY + if (status >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { /* The query callback will fail */ - if (H5Lget_info2(fid, "ud_link", &li, H5P_DEFAULT) >= 0) - TEST_ERROR; + status = H5Lget_info2(fid, "ud_link", &li, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Now use a class with different callback functions */ if (H5Lregister(UD_cbfail_class2) < 0) @@ -15456,10 +15582,11 @@ ud_link_errors(hid_t fapl, bool new_format) /* Moving should still fail, but copying will succeed */ H5E_BEGIN_TRY { - if (H5Lmove(fid, "ud_link", H5L_SAME_LOC, "move_fail", H5P_DEFAULT, H5P_DEFAULT) >= 0) - TEST_ERROR; + status = H5Lmove(fid, "ud_link", H5L_SAME_LOC, "move_fail", H5P_DEFAULT, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; if (H5Lcopy(fid, "ud_link", fid, "copy_succ", H5P_DEFAULT, H5P_DEFAULT) < 0) FAIL_STACK_ERROR; @@ -15471,10 +15598,11 @@ ud_link_errors(hid_t fapl, bool new_format) /* ...but fail when we try to write data to the buffer itself*/ H5E_BEGIN_TRY { - if (H5Lget_val(fid, "ud_link", query_buf, (size_t)NAME_BUF_SIZE, H5P_DEFAULT) >= 0) - TEST_ERROR; + status = H5Lget_val(fid, "ud_link", query_buf, (size_t)NAME_BUF_SIZE, H5P_DEFAULT); } H5E_END_TRY + if (status >= 0) + TEST_ERROR; /* Register a new class */ if (H5Lregister(UD_cbfail_class3) < 0) @@ -15745,14 +15873,25 @@ lapl_nlinks(hid_t fapl, bool new_format) /* Try to open the objects using too many symlinks with default *APLs */ H5E_BEGIN_TRY { - if ((gid = H5Gopen2(fid, "soft17", H5P_DEFAULT)) >= 0) - FAIL_PUTS_ERROR(" Should have failed for too many nested links."); - if ((tid = H5Topen2(fid, "soft17/datatype", H5P_DEFAULT)) >= 0) - FAIL_PUTS_ERROR(" Should have failed for too many nested links."); - if ((did = H5Dopen2(fid, "soft17/dataset", H5P_DEFAULT)) >= 0) - FAIL_PUTS_ERROR(" Should have failed for too many nested links."); + gid = H5Gopen2(fid, "soft17", H5P_DEFAULT); } H5E_END_TRY + if (gid >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + tid = H5Topen2(fid, "soft17/datatype", H5P_DEFAULT); + } + H5E_END_TRY + if (tid >= 0) + TEST_ERROR; + H5E_BEGIN_TRY + { + did = H5Dopen2(fid, "soft17/dataset", H5P_DEFAULT); + } + H5E_END_TRY + if (did >= 0) + TEST_ERROR; /* Create property lists with nlinks set */ if ((gapl = H5Pcreate(H5P_GROUP_ACCESS)) < 0) @@ -17089,7 +17228,7 @@ obj_exists(hid_t fapl, bool new_format) char filename[NAME_BUF_SIZE]; /* Buffer for file name */ hid_t fid = H5I_INVALID_HID; /* File ID */ hid_t gid = H5I_INVALID_HID; /* Group ID */ - herr_t status; /* Generic return value */ + htri_t status; /* Generic return value */ if (new_format) TESTING("object exists (w/new group format)"); @@ -17104,12 +17243,9 @@ obj_exists(hid_t fapl, bool new_format) /* Hard links */ /* Verify that H5Oexists_by_name() returns false for non-existent link in root group */ - H5E_BEGIN_TRY - { - status = H5Oexists_by_name(fid, "foo", H5P_DEFAULT); - } - H5E_END_TRY - if (status >= 0) + if ((status = H5Oexists_by_name(fid, "foo", H5P_DEFAULT)) < 0) + FAIL_STACK_ERROR; + if (status != 0) TEST_ERROR; /* Create a group, as a destination for testing */ @@ -17123,12 +17259,9 @@ obj_exists(hid_t fapl, bool new_format) TEST_ERROR; /* Verify that H5Oexists_by_name() returns false for non-existent object in non-root group */ - H5E_BEGIN_TRY - { - status = H5Oexists_by_name(fid, "group/foo", H5P_DEFAULT); - } - H5E_END_TRY - if (status >= 0) + if ((status = H5Oexists_by_name(fid, "group/foo", H5P_DEFAULT)) < 0) + FAIL_STACK_ERROR; + if (status != 0) TEST_ERROR; /* Soft links */ @@ -17445,7 +17578,7 @@ corder_create_empty(hid_t fapl) ret = H5Pset_link_creation_order(gcpl_id, H5P_CRT_ORDER_INDEXED); } H5E_END_TRY - if (ret > 0) { + if (ret >= 0) { H5_FAILED(); puts( " H5Pset_link_create_order() should have failed for a creation order index with no tracking."); From 1b72a1bca052ef9886725ba9bc6ef6c40cd14707 Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Wed, 23 Oct 2024 16:20:15 -0500 Subject: [PATCH 032/179] Add support for native zlib-ng in the library and compression references (#4935) * Correct compile defs for zip_perf program --- CMakeFilters.cmake | 10 +++++- config/cmake/H5pubconf.h.in | 3 ++ config/cmake/HDFLibMacros.cmake | 5 +++ config/cmake/ZLIBNG/CMakeLists.txt | 4 +-- release_docs/RELEASE.txt | 6 ++++ src/CMakeLists.txt | 6 ++-- src/H5Zdeflate.c | 43 +++++++++++++++++++++++--- test/CMakeLists.txt | 13 ++++++++ test/chunk_info.c | 11 ++++++- test/direct_chunk.c | 22 +++++++++++-- tools/test/perform/CMakeLists.txt | 6 ++++ tools/test/perform/direct_write_perf.c | 11 ++++++- tools/test/perform/zip_perf.c | 12 +++++-- 13 files changed, 136 insertions(+), 16 deletions(-) diff --git a/CMakeFilters.cmake b/CMakeFilters.cmake index 9f4955c3d52..3eca6e743c8 100644 --- a/CMakeFilters.cmake +++ b/CMakeFilters.cmake @@ -101,7 +101,11 @@ if (HDF5_ENABLE_Z_LIB_SUPPORT) endif () set(H5_ZLIB_FOUND ${ZLIB_FOUND}) if (H5_ZLIB_FOUND) - set (H5_ZLIB_HEADER "zlib.h") + if (HDF5_USE_ZLIB_NG) + set (H5_ZLIB_HEADER "zlib-ng.h") + else () + set (H5_ZLIB_HEADER "zlib.h") + endif () set (H5_ZLIB_INCLUDE_DIR_GEN ${ZLIB_INCLUDE_DIR}) set (H5_ZLIB_INCLUDE_DIRS ${H5_ZLIB_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIR}) # The FindZLIB.cmake module does not set an OUTPUT_NAME @@ -125,6 +129,9 @@ if (HDF5_ENABLE_Z_LIB_SUPPORT) if (H5_ZLIB_FOUND) set (H5_HAVE_FILTER_DEFLATE 1) set (H5_HAVE_ZLIB_H 1) + if (HDF5_USE_ZLIB_NG) + set (H5_HAVE_ZLIBNG_H 1) + endif () set (H5_HAVE_LIBZ 1) if (H5_HAVE_FILTER_DEFLATE) set (EXTERNAL_FILTERS "${EXTERNAL_FILTERS} DEFLATE") @@ -135,6 +142,7 @@ if (HDF5_ENABLE_Z_LIB_SUPPORT) set (HDF5_ENABLE_Z_LIB_SUPPORT OFF CACHE BOOL "" FORCE) message (WARNING " ZLib support in HDF5 was enabled but not found") endif () + message(STATUS "H5_ZLIB_HEADER=${H5_ZLIB_HEADER}") endif () #----------------------------------------------------------------------------- diff --git a/config/cmake/H5pubconf.h.in b/config/cmake/H5pubconf.h.in index 910bd129227..822875285cf 100644 --- a/config/cmake/H5pubconf.h.in +++ b/config/cmake/H5pubconf.h.in @@ -366,6 +366,9 @@ /* Define to 1 if you have the header file. */ #cmakedefine H5_HAVE_ZLIB_H @H5_HAVE_ZLIB_H@ +/* Define to 1 if you have the header file. */ +#cmakedefine H5_HAVE_ZLIBNG_H @H5_HAVE_ZLIBNG_H@ + /* Define to 1 if you have the `_getvideoconfig' function. */ #cmakedefine H5_HAVE__GETVIDEOCONFIG @H5_HAVE__GETVIDEOCONFIG@ diff --git a/config/cmake/HDFLibMacros.cmake b/config/cmake/HDFLibMacros.cmake index 1907931bb34..f85fb42c51b 100644 --- a/config/cmake/HDFLibMacros.cmake +++ b/config/cmake/HDFLibMacros.cmake @@ -40,6 +40,11 @@ macro (EXTERNAL_ZLIB_LIBRARY compress_type) add_library(${HDF_PACKAGE_NAMESPACE}zlib-static ALIAS zlib-static) set (H5_ZLIB_STATIC_LIBRARY "${HDF_PACKAGE_NAMESPACE}zlib-static") set (H5_ZLIB_LIBRARIES ${H5_ZLIB_STATIC_LIBRARY}) + if (HDF5_USE_ZLIB_NG) + set (H5_ZLIB_HEADER "zlib-ng.h") + else () + set (H5_ZLIB_HEADER "zlib.h") + endif () set (H5_ZLIB_INCLUDE_DIR_GEN "${hdf5_zlib_BINARY_DIR}") set (H5_ZLIB_INCLUDE_DIR "${hdf5_zlib_SOURCE_DIR}") diff --git a/config/cmake/ZLIBNG/CMakeLists.txt b/config/cmake/ZLIBNG/CMakeLists.txt index 5bb5da961e1..a5e26e18bee 100644 --- a/config/cmake/ZLIBNG/CMakeLists.txt +++ b/config/cmake/ZLIBNG/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.18) -project(ZLIB VERSION ${ZLIB_HEADER_VERSION} LANGUAGES C) +project(ZLIB LANGUAGES C) message(STATUS "Using CMake version ${CMAKE_VERSION}") @@ -98,7 +98,7 @@ endif() # Options parsing # option(WITH_GZFILEOP "Compile with support for gzFile related functions" ON) -option(ZLIB_COMPAT "Compile with zlib compatible API" ON) +option(ZLIB_COMPAT "Compile with zlib compatible API" OFF) option(ZLIB_ENABLE_TESTS "Build test binaries" OFF) option(ZLIBNG_ENABLE_TESTS "Test zlib-ng specific API" OFF) option(WITH_GTEST "Build gtest_zlib" OFF) diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index e51bc71014d..19e8e59c1fc 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -47,6 +47,12 @@ New Features Configuration: ------------- + - Added support for native zlib-ng compression. + + Changed the zlib-ng CMake logic to prefer the native zlib-ng library. Added + #ifdef around the compression function calls. Added including the correct + header file with the same #ifdef. + - Renamed remaining HDF5 library CMake options except for CMake BUILD* variables DEFAULT_API_VERSION to HDF5_DEFAULT_API_VERSION diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5ce3b7cac18..3db8991df8c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -727,8 +727,10 @@ set (H5Z_SOURCES ${HDF5_SRC_DIR}/H5Ztrans.c ) if (H5_ZLIB_HEADER) - SET_PROPERTY(SOURCE ${HDF5_SRC_DIR}/H5Zdeflate.c PROPERTY - COMPILE_DEFINITIONS H5_ZLIB_HEADER="${H5_ZLIB_HEADER}") + message(STATUS "H5_ZLIB_HEADER=${H5_ZLIB_HEADER}") + set_source_files_properties(${HDF5_SRC_DIR}/H5Zdeflate.c + PROPERTIES COMPILE_DEFINITIONS H5_ZLIB_HEADER="${H5_ZLIB_HEADER}" + ) endif () diff --git a/src/H5Zdeflate.c b/src/H5Zdeflate.c index def170e9f99..7ac4d09b98c 100644 --- a/src/H5Zdeflate.c +++ b/src/H5Zdeflate.c @@ -74,8 +74,12 @@ H5Z__filter_deflate(unsigned flags, size_t cd_nelmts, const unsigned cd_values[] if (flags & H5Z_FLAG_REVERSE) { /* Input; uncompress */ - z_stream z_strm; /* zlib parameters */ - size_t nalloc = *buf_size; /* Number of bytes for output (compressed) buffer */ +#if defined(H5_HAVE_ZLIBNG_H) + zng_stream z_strm; /* zlib parameters */ +#else + z_stream z_strm; /* zlib parameters */ +#endif + size_t nalloc = *buf_size; /* Number of bytes for output (compressed) buffer */ /* Allocate space for the compressed buffer */ if (NULL == (outbuf = H5MM_malloc(nalloc))) @@ -89,13 +93,22 @@ H5Z__filter_deflate(unsigned flags, size_t cd_nelmts, const unsigned cd_values[] H5_CHECKED_ASSIGN(z_strm.avail_out, unsigned, nalloc, size_t); /* Initialize the uncompression routines */ +#if defined(H5_HAVE_ZLIBNG_H) + if (Z_OK != zng_inflateInit(&z_strm)) + HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, 0, "inflateInit() failed"); +#else if (Z_OK != inflateInit(&z_strm)) HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, 0, "inflateInit() failed"); +#endif /* Loop to uncompress the buffer */ do { /* Uncompress some data */ +#if defined(H5_HAVE_ZLIBNG_H) + status = zng_inflate(&z_strm, Z_SYNC_FLUSH); +#else status = inflate(&z_strm, Z_SYNC_FLUSH); +#endif /* Check if we are done uncompressing data */ if (Z_STREAM_END == status) @@ -103,7 +116,11 @@ H5Z__filter_deflate(unsigned flags, size_t cd_nelmts, const unsigned cd_values[] /* Check for error */ if (Z_OK != status) { +#if defined(H5_HAVE_ZLIBNG_H) + (void)zng_inflateEnd(&z_strm); +#else (void)inflateEnd(&z_strm); +#endif HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, 0, "inflate() failed"); } else { @@ -114,7 +131,11 @@ H5Z__filter_deflate(unsigned flags, size_t cd_nelmts, const unsigned cd_values[] /* Allocate a buffer twice as big */ nalloc *= 2; if (NULL == (new_outbuf = H5MM_realloc(outbuf, nalloc))) { +#if defined(H5_HAVE_ZLIBNG_H) + (void)zng_inflateEnd(&z_strm); +#else (void)inflateEnd(&z_strm); +#endif HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "memory allocation failed for deflate uncompression"); } /* end if */ @@ -137,7 +158,11 @@ H5Z__filter_deflate(unsigned flags, size_t cd_nelmts, const unsigned cd_values[] ret_value = z_strm.total_out; /* Finish uncompressing the stream */ +#if defined(H5_HAVE_ZLIBNG_H) + (void)zng_inflateEnd(&z_strm); +#else (void)inflateEnd(&z_strm); +#endif } /* end if */ else { /* @@ -147,9 +172,13 @@ H5Z__filter_deflate(unsigned flags, size_t cd_nelmts, const unsigned cd_values[] */ const Bytef *z_src = (const Bytef *)(*buf); Bytef *z_dst; /*destination buffer */ - uLongf z_dst_nbytes = (uLongf)compressBound(nbytes); - uLong z_src_nbytes = (uLong)nbytes; - int aggression; /* Compression aggression setting */ +#if defined(H5_HAVE_ZLIBNG_H) + uLongf z_dst_nbytes = (uLongf)zng_compressBound(nbytes); +#else + uLongf z_dst_nbytes = (uLongf)compressBound(nbytes); +#endif + uLong z_src_nbytes = (uLong)nbytes; + int aggression; /* Compression aggression setting */ /* Set the compression aggression level */ H5_CHECKED_ASSIGN(aggression, int, cd_values[0], unsigned); @@ -160,7 +189,11 @@ H5Z__filter_deflate(unsigned flags, size_t cd_nelmts, const unsigned cd_values[] z_dst = (Bytef *)outbuf; /* Perform compression from the source to the destination buffer */ +#if defined(H5_HAVE_ZLIBNG_H) + status = zng_compress2(z_dst, &z_dst_nbytes, z_src, z_src_nbytes, aggression); +#else status = compress2(z_dst, &z_dst_nbytes, z_src, z_src_nbytes, aggression); +#endif /* Check for various zlib errors */ if (Z_BUF_ERROR == status) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 8c9b3073b9d..792b5830003 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -483,6 +483,12 @@ endforeach () ############################################################################## ######### Also special handling of link libs ############# #-- Adding test for chunk_info +if (H5_ZLIB_HEADER) + message(STATUS "H5_ZLIB_HEADER=${H5_ZLIB_HEADER}") + set_source_files_properties(${HDF5_TEST_SOURCE_DIR}/chunk_info.c + PROPERTIES COMPILE_DEFINITIONS H5_ZLIB_HEADER="${H5_ZLIB_HEADER}" + ) +endif () add_executable (chunk_info ${HDF5_TEST_SOURCE_DIR}/chunk_info.c) target_compile_options(chunk_info PRIVATE "${HDF5_CMAKE_C_FLAGS}") target_compile_definitions(chunk_info PRIVATE "${HDF5_TEST_COMPILE_DEFS_PRIVATE}") @@ -504,6 +510,13 @@ if (HDF5_ENABLE_FORMATTERS) endif () #-- Adding test for direct_chunk +if (H5_ZLIB_HEADER) + message(STATUS "H5_ZLIB_HEADER=${H5_ZLIB_HEADER}") + + set_source_files_properties(${HDF5_TEST_SOURCE_DIR}/direct_chunk.c + PROPERTIES COMPILE_DEFINITIONS H5_ZLIB_HEADER="${H5_ZLIB_HEADER}" + ) +endif () add_executable (direct_chunk ${HDF5_TEST_SOURCE_DIR}/direct_chunk.c) target_compile_options(direct_chunk PRIVATE "${HDF5_CMAKE_C_FLAGS}") target_compile_definitions(direct_chunk PRIVATE "${HDF5_TEST_COMPILE_DEFS_PRIVATE}") diff --git a/test/chunk_info.c b/test/chunk_info.c index 1bae1fa2724..3da2d9d258e 100644 --- a/test/chunk_info.c +++ b/test/chunk_info.c @@ -40,7 +40,12 @@ #include "h5test.h" #ifdef H5_HAVE_FILTER_DEFLATE -#include "zlib.h" +#if defined(H5_HAVE_ZLIB_H) && !defined(H5_ZLIB_HEADER) +#define H5_ZLIB_HEADER "zlib.h" +#endif +#if defined(H5_ZLIB_HEADER) +#include H5_ZLIB_HEADER /* "zlib.h" */ +#endif #endif /* Test file names, using H5F_libver_t as indices */ @@ -530,7 +535,11 @@ test_get_chunk_info_highest_v18(hid_t fapl) z_dst = (Bytef *)inbuf; /* Perform compression from the source to the destination buffer */ +#if defined(H5_HAVE_ZLIBNG_H) + ret = zng_compress2(z_dst, &z_dst_nbytes, z_src, z_src_nbytes, aggression); +#else ret = compress2(z_dst, &z_dst_nbytes, z_src, z_src_nbytes, aggression); +#endif /* Set the chunk size to the compressed chunk size */ chunk_size = (hsize_t)z_dst_nbytes; diff --git a/test/direct_chunk.c b/test/direct_chunk.c index ca9825866f1..9afdb47e95b 100644 --- a/test/direct_chunk.c +++ b/test/direct_chunk.c @@ -12,12 +12,14 @@ #include "h5test.h" +#ifdef H5_HAVE_FILTER_DEFLATE #if defined(H5_HAVE_ZLIB_H) && !defined(H5_ZLIB_HEADER) #define H5_ZLIB_HEADER "zlib.h" #endif #if defined(H5_ZLIB_HEADER) #include H5_ZLIB_HEADER /* "zlib.h" */ #endif +#endif #define FILE_NAME "direct_chunk.h5" @@ -205,7 +207,11 @@ test_direct_chunk_write(hid_t file) z_dst = (Bytef *)outbuf; /* Perform compression from the source to the destination buffer */ +#if defined(H5_HAVE_ZLIBNG_H) + ret = zng_compress2(z_dst, &z_dst_nbytes, z_src, z_src_nbytes, aggression); +#else ret = compress2(z_dst, &z_dst_nbytes, z_src, z_src_nbytes, aggression); +#endif /* Check for various zlib errors */ if (Z_BUF_ERROR == ret) { @@ -284,7 +290,11 @@ test_direct_chunk_write(hid_t file) z_dst = (Bytef *)outbuf; /* Perform compression from the source to the destination buffer */ +#if defined(H5_HAVE_ZLIBNG_H) + ret = zng_compress2(z_dst, &z_dst_nbytes, z_src, z_src_nbytes, aggression); +#else ret = compress2(z_dst, &z_dst_nbytes, z_src, z_src_nbytes, aggression); +#endif /* Check for various zlib errors */ if (Z_BUF_ERROR == ret) { @@ -1522,8 +1532,12 @@ test_direct_chunk_read_no_cache(hid_t file) if (filter_mask != 0) goto error; - /* Perform decompression from the source to the destination buffer */ + /* Perform decompression from the source to the destination buffer */ +#if defined(H5_HAVE_ZLIBNG_H) + ret = zng_uncompress(z_dst, &z_dst_nbytes, z_src, z_src_nbytes); +#else ret = uncompress(z_dst, &z_dst_nbytes, z_src, z_src_nbytes); +#endif /* Check for various zlib errors */ if (Z_BUF_ERROR == ret) { @@ -1713,8 +1727,12 @@ test_direct_chunk_read_cache(hid_t file, bool flush) if (filter_mask != 0) goto error; - /* Perform decompression from the source to the destination buffer */ + /* Perform decompression from the source to the destination buffer */ +#if defined(H5_HAVE_ZLIBNG_H) + ret = zng_uncompress(z_dst, &z_dst_nbytes, z_src, z_src_nbytes); +#else ret = uncompress(z_dst, &z_dst_nbytes, z_src, z_src_nbytes); +#endif /* Check for various zlib errors */ if (Z_BUF_ERROR == ret) { diff --git a/tools/test/perform/CMakeLists.txt b/tools/test/perform/CMakeLists.txt index 3a3bc73aa19..646bd1a6de2 100644 --- a/tools/test/perform/CMakeLists.txt +++ b/tools/test/perform/CMakeLists.txt @@ -112,6 +112,12 @@ endif () set (zip_perf_SOURCES ${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/zip_perf.c ) +if (H5_ZLIB_HEADER) + message(STATUS "H5_ZLIB_HEADER=${H5_ZLIB_HEADER}") + if (HDF5_USE_ZLIB_NG) + add_compile_definitions(H5_HAVE_ZLIBNG_H=1 H5_ZLIB_HEADER="${H5_ZLIB_HEADER}") + endif () +endif () add_executable (zip_perf ${zip_perf_SOURCES}) target_include_directories (zip_perf PRIVATE "${HDF5_TEST_SRC_DIR};${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$:${MPI_C_INCLUDE_DIRS}>") if (NOT BUILD_SHARED_LIBS) diff --git a/tools/test/perform/direct_write_perf.c b/tools/test/perform/direct_write_perf.c index a24710fa3e7..ac206b3993d 100644 --- a/tools/test/perform/direct_write_perf.c +++ b/tools/test/perform/direct_write_perf.c @@ -18,7 +18,12 @@ #include "hdf5.h" #ifdef H5_HAVE_FILTER_DEFLATE -#include +#if defined(H5_HAVE_ZLIB_H) && !defined(H5_ZLIB_HEADER) +#define H5_ZLIB_HEADER "zlib.h" +#endif +#if defined(H5_ZLIB_HEADER) +#include H5_ZLIB_HEADER /* "zlib.h" */ +#endif #if !defined(WIN32) && !defined(__MINGW32__) @@ -242,7 +247,11 @@ create_file(hid_t fapl_id) z_dst = (Bytef *)outbuf[i]; /* Perform compression from the source to the destination buffer */ +#if defined(H5_HAVE_ZLIBNG_H) + ret = zng_compress2(z_dst, &z_dst_nbytes, z_src, z_src_nbytes, aggression); +#else ret = compress2(z_dst, &z_dst_nbytes, z_src, z_src_nbytes, aggression); +#endif data_size[i] = (size_t)z_dst_nbytes; total_size += data_size[i]; diff --git a/tools/test/perform/zip_perf.c b/tools/test/perform/zip_perf.c index 78f62f80c60..f5680589364 100644 --- a/tools/test/perform/zip_perf.c +++ b/tools/test/perform/zip_perf.c @@ -24,8 +24,12 @@ #include "h5tools_utils.h" #ifdef H5_HAVE_FILTER_DEFLATE - -#include +#if defined(H5_HAVE_ZLIB_H) && !defined(H5_ZLIB_HEADER) +#define H5_ZLIB_HEADER "zlib.h" +#endif +#if defined(H5_ZLIB_HEADER) +#include H5_ZLIB_HEADER /* "zlib.h" */ +#endif #define ONE_KB 1024 #define ONE_MB (ONE_KB * ONE_KB) @@ -163,7 +167,11 @@ write_file(Bytef *source, uLongf sourceLen) static void compress_buffer(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen) { +#if defined(H5_HAVE_ZLIBNG_H) + int rc = zng_compress2(dest, destLen, source, sourceLen, compress_level); +#else int rc = compress2(dest, destLen, source, sourceLen, compress_level); +#endif if (rc != Z_OK) { /* compress2 failed - cleanup and tell why */ From 399baa152505b1b6293d790e76c0b4fdf0869965 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Wed, 23 Oct 2024 19:09:37 -0700 Subject: [PATCH 033/179] Patch Julia CI (#5001) A recent bugfix to the library changed the return value of an API call and a Julia CI action expects the incorrect result. This patch papers over this until the upstream Julia wrapper CI can be fixed. --- .github/workflows/julia-auto.yml | 15 ++++++++++++++- .github/workflows/julia-cmake.yml | 15 ++++++++++++++- .github/workflows/julia_ci.patch | 19 +++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/julia_ci.patch diff --git a/.github/workflows/julia-auto.yml b/.github/workflows/julia-auto.yml index f21fd659413..f254335ad96 100644 --- a/.github/workflows/julia-auto.yml +++ b/.github/workflows/julia-auto.yml @@ -16,9 +16,17 @@ jobs: name: "julia ${{ inputs.build_mode }}" runs-on: ubuntu-latest steps: - - name: Get Sources + - name: Get HDF5 source uses: actions/checkout@v4.1.7 + # Checking out the Julia HDF5 wrappers will clobber the HDF5 checkout + # NOTE: Remove this when the Julia wrappers have been patched + - name: Save the Julia patch file + shell: bash + run: | + mkdir "${{ runner.workspace }}/julia_patch" + cp .github/workflows/julia_ci.patch "${{ runner.workspace }}/julia_patch" + - name: Install Dependencies shell: bash run: | @@ -65,6 +73,11 @@ jobs: repository: JuliaIO/HDF5.jl path: . + # NOTE: Remove this when the Julia wrappers have been patched + - name: Patch Julia CI + run: | + git apply "${{ runner.workspace }}/julia_patch/julia_ci.patch" -v + - name: Generate LocalPreferences run: | echo '[HDF5]' >> LocalPreferences.toml diff --git a/.github/workflows/julia-cmake.yml b/.github/workflows/julia-cmake.yml index 113b81bd70c..02407ce5c85 100644 --- a/.github/workflows/julia-cmake.yml +++ b/.github/workflows/julia-cmake.yml @@ -16,9 +16,17 @@ jobs: name: "julia ${{ inputs.build_mode }}" runs-on: ubuntu-latest steps: - - name: Get Sources + - name: Get HDF5 source uses: actions/checkout@v4.1.7 + # Checking out the Julia HDF5 wrappers will clobber the HDF5 checkout + # NOTE: Remove this when the Julia wrappers have been patched + - name: Save the Julia patch file + shell: bash + run: | + mkdir "${{ runner.workspace }}/julia_patch" + cp .github/workflows/julia_ci.patch "${{ runner.workspace }}/julia_patch" + - name: Install Dependencies shell: bash run: | @@ -68,6 +76,11 @@ jobs: repository: JuliaIO/HDF5.jl path: . + # NOTE: Remove this when the Julia wrappers have been patched + - name: Patch Julia CI + run: | + git apply "${{ runner.workspace }}/julia_patch/julia_ci.patch" -v + - name: Generate LocalPreferences run: | echo '[HDF5]' >> LocalPreferences.toml diff --git a/.github/workflows/julia_ci.patch b/.github/workflows/julia_ci.patch new file mode 100644 index 00000000000..959a4ec4510 --- /dev/null +++ b/.github/workflows/julia_ci.patch @@ -0,0 +1,19 @@ +diff --git a/test/objects.jl b/test/objects.jl +index d68dd749..0541e91a 100644 +--- a/test/objects.jl ++++ b/test/objects.jl +@@ -16,7 +16,13 @@ using HDF5.API + h5open(fn, "r") do h5f + @test API.h5o_exists_by_name(h5f, "data") + @test API.h5o_exists_by_name(h5f, "lore") +- @test_throws API.H5Error API.h5o_exists_by_name(h5f, "noonian") ++ @static if HDF5.API.h5_get_libversion() <= v"1.14.5" ++ # Buggy behavior in earlier versions of HDF5 returns FAIL (-1) ++ @test_throws API.H5Error API.h5o_exists_by_name(h5f, "noonian") ++ else ++ # The correct behavior is to return false (0) ++ @test API.h5o_exists_by_name(h5f, "noonian") == 0 ++ end + + loc_id = API.h5o_open(h5f, "data", API.H5P_DEFAULT) + try From 8efc084646fd7d29e755df19f4e89bf59a341a5f Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Wed, 23 Oct 2024 21:35:34 -0500 Subject: [PATCH 034/179] Updated zlib and libaec compression versions (#4953) --- CMakePresets.json | 6 +- config/cmake/LIBAEC/CMakeLists.txt | 2 +- config/cmake/ZLIB/CMakeLists.txt | 8 +- config/cmake/ZLIBNG/CMakeLists.txt | 381 +++++++++++++++++++---------- config/cmake/cacheinit.cmake | 6 +- config/cmake/mccacheinit.cmake | 6 +- release_docs/INSTALL_CMake.txt | 18 +- 7 files changed, 274 insertions(+), 153 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index 472a33df0b6..b065b554433 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -18,11 +18,11 @@ "hidden": true, "cacheVariables": { "ZLIB_PACKAGE_NAME": {"type": "STRING", "value": "zlib"}, - "ZLIB_TGZ_ORIGPATH": {"type": "STRING", "value": "https://github.com/madler/zlib/releases/download/v1.3"}, - "ZLIB_TGZ_NAME": {"type": "STRING", "value": "zlib-1.3.tar.gz"}, + "ZLIB_TGZ_ORIGPATH": {"type": "STRING", "value": "https://github.com/madler/zlib/releases/download/v1.3.1"}, + "ZLIB_TGZ_NAME": {"type": "STRING", "value": "zlib-1.3.1.tar.gz"}, "ZLIBNG_PACKAGE_NAME": {"type": "STRING", "value": "zlib-ng"}, "ZLIBNG_TGZ_ORIGPATH": {"type": "STRING", "value": "https://github.com/zlib-ng/zlib-ng/archive/refs/tags"}, - "ZLIBNG_TGZ_NAME": {"type": "STRING", "value": "2.1.6.tar.gz"}, + "ZLIBNG_TGZ_NAME": {"type": "STRING", "value": "2.2.2.tar.gz"}, "LIBAEC_PACKAGE_NAME": {"type": "STRING", "value": "libaec"}, "LIBAEC_TGZ_ORIGPATH": {"type": "STRING", "value": "https://github.com/MathisRosenhauer/libaec/releases/download/v1.1.3"}, "LIBAEC_TGZ_NAME": {"type": "STRING", "value": "libaec-1.1.3.tar.gz"} diff --git a/config/cmake/LIBAEC/CMakeLists.txt b/config/cmake/LIBAEC/CMakeLists.txt index 2ac4f2c7ad3..931ef350aae 100644 --- a/config/cmake/LIBAEC/CMakeLists.txt +++ b/config/cmake/LIBAEC/CMakeLists.txt @@ -151,7 +151,7 @@ target_include_directories (${LIBAEC_LIB_TARGET} PUBLIC "$" "$" "$") -if (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") +if (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0)) target_compile_options(${LIBAEC_LIB_TARGET} PRIVATE -Wno-deprecated-non-prototype) endif () if (CMAKE_C_COMPILER_ID STREQUAL "GNU") diff --git a/config/cmake/ZLIB/CMakeLists.txt b/config/cmake/ZLIB/CMakeLists.txt index 3dba6a89657..b3ef6cce1bb 100644 --- a/config/cmake/ZLIB/CMakeLists.txt +++ b/config/cmake/ZLIB/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required (VERSION 3.18) set (CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) project (ZLIB C) -set (VERSION "1.3") +set(VERSION "1.3.1") #----------------------------------------------------------------------------- # Basic ZLIB stuff here @@ -131,6 +131,7 @@ set_directory_properties (PROPERTIES INCLUDE_DIRECTORIES if (MSVC) set(CMAKE_DEBUG_POSTFIX "d") add_definitions (-D_BIND_TO_CURRENT_VCLIBS_VERSION=1) + add_definitions (-D_CRT_SECURE_NO_DEPRECATE) add_definitions (-D_CRT_SECURE_NO_WARNINGS) add_definitions (-D_CONSOLE) add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) @@ -191,7 +192,10 @@ set(ZLIB_SRCS ) add_library(${ZLIB_LIB_TARGET} STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) -target_include_directories(${ZLIB_LIB_TARGET} PRIVATE "${CMAKE_BINARY_DIR}") +target_include_directories(${ZLIB_LIB_TARGET} + PRIVATE "${CMAKE_BINARY_DIR}" + PUBLIC "${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}" +) if (MSVC AND CMAKE_CL_64) set_target_properties (${ZLIB_LIB_TARGET} PROPERTIES STATIC_LIBRARY_FLAGS "/machine:x64") endif () diff --git a/config/cmake/ZLIBNG/CMakeLists.txt b/config/cmake/ZLIBNG/CMakeLists.txt index a5e26e18bee..22305f22091 100644 --- a/config/cmake/ZLIBNG/CMakeLists.txt +++ b/config/cmake/ZLIBNG/CMakeLists.txt @@ -71,6 +71,7 @@ include(CheckCSourceCompiles) include(CheckCSourceRuns) include(CheckCCompilerFlag) include(CMakeDependentOption) +include(CMakePackageConfigHelpers) include(FeatureSummary) include(cmake/detect-arch.cmake) @@ -80,6 +81,10 @@ include(cmake/detect-intrinsics.cmake) include(cmake/detect-sanitizer.cmake) include(cmake/fallback-macros.cmake) +if(CMAKE_TOOLCHAIN_FILE) + message(STATUS "Using CMake toolchain: ${CMAKE_TOOLCHAIN_FILE}") +endif() + # Make sure we use an appropriate BUILD_TYPE by default, "Release" to be exact # this should select the maximum generic optimisation on the current platform (i.e. -O3 for gcc/clang) get_property(GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) @@ -110,6 +115,7 @@ option(WITH_REDUCED_MEM "Reduced memory usage for special cases (reduces perform option(WITH_NEW_STRATEGIES "Use new strategies" ON) option(WITH_NATIVE_INSTRUCTIONS "Instruct the compiler to use the full instruction set on this host (gcc/clang -march=native)" OFF) +option(WITH_RUNTIME_CPU_DETECTION "Build with runtime detection of CPU architecture" ON) option(WITH_MAINTAINER_WARNINGS "Build with project maintainer warnings" OFF) option(WITH_CODE_COVERAGE "Enable code coverage reporting" OFF) option(WITH_INFLATE_STRICT "Build with strict inflate distance checking" OFF) @@ -139,14 +145,14 @@ elseif(BASEARCH_S360_FOUND) option(WITH_DFLTCC_INFLATE "Build with DFLTCC intrinsics for decompression on IBM Z" OFF) option(WITH_CRC32_VX "Build with vectorized CRC32 on IBM Z" ON) elseif(BASEARCH_X86_FOUND) - option(WITH_AVX2 "Build with AVX2" ON) - option(WITH_AVX512 "Build with AVX512" ON) - option(WITH_AVX512VNNI "Build with AVX512 VNNI extensions" ON) option(WITH_SSE2 "Build with SSE2" ON) - option(WITH_SSSE3 "Build with SSSE3" ON) - option(WITH_SSE42 "Build with SSE42" ON) - option(WITH_PCLMULQDQ "Build with PCLMULQDQ" ON) - option(WITH_VPCLMULQDQ "Build with VPCLMULQDQ" ON) + cmake_dependent_option(WITH_SSSE3 "Build with SSSE3" ON "WITH_SSE2" OFF) + cmake_dependent_option(WITH_SSE42 "Build with SSE42" ON "WITH_SSSE3" OFF) + cmake_dependent_option(WITH_PCLMULQDQ "Build with PCLMULQDQ" ON "WITH_SSE42" OFF) + cmake_dependent_option(WITH_AVX2 "Build with AVX2" ON "WITH_SSE42" OFF) + cmake_dependent_option(WITH_AVX512 "Build with AVX512" ON "WITH_AVX2" OFF) + cmake_dependent_option(WITH_AVX512VNNI "Build with AVX512 VNNI extensions" ON "WITH_AVX512" OFF) + cmake_dependent_option(WITH_VPCLMULQDQ "Build with VPCLMULQDQ" ON "WITH_PCLMULQDQ;WITH_AVX512" OFF) endif() option(INSTALL_UTILS "Copy minigzip and minideflate during install" OFF) @@ -198,6 +204,12 @@ if(CMAKE_C_COMPILER_ID MATCHES "^Intel") set(WARNFLAGS_MAINTAINER /W5) set(WARNFLAGS_DISABLE) endif() + check_c_compiler_flag(-diag-disable=10441 HAVE_DIAG_10441) + if(HAVE_DIAG_10441) + list(APPEND WARNFLAGS_DISABLE "-diag-disable=10441") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -diag-disable=10441") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -diag-disable=10441") + endif() elseif(MSVC) # Minimum supported MSVC version is 1800 = Visual Studio 12.0/2013 # See also https://cmake.org/cmake/help/latest/variable/MSVC_VERSION.html @@ -208,9 +220,9 @@ elseif(MSVC) # (who'd use cmake from an IDE...) but checking for ICC before checking for MSVC should # avoid mistakes. # /Oi ? - set(WARNFLAGS /W3) + set(WARNFLAGS /W3 /w34242 /WX) set(WARNFLAGS_MAINTAINER /W4) - set(WARNFLAGS_DISABLE) + set(WARNFLAGS_DISABLE /wd4206 /wd4054) if(BASEARCH_ARM_FOUND) add_definitions(-D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE) if(NOT "${ARCH}" MATCHES "aarch64") @@ -280,27 +292,68 @@ endif() # Set native march/mcpu if(WITH_NATIVE_INSTRUCTIONS) - if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang") - check_c_compiler_flag(-march=native HAVE_MARCH_NATIVE) - if(HAVE_MARCH_NATIVE) - set(NATIVEFLAG "-march=native") - else() - check_c_compiler_flag(-mcpu=native HAVE_MCPU_NATIVE) - if(HAVE_MCPU_NATIVE) - set(NATIVEFLAG "-mcpu=native") + if(NATIVE_ARCH_OVERRIDE) + message(STATUS "WARNING: WITH_NATIVE_INSTRUCTIONS enabled, but running with NATIVE_ARCH_OVERRIDE: ${NATIVE_ARCH_OVERRIDE}") + set(NATIVEFLAG "${NATIVE_ARCH_OVERRIDE}") + else() + if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang") + check_c_compiler_flag(-march=native HAVE_MARCH_NATIVE) + if(HAVE_MARCH_NATIVE) + set(NATIVEFLAG "-march=native") + else() + check_c_compiler_flag(-mcpu=native HAVE_MCPU_NATIVE) + if(HAVE_MCPU_NATIVE) + set(NATIVEFLAG "-mcpu=native") + endif() endif() + # Fall through endif() - # Fall through endif() if(NATIVEFLAG) - # Apply flag to all source files and compilation checks - add_compile_options(${NATIVEFLAG}) + # Apply flags to all source files and compilation checks + if(WIN32) + separate_arguments(NATIVEOPTIONS WINDOWS_COMMAND "${NATIVEFLAG}") + else() + separate_arguments(NATIVEOPTIONS UNIX_COMMAND "${NATIVEFLAG}") + endif() + add_compile_options(${NATIVEOPTIONS}) + set(WITH_RUNTIME_CPU_DETECTION OFF) else() message(STATUS "Ignoring WITH_NATIVE_INSTRUCTIONS; not implemented yet on this configuration") set(WITH_NATIVE_INSTRUCTIONS OFF) endif() endif() +# Compile without functable or CPU detection +if(NOT WITH_RUNTIME_CPU_DETECTION) + if(MSVC AND BASEARCH_X86_FOUND) + message(STATUS "WARNING: Microsoft Visual Studio does not support compile time detection of CPU features for \"/arch\" before \"AVX\"") + # Workaround for MSVC. By default MSVC does not define the __SSE*__ macros. + # Fix it if AVX is enabled. + set(CMAKE_REQUIRED_FLAGS "${NATIVEFLAG}") + check_c_source_compiles( + "#ifndef __AVX__ + # error \"AVX is not enabled.\" + #endif + int main(void) { return 0; }" + MSVC_IS_ENABLED_AVX + ) + set(CMAKE_REQUIRED_FLAGS) + if(MSVC_IS_ENABLED_AVX) + add_definitions( + -D__SSE__=1 + -D__SSE2__=1 + -D__SSE3__=1 + -D__SSSE3__=1 + -D__SSE4_1__=1 + -D__SSE4_2__=1 + -D__PCLMUL__=1 + ) + endif() + endif() + add_definitions(-DDISABLE_RUNTIME_CPU_DETECTION) +endif() + # Force disable LTO if WITH_NATIVE_INSTRUCTIONS is not active if(NOT WITH_NATIVE_INSTRUCTIONS) set(CMAKE_INTERPROCEDURAL_OPTIMIZATION OFF) @@ -351,6 +404,14 @@ if(HAVE_SYS_SDT_H) endif() check_include_file(unistd.h HAVE_UNISTD_H) +# +# Check for Linux includes +# +check_include_file(linux/auxvec.h HAVE_LINUX_AUXVEC_H) +if(HAVE_LINUX_AUXVEC_H) + add_definitions(-DHAVE_LINUX_AUXVEC_H) +endif() + # # Check to see if we have large file support # @@ -452,6 +513,22 @@ if(HAVE_ATTRIBUTE_ALIGNED) add_definitions(-DHAVE_ATTRIBUTE_ALIGNED) endif() +# +# Check for __builtin_assume_aligned(x,n) support in the compiler +# +check_c_source_compiles( + "char *test(char *buffer) { + char *abuffer = __builtin_assume_aligned(buffer,64); + return abuffer; + } + int main() { + return 0; + }" + HAVE_BUILTIN_ASSUME_ALIGNED) +if(HAVE_BUILTIN_ASSUME_ALIGNED) + add_definitions(-DHAVE_BUILTIN_ASSUME_ALIGNED) +endif() + # # check for __builtin_ctz() support in the compiler # @@ -515,12 +592,8 @@ add_compile_options($<$:-DZLIB_DEBUG>) if(MSVC) set(CMAKE_DEBUG_POSTFIX "d") - add_definitions (-D_BIND_TO_CURRENT_VCLIBS_VERSION=1) - add_definitions (-D_CRT_SECURE_NO_WARNINGS) - add_definitions (-D_CONSOLE) - add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) add_definitions(-D_CRT_SECURE_NO_DEPRECATE) - include_directories(${CMAKE_CURRENT_SOURCE_DIR}) + add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) endif() if(BASEARCH_X86_FOUND) @@ -557,14 +630,15 @@ endif() # Enable reduced memory configuration # if(WITH_REDUCED_MEM) - add_definitions(-DHASH_SIZE=32768u -DGZBUFSIZE=8192) + add_definitions(-DHASH_SIZE=32768u -DGZBUFSIZE=8192 -DNO_LIT_MEM) message(STATUS "Configured for reduced memory environment") endif() +set(GENERIC_ARCHDIR "arch/generic") set(ZLIB_ARCH_SRCS) -set(ZLIB_ARCH_HDRS) -set(ARCHDIR "arch/generic") +set(ZLIB_ARCH_HDRS ${GENERIC_ARCHDIR}/generic_functions.h) + if(BASEARCH_ARM_FOUND) set(ARCHDIR "arch/arm") elseif(BASEARCH_PPC_FOUND) @@ -579,6 +653,7 @@ elseif(BASEARCH_X86_FOUND) add_feature_info(SSE2 1 "Support the SSE2 instruction set, using \"${SSE2FLAG}\"") endif() else() + set(ARCHDIR ${GENERIC_ARCHDIR}) message(STATUS "No optimized architecture: using ${ARCHDIR}") endif() @@ -649,13 +724,17 @@ if(WITH_OPTIM) endif() endif() endif() - list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/arm_features.h) - list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/arm_features.c) + list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/arm_functions.h) + if(WITH_RUNTIME_CPU_DETECTION) + list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/arm_features.h) + list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/arm_features.c) + endif() + if(WITH_ACLE) check_acle_compiler_flag() if(HAVE_ACLE_FLAG) add_definitions(-DARM_ACLE) - set(ACLE_SRCS ${ARCHDIR}/crc32_acle.c ${ARCHDIR}/insert_string_acle.c) + set(ACLE_SRCS ${ARCHDIR}/crc32_acle.c) set_property(SOURCE ${ACLE_SRCS} PROPERTY COMPILE_FLAGS "${ACLEFLAG} ${NOLTOFLAG}") list(APPEND ZLIB_ARCH_SRCS ${ACLE_SRCS}) add_feature_info(ACLE_CRC 1 "Support ACLE optimized CRC hash generation, using \"${ACLEFLAG}\"") @@ -714,10 +793,18 @@ if(WITH_OPTIM) if(WITH_POWER9) check_power9_intrinsics() endif() - if(HAVE_VMX OR HAVE_POWER8_INTRIN OR HAVE_POWER9_INTRIN) + if(POWER8_NEED_AUXVEC_H OR POWER9_NEED_AUXVEC_H) + add_definitions(-DPOWER_NEED_AUXVEC_H) + endif() + if(HAVE_POWER8_INTRIN OR HAVE_POWER9_INTRIN) add_definitions(-DPOWER_FEATURES) - list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/power_features.h) - list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/power_features.c) + endif() + if(HAVE_VMX OR HAVE_POWER8_INTRIN OR HAVE_POWER9_INTRIN) + list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/power_functions.h) + if(WITH_RUNTIME_CPU_DETECTION) + list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/power_features.h) + list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/power_features.c) + endif() endif() # VMX specific options and files if(WITH_ALTIVEC) @@ -766,11 +853,17 @@ if(WITH_OPTIM) if(HAVE_RVV_INTRIN) add_definitions(-DRISCV_FEATURES) add_definitions(-DRISCV_RVV) - list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/riscv_features.h) - list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/riscv_features.c) + list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/riscv_functions.h) + if(WITH_RUNTIME_CPU_DETECTION) + list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/riscv_features.h) + list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/riscv_features.c) + endif() # FIXME: we will not set compile flags for riscv_features.c when # the kernels update hwcap or hwprobe for riscv - set(RVV_SRCS ${ARCHDIR}/riscv_features.c ${ARCHDIR}/adler32_rvv.c ${ARCHDIR}/chunkset_rvv.c ${ARCHDIR}/compare256_rvv.c ${ARCHDIR}/slide_hash_rvv.c) + set(RVV_SRCS ${ARCHDIR}/adler32_rvv.c ${ARCHDIR}/chunkset_rvv.c ${ARCHDIR}/compare256_rvv.c ${ARCHDIR}/slide_hash_rvv.c) + if(WITH_RUNTIME_CPU_DETECTION) + list(APPEND RVV_SRCS ${ARCHDIR}/riscv_features.c) + endif() list(APPEND ZLIB_ARCH_SRCS ${RVV_SRCS}) set_property(SOURCE ${RVV_SRCS} PROPERTY COMPILE_FLAGS "${RISCVFLAG} ${NOLTOFLAG}") else() @@ -781,11 +874,11 @@ if(WITH_OPTIM) check_s390_intrinsics() if(HAVE_S390_INTRIN) add_definitions(-DS390_FEATURES) - list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/s390_features.h) - list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/s390_features.c) - endif() - if(WITH_DFLTCC_DEFLATE OR WITH_DFLTCC_INFLATE) - list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/dfltcc_common.c) + list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/s390_functions.h) + if(WITH_RUNTIME_CPU_DETECTION) + list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/s390_features.h) + list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/s390_features.c) + endif() endif() if(WITH_DFLTCC_DEFLATE) add_definitions(-DS390_DFLTCC_DEFLATE) @@ -808,14 +901,80 @@ if(WITH_OPTIM) endif() elseif(BASEARCH_X86_FOUND) add_definitions(-DX86_FEATURES) - list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/x86_features.h) - list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/x86_features.c) + list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/x86_functions.h) + if(WITH_RUNTIME_CPU_DETECTION) + list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/x86_features.h) + list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/x86_features.c) + endif() if(MSVC) list(APPEND ZLIB_ARCH_HDRS fallback_builtins.h) endif() + check_xsave_intrinsics() + if(HAVE_XSAVE_INTRIN) + add_feature_info(XSAVE 1 "Support XSAVE intrinsics using \"${XSAVEFLAG}\"") + if(WITH_RUNTIME_CPU_DETECTION) + set_property(SOURCE ${ARCHDIR}/x86_features.c PROPERTY COMPILE_FLAGS "${XSAVEFLAG}") + endif() + if(NOT (CMAKE_C_COMPILER_ID MATCHES "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_LESS 8.2)) + add_definitions(-DX86_HAVE_XSAVE_INTRIN) + endif() + endif() + if(WITH_SSE2) + check_sse2_intrinsics() + if(HAVE_SSE2_INTRIN) + add_definitions(-DX86_SSE2) + set(SSE2_SRCS ${ARCHDIR}/chunkset_sse2.c ${ARCHDIR}/compare256_sse2.c ${ARCHDIR}/slide_hash_sse2.c) + list(APPEND ZLIB_ARCH_SRCS ${SSE2_SRCS}) + if(NOT ${ARCH} MATCHES "x86_64") + set_property(SOURCE ${SSE2_SRCS} PROPERTY COMPILE_FLAGS "${SSE2FLAG} ${NOLTOFLAG}") + add_feature_info(FORCE_SSE2 FORCE_SSE2 "Assume CPU is SSE2 capable") + if(FORCE_SSE2) + add_definitions(-DX86_NOCHECK_SSE2) + endif() + endif() + else() + set(WITH_SSE2 OFF) + endif() + endif() + if(WITH_SSSE3) + check_ssse3_intrinsics() + if(HAVE_SSSE3_INTRIN AND WITH_SSE2) + add_definitions(-DX86_SSSE3) + set(SSSE3_SRCS ${ARCHDIR}/adler32_ssse3.c ${ARCHDIR}/chunkset_ssse3.c) + add_feature_info(SSSE3_ADLER32 1 "Support SSSE3-accelerated adler32, using \"${SSSE3FLAG}\"") + list(APPEND ZLIB_ARCH_SRCS ${SSSE3_SRCS}) + set_property(SOURCE ${SSSE3_SRCS} PROPERTY COMPILE_FLAGS "${SSSE3FLAG} ${NOLTOFLAG}") + else() + set(WITH_SSSE3 OFF) + endif() + endif() + if(WITH_SSE42) + check_sse42_intrinsics() + if(HAVE_SSE42_INTRIN AND WITH_SSSE3) + add_definitions(-DX86_SSE42) + set(SSE42_SRCS ${ARCHDIR}/adler32_sse42.c) + add_feature_info(SSE42_CRC 1 "Support SSE4.2 optimized adler32 hash generation, using \"${SSE42FLAG}\"") + list(APPEND ZLIB_ARCH_SRCS ${SSE42_SRCS}) + set_property(SOURCE ${SSE42_SRCS} PROPERTY COMPILE_FLAGS "${SSE42FLAG} ${NOLTOFLAG}") + else() + set(WITH_SSE42 OFF) + endif() + endif() + if(WITH_PCLMULQDQ) + check_pclmulqdq_intrinsics() + if(HAVE_PCLMULQDQ_INTRIN AND WITH_SSE42) + add_definitions(-DX86_PCLMULQDQ_CRC) + set(PCLMULQDQ_SRCS ${ARCHDIR}/crc32_pclmulqdq.c) + add_feature_info(PCLMUL_CRC 1 "Support CRC hash generation using PCLMULQDQ, using \"${SSE42FLAG} ${PCLMULFLAG}\"") + list(APPEND ZLIB_ARCH_SRCS ${PCLMULQDQ_SRCS}) + set_property(SOURCE ${PCLMULQDQ_SRCS} PROPERTY COMPILE_FLAGS "${SSE42FLAG} ${PCLMULFLAG} ${NOLTOFLAG}") + else() + set(WITH_PCLMULQDQ OFF) + endif() + endif() if(WITH_AVX2) check_avx2_intrinsics() - if(HAVE_AVX2_INTRIN) + if(HAVE_AVX2_INTRIN AND WITH_SSE42) add_definitions(-DX86_AVX2) set(AVX2_SRCS ${ARCHDIR}/slide_hash_avx2.c) add_feature_info(AVX2_SLIDEHASH 1 "Support AVX2 optimized slide_hash, using \"${AVX2FLAG}\"") @@ -833,15 +992,12 @@ if(WITH_OPTIM) endif() if(WITH_AVX512) check_avx512_intrinsics() - if(HAVE_AVX512_INTRIN) + if(HAVE_AVX512_INTRIN AND WITH_AVX2) add_definitions(-DX86_AVX512) list(APPEND AVX512_SRCS ${ARCHDIR}/adler32_avx512.c) add_feature_info(AVX512_ADLER32 1 "Support AVX512-accelerated adler32, using \"${AVX512FLAG}\"") list(APPEND ZLIB_ARCH_SRCS ${AVX512_SRCS}) list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/adler32_avx512_p.h) - if(HAVE_MASK_INTRIN) - add_definitions(-DX86_MASK_INTRIN) - endif() set_property(SOURCE ${AVX512_SRCS} PROPERTY COMPILE_FLAGS "${AVX512FLAG} ${NOLTOFLAG}") else() set(WITH_AVX512 OFF) @@ -849,7 +1005,7 @@ if(WITH_OPTIM) endif() if(WITH_AVX512VNNI) check_avx512vnni_intrinsics() - if(HAVE_AVX512VNNI_INTRIN) + if(HAVE_AVX512VNNI_INTRIN AND WITH_AVX2) add_definitions(-DX86_AVX512VNNI) add_feature_info(AVX512VNNI_ADLER32 1 "Support AVX512VNNI adler32, using \"${AVX512VNNIFLAG}\"") list(APPEND AVX512VNNI_SRCS ${ARCHDIR}/adler32_avx512_vnni.c) @@ -859,82 +1015,17 @@ if(WITH_OPTIM) set(WITH_AVX512VNNI OFF) endif() endif() - if(WITH_SSE42) - check_sse42_intrinsics() - if(HAVE_SSE42_INTRIN) - add_definitions(-DX86_SSE42) - set(SSE42_SRCS ${ARCHDIR}/adler32_sse42.c ${ARCHDIR}/insert_string_sse42.c) - add_feature_info(SSE42_CRC 1 "Support SSE4.2 optimized CRC hash generation, using \"${SSE42FLAG}\"") - list(APPEND ZLIB_ARCH_SRCS ${SSE42_SRCS}) - set_property(SOURCE ${SSE42_SRCS} PROPERTY COMPILE_FLAGS "${SSE42FLAG} ${NOLTOFLAG}") - else() - set(WITH_SSE42 OFF) - endif() - endif() - if(WITH_SSE2) - check_sse2_intrinsics() - if(HAVE_SSE2_INTRIN) - add_definitions(-DX86_SSE2) - set(SSE2_SRCS ${ARCHDIR}/chunkset_sse2.c ${ARCHDIR}/compare256_sse2.c ${ARCHDIR}/slide_hash_sse2.c) - list(APPEND ZLIB_ARCH_SRCS ${SSE2_SRCS}) - if(NOT ${ARCH} MATCHES "x86_64") - set_property(SOURCE ${SSE2_SRCS} PROPERTY COMPILE_FLAGS "${SSE2FLAG} ${NOLTOFLAG}") - add_feature_info(FORCE_SSE2 FORCE_SSE2 "Assume CPU is SSE2 capable") - if(FORCE_SSE2) - add_definitions(-DX86_NOCHECK_SSE2) - endif() - endif() - else() - set(WITH_SSE2 OFF) - endif() - endif() - if(WITH_SSSE3) - check_ssse3_intrinsics() - if(HAVE_SSSE3_INTRIN) - add_definitions(-DX86_SSSE3) - set(SSSE3_SRCS ${ARCHDIR}/adler32_ssse3.c ${ARCHDIR}/chunkset_ssse3.c) - add_feature_info(SSSE3_ADLER32 1 "Support SSSE3-accelerated adler32, using \"${SSSE3FLAG}\"") - list(APPEND ZLIB_ARCH_SRCS ${SSSE3_SRCS}) - set_property(SOURCE ${SSSE3_SRCS} PROPERTY COMPILE_FLAGS "${SSSE3FLAG} ${NOLTOFLAG}") - else() - set(WITH_SSSE3 OFF) - endif() - endif() - if(WITH_PCLMULQDQ AND WITH_SSSE3 AND WITH_SSE42) - check_pclmulqdq_intrinsics() - if(HAVE_PCLMULQDQ_INTRIN AND HAVE_SSSE3_INTRIN) - add_definitions(-DX86_PCLMULQDQ_CRC) - set(PCLMULQDQ_SRCS ${ARCHDIR}/crc32_pclmulqdq.c) - add_feature_info(PCLMUL_CRC 1 "Support CRC hash generation using PCLMULQDQ, using \"${SSSE3FLAG} ${SSE42FLAG} ${PCLMULFLAG}\"") - list(APPEND ZLIB_ARCH_SRCS ${PCLMULQDQ_SRCS}) - set_property(SOURCE ${PCLMULQDQ_SRCS} PROPERTY COMPILE_FLAGS "${SSSE3FLAG} ${SSE42FLAG} ${PCLMULFLAG} ${NOLTOFLAG}") - - if(WITH_VPCLMULQDQ AND WITH_AVX512) - check_vpclmulqdq_intrinsics() - if(HAVE_VPCLMULQDQ_INTRIN AND HAVE_AVX512_INTRIN) - add_definitions(-DX86_VPCLMULQDQ_CRC) - set(VPCLMULQDQ_SRCS ${ARCHDIR}/crc32_vpclmulqdq.c) - add_feature_info(VPCLMUL_CRC 1 "Support CRC hash generation using VPCLMULQDQ, using \"${VPCLMULFLAG} ${AVX512FLAG}\"") - list(APPEND ZLIB_ARCH_SRCS ${VPCLMULQDQ_SRCS}) - set_property(SOURCE ${VPCLMULQDQ_SRCS} PROPERTY COMPILE_FLAGS "${SSSE3FLAG} ${SSE42FLAG} ${PCLMULFLAG} ${VPCLMULFLAG} ${AVX512FLAG} ${NOLTOFLAG}") - else() - set(WITH_VPCLMULQDQ OFF) - endif() - else() - set(WITH_VPCLMULQDQ OFF) - endif() + if(WITH_VPCLMULQDQ) + check_vpclmulqdq_intrinsics() + if(HAVE_VPCLMULQDQ_INTRIN AND WITH_PCLMULQDQ AND WITH_AVX512) + add_definitions(-DX86_VPCLMULQDQ_CRC) + set(VPCLMULQDQ_SRCS ${ARCHDIR}/crc32_vpclmulqdq.c) + add_feature_info(VPCLMUL_CRC 1 "Support CRC hash generation using VPCLMULQDQ, using \"${PCLMULFLAG} ${VPCLMULFLAG} ${AVX512FLAG}\"") + list(APPEND ZLIB_ARCH_SRCS ${VPCLMULQDQ_SRCS}) + set_property(SOURCE ${VPCLMULQDQ_SRCS} PROPERTY COMPILE_FLAGS "${PCLMULFLAG} ${VPCLMULFLAG} ${AVX512FLAG} ${NOLTOFLAG}") else() - set(WITH_PCLMULQDQ OFF) set(WITH_VPCLMULQDQ OFF) endif() - else() - set(WITH_PCLMULQDQ OFF) - set(WITH_VPCLMULQDQ OFF) - endif() - check_xsave_intrinsics() - if(HAVE_XSAVE_INTRIN) - add_feature_info(XSAVE 1 "Support XSAVE intrinsics using \"${XSAVEFLAG}\"") - set_property(SOURCE ${ARCHDIR}/x86_features.c PROPERTY COMPILE_FLAGS "${XSAVEFLAG}") endif() endif() endif() @@ -982,6 +1073,19 @@ if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) endif() endif() +# The user is allowed (but discouraged) to set absolute CMAKE_INSTALL_*DIR paths. +# If they do, we copy these non-relocatable paths into the pkg-config file. +if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}") + set(PC_INC_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}") +else() + set(PC_INC_INSTALL_DIR "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") +endif() + +if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}") + set(PC_LIB_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}") +else() + set(PC_LIB_INSTALL_DIR "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}") +endif() #----------------------------------------------------------------------------- # Define ZLIB Library @@ -996,11 +1100,10 @@ set(ZLIB_PRIVATE_HDRS adler32_p.h chunkset_tpl.h compare256_rle.h - cpu_features.h + arch_functions.h crc32_braid_p.h crc32_braid_comb_p.h crc32_braid_tbl.h - crc32_fold.h deflate.h deflate_p.h functable.h @@ -1019,15 +1122,17 @@ set(ZLIB_PRIVATE_HDRS zutil.h ) set(ZLIB_SRCS + arch/generic/adler32_c.c + arch/generic/adler32_fold_c.c + arch/generic/chunkset_c.c + arch/generic/compare256_c.c + arch/generic/crc32_braid_c.c + arch/generic/crc32_fold_c.c + arch/generic/slide_hash_c.c adler32.c - adler32_fold.c - chunkset.c - compare256.c compress.c - cpu_features.c - crc32_braid.c + crc32.c crc32_braid_comb.c - crc32_fold.c deflate.c deflate_fast.c deflate_huff.c @@ -1042,12 +1147,16 @@ set(ZLIB_SRCS inftrees.c insert_string.c insert_string_roll.c - slide_hash.c trees.c uncompr.c zutil.c ) +if(WITH_RUNTIME_CPU_DETECTION) + list(APPEND ZLIB_PRIVATE_HDRS cpu_features.h) + list(APPEND ZLIB_SRCS cpu_features.c) +endif() + set(ZLIB_GZFILE_PRIVATE_HDRS gzguts.h ) @@ -1074,6 +1183,10 @@ endif() set_global_variable (ZLIB_LIBRARIES_TO_EXPORT "zlib-static") set (install_targets zlib-static) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +include_directories(${ARCHDIR}) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/arch/generic) + #----------------------------------------------------------------------------- # Compiler specific flags #----------------------------------------------------------------------------- @@ -1106,9 +1219,12 @@ else() SET(ZCONF_PTRDIFF_LINE "#ifdef NEED_PTRDIFF_T /* may be set to #if 1 by configure/cmake/etc */") endif() +set(ZLIB_PC ${CMAKE_CURRENT_BINARY_DIR}/zlib${SUFFIX}.pc) if(WITH_GZFILEOP) set(PKG_CONFIG_CFLAGS "-DWITH_GZFILEOP") endif() +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein + ${ZLIB_PC} @ONLY) configure_file(${CMAKE_CURRENT_BINARY_DIR}/zconf${SUFFIX}.h.cmakein ${CMAKE_CURRENT_BINARY_DIR}/zconf${SUFFIX}.h @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zlib${SUFFIX}.h.in @@ -1235,6 +1351,7 @@ add_feature_info(WITH_OPTIM WITH_OPTIM "Build with optimisation") add_feature_info(WITH_NEW_STRATEGIES WITH_NEW_STRATEGIES "Use new strategies") add_feature_info(WITH_NATIVE_INSTRUCTIONS WITH_NATIVE_INSTRUCTIONS "Instruct the compiler to use the full instruction set on this host (gcc/clang -march=native)") +add_feature_info(WITH_RUNTIME_CPU_DETECTION WITH_RUNTIME_CPU_DETECTION "Build with runtime CPU detection") add_feature_info(WITH_MAINTAINER_WARNINGS WITH_MAINTAINER_WARNINGS "Build with project maintainer warnings") add_feature_info(WITH_CODE_COVERAGE WITH_CODE_COVERAGE "Enable code coverage reporting") add_feature_info(WITH_INFLATE_STRICT WITH_INFLATE_STRICT "Build with strict inflate distance checking") diff --git a/config/cmake/cacheinit.cmake b/config/cmake/cacheinit.cmake index 2206b94f39d..44fa3db6610 100644 --- a/config/cmake/cacheinit.cmake +++ b/config/cmake/cacheinit.cmake @@ -47,15 +47,15 @@ set_property (CACHE HDF5_ALLOW_EXTERNAL_SUPPORT PROPERTY STRINGS NO GIT TGZ) # compression options ######################## set (ZLIB_PACKAGE_NAME "zlib" CACHE STRING "Name of ZLIB package" FORCE) -set (ZLIB_TGZ_NAME "zlib-1.3.tar.gz" CACHE STRING "Use HDF5_ZLib from compressed file" FORCE) -set (ZLIB_TGZ_ORIGPATH "https://github.com/madler/zlib/releases/download/v1.3" CACHE STRING "Use ZLIB from original location" FORCE) +set (ZLIB_TGZ_NAME "zlib-1.3.1.tar.gz" CACHE STRING "Use HDF5_ZLib from compressed file" FORCE) +set (ZLIB_TGZ_ORIGPATH "https://github.com/madler/zlib/releases/download/v1.3.1" CACHE STRING "Use ZLIB from original location" FORCE) set (ZLIB_USE_LOCALCONTENT ON CACHE BOOL "Use local file for ZLIB FetchContent" FORCE) set (ZLIB_GIT_URL "https://github.com/madler/zlib.git" CACHE STRING "Use ZLIB from GitHub repository" FORCE) set (ZLIB_GIT_BRANCH "develop" CACHE STRING "" FORCE) set (HDF5_USE_ZLIB_STATIC ON CACHE BOOL "Use static zlib library" FORCE) set (ZLIBNG_PACKAGE_NAME "zlib-ng" CACHE STRING "Name of ZLIBNG package" FORCE) -set (ZLIBNG_TGZ_NAME "2.1.6.tar.gz" CACHE STRING "Use HDF5_ZLib from compressed file" FORCE) +set (ZLIBNG_TGZ_NAME "2.2.2.tar.gz" CACHE STRING "Use HDF5_ZLib from compressed file" FORCE) set (ZLIBNG_TGZ_ORIGPATH "https://github.com/zlib-ng/zlib-ng/archive/refs/tags" CACHE STRING "Use ZLIBNG from original location" FORCE) set (ZLIBNG_GIT_URL "https://github.com/zlib-ng/zlib-ng.git" CACHE STRING "Use ZLIBNG from GitHub repository" FORCE) set (ZLIBNG_GIT_BRANCH "develop" CACHE STRING "" FORCE) diff --git a/config/cmake/mccacheinit.cmake b/config/cmake/mccacheinit.cmake index cc2c604afe2..6120a93ad85 100644 --- a/config/cmake/mccacheinit.cmake +++ b/config/cmake/mccacheinit.cmake @@ -54,14 +54,14 @@ set_property (CACHE HDF5_ALLOW_EXTERNAL_SUPPORT PROPERTY STRINGS NO GIT TGZ) # compression options ######################## set (ZLIB_PACKAGE_NAME "zlib" CACHE STRING "Name of ZLIB package" FORCE) -set (ZLIB_TGZ_NAME "zlib-1.3.tar.gz" CACHE STRING "Use HDF5_ZLib from compressed file" FORCE) -set (ZLIB_TGZ_ORIGPATH "https://github.com/madler/zlib/releases/download/v1.3" CACHE STRING "Use ZLIB from original location" FORCE) +set (ZLIB_TGZ_NAME "zlib-1.3.1.tar.gz" CACHE STRING "Use HDF5_ZLib from compressed file" FORCE) +set (ZLIB_TGZ_ORIGPATH "https://github.com/madler/zlib/releases/download/v1.3.1" CACHE STRING "Use ZLIB from original location" FORCE) set (ZLIB_USE_LOCALCONTENT ON CACHE BOOL "Use local file for ZLIB FetchContent" FORCE) set (ZLIB_GIT_URL "https://github.com/madler/zlib.git" CACHE STRING "Use ZLIB from GitHub repository" FORCE) set (ZLIB_GIT_BRANCH "develop" CACHE STRING "" FORCE) set (ZLIBNG_PACKAGE_NAME "zlib-ng" CACHE STRING "Name of ZLIBNG package" FORCE) -set (ZLIBNG_TGZ_NAME "2.1.6.tar.gz" CACHE STRING "Use HDF5_ZLib from compressed file" FORCE) +set (ZLIBNG_TGZ_NAME "2.2.2.tar.gz" CACHE STRING "Use HDF5_ZLib from compressed file" FORCE) set (ZLIBNG_TGZ_ORIGPATH "https://github.com/zlib-ng/zlib-ng/archive/refs/tags" CACHE STRING "Use ZLIBNG from original location" FORCE) set (ZLIBNG_GIT_URL "https://github.com/zlib-ng/zlib-ng.git" CACHE STRING "Use ZLIBNG from GitHub repository" FORCE) set (ZLIBNG_GIT_BRANCH "develop" CACHE STRING "" FORCE) diff --git a/release_docs/INSTALL_CMake.txt b/release_docs/INSTALL_CMake.txt index 0b33946767b..437565de60b 100644 --- a/release_docs/INSTALL_CMake.txt +++ b/release_docs/INSTALL_CMake.txt @@ -69,8 +69,8 @@ External compression plugin libraries from https://github.com/HDFGroup/hdf5_plug hdf5_plugins.tar.gz External compression szip and zlib libraries: - ZLIB "https://github.com/madler/zlib/releases/download/v1.3/zlib-1.3.tar.gz" - ZLIBNG "https://github.com/zlib-ng/zlib-ng/archive/refs/tags/2.1.6.tar.gz" + ZLIB "https://github.com/madler/zlib/releases/download/v1.3.1/zlib-1.3.1.tar.gz" + ZLIBNG "https://github.com/zlib-ng/zlib-ng/archive/refs/tags/2.2.2.tar.gz" LIBAEC "https://github.com/MathisRosenhauer/libaec/releases/download/v1.1.3/libaec-1.1.3.tar.gz" ------------------------------------------------------------------------- ------------------------------------------------------------------------- @@ -530,14 +530,14 @@ These five steps are described in detail below. # compression options ######################## set (ZLIB_PACKAGE_NAME "zlib" CACHE STRING "Name of ZLIB package" FORCE) - set (ZLIB_TGZ_NAME "zlib-1.3.tar.gz" CACHE STRING "Use HDF5_ZLib from compressed file" FORCE) - set (ZLIB_TGZ_ORIGPATH "https://github.com/madler/zlib/releases/download/v1.3" CACHE STRING "Use ZLIB from original location" FORCE) + set (ZLIB_TGZ_NAME "zlib-1.3.1.tar.gz" CACHE STRING "Use HDF5_ZLib from compressed file" FORCE) + set (ZLIB_TGZ_ORIGPATH "https://github.com/madler/zlib/releases/download/v1.3.1" CACHE STRING "Use ZLIB from original location" FORCE) set (ZLIB_USE_LOCALCONTENT ON CACHE BOOL "Use local file for ZLIB FetchContent" FORCE) set (ZLIB_GIT_URL "https://github.com/madler/zlib.git" CACHE STRING "Use ZLIB from GitHub repository" FORCE) set (ZLIB_GIT_BRANCH "develop" CACHE STRING "" FORCE) set (HDF5_USE_ZLIB_NG OFF CACHE BOOL "Use zlib-ng library as zlib library" FORCE) set (ZLIBNG_PACKAGE_NAME "zlib-ng" CACHE STRING "Name of ZLIBNG package" FORCE) - set (ZLIBNG_TGZ_NAME "2.1.6.tar.gz" CACHE STRING "Use HDF5_ZLib from compressed file" FORCE) + set (ZLIBNG_TGZ_NAME "2.2.2.tar.gz" CACHE STRING "Use HDF5_ZLib from compressed file" FORCE) set (ZLIBNG_TGZ_ORIGPATH "https://github.com/zlib-ng/zlib-ng/archive/refs/tags" CACHE STRING "Use ZLIBNG from original location" FORCE) set (ZLIBNG_GIT_URL "https://github.com/zlib-ng/zlib-ng.git" CACHE STRING "Use ZLIBNG from GitHub repository" FORCE) set (ZLIBNG_GIT_BRANCH "develop" CACHE STRING "" FORCE) @@ -944,12 +944,12 @@ HDF5_ENABLE_Z_LIB_SUPPORT "Enable Zlib Filters" ON if (HDF5_USE_ZLIB_NG) ZLIBNG_USE_EXTERNAL "Use External Library Building for ZLIBNG" OFF - ZLIBNG_TGZ_ORIGPATH "Use ZLIBNG from original location" "https://github.com/zlib-ng/zlib-ng/releases/tag/2.1.6" - ZLIBNG_TGZ_NAME "Use ZLIBNG from original compressed file" "2.1.6.tar.gz" + ZLIBNG_TGZ_ORIGPATH "Use ZLIBNG from original location" "https://github.com/zlib-ng/zlib-ng/releases/tag/2.2.2" + ZLIBNG_TGZ_NAME "Use ZLIBNG from original compressed file" "2.2.2.tar.gz" else ZLIB_USE_EXTERNAL "Use External Library Building for ZLIB" OFF - ZLIB_TGZ_ORIGPATH "Use ZLIB from original location" "https://github.com/madler/zlib/releases/download/v1.2.13" - ZLIB_TGZ_NAME "Use ZLIB from original compressed file" "zlib-1.2.13.tar.gz" + ZLIB_TGZ_ORIGPATH "Use ZLIB from original location" "https://github.com/madler/zlib/releases/download/v1.3.1" + ZLIB_TGZ_NAME "Use ZLIB from original compressed file" "zlib-1.3.1.tar.gz" ZLIB_USE_LOCALCONTENT "Use local file for ZLIB FetchContent" ON HDF5_USE_ZLIB_STATIC "Find static zlib library" OFF From 26cf1640b2be0ae772c066a1968299ec1cd1f894 Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Wed, 23 Oct 2024 21:37:15 -0500 Subject: [PATCH 035/179] Add szip documentation to dataset section of user guide (#4997) --- src/H5Dmodule.h | 112 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 111 insertions(+), 1 deletion(-) diff --git a/src/H5Dmodule.h b/src/H5Dmodule.h index c7368cfc8e7..ad10a94e41d 100644 --- a/src/H5Dmodule.h +++ b/src/H5Dmodule.h @@ -2733,7 +2733,117 @@ allocated if necessary. * * * \subsubsection subsubsec_dataset_filters_szip Using the SZip Filter - * See The HDF Group website for further information regarding the SZip filter. + * Szip compression software, providing lossless compression of scientific data, has been provided with HDF + * software products as of HDF5 Release 1.6.0. Szip is an implementation of the extended-Rice lossless + * compression algorithm. The Consultative Committee on Space Data Systems (CCSDS) has adopted the + * extended-Rice algorithm for international standards for space applications[1,6,7]. Szip is reported + * to provide fast and effective compression, specifically for the EOS data generated by the NASA Earth + * Observatory System (EOS)[1]. + * It was originally developed at University of New Mexico (UNM) and integrated with HDF by UNM researchers + * and developers. + * + * The primary gain with Szip compression is in speed of processing. Szip also provides some advantage in + * compression ratio over other compression methods. + * + *

Szip and HDF5

+ * Using Szip compression in HDF5: Szip is a stand-alone library that is configured as an optional filter in + * HDF5. + * Depending on which Szip library is used (encoder enabled or decode-only), an HDF5 application can + * create, write, and read datasets compressed with Szip compression, or can only read datasets + * compressed with Szip. + * Applications use Szip by setting Szip as an optional filter when a dataset is created. If the Szip + * encoder is enabled with the HDF5 library, data is automatically compressed and decompressed with + * Szip during I/O. + * If only the decoder is present, the HDF5 library cannot create and write Szip-compressed datasets, + * but it automatically decompresses Szip-compressed data when data is read. + * + * This sample HDF5 program illustrates the use of Szip compression with HDF5. + * \code + * Example of Szip Usage in HDF5 + * The following sample program illustrates the use of Szip compression in HDF5. This sample program is + * also available in the subdirectory HDF5Examples. + * #include "hdf5.h" + * #define NX 500 + * #define NY 600 + * #define CH_NX 100 + * #define CH_NY 25 + * + * int main(void) + * { + * hid_t file, data_space, dataset32, properties; + * float buf[NX][NY]; + * float buf_r[NX][NY]; + * hsize_t dims[2], chunk_size[2]; + * int i, j; + * unsigned szip_options_mask; + * unsigned szip_pixels_per_block; + * + * // Initialize data buffer with some bogus data. + * for (i=0; i < NX; i++) { + * for (j=0; j < NY; j++) + * buf[i][j] = i + j; + * } + * + * // Describe the size of the array. + * dims[0] = NX; + * dims[1] = NY; + * data_space = H5Screate_simple (2, dims, NULL); + * + * // Create a new file using read/write access, default file + * // creation properties, and default file access properties. + * file = H5Fcreate ("test.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + * + * // Set the dataset creation property list to specify that + * // the raw data is to be partitioned into 100x100 element + * // chunks and that each chunk is to be compressed. + * chunk_size[0] = CH_NX; + * chunk_size[1] = CH_NY; + * properties = H5Pcreate (H5P_DATASET_CREATE); + * H5Pset_chunk (properties, 2, chunk_size); + * + * // Set parameters for SZIP compression; check the description of + * // the H5Pset_szip function in the HDF5 Reference Manual for more + * // information. + * szip_options_mask=H5_SZIP_NN_OPTION_MASK; + * szip_pixels_per_block=32; + * + * H5Pset_szip (properties, szip_options_mask, szip_pixels_per_block); + * + * // Create a new dataset within the file. The datatype + * // and data space describe the data on disk, which may + * // be different from the format used in the application's + * // memory. + * + * dataset32 = H5Dcreate (file, "datasetF32", H5T_NATIVE_FLOAT, data_space, properties); + * + * // Write the array to the file. The datatype and dataspace + * // describe the format of the data in the `buf' buffer. + * // The raw data is translated to the format required on disk, + * // as defined above. We use default raw data transfer properties. + * + * H5Dwrite (dataset32, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf); + * + * // Read the array. This is similar to writing data, + * // except the data flows in the opposite direction. + * // Note: Decompression is automatic. + * + * H5Dread (dataset32, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_r); + * + * H5Dclose (dataset32); + * H5Sclose (data_space); + * H5Pclose (properties); + * H5Fclose (file); + * } + * \endcode + * + * Details of the required and optional parameters are provided in the H5Pset_szip entry + * in the HDF5 Reference Manual. + * + * Software distribution: Starting with Release 1.6.0, HDF5 has been distributed with Szip enabled, + * making it easier to use Szip compression. The software is distributed as follows: + * - Pre-compiled HDF5 binaries are provided with the Szip encoder enabled. + * - Szip source code can be obtained at: + * LIBAEC(SZIP) repository * * \subsubsection subsubsec_dataset_filters_dyn Using Dynamically-Loadable Filters * see \ref sec_filter_plugins for further information regarding the dynamically-loadable filters. From 2c58357b8f8d9f4dffad5859816c9ed8c0a8216b Mon Sep 17 00:00:00 2001 From: Quincey Koziol Date: Thu, 24 Oct 2024 08:28:40 -0500 Subject: [PATCH 036/179] Refactor H5FD and package initialization (#4934) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Reverts PR#1024, which (unnecessarily) switched from deferred package initialization to centralized initialization of all packages and introduced H5FDperform_init() to wrap an internal routine to initialize VFD plugins. - Went back to deferred package initialization (primarily), to eliminate unnecessary resource use. (Performance has been verified to be the same either way) - Switched VFD plugins to use “#define (H5OPEN, )” pattern, with registration of internal VFD plugins at library initialization time. Eliminates calling API routine (H5FDperform_init) from within the library, which was deadlocking threadsafe concurrency. And also eliminates exposing internal library routines in a public header file. - Removed copy-and-paste replicas of the H5OPEN macro and put a (better) single definition in H5public.h - Separated API and internal routine calls in stdio and multi VFD plugins into separate source files, so that the library doesn’t invoke API routines internally (also a deadlock problem for threadsafe concurrency). Also needed a “private” header for these plugins. - Separated registering/unregistering a VFD plugin from initializing /finalizing the plugin, instead of blurring those ideas together. Defers the VFD plugin init to when it’s actually used, which reduces resource usage, especially for the MPI-based plugins like the subfiling, etc. - Refactored the copy-and-pasted check for locking into a central location in the H5FD.c code. - Fixed a bunch of compiler warnings, especially ones that trigger CI failures with -Werror --- .github/workflows/netcdf.yml | 3 +- release_docs/RELEASE.txt | 30 +- src/CMakeLists.txt | 4 +- src/H5.c | 391 +++++++++--------- src/H5AC.c | 32 +- src/H5ACmodule.h | 5 +- src/H5ACproxy_entry.c | 3 +- src/H5Aint.c | 80 +++- src/H5Amodule.h | 5 +- src/H5B.c | 3 + src/H5B2.c | 3 + src/H5B2module.h | 5 +- src/H5Bmodule.h | 5 +- src/H5C.c | 3 + src/H5CX.c | 94 +++-- src/H5CXmodule.h | 5 +- src/H5CXprivate.h | 2 - src/H5Cmodule.h | 5 +- src/H5D.c | 3 + src/H5Dchunk.c | 29 +- src/H5Dint.c | 110 +++-- src/H5Dmodule.h | 5 +- src/H5Dmpio.c | 19 +- src/H5Dvirtual.c | 3 +- src/H5E.c | 3 + src/H5EA.c | 3 + src/H5EAmodule.h | 5 +- src/H5ESint.c | 27 +- src/H5ESmodule.h | 5 +- src/H5ESprivate.h | 5 +- src/H5Eint.c | 138 ++++--- src/H5Emodule.h | 5 +- src/H5Epublic.h | 8 - src/H5FA.c | 3 + src/H5FAmodule.h | 5 +- src/H5FD.c | 159 ++++++- src/H5FDcore.c | 65 ++- src/H5FDcore.h | 11 +- src/H5FDdevelop.h | 1 - src/H5FDdirect.c | 69 ++-- src/H5FDdirect.h | 11 +- src/H5FDfamily.c | 48 +-- src/H5FDfamily.h | 11 +- src/H5FDhdfs.c | 116 ++++-- src/H5FDhdfs.h | 18 +- src/H5FDint.c | 3 +- src/H5FDlog.c | 65 ++- src/H5FDlog.h | 10 +- src/H5FDmirror.c | 56 ++- src/H5FDmirror.h | 11 +- src/H5FDmodule.h | 5 +- src/H5FDmpi.c | 43 +- src/H5FDmpio.c | 206 ++++++--- src/H5FDmpio.h | 19 +- src/H5FDmulti.c | 339 ++++++--------- src/H5FDmulti.h | 11 +- src/H5FDmulti_int.c | 83 ++++ ...{H5FDdrvr_module.h => H5FDmulti_private.h} | 40 +- src/H5FDonion.c | 55 ++- src/H5FDonion.h | 11 +- src/H5FDonion_header.c | 6 +- src/H5FDonion_history.c | 6 +- src/H5FDonion_index.c | 6 +- src/H5FDonion_priv.h | 4 + src/H5FDperform.c | 57 --- src/H5FDpkg.h | 49 +++ src/H5FDprivate.h | 2 +- src/H5FDros3.c | 104 +++-- src/H5FDros3.h | 59 +-- src/H5FDsec2.c | 65 ++- src/H5FDsec2.h | 11 +- src/H5FDsplitter.c | 50 ++- src/H5FDsplitter.h | 11 +- src/H5FDstdio.c | 170 ++++---- src/H5FDstdio.h | 11 +- src/H5FDstdio_int.c | 83 ++++ src/H5FDstdio_private.h | 45 ++ src/H5FDsubfiling/H5FDioc.c | 232 +++++++---- src/H5FDsubfiling/H5FDioc.h | 15 +- src/H5FDsubfiling/H5FDioc_int.c | 33 +- src/H5FDsubfiling/H5FDioc_priv.h | 12 +- src/H5FDsubfiling/H5FDioc_threads.c | 7 +- src/H5FDsubfiling/H5FDsubfile_int.c | 7 +- src/H5FDsubfiling/H5FDsubfiling.c | 272 ++++++------ src/H5FDsubfiling/H5FDsubfiling.h | 15 +- src/H5FDsubfiling/H5FDsubfiling_priv.h | 11 +- src/H5FDsubfiling/H5subfiling_common.c | 14 +- src/H5FDsubfiling/H5subfiling_common.h | 13 +- src/H5FDwindows.c | 13 +- src/H5FDwindows.h | 13 +- src/H5FL.c | 24 +- src/H5FLmodule.h | 5 +- src/H5FS.c | 3 + src/H5FSint.c | 22 + src/H5FSmodule.h | 5 +- src/H5FSprivate.h | 3 + src/H5Fcwfs.c | 6 +- src/H5Fint.c | 54 ++- src/H5Fmodule.h | 5 +- src/H5Fmpi.c | 6 +- src/H5Fpublic.h | 56 +-- src/H5Fquery.c | 2 +- src/H5Gint.c | 72 +++- src/H5Gmodule.h | 5 +- src/H5Gname.c | 33 +- src/H5HF.c | 3 + src/H5HFmodule.h | 5 +- src/H5HFsection.c | 69 ++-- src/H5HG.c | 3 + src/H5HGmodule.h | 5 +- src/H5HL.c | 3 + src/H5HLmodule.h | 5 +- src/H5HLpkg.h | 9 - src/H5Iint.c | 41 +- src/H5Imodule.h | 5 +- src/H5Lint.c | 44 +- src/H5Lmodule.h | 5 +- src/H5M.c | 63 ++- src/H5MF.c | 59 +-- src/H5MFmodule.h | 5 +- src/H5Mmodule.h | 5 +- src/H5Oint.c | 39 +- src/H5Omodule.h | 5 +- src/H5P.c | 5 +- src/H5PB.c | 3 + src/H5PBmodule.h | 5 +- src/H5PLint.c | 43 +- src/H5PLmodule.h | 5 +- src/H5PLprivate.h | 1 - src/H5Pint.c | 294 +++++++------ src/H5Pmodule.h | 5 +- src/H5Ppublic.h | 8 - src/H5RS.c | 3 + src/H5RSmodule.h | 5 +- src/H5Rint.c | 30 +- src/H5Rmodule.h | 5 +- src/H5Rprivate.h | 2 - src/H5S.c | 82 +++- src/H5SL.c | 74 ++-- src/H5SLmodule.h | 5 +- src/H5SLprivate.h | 1 - src/H5SM.c | 3 + src/H5SMmodule.h | 5 +- src/H5Shyper.c | 17 +- src/H5Smodule.h | 5 +- src/H5T.c | 370 ++++++++++------- src/H5TSint.c | 3 + src/H5TSmodule.h | 5 +- src/H5TSwin.c | 2 +- src/H5Tfields.c | 2 +- src/H5Tmodule.h | 5 +- src/H5Topaque.c | 2 +- src/H5Tpublic.h | 8 - src/H5VLint.c | 148 ++++--- src/H5VLmodule.h | 5 +- src/H5VLnative.h | 8 - src/H5VLpassthru.h | 8 - src/H5Z.c | 141 ++++--- src/H5Zmodule.h | 5 +- src/H5module.h | 5 +- src/H5private.h | 114 ++--- src/H5public.h | 33 ++ src/Makefile.am | 5 +- 163 files changed, 3577 insertions(+), 2488 deletions(-) create mode 100644 src/H5FDmulti_int.c rename src/{H5FDdrvr_module.h => H5FDmulti_private.h} (53%) delete mode 100644 src/H5FDperform.c create mode 100644 src/H5FDstdio_int.c create mode 100644 src/H5FDstdio_private.h diff --git a/.github/workflows/netcdf.yml b/.github/workflows/netcdf.yml index febc7b6fd8f..ab92a1e68ec 100644 --- a/.github/workflows/netcdf.yml +++ b/.github/workflows/netcdf.yml @@ -77,7 +77,8 @@ jobs: run: | cd netcdf-c autoreconf -if - CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ./configure --enable-hdf5 --enable-dap --disable-dap-remote-tests --enable-external-server-tests + # NOTE: --disable-byterange should be removed when the HTTP VFD has been updated + CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ./configure --enable-hdf5 --enable-dap --disable-dap-remote-tests --disable-byterange --enable-external-server-tests cat config.log cat libnetcdf.settings CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make -j diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 19e8e59c1fc..6a01a10a586 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -47,6 +47,18 @@ New Features Configuration: ------------- + - Added a configuration option for internal threading/concurrency support: + + CMake: HDF5_ENABLE_THREADS (ON/OFF) (Default: ON) + Autotools: --enable-threads (yes/no) (Default: yes) + + This option enables support for threading and concurrency algorithms + within the HDF5 library. It is required for, but separate from, the + 'threadsafe' configure option, which makes the HDF5 API safe to call from + multiple threads. It is possible to enable the 'threads' option and + disable the 'threadsafe' option, but not vice versa. The 'threads' option + must be on to enable the subfiling VFD. + - Added support for native zlib-ng compression. Changed the zlib-ng CMake logic to prefer the native zlib-ng library. Added @@ -54,7 +66,7 @@ New Features header file with the same #ifdef. - Renamed remaining HDF5 library CMake options except for CMake BUILD* variables - + DEFAULT_API_VERSION to HDF5_DEFAULT_API_VERSION DISABLE_PDB_FILES to HDF5_DISABLE_PDB_FILES ONLY_SHARED_LIBS to HDF5_ONLY_SHARED_LIBS @@ -62,6 +74,7 @@ New Features TEST_SHELL_SCRIPTS to HDF5_TEST_SHELL_SCRIPTS All other HDF5 library CMake options are prefixed with HDF5_ + - bin/cmakehdf5 has been removed This was an unsupported build script that made building HDF5 via CMake @@ -104,21 +117,14 @@ New Features We have updated the build files to set the C standard to C11, though some platforms use gnu11 to get some GNU things to work. - - Added configuration option for internal threading/concurrency support: - - CMake: HDF5_ENABLE_THREADS (ON/OFF) (Default: ON) - Autotools: --enable-threads (yes/no) (Default: yes) - - This option enables support for threading and concurrency algorithms - within the HDF5 library. It is required for, but separate from, the - 'threadsafe' configure option, which makes the HDF5 API safe to call from - multiple threads. It is possible to enable the 'threads' option and - disable the 'threadsafe' option, but not vice versa. The 'threads' option - must be on to enable the subfiling VFD. Library: -------- + - Removed H5FDperform_init API routine. Virtual File Driver (VFD) + developers who wish to provide an ID for their driver should create + a routine specific to their individual implementation. + - H5Pset_external() now uses HDoff_t, which is always a 64-bit type The H5Pset_external() call took an off_t parameter in HDF5 1.14.x and diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3db8991df8c..d2cafa37df2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -236,17 +236,18 @@ set (H5FD_SOURCES ${HDF5_SRC_DIR}/H5FDmpi.c ${HDF5_SRC_DIR}/H5FDmpio.c ${HDF5_SRC_DIR}/H5FDmulti.c + ${HDF5_SRC_DIR}/H5FDmulti_int.c ${HDF5_SRC_DIR}/H5FDonion.c ${HDF5_SRC_DIR}/H5FDonion_header.c ${HDF5_SRC_DIR}/H5FDonion_history.c ${HDF5_SRC_DIR}/H5FDonion_index.c - ${HDF5_SRC_DIR}/H5FDperform.c ${HDF5_SRC_DIR}/H5FDros3.c ${HDF5_SRC_DIR}/H5FDs3comms.c ${HDF5_SRC_DIR}/H5FDsec2.c ${HDF5_SRC_DIR}/H5FDspace.c ${HDF5_SRC_DIR}/H5FDsplitter.c ${HDF5_SRC_DIR}/H5FDstdio.c + ${HDF5_SRC_DIR}/H5FDstdio_int.c ${HDF5_SRC_DIR}/H5FDtest.c ${HDF5_SRC_DIR}/H5FDwindows.c ) @@ -754,7 +755,6 @@ set (H5_MODULE_HEADERS ${HDF5_SRC_DIR}/H5ESmodule.h ${HDF5_SRC_DIR}/H5Fmodule.h ${HDF5_SRC_DIR}/H5FAmodule.h - ${HDF5_SRC_DIR}/H5FDdrvr_module.h ${HDF5_SRC_DIR}/H5FDmodule.h ${HDF5_SRC_DIR}/H5FLmodule.h ${HDF5_SRC_DIR}/H5FSmodule.h diff --git a/src/H5.c b/src/H5.c index f591e84eb76..8fcc8eeb2b8 100644 --- a/src/H5.c +++ b/src/H5.c @@ -32,8 +32,6 @@ #include "H5SLprivate.h" /* Skip lists */ #include "H5Tprivate.h" /* Datatypes */ -#include "H5FDsec2.h" /* for H5FD_sec2_init() */ - /****************/ /* Local Macros */ /****************/ @@ -60,11 +58,15 @@ static void H5__debug_mask(const char *); #ifdef H5_HAVE_PARALLEL static int H5__mpi_delete_cb(MPI_Comm comm, int keyval, void *attr_val, int *flag); #endif /*H5_HAVE_PARALLEL*/ +static herr_t H5_check_version(unsigned majnum, unsigned minnum, unsigned relnum); /*********************/ /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /*****************************/ /* Library Private Variables */ /*****************************/ @@ -91,30 +93,31 @@ static H5_atclose_node_t *H5_atclose_head = NULL; /* Declare a free list to manage the H5_atclose_node_t struct */ H5FL_DEFINE_STATIC(H5_atclose_node_t); -/*------------------------------------------------------------------------- - * Function: H5_default_vfd_init - * - * Purpose: Initialize the default VFD. - * - * Return: Success: non-negative - * Failure: negative - *------------------------------------------------------------------------- - */ -static herr_t -H5_default_vfd_init(void) +/*-------------------------------------------------------------------------- +NAME + H5__init_package -- Initialize interface-specific information +USAGE + herr_t H5__init_package() +RETURNS + Non-negative on success/Negative on failure +DESCRIPTION + Initializes any interface-specific data or routines. +--------------------------------------------------------------------------*/ +herr_t +H5__init_package(void) { - herr_t ret_value = SUCCEED; + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_NOAPI_NOINIT + + /* Run the library initialization routine, if it hasn't already ran */ + if (!H5_INIT_GLOBAL && !H5_TERM_GLOBAL) + if (H5_init_library() < 0) + HGOTO_ERROR(H5E_LIB, H5E_CANTINIT, FAIL, "unable to initialize library"); - FUNC_ENTER_NOAPI(FAIL) - /* Load the hid_t for the default VFD for the side effect - * it has of initializing the default VFD. - */ - if (H5FD_sec2_init() == H5I_INVALID_HID) { - HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to load default VFD ID"); - } done: FUNC_LEAVE_NOAPI(ret_value) -} +} /* end H5__init_package() */ /*-------------------------------------------------------------------------- * NAME @@ -133,7 +136,6 @@ H5_default_vfd_init(void) herr_t H5_init_library(void) { - size_t i; herr_t ret_value = SUCCEED; FUNC_ENTER_NOAPI(FAIL) @@ -142,6 +144,10 @@ H5_init_library(void) if (H5_INIT_GLOBAL || H5_TERM_GLOBAL) HGOTO_DONE(SUCCEED); + /* Check library version */ + /* (Will abort() on failure) */ + H5_check_version(H5_VERS_MAJOR, H5_VERS_MINOR, H5_VERS_RELEASE); + /* Set the 'library initialized' flag as early as possible, to avoid * possible re-entrancy. */ @@ -224,50 +230,53 @@ H5_init_library(void) } /* end if */ /* - * Initialize interfaces that might not be able to initialize themselves - * soon enough. The file & dataset interfaces must be initialized because - * calling H5P_create() might require the file/dataset property classes to be - * initialized. The property interface must be initialized before the file - * & dataset interfaces though, in order to provide them with the proper - * property classes. - * The link interface needs to be initialized so that link property lists - * have their properties registered. + * Initialize interfaces that use macros of the form "(H5OPEN )", so + * that the variable returned through the macros has been initialized. + * Also initialize some interfaces that might not be able to initialize + * themselves soon enough. + * + * Interfaces returning variables through a macro: H5E, H5FD, H5O, H5P, H5T + * + * The link interface needs to be initialized so that the external link + * class is registered. + * * The FS module needs to be initialized as a result of the fix for HDFFV-10160: * It might not be initialized during normal file open. * When the application does not close the file, routines in the module might * be called via H5_term_library() when shutting down the file. + * * The dataspace interface needs to be initialized so that future IDs for * dataspaces work. + * + * The VFD & VOL interfaces need to be initialized before the H5P interface + * so that the default VFD and default VOL connector are ready for the + * default FAPL. + * */ - { - /* clang-format off */ - struct { - herr_t (*func)(void); - const char *descr; - } initializer[] = { - {H5E_init, "error"} - , {H5VL_init_phase1, "VOL"} - , {H5SL_init, "skip lists"} - , {H5FD_init, "VFD"} - , {H5_default_vfd_init, "default VFD"} - , {H5P_init_phase1, "property list"} - , {H5AC_init, "metadata caching"} - , {H5L_init, "link"} - , {H5S_init, "dataspace"} - , {H5PL_init, "plugins"} - /* Finish initializing interfaces that depend on the interfaces above */ - , {H5P_init_phase2, "property list"} - , {H5VL_init_phase2, "VOL"} - }; - - for (i = 0; i < NELMTS(initializer); i++) { - if (initializer[i].func() < 0) { - HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, - "unable to initialize %s interface", initializer[i].descr); - } - } - /* clang-format on */ - } + if (H5E_init() < 0) + HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize error interface"); + if (H5FD_init() < 0) + HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize VFL interface"); + if (H5VL_init_phase1() < 0) + HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize vol interface"); + if (H5P_init_phase1() < 0) + HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize property list interface"); + if (H5L_init() < 0) + HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize link interface"); + if (H5O_init() < 0) + HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize object interface"); + if (H5FS_init() < 0) + HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize FS interface"); + if (H5S_init() < 0) + HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize dataspace interface"); + if (H5T_init() < 0) + HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize datatype interface"); + + /* Finish initializing interfaces that depend on the interfaces above */ + if (H5P_init_phase2() < 0) + HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize property list interface"); + if (H5VL_init_phase2() < 0) + HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize vol interface"); /* Debugging? */ H5__debug_mask("-all"); @@ -291,11 +300,9 @@ H5_init_library(void) void H5_term_library(void) { - int pending, ntries = 0; - char loop[1024], *next = loop; - size_t i; - size_t nleft = sizeof(loop); - int nprinted; + int pending, ntries = 0, n; + size_t at = 0; + char loop[1024]; H5E_auto2_t func; /* Acquire the API lock */ @@ -337,147 +344,114 @@ H5_term_library(void) H5_atclose_head = NULL; } /* end if */ - /* clang-format off */ - /* * Terminate each interface. The termination functions return a positive * value if they do something that might affect some other interface in a * way that would necessitate some cleanup work in the other interface. */ +#define DOWN(F) \ + (((n = H5##F##_term_package()) && (at + 8) < sizeof loop) \ + ? (sprintf(loop + at, "%s%s", (at ? "," : ""), #F), at += strlen(loop + at), n) \ + : ((n > 0 && (at + 5) < sizeof loop) ? (sprintf(loop + at, "..."), at += strlen(loop + at), n) \ + : n)) - { -#define TERMINATOR(module, wait) { \ - .func = H5##module##_term_package \ - , .name = #module \ - , .completed = false \ - , .await_prior = wait \ - } + do { + pending = 0; - /* - * Termination is ordered by the `terminator` table so the "higher" level - * packages are shut down before "lower" level packages that they - * rely on: + /* Try to organize these so the "higher" level components get shut + * down before "lower" level components that they might rely on. -QAK */ - struct { - int (*func)(void); /* function to terminate the module; returns 0 - * on success, >0 if termination was not - * completed and we should try to terminate - * some dependent modules, first. - */ - const char *name; /* name of the module */ - bool completed; /* true iff this terminator was already - * completed - */ - const bool await_prior; /* true iff all prior terminators in the - * list must complete before this - * terminator is attempted - */ - } terminator[] = { - /* Close the event sets first, so that all asynchronous operations - * complete before anything else attempts to shut down. - */ - TERMINATOR(ES, false) - /* Do not attempt to close down package L until after event sets - * have finished closing down. - */ - , TERMINATOR(L, true) + + /* Close the event sets first, so that all asynchronous operations + * complete before anything else attempts to shut down. + */ + pending += DOWN(ES); + + /* Close down the user-facing interfaces, after the event sets */ + if (pending == 0) { + /* Close the interfaces dependent on others */ + pending += DOWN(L); + /* Close the "top" of various interfaces (IDs, etc) but don't shut * down the whole interface yet, so that the object header messages * get serialized correctly for entries in the metadata cache and the * symbol table entry in the superblock gets serialized correctly, etc. * all of which is performed in the 'F' shutdown. - * - * The tops of packages A, D, G, M, S, T do not need to wait for L - * or previous packages to finish closing down. */ - , TERMINATOR(A_top, false) - , TERMINATOR(D_top, false) - , TERMINATOR(G_top, false) - , TERMINATOR(M_top, false) - , TERMINATOR(S_top, false) - , TERMINATOR(T_top, false) - /* Don't shut down the file code until objects in files are shut down */ - , TERMINATOR(F, true) - /* Don't shut down the property list code until all objects that might - * use property lists are shut down - */ - , TERMINATOR(P, true) - /* Wait to shut down the "bottom" of various interfaces until the - * files are closed, so pieces of the file can be serialized - * correctly. - * - * Shut down the "bottom" of the attribute, dataset, group, - * reference, dataspace, and datatype interfaces, fully closing + pending += DOWN(A_top); + pending += DOWN(D_top); + pending += DOWN(G_top); + pending += DOWN(M_top); + pending += DOWN(S_top); + pending += DOWN(T_top); + } /* end if */ + + /* Don't shut down the file code until objects in files are shut down */ + if (pending == 0) + pending += DOWN(F); + + /* Don't shut down the property list code until all objects that might + * use property lists are shut down */ + if (pending == 0) + pending += DOWN(P); + + /* Wait to shut down the "bottom" of various interfaces until the + * files are closed, so pieces of the file can be serialized + * correctly. + */ + if (pending == 0) { + /* Shut down the "bottom" of the attribute, dataset, group, + * dataspace, and datatype interfaces, fully closing * out the interfaces now. */ - , TERMINATOR(A, true) - , TERMINATOR(D, false) - , TERMINATOR(G, false) - , TERMINATOR(M, false) - , TERMINATOR(S, false) - , TERMINATOR(T, false) - /* Wait to shut down low-level packages like AC until after - * the preceding high-level packages have shut down. This prevents - * low-level objects from closing "out from underneath" their - * reliant high-level objects. - */ - , TERMINATOR(AC, true) - /* Shut down the "pluggable" interfaces, before the plugin framework */ - , TERMINATOR(Z, false) - , TERMINATOR(FD, false) - , TERMINATOR(VL, false) - /* Don't shut down the plugin code until all "pluggable" interfaces - * (Z, FD, PL) are shut down - */ - , TERMINATOR(PL, true) - /* Shut down the following packages in strictly the order given - * by the table. - */ - , TERMINATOR(E, true) - , TERMINATOR(I, true) - , TERMINATOR(SL, true) - , TERMINATOR(FL, true) - , TERMINATOR(CX, true) - }; - - do { - pending = 0; - for (i = 0; i < NELMTS(terminator); i++) { - if (terminator[i].completed) - continue; - if (pending != 0 && terminator[i].await_prior) - break; - if (terminator[i].func() == 0) { - terminator[i].completed = true; - continue; - } - - /* log a package when its terminator needs to be retried */ - pending++; - nprinted = snprintf(next, nleft, "%s%s", - (next != loop) ? "," : "", terminator[i].name); - if (nprinted < 0) - continue; - if ((size_t)nprinted >= nleft) - nprinted = snprintf(next, nleft, "..."); - if (nprinted < 0 || (size_t)nprinted >= nleft) - continue; - nleft -= (size_t)nprinted; - next += nprinted; - } - } while (pending && ntries++ < 100); + pending += DOWN(A); + pending += DOWN(D); + pending += DOWN(G); + pending += DOWN(M); + pending += DOWN(S); + pending += DOWN(T); + } /* end if */ - /* clang-format on */ + /* Don't shut down "low-level" components until "high-level" components + * have successfully shut down. This prevents property lists and IDs + * from being closed "out from underneath" of the high-level objects + * that depend on them. -QAK + */ + if (pending == 0) { + pending += DOWN(AC); + /* Shut down the "pluggable" interfaces, before the plugin framework */ + pending += DOWN(Z); + pending += DOWN(FD); + pending += DOWN(VL); + /* Don't shut down the plugin code until all "pluggable" interfaces (Z, FD, PL) are shut down */ + if (pending == 0) + pending += DOWN(PL); + /* Don't shut down the error code until other APIs which use it are shut down */ + if (pending == 0) + pending += DOWN(E); + /* Don't shut down the ID code until other APIs which use them are shut down */ + if (pending == 0) + pending += DOWN(I); + /* Don't shut down the skip list code until everything that uses it is down */ + if (pending == 0) + pending += DOWN(SL); + /* Don't shut down the free list code until everything that uses it is down */ + if (pending == 0) + pending += DOWN(FL); + /* Don't shut down the API context code until _everything_ else is down */ + if (pending == 0) + pending += DOWN(CX); + } /* end if */ + } while (pending && ntries++ < 100); - if (pending) { - /* Only display the error message if the user is interested in them. */ - if (func) { - fprintf(stderr, "HDF5: infinite loop closing library\n"); - fprintf(stderr, " %s\n", loop); + if (pending) { + /* Only display the error message if the user is interested in them. */ + if (func) { + fprintf(stderr, "HDF5: infinite loop closing library\n"); + fprintf(stderr, " %s\n", loop); #ifndef NDEBUG - abort(); + abort(); #endif - } } } @@ -531,14 +505,14 @@ H5dont_atexit(void) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_API_NOINIT_NOERR_NOFS + FUNC_ENTER_API_NOINIT_NOERR if (H5_dont_atexit_g) ret_value = FAIL; else H5_dont_atexit_g = true; - FUNC_LEAVE_API_NOFS(ret_value) + FUNC_LEAVE_API_NOERR(ret_value) } /* end H5dont_atexit() */ /*------------------------------------------------------------------------- @@ -816,13 +790,10 @@ H5get_libversion(unsigned *majnum /*out*/, unsigned *minnum /*out*/, unsigned *r } /* end H5get_libversion() */ /*------------------------------------------------------------------------- - * Function: H5check_version + * Function: H5__check_version * - * Purpose: Verifies that the arguments match the version numbers - * compiled into the library. This function is intended to be - * called from user to verify that the versions of header files - * compiled into the application match the version of the hdf5 - * library. + * Purpose: Internal routine which Verifies that the arguments match the + * version numbers compiled into the library. * * Within major.minor.release version, the expectation * is that all release versions are compatible, exceptions to @@ -852,18 +823,18 @@ H5get_libversion(unsigned *majnum /*out*/, unsigned *minnum /*out*/, unsigned *r "You should recompile the application or check your shared library related\n" \ "settings such as 'LD_LIBRARY_PATH'.\n" -herr_t -H5check_version(unsigned majnum, unsigned minnum, unsigned relnum) +static herr_t +H5_check_version(unsigned majnum, unsigned minnum, unsigned relnum) { char lib_str[256]; char substr[] = H5_VERS_SUBRELEASE; - static int checked = 0; /* If we've already checked the version info */ - static unsigned int disable_version_check = 0; /* Set if the version check should be disabled */ + static bool checked = false; /* If we've already checked the version info */ + static unsigned int disable_version_check = 0; /* Set if the version check should be disabled */ static const char *version_mismatch_warning = VERSION_MISMATCH_WARNING; static const char *release_mismatch_warning = RELEASE_MISMATCH_WARNING; herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_API_NOINIT_NOERR_NOFS + FUNC_ENTER_NOAPI_NOINIT_NOERR /* Don't check again, if we already have */ if (checked) @@ -960,7 +931,7 @@ H5check_version(unsigned majnum, unsigned minnum, unsigned relnum) } /* end if (H5_VERS_RELEASE != relnum) */ /* Indicate that the version check has been performed */ - checked = 1; + checked = true; if (!disable_version_check) { /* @@ -988,7 +959,21 @@ H5check_version(unsigned majnum, unsigned minnum, unsigned relnum) } done: - FUNC_LEAVE_API_NOFS(ret_value) + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5__check_version() */ + +herr_t +H5check_version(unsigned majnum, unsigned minnum, unsigned relnum) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_API_NOINIT_NOERR + + /* Call internal routine */ + /* (Will abort() on failure) */ + H5_check_version(majnum, minnum, relnum); + + FUNC_LEAVE_API_NOERR(ret_value) } /* end H5check_version() */ /*------------------------------------------------------------------------- @@ -1071,11 +1056,11 @@ H5close(void) * whole library just to release it all right away. It is safe to call * this function for an uninitialized library. */ - FUNC_ENTER_API_NOINIT_NOERR_NOFS + FUNC_ENTER_API_NOINIT_NOERR H5_term_library(); - FUNC_LEAVE_API_NOFS(SUCCEED) + FUNC_LEAVE_API_NOERR(SUCCEED) } /* end H5close() */ /*------------------------------------------------------------------------- diff --git a/src/H5AC.c b/src/H5AC.c index 8ad885e8af3..9aef2957663 100644 --- a/src/H5AC.c +++ b/src/H5AC.c @@ -67,6 +67,9 @@ static herr_t H5AC__verify_tag(const H5AC_class_t *type); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /*****************************/ /* Library Private Variables */ /*****************************/ @@ -134,7 +137,26 @@ H5AC_init(void) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) + /* FUNC_ENTER() does all the work */ + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5AC_init() */ + +/*------------------------------------------------------------------------- + * Function: H5AC__init_package + * + * Purpose: Initialize interface-specific information + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5AC__init_package(void) +{ + FUNC_ENTER_PACKAGE_NOERR #ifdef H5_HAVE_PARALLEL /* check whether to enable strict collective function calling @@ -151,8 +173,8 @@ H5AC_init(void) } #endif /* H5_HAVE_PARALLEL */ - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5AC_init() */ + FUNC_LEAVE_NOAPI(SUCCEED) +} /* end H5AC__init_package() */ /*------------------------------------------------------------------------- * Function: H5AC_term_package @@ -170,6 +192,10 @@ H5AC_term_package(void) { FUNC_ENTER_NOAPI_NOINIT_NOERR + if (H5_PKG_INIT_VAR) + /* Reset interface initialization flag */ + H5_PKG_INIT_VAR = false; + FUNC_LEAVE_NOAPI(0) } /* end H5AC_term_package() */ diff --git a/src/H5ACmodule.h b/src/H5ACmodule.h index 94cf94bd334..1b9b88e0d24 100644 --- a/src/H5ACmodule.h +++ b/src/H5ACmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5AC_MODULE -#define H5_MY_PKG H5AC -#define H5_MY_PKG_ERR H5E_CACHE +#define H5_MY_PKG H5AC +#define H5_MY_PKG_ERR H5E_CACHE +#define H5_MY_PKG_INIT YES #endif /* H5ACmodule_H */ diff --git a/src/H5ACproxy_entry.c b/src/H5ACproxy_entry.c index c8142cca4f3..109c1b42cb4 100644 --- a/src/H5ACproxy_entry.c +++ b/src/H5ACproxy_entry.c @@ -399,7 +399,7 @@ H5AC_proxy_entry_dest(H5AC_proxy_entry_t *pentry) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity checks */ assert(pentry); @@ -411,6 +411,7 @@ H5AC_proxy_entry_dest(H5AC_proxy_entry_t *pentry) /* Free the proxy entry object */ pentry = H5FL_FREE(H5AC_proxy_entry_t, pentry); +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5AC_proxy_entry_dest() */ diff --git a/src/H5Aint.c b/src/H5Aint.c index fdeb9643510..d0e0bcff9af 100644 --- a/src/H5Aint.c +++ b/src/H5Aint.c @@ -88,6 +88,9 @@ static herr_t H5A__iterate_common(hid_t loc_id, H5_index_t idx_type, H5_iter_ord /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Format version bounds for attribute */ const unsigned H5O_attr_ver_bounds[] = { H5O_ATTR_VERSION_1, /* H5F_LIBVER_EARLIEST */ @@ -128,6 +131,9 @@ static const H5I_class_t H5I_ATTR_CLS[1] = {{ (H5I_free_t)H5A__close_cb /* Callback routine for closing objects of this class */ }}; +/* Flag indicating "top" of interface has been initialized */ +static hbool_t H5A_top_package_initialize_s = false; + /*------------------------------------------------------------------------- * Function: H5A_init * @@ -144,6 +150,30 @@ H5A_init(void) herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) + /* FUNC_ENTER() does all the work */ + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5A_init() */ + +/*-------------------------------------------------------------------------- +NAME + H5A__init_package -- Initialize interface-specific information +USAGE + herr_t H5A__init_package() + +RETURNS + Non-negative on success/Negative on failure +DESCRIPTION + Initializes any interface-specific data or routines. + +--------------------------------------------------------------------------*/ +herr_t +H5A__init_package(void) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_PACKAGE /* * Create attribute ID type. @@ -151,9 +181,12 @@ H5A_init(void) if (H5I_register_type(H5I_ATTR_CLS) < 0) HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to initialize interface"); + /* Mark "top" of interface as initialized, too */ + H5A_top_package_initialize_s = true; + done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5A_init() */ +} /* end H5A__init_package() */ /*-------------------------------------------------------------------------- NAME @@ -179,10 +212,16 @@ H5A_top_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - if (H5I_nmembers(H5I_ATTR) > 0) { - (void)H5I_clear_type(H5I_ATTR, false, false); - n++; /*H5I*/ - } /* end if */ + if (H5A_top_package_initialize_s) { + if (H5I_nmembers(H5I_ATTR) > 0) { + (void)H5I_clear_type(H5I_ATTR, false, false); + n++; /*H5I*/ + } /* end if */ + + /* Mark closed */ + if (0 == n) + H5A_top_package_initialize_s = false; + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* H5A_top_term_package() */ @@ -213,11 +252,18 @@ H5A_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - /* Sanity checks */ - assert(0 == H5I_nmembers(H5I_ATTR)); + if (H5_PKG_INIT_VAR) { + /* Sanity checks */ + assert(0 == H5I_nmembers(H5I_ATTR)); + assert(false == H5A_top_package_initialize_s); + + /* Destroy the attribute object id group */ + n += (H5I_dec_type_ref(H5I_ATTR) > 0); - /* Destroy the attribute object id group */ - n += (H5I_dec_type_ref(H5I_ATTR) > 0); + /* Mark closed */ + if (0 == n) + H5_PKG_INIT_VAR = false; + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* H5A_term_package() */ @@ -1095,9 +1141,7 @@ H5A__get_create_plist(H5A_t *attr) herr_t H5A__get_info(const H5A_t *attr, H5A_info_t *ainfo) { - herr_t ret_value = SUCCEED; /* Return value */ - - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_PACKAGE_NOERR /* Check args */ assert(attr); @@ -1115,7 +1159,7 @@ H5A__get_info(const H5A_t *attr, H5A_info_t *ainfo) ainfo->corder = attr->shared->crt_idx; } /* end else */ - FUNC_LEAVE_NOAPI(ret_value) + FUNC_LEAVE_NOAPI(SUCCEED) } /* end H5A__get_info() */ /*------------------------------------------------------------------------- @@ -1319,13 +1363,14 @@ H5A_oloc(H5A_t *attr) { H5O_loc_t *ret_value = NULL; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(NULL) assert(attr); /* Set return value */ ret_value = &(attr->oloc); +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5A_oloc() */ @@ -1346,13 +1391,14 @@ H5A_nameof(H5A_t *attr) { H5G_name_t *ret_value = NULL; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(NULL) assert(attr); /* Set return value */ ret_value = &(attr->path); +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5A_nameof() */ @@ -1371,13 +1417,14 @@ H5A_type(const H5A_t *attr) { H5T_t *ret_value = NULL; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(NULL) assert(attr); /* Set return value */ ret_value = attr->shared->dt; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5A_type() */ @@ -1435,6 +1482,7 @@ H5A__exists_by_name(H5G_loc_t loc, const char *obj_name, const char *attr_name, * into table. * * Return: Non-negative on success/Negative on failure + * *------------------------------------------------------------------------- */ static herr_t diff --git a/src/H5Amodule.h b/src/H5Amodule.h index 77d1b338761..7e0e2bb76e7 100644 --- a/src/H5Amodule.h +++ b/src/H5Amodule.h @@ -22,8 +22,9 @@ * reporting macros. */ #define H5A_MODULE -#define H5_MY_PKG H5A -#define H5_MY_PKG_ERR H5E_ATTR +#define H5_MY_PKG H5A +#define H5_MY_PKG_ERR H5E_ATTR +#define H5_MY_PKG_INIT YES /** \page H5A_UG HDF5 Attributes * diff --git a/src/H5B.c b/src/H5B.c index 9c081a91fe0..9969e08b0c9 100644 --- a/src/H5B.c +++ b/src/H5B.c @@ -153,6 +153,9 @@ static H5B_t *H5B__copy(const H5B_t *old_bt); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Declare a free list to manage the haddr_t sequence information */ H5FL_SEQ_DEFINE(haddr_t); diff --git a/src/H5B2.c b/src/H5B2.c index 1bdfd5decda..82e58243f75 100644 --- a/src/H5B2.c +++ b/src/H5B2.c @@ -59,6 +59,9 @@ /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* v2 B-tree client ID to class mapping */ /* Remember to add client ID to H5B2_subid_t in H5B2private.h when adding a new diff --git a/src/H5B2module.h b/src/H5B2module.h index 2807ac6ea2e..d29a54d3f04 100644 --- a/src/H5B2module.h +++ b/src/H5B2module.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5B2_MODULE -#define H5_MY_PKG H5B2 -#define H5_MY_PKG_ERR H5E_BTREE +#define H5_MY_PKG H5B2 +#define H5_MY_PKG_ERR H5E_BTREE +#define H5_MY_PKG_INIT NO #endif /* H5B2module_H */ diff --git a/src/H5Bmodule.h b/src/H5Bmodule.h index 04aafdb0532..ed7c14b6b96 100644 --- a/src/H5Bmodule.h +++ b/src/H5Bmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5B_MODULE -#define H5_MY_PKG H5B -#define H5_MY_PKG_ERR H5E_BTREE +#define H5_MY_PKG H5B +#define H5_MY_PKG_ERR H5E_BTREE +#define H5_MY_PKG_INIT NO #endif /* H5Bmodule_H */ diff --git a/src/H5C.c b/src/H5C.c index 156251e592f..66de1c5e3a5 100644 --- a/src/H5C.c +++ b/src/H5C.c @@ -84,6 +84,9 @@ /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Declare a free list to manage the tag info struct */ H5FL_DEFINE(H5C_tag_info_t); diff --git a/src/H5CX.c b/src/H5CX.c index 92a8d2cb88b..c2a25e8d7a2 100644 --- a/src/H5CX.c +++ b/src/H5CX.c @@ -449,6 +449,9 @@ static H5CX_node_t *H5CX__pop_common(bool update_dxpl_props); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /*******************/ /* Local Variables */ /*******************/ @@ -481,17 +484,18 @@ H5FL_DEFINE_STATIC(H5CX_node_t); /* Declare a static free list to manage H5CX_state_t structs */ H5FL_DEFINE_STATIC(H5CX_state_t); -/*------------------------------------------------------------------------- - * Function: H5CX_init - * - * Purpose: Initialize the interface from some other layer. - * - * Return: Success: non-negative - * Failure: negative - *------------------------------------------------------------------------- - */ +/*-------------------------------------------------------------------------- +NAME + H5CX__init_package -- Initialize interface-specific information +USAGE + herr_t H5CX__init_package() +RETURNS + Non-negative on success/Negative on failure +DESCRIPTION + Initializes any interface-specific data or routines. +--------------------------------------------------------------------------*/ herr_t -H5CX_init(void) +H5CX__init_package(void) { H5P_genplist_t *dx_plist; /* Data transfer property list */ H5P_genplist_t *lc_plist; /* Link creation property list */ @@ -501,7 +505,7 @@ H5CX_init(void) H5P_genplist_t *fa_plist; /* File access property list */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE /* Reset the "default DXPL cache" information */ memset(&H5CX_def_dxpl_cache, 0, sizeof(H5CX_dxpl_cache_t)); @@ -685,9 +689,10 @@ H5CX_init(void) if (H5P_get(fa_plist, H5F_ACS_LIBVER_HIGH_BOUND_NAME, &H5CX_def_fapl_cache.high_bound) < 0) HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "Can't retrieve dataset minimize flag"); + done: FUNC_LEAVE_NOAPI(ret_value) -} +} /* end H5CX__init_package() */ /*------------------------------------------------------------------------- * Function: H5CX_term_package @@ -705,20 +710,24 @@ H5CX_term_package(void) { FUNC_ENTER_NOAPI_NOINIT_NOERR - H5CX_node_t *cnode; /* Context node */ + if (H5_PKG_INIT_VAR) { + H5CX_node_t *cnode; /* Context node */ - /* Pop the top context node from the stack */ - /* (Can't check for errors, as rest of library is shut down) */ - cnode = H5CX__pop_common(false); + /* Pop the top context node from the stack */ + /* (Can't check for errors, as rest of library is shut down) */ + cnode = H5CX__pop_common(false); - /* Free the context node */ - /* (Allocated with malloc() in H5CX_push_special() ) */ - free(cnode); + /* Free the context node */ + /* (Allocated with malloc() in H5CX_push_special() ) */ + free(cnode); #ifndef H5_HAVE_THREADSAFE - H5CX_head_g = NULL; + H5CX_head_g = NULL; #endif /* H5_HAVE_THREADSAFE */ + H5_PKG_INIT_VAR = false; + } /* end if */ + FUNC_LEAVE_NOAPI(0) } /* end H5CX_term_package() */ @@ -734,14 +743,18 @@ H5CX_term_package(void) bool H5CX_pushed(void) { - H5CX_node_t **head = NULL; /* Pointer to head of API context list */ + H5CX_node_t **head = NULL; /* Pointer to head of API context list */ + bool is_pushed = false; /* Flag to indicate context is pushed */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI_NOINIT_NOERR head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */ assert(head); - FUNC_LEAVE_NOAPI(*head != NULL); + /* Set return value */ + is_pushed = (*head != NULL); + + FUNC_LEAVE_NOAPI(is_pushed) } /*------------------------------------------------------------------------- @@ -1196,7 +1209,7 @@ H5CX_set_libver_bounds(H5F_t *f) H5CX_node_t **head = NULL; /* Pointer to head of API context list */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity check */ head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */ @@ -1210,6 +1223,7 @@ H5CX_set_libver_bounds(H5F_t *f) (*head)->ctx.low_bound_valid = true; (*head)->ctx.high_bound_valid = true; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5CX_set_libver_bounds() */ @@ -1458,7 +1472,7 @@ H5CX_set_vol_wrap_ctx(void *vol_wrap_ctx) H5CX_node_t **head = NULL; /* Pointer to head of API context list */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity check */ head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */ @@ -1470,6 +1484,7 @@ H5CX_set_vol_wrap_ctx(void *vol_wrap_ctx) /* Mark the value as valid */ (*head)->ctx.vol_wrap_ctx_valid = true; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5CX_set_vol_wrap_ctx() */ @@ -1488,7 +1503,7 @@ H5CX_set_vol_connector_prop(const H5VL_connector_prop_t *vol_connector_prop) H5CX_node_t **head = NULL; /* Pointer to head of API context list */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity check */ head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */ @@ -1500,6 +1515,7 @@ H5CX_set_vol_connector_prop(const H5VL_connector_prop_t *vol_connector_prop) /* Mark the value as valid */ (*head)->ctx.vol_connector_prop_valid = true; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5CX_set_vol_connector_prop() */ @@ -1613,7 +1629,7 @@ H5CX_get_vol_connector_prop(H5VL_connector_prop_t *vol_connector_prop) H5CX_node_t **head = NULL; /* Pointer to head of API context list */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity check */ assert(vol_connector_prop); @@ -1627,6 +1643,7 @@ H5CX_get_vol_connector_prop(H5VL_connector_prop_t *vol_connector_prop) else memset(vol_connector_prop, 0, sizeof(H5VL_connector_prop_t)); +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5CX_get_vol_connector_prop() */ @@ -1729,7 +1746,7 @@ H5CX_get_mpi_coll_datatypes(MPI_Datatype *btype, MPI_Datatype *ftype) H5CX_node_t **head = NULL; /* Pointer to head of API context list */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity check */ assert(btype); @@ -1741,6 +1758,7 @@ H5CX_get_mpi_coll_datatypes(MPI_Datatype *btype, MPI_Datatype *ftype) *btype = (*head)->ctx.btype; *ftype = (*head)->ctx.ftype; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5CX_get_mpi_coll_datatypes() */ @@ -2948,11 +2966,10 @@ H5CX_set_coll_metadata_read(bool cmdr) herr_t H5CX_set_mpi_coll_datatypes(MPI_Datatype btype, MPI_Datatype ftype) { - H5CX_node_t **head = NULL; /* Pointer to head of API context list */ - - herr_t ret_value = SUCCEED; /* Return value */ + H5CX_node_t **head = NULL; /* Pointer to head of API context list */ + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity check */ head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */ @@ -2962,6 +2979,7 @@ H5CX_set_mpi_coll_datatypes(MPI_Datatype btype, MPI_Datatype ftype) (*head)->ctx.btype = btype; (*head)->ctx.ftype = ftype; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5CX_set_mpi_coll_datatypes() */ @@ -2980,7 +2998,7 @@ H5CX_set_io_xfer_mode(H5FD_mpio_xfer_t io_xfer_mode) H5CX_node_t **head = NULL; /* Pointer to head of API context list */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity check */ head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */ @@ -2992,6 +3010,7 @@ H5CX_set_io_xfer_mode(H5FD_mpio_xfer_t io_xfer_mode) /* Mark the value as valid */ (*head)->ctx.io_xfer_mode_valid = true; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5CX_set_io_xfer_mode() */ @@ -3010,7 +3029,7 @@ H5CX_set_mpio_coll_opt(H5FD_mpio_collective_opt_t mpio_coll_opt) H5CX_node_t **head = NULL; /* Pointer to head of API context list */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity check */ head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */ @@ -3022,6 +3041,7 @@ H5CX_set_mpio_coll_opt(H5FD_mpio_collective_opt_t mpio_coll_opt) /* Mark the value as valid */ (*head)->ctx.mpio_coll_opt_valid = true; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5CX_set_mpio_coll_opt() */ @@ -3092,7 +3112,7 @@ H5CX_set_vlen_alloc_info(H5MM_allocate_t alloc_func, void *alloc_info, H5MM_free H5CX_node_t **head = NULL; /* Pointer to head of API context list */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity check */ head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */ @@ -3107,6 +3127,7 @@ H5CX_set_vlen_alloc_info(H5MM_allocate_t alloc_func, void *alloc_info, H5MM_free /* Mark the value as valid */ (*head)->ctx.vl_alloc_info_valid = true; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5CX_set_vlen_alloc_info() */ @@ -3125,7 +3146,7 @@ H5CX_set_nlinks(size_t nlinks) H5CX_node_t **head = NULL; /* Pointer to head of API context list */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity check */ head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */ @@ -3137,6 +3158,7 @@ H5CX_set_nlinks(size_t nlinks) /* Mark the value as valid */ (*head)->ctx.nlinks_valid = true; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5CX_set_nlinks() */ diff --git a/src/H5CXmodule.h b/src/H5CXmodule.h index 7306966a5c0..722eb765c99 100644 --- a/src/H5CXmodule.h +++ b/src/H5CXmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5CX_MODULE -#define H5_MY_PKG H5CX -#define H5_MY_PKG_ERR H5E_CONTEXT +#define H5_MY_PKG H5CX +#define H5_MY_PKG_ERR H5E_CONTEXT +#define H5_MY_PKG_INIT YES #endif /* H5CXmodule_H */ diff --git a/src/H5CXprivate.h b/src/H5CXprivate.h index a2066f235a4..71935de75a4 100644 --- a/src/H5CXprivate.h +++ b/src/H5CXprivate.h @@ -159,8 +159,6 @@ H5_DLL herr_t H5CX_set_vlen_alloc_info(H5MM_allocate_t alloc_func, void *alloc_i /* "Setter" routines for LAPL properties cached in API context */ H5_DLL herr_t H5CX_set_nlinks(size_t nlinks); -H5_DLL herr_t H5CX_init(void); - /* "Setter" routines for cached DXPL properties that must be returned to application */ H5_DLL void H5CX_set_no_selection_io_cause(uint32_t no_selection_io_cause); diff --git a/src/H5Cmodule.h b/src/H5Cmodule.h index 80a3583a3a9..03a55b7a5fe 100644 --- a/src/H5Cmodule.h +++ b/src/H5Cmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5C_MODULE -#define H5_MY_PKG H5C -#define H5_MY_PKG_ERR H5E_CACHE +#define H5_MY_PKG H5C +#define H5_MY_PKG_ERR H5E_CACHE +#define H5_MY_PKG_INIT NO #endif /* H5Cmodule_H */ diff --git a/src/H5D.c b/src/H5D.c index 80540fe6a58..492f80793cc 100644 --- a/src/H5D.c +++ b/src/H5D.c @@ -63,6 +63,9 @@ static herr_t H5D__set_extent_api_common(hid_t dset_id, const hsize_t size[], vo /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /*****************************/ /* Library Private Variables */ /*****************************/ diff --git a/src/H5Dchunk.c b/src/H5Dchunk.c index 10843a6997f..8b83d1d3cda 100644 --- a/src/H5Dchunk.c +++ b/src/H5Dchunk.c @@ -43,21 +43,21 @@ /***********/ /* Headers */ /***********/ -#include "H5private.h" /* Generic Functions */ +#include "H5private.h" /* Generic Functions */ #ifdef H5_HAVE_PARALLEL -#include "H5ACprivate.h" /* Metadata cache */ +#include "H5ACprivate.h" /* Metadata cache */ #endif /* H5_HAVE_PARALLEL */ -#include "H5CXprivate.h" /* API Contexts */ -#include "H5Dpkg.h" /* Dataset functions */ -#include "H5Eprivate.h" /* Error handling */ -#include "H5Fprivate.h" /* File functions */ -#include "H5FLprivate.h" /* Free Lists */ -#include "H5Iprivate.h" /* IDs */ -#include "H5MMprivate.h" /* Memory management */ -#include "H5MFprivate.h" /* File memory management */ -#include "H5PBprivate.h" /* Page Buffer */ +#include "H5CXprivate.h" /* API Contexts */ +#include "H5Dpkg.h" /* Dataset functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5Fprivate.h" /* File functions */ +#include "H5FLprivate.h" /* Free Lists */ +#include "H5Iprivate.h" /* IDs */ +#include "H5MMprivate.h" /* Memory management */ +#include "H5MFprivate.h" /* File memory management */ +#include "H5PBprivate.h" /* Page Buffer */ #include "H5SLprivate.h" /* Skip Lists */ -#include "H5VMprivate.h" /* Vector and array functions */ +#include "H5VMprivate.h" /* Vector and array functions */ /****************/ /* Local Macros */ @@ -5728,13 +5728,16 @@ H5D__chunk_cmp_coll_fill_info(const void *_entry1, const void *_entry2) { const struct chunk_coll_fill_info *entry1; const struct chunk_coll_fill_info *entry2; + int ret_value = 0; FUNC_ENTER_PACKAGE_NOERR entry1 = (const struct chunk_coll_fill_info *)_entry1; entry2 = (const struct chunk_coll_fill_info *)_entry2; - FUNC_LEAVE_NOAPI(H5_addr_cmp(entry1->addr, entry2->addr)) + ret_value = H5_addr_cmp(entry1->addr, entry2->addr); + + FUNC_LEAVE_NOAPI(ret_value) } /* end H5D__chunk_cmp_coll_fill_info() */ #endif /* H5_HAVE_PARALLEL */ diff --git a/src/H5Dint.c b/src/H5Dint.c index bede70a57d4..f956d8761fd 100644 --- a/src/H5Dint.c +++ b/src/H5Dint.c @@ -140,6 +140,9 @@ static const H5I_class_t H5I_DATASET_CLS[1] = {{ (H5I_free_t)H5D__close_cb /* Callback routine for closing objects of this class */ }}; +/* Flag indicating "top" of interface has been initialized */ +static bool H5D_top_package_initialize_s = false; + /* Prefixes of VDS and external file from the environment variables * HDF5_EXTFILE_PREFIX and HDF5_VDS_PREFIX */ static const char *H5D_prefix_ext_env = NULL; @@ -157,11 +160,38 @@ static const char *H5D_prefix_vds_env = NULL; */ herr_t H5D_init(void) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_NOAPI(FAIL) + /* FUNC_ENTER() does all the work */ + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5D_init() */ + +/*-------------------------------------------------------------------------- +NAME + H5D__init_package -- Initialize interface-specific information +USAGE + herr_t H5D__init_package() + +RETURNS + Non-negative on success/Negative on failure +DESCRIPTION + Initializes any interface-specific data or routines. +NOTES + Care must be taken when using the H5P functions, since they can cause + a deadlock in the library when the library is attempting to terminate -QAK + +--------------------------------------------------------------------------*/ +herr_t +H5D__init_package(void) { H5P_genplist_t *def_dcpl; /* Default Dataset Creation Property list */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE /* Initialize the ID group for the dataset IDs */ if (H5I_register_type(H5I_DATASET_CLS) < 0) @@ -191,13 +221,16 @@ H5D_init(void) if (H5P_get(def_dcpl, H5O_CRT_PIPELINE_NAME, &H5D_def_dset.dcpl_cache.pline) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve pipeline filter"); + /* Mark "top" of interface as initialized, too */ + H5D_top_package_initialize_s = true; + /* Retrieve the prefixes of VDS and external file from the environment variable */ H5D_prefix_vds_env = getenv("HDF5_VDS_PREFIX"); H5D_prefix_ext_env = getenv("HDF5_EXTFILE_PREFIX"); done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5D_init() */ +} /* end H5D__init_package() */ /*------------------------------------------------------------------------- * Function: H5D_top_term_package @@ -216,32 +249,38 @@ H5D_top_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - if (H5I_nmembers(H5I_DATASET) > 0) { - /* The dataset API uses the "force" flag set to true because it - * is using the "file objects" (H5FO) API functions to track open - * objects in the file. Using the H5FO code means that dataset - * IDs can have reference counts >1, when an existing dataset is - * opened more than once. However, the H5I code does not attempt - * to close objects with reference counts>1 unless the "force" flag - * is set to true. - * - * At some point (probably after the group and datatypes use the - * the H5FO code), the H5FO code might need to be switched around - * to storing pointers to the objects being tracked (H5D_t, H5G_t, - * etc) and reference count those itself instead of relying on the - * reference counting in the H5I layer. Then, the "force" flag can - * be put back to false. - * - * Setting the "force" flag to true for all the interfaces won't - * work because the "file driver" (H5FD) APIs use the H5I reference - * counting to avoid closing a file driver out from underneath an - * open file... - * - * QAK - 5/13/03 - */ - (void)H5I_clear_type(H5I_DATASET, true, false); - n++; /*H5I*/ - } + if (H5D_top_package_initialize_s) { + if (H5I_nmembers(H5I_DATASET) > 0) { + /* The dataset API uses the "force" flag set to true because it + * is using the "file objects" (H5FO) API functions to track open + * objects in the file. Using the H5FO code means that dataset + * IDs can have reference counts >1, when an existing dataset is + * opened more than once. However, the H5I code does not attempt + * to close objects with reference counts>1 unless the "force" flag + * is set to true. + * + * At some point (probably after the group and datatypes use the + * the H5FO code), the H5FO code might need to be switched around + * to storing pointers to the objects being tracked (H5D_t, H5G_t, + * etc) and reference count those itself instead of relying on the + * reference counting in the H5I layer. Then, the "force" flag can + * be put back to false. + * + * Setting the "force" flag to true for all the interfaces won't + * work because the "file driver" (H5FD) APIs use the H5I reference + * counting to avoid closing a file driver out from underneath an + * open file... + * + * QAK - 5/13/03 + */ + (void)H5I_clear_type(H5I_DATASET, true, false); + n++; /*H5I*/ + } /* end if */ + + /* Mark closed */ + if (0 == n) + H5D_top_package_initialize_s = false; + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5D_top_term_package() */ @@ -266,11 +305,18 @@ H5D_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - /* Sanity checks */ - assert(0 == H5I_nmembers(H5I_DATASET)); + if (H5_PKG_INIT_VAR) { + /* Sanity checks */ + assert(0 == H5I_nmembers(H5I_DATASET)); + assert(false == H5D_top_package_initialize_s); + + /* Destroy the dataset object id group */ + n += (H5I_dec_type_ref(H5I_DATASET) > 0); - /* Destroy the dataset object id group */ - n += (H5I_dec_type_ref(H5I_DATASET) > 0); + /* Mark closed */ + if (0 == n) + H5_PKG_INIT_VAR = false; + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5D_term_package() */ diff --git a/src/H5Dmodule.h b/src/H5Dmodule.h index ad10a94e41d..9b021105ed3 100644 --- a/src/H5Dmodule.h +++ b/src/H5Dmodule.h @@ -22,8 +22,9 @@ * reporting macros. */ #define H5D_MODULE -#define H5_MY_PKG H5D -#define H5_MY_PKG_ERR H5E_DATASET +#define H5_MY_PKG H5D +#define H5_MY_PKG_ERR H5E_DATASET +#define H5_MY_PKG_INIT YES /** \page H5D_UG HDF5 Datasets * diff --git a/src/H5Dmpio.c b/src/H5Dmpio.c index e6e2444ffd7..c19f0ab4b68 100644 --- a/src/H5Dmpio.c +++ b/src/H5Dmpio.c @@ -2716,13 +2716,16 @@ H5D__cmp_piece_addr(const void *piece_info1, const void *piece_info2) { haddr_t addr1; haddr_t addr2; + int ret_value = 0; FUNC_ENTER_PACKAGE_NOERR addr1 = (*((const H5D_piece_info_t *const *)piece_info1))->faddr; addr2 = (*((const H5D_piece_info_t *const *)piece_info2))->faddr; - FUNC_LEAVE_NOAPI(H5_addr_cmp(addr1, addr2)) + ret_value = H5_addr_cmp(addr1, addr2); + + FUNC_LEAVE_NOAPI(ret_value) } /* end H5D__cmp_chunk_addr() */ /*------------------------------------------------------------------------- @@ -2744,9 +2747,9 @@ H5D__cmp_filtered_collective_io_info_entry(const void *filtered_collective_io_in { const H5D_filtered_collective_chunk_info_t *entry1; const H5D_filtered_collective_chunk_info_t *entry2; - haddr_t addr1 = HADDR_UNDEF; - haddr_t addr2 = HADDR_UNDEF; - int ret_value; + haddr_t addr1 = HADDR_UNDEF; + haddr_t addr2 = HADDR_UNDEF; + int ret_value = 0; FUNC_ENTER_PACKAGE_NOERR @@ -2803,7 +2806,7 @@ H5D__cmp_chunk_redistribute_info(const void *_entry1, const void *_entry2) const H5D_chunk_redistribute_info_t *entry2; haddr_t oloc_addr1; haddr_t oloc_addr2; - int ret_value; + int ret_value = 0; FUNC_ENTER_PACKAGE_NOERR @@ -2863,9 +2866,9 @@ H5D__cmp_chunk_redistribute_info_orig_owner(const void *_entry1, const void *_en { const H5D_chunk_redistribute_info_t *entry1; const H5D_chunk_redistribute_info_t *entry2; - int owner1 = -1; - int owner2 = -1; - int ret_value; + int owner1 = -1; + int owner2 = -1; + int ret_value = 0; FUNC_ENTER_PACKAGE_NOERR diff --git a/src/H5Dvirtual.c b/src/H5Dvirtual.c index 59c3a3f2e25..bdb093ed07b 100644 --- a/src/H5Dvirtual.c +++ b/src/H5Dvirtual.c @@ -1264,7 +1264,7 @@ H5D_virtual_free_parsed_name(H5O_storage_virtual_name_seg_t *name_seg) H5O_storage_virtual_name_seg_t *next_seg; herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Walk name segments, freeing them */ while (name_seg) { @@ -1274,6 +1274,7 @@ H5D_virtual_free_parsed_name(H5O_storage_virtual_name_seg_t *name_seg) name_seg = next_seg; } /* end while */ +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5D_virtual_free_parsed_name() */ diff --git a/src/H5E.c b/src/H5E.c index 2c2776eddd4..b1063f7b861 100644 --- a/src/H5E.c +++ b/src/H5E.c @@ -73,6 +73,9 @@ /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Declare extern the free list to manage the H5E_stack_t struct */ H5FL_EXTERN(H5E_stack_t); diff --git a/src/H5EA.c b/src/H5EA.c index b0a3c2ab574..09258449a4c 100644 --- a/src/H5EA.c +++ b/src/H5EA.c @@ -72,6 +72,9 @@ static H5EA_t *H5EA__new(H5F_t *f, haddr_t ea_addr, bool from_open, void *ctx_ud /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Extensible array client ID to class mapping */ /* Remember to add client ID to H5EA_cls_id_t in H5EAprivate.h when adding a new diff --git a/src/H5EAmodule.h b/src/H5EAmodule.h index 102149be954..3c8b4c0006a 100644 --- a/src/H5EAmodule.h +++ b/src/H5EAmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5EA_MODULE -#define H5_MY_PKG H5EA -#define H5_MY_PKG_ERR H5E_EARRAY +#define H5_MY_PKG H5EA +#define H5_MY_PKG_ERR H5E_EARRAY +#define H5_MY_PKG_INIT NO #endif /* H5EAmodule_H */ diff --git a/src/H5ESint.c b/src/H5ESint.c index 9542bb636a1..6a72d911440 100644 --- a/src/H5ESint.c +++ b/src/H5ESint.c @@ -103,6 +103,9 @@ static int H5ES__close_failed_cb(H5ES_event_t *ev, void *_ctx); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /*****************************/ /* Library Private Variables */ /*****************************/ @@ -123,20 +126,22 @@ static const H5I_class_t H5I_EVENTSET_CLS[1] = {{ H5FL_DEFINE_STATIC(H5ES_t); /*------------------------------------------------------------------------- - * Function: H5ES_init + * Function: H5ES__init_package + * + * Purpose: Initializes any interface-specific data or routines. + * + * Return: Non-negative on success / Negative on failure * * Purpose: Initialize the interface from some other layer. * - * Return: Success: non-negative - * Failure: negative *------------------------------------------------------------------------- */ herr_t -H5ES_init(void) +H5ES__init_package(void) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE /* Initialize the ID group for the event set IDs */ if (H5I_register_type(H5I_EVENTSET_CLS) < 0) @@ -144,7 +149,7 @@ H5ES_init(void) done: FUNC_LEAVE_NOAPI(ret_value) -} +} /* end H5ES__init_package() */ /*------------------------------------------------------------------------- * Function: H5ES_term_package @@ -164,8 +169,14 @@ H5ES_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - /* Destroy the event set ID group */ - n += (H5I_dec_type_ref(H5I_EVENTSET) > 0); + if (H5_PKG_INIT_VAR) { + /* Destroy the event set ID group */ + n += (H5I_dec_type_ref(H5I_EVENTSET) > 0); + + /* Mark closed */ + if (0 == n) + H5_PKG_INIT_VAR = false; + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5ES_term_package() */ diff --git a/src/H5ESmodule.h b/src/H5ESmodule.h index 77408e14e20..5d05e2f82ce 100644 --- a/src/H5ESmodule.h +++ b/src/H5ESmodule.h @@ -22,8 +22,9 @@ * reporting macros. */ #define H5ES_MODULE -#define H5_MY_PKG H5ES -#define H5_MY_PKG_ERR H5E_EVENTSET +#define H5_MY_PKG H5ES +#define H5_MY_PKG_ERR H5E_EVENTSET +#define H5_MY_PKG_INIT YES /** \page H5ES_UG HDF5 Event Set * @todo Under Construction diff --git a/src/H5ESprivate.h b/src/H5ESprivate.h index 3b397b7289b..1899cdc24c0 100644 --- a/src/H5ESprivate.h +++ b/src/H5ESprivate.h @@ -47,8 +47,7 @@ typedef struct H5ES_t H5ES_t; /***************************************/ /* Library-private Function Prototypes */ /***************************************/ -herr_t H5ES_insert(hid_t es_id, H5VL_connector_t *connector, void *token, const char *caller, - const char *caller_args, ...); -H5_DLL herr_t H5ES_init(void); +herr_t H5ES_insert(hid_t es_id, H5VL_connector_t *connector, void *token, const char *caller, + const char *caller_args, ...); #endif /* H5ESprivate_H */ diff --git a/src/H5Eint.c b/src/H5Eint.c index fa1be37925a..8227e7cd421 100644 --- a/src/H5Eint.c +++ b/src/H5Eint.c @@ -228,6 +228,30 @@ H5E_init(void) herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) + /* FUNC_ENTER() does all the work */ + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5E_init() */ + +/*-------------------------------------------------------------------------- + * Function: H5E__init_package + * + * Purpose: Initialize interface-specific information + * + * Return: SUCCEED/FAIL + * + * Programmer: Raymond Lu + * Friday, July 11, 2003 + * + *-------------------------------------------------------------------------- + */ +herr_t +H5E__init_package(void) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_PACKAGE /* Initialize the ID group for the error class IDs */ if (H5I_register_type(H5I_ERRCLS_CLS) < 0) @@ -254,7 +278,7 @@ H5E_init(void) done: FUNC_LEAVE_NOAPI(ret_value) -} +} /* end H5E__init_package() */ /*------------------------------------------------------------------------- * Function: H5E_term_package @@ -275,61 +299,66 @@ H5E_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - int64_t ncls, nmsg, nstk; - - /* Check if there are any open error stacks, classes or messages */ - ncls = H5I_nmembers(H5I_ERROR_CLASS); - nmsg = H5I_nmembers(H5I_ERROR_MSG); - nstk = H5I_nmembers(H5I_ERROR_STACK); - - if ((ncls + nmsg + nstk) > 0) { - /* Clear the default error stack. Note that - * the following H5I_clear_type calls do not - * force the clears and will not be able to - * clear any error message IDs that are still - * in use by the default error stack unless we - * clear that stack manually. - * - * Error message IDs will typically still be - * in use by the default error stack when the - * application does H5E_BEGIN/END_TRY cleanup - * at the very end. - */ - H5E_clear_stack(); - - /* Clear any outstanding error stacks */ - if (nstk > 0) - (void)H5I_clear_type(H5I_ERROR_STACK, false, false); - - /* Clear all the error classes */ - if (ncls > 0) { - (void)H5I_clear_type(H5I_ERROR_CLASS, false, false); - - /* Reset the HDF5 error class, if its been closed */ - if (H5I_nmembers(H5I_ERROR_CLASS) == 0) - H5E_ERR_CLS_g = H5I_INVALID_HID; - } /* end if */ + if (H5_PKG_INIT_VAR) { + int64_t ncls, nmsg, nstk; + + /* Check if there are any open error stacks, classes or messages */ + ncls = H5I_nmembers(H5I_ERROR_CLASS); + nmsg = H5I_nmembers(H5I_ERROR_MSG); + nstk = H5I_nmembers(H5I_ERROR_STACK); + + if ((ncls + nmsg + nstk) > 0) { + /* Clear the default error stack. Note that + * the following H5I_clear_type calls do not + * force the clears and will not be able to + * clear any error message IDs that are still + * in use by the default error stack unless we + * clear that stack manually. + * + * Error message IDs will typically still be + * in use by the default error stack when the + * application does H5E_BEGIN/END_TRY cleanup + * at the very end. + */ + H5E_clear_stack(); + + /* Clear any outstanding error stacks */ + if (nstk > 0) + (void)H5I_clear_type(H5I_ERROR_STACK, false, false); + + /* Clear all the error classes */ + if (ncls > 0) { + (void)H5I_clear_type(H5I_ERROR_CLASS, false, false); + + /* Reset the HDF5 error class, if its been closed */ + if (H5I_nmembers(H5I_ERROR_CLASS) == 0) + H5E_ERR_CLS_g = H5I_INVALID_HID; + } /* end if */ - /* Clear all the error messages */ - if (nmsg > 0) { - (void)H5I_clear_type(H5I_ERROR_MSG, false, false); + /* Clear all the error messages */ + if (nmsg > 0) { + (void)H5I_clear_type(H5I_ERROR_MSG, false, false); - /* Reset the HDF5 error messages, if they've been closed */ - if (H5I_nmembers(H5I_ERROR_MSG) == 0) { + /* Reset the HDF5 error messages, if they've been closed */ + if (H5I_nmembers(H5I_ERROR_MSG) == 0) { /* Include the automatically generated error code termination */ #include "H5Eterm.h" - } /* end if */ - } /* end if */ - - n++; /*H5I*/ - } /* end if */ - else { - /* Destroy the error class, message, and stack id groups */ - n += (H5I_dec_type_ref(H5I_ERROR_STACK) > 0); - n += (H5I_dec_type_ref(H5I_ERROR_CLASS) > 0); - n += (H5I_dec_type_ref(H5I_ERROR_MSG) > 0); + } /* end if */ + } /* end if */ - } /* end else */ + n++; /*H5I*/ + } /* end if */ + else { + /* Destroy the error class, message, and stack id groups */ + n += (H5I_dec_type_ref(H5I_ERROR_STACK) > 0); + n += (H5I_dec_type_ref(H5I_ERROR_CLASS) > 0); + n += (H5I_dec_type_ref(H5I_ERROR_MSG) > 0); + + /* Mark closed */ + if (0 == n) + H5_PKG_INIT_VAR = false; + } /* end else */ + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5E_term_package() */ @@ -1787,7 +1816,7 @@ H5E_dump_api_stack(void) H5E_stack_t *estack = H5E__get_my_stack(); herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) assert(estack); @@ -1805,6 +1834,7 @@ H5E_dump_api_stack(void) } /* end else */ #endif /* H5_NO_DEPRECATED_SYMBOLS */ +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5E_dump_api_stack() */ @@ -1836,7 +1866,7 @@ H5E_pause_stack(void) { H5E_stack_t *estack = H5E__get_my_stack(); - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI_NOINIT_NOERR assert(estack); @@ -1874,7 +1904,7 @@ H5E_resume_stack(void) { H5E_stack_t *estack = H5E__get_my_stack(); - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI_NOINIT_NOERR assert(estack); assert(estack->paused); diff --git a/src/H5Emodule.h b/src/H5Emodule.h index 027e94309d0..7243655cc03 100644 --- a/src/H5Emodule.h +++ b/src/H5Emodule.h @@ -22,8 +22,9 @@ * reporting macros. */ #define H5E_MODULE -#define H5_MY_PKG H5E -#define H5_MY_PKG_ERR H5E_ERROR +#define H5_MY_PKG H5E +#define H5_MY_PKG_ERR H5E_ERROR +#define H5_MY_PKG_INIT YES /** \page H5E_UG HDF5 Error Handling * diff --git a/src/H5Epublic.h b/src/H5Epublic.h index 4e41f166176..328cd4d2d84 100644 --- a/src/H5Epublic.h +++ b/src/H5Epublic.h @@ -49,14 +49,6 @@ typedef struct H5E_error2_t { /**< Optional supplied description */ } H5E_error2_t; -/* When this header is included from a private header, don't make calls to H5open() */ -#undef H5OPEN -#ifndef H5private_H -#define H5OPEN H5open(), -#else /* H5private_H */ -#define H5OPEN -#endif /* H5private_H */ - /* HDF5 error class */ /* Extern "C" block needed to compile C++ filter plugins with some compilers */ #ifdef __cplusplus diff --git a/src/H5FA.c b/src/H5FA.c index 42830178cca..b170e8ffb15 100644 --- a/src/H5FA.c +++ b/src/H5FA.c @@ -61,6 +61,9 @@ static H5FA_t *H5FA__new(H5F_t *f, haddr_t fa_addr, bool from_open, void *ctx_ud /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Fixed array client ID to class mapping */ /* Remember to add client ID to H5FA_cls_id_t in H5FAprivate.h when adding a new diff --git a/src/H5FAmodule.h b/src/H5FAmodule.h index d76384f55cc..3fe56c012b2 100644 --- a/src/H5FAmodule.h +++ b/src/H5FAmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5FA_MODULE -#define H5_MY_PKG H5FA -#define H5_MY_PKG_ERR H5E_FARRAY +#define H5_MY_PKG H5FA +#define H5_MY_PKG_ERR H5E_FARRAY +#define H5_MY_PKG_INIT NO #endif /* H5FAmodule_H */ diff --git a/src/H5FD.c b/src/H5FD.c index 82daa37cee1..567eb2c809f 100644 --- a/src/H5FD.c +++ b/src/H5FD.c @@ -59,6 +59,12 @@ static herr_t H5FD__query(const H5FD_t *f, unsigned long *flags /*out*/); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + +/* Whether to ignore file locks when disabled (env var value) */ +htri_t H5FD_ignore_disabled_file_locks_p = FAIL; + /*****************************/ /* Library Private Variables */ /*****************************/ @@ -92,10 +98,11 @@ static const H5I_class_t H5I_VFL_CLS[1] = {{ /*------------------------------------------------------------------------- * Function: H5FD_init * - * Purpose: Initialize the interface from some other layer. + * Purpose: Initialize the interface from some other package. + * + * Return: Success: non-negative + * Failure: negative * - * Return: Success: non-negative - * Failure: negative *------------------------------------------------------------------------- */ herr_t @@ -104,6 +111,28 @@ H5FD_init(void) herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) + /* FUNC_ENTER() does all the work */ + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5FD_init() */ + +/*------------------------------------------------------------------------- + * Function: H5FD__init_package + * + * Purpose: Initialize the virtual file layer. + * + * Return: SUCCEED/FAIL + * + *------------------------------------------------------------------------- + */ +herr_t +H5FD__init_package(void) +{ + char *lock_env_var = NULL; /* Environment variable pointer */ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_PACKAGE if (H5I_register_type(H5I_VFL_CLS) < 0) HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "unable to initialize interface"); @@ -111,9 +140,64 @@ H5FD_init(void) /* Reset the file serial numbers */ H5FD_file_serial_no_g = 0; + /* Check the use disabled file locks environment variable */ + lock_env_var = getenv(HDF5_USE_FILE_LOCKING); + if (lock_env_var && !strcmp(lock_env_var, "BEST_EFFORT")) + H5FD_ignore_disabled_file_locks_p = true; /* Override: Ignore disabled locks */ + else if (lock_env_var && (!strcmp(lock_env_var, "TRUE") || !strcmp(lock_env_var, "1"))) + H5FD_ignore_disabled_file_locks_p = false; /* Override: Don't ignore disabled locks */ + else + H5FD_ignore_disabled_file_locks_p = FAIL; /* Environment variable not set, or not set correctly */ + + /* Initialize all internal VFD drivers, so their driver IDs are set up */ + if (H5FD__core_register() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register core VFD"); +#ifdef H5_HAVE_DIRECT + if (H5FD__direct_register() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register direct VFD"); +#endif + if (H5FD__family_register() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register family VFD"); +#ifdef H5_HAVE_LIBHDFS + if (H5FD__hdfs_register() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register hdfs VFD"); +#endif +#ifdef H5_HAVE_IOC_VFD + if (H5FD__ioc_register() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register ioc VFD"); +#endif + if (H5FD__log_register() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register log VFD"); +#ifdef H5_HAVE_MIRROR_VFD + if (H5FD__mirror_register() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register mirror VFD"); +#endif +#ifdef H5_HAVE_PARALLEL + if (H5FD__mpio_register() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register mpio VFD"); +#endif + if (H5FD__multi_register() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register multi VFD"); + if (H5FD__onion_register() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register onion VFD"); +#ifdef H5_HAVE_ROS3_VFD + if (H5FD__ros3_register() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register ros3 VFD"); +#endif + if (H5FD__sec2_register() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register sec2 VFD"); + if (H5FD__splitter_register() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register splitter VFD"); + if (H5FD__stdio_register() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register stdio VFD"); +#ifdef H5_HAVE_SUBFILING_VFD + if (H5FD__subfiling_register() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register subfiling VFD"); +#endif + done: FUNC_LEAVE_NOAPI(ret_value) -} +} /* end H5FD__init_package() */ /*------------------------------------------------------------------------- * Function: H5FD_term_package @@ -137,14 +221,52 @@ H5FD_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - if (H5I_nmembers(H5I_VFL) > 0) { - (void)H5I_clear_type(H5I_VFL, false, false); - n++; /*H5I*/ - } /* end if */ - else { - /* Destroy the VFL driver ID group */ - n += (H5I_dec_type_ref(H5I_VFL) > 0); - } /* end else */ + if (H5_PKG_INIT_VAR) { + if (H5I_nmembers(H5I_VFL) > 0) { + (void)H5I_clear_type(H5I_VFL, false, false); + + /* Reset all internal VFD driver IDs */ + H5FD__core_unregister(); +#ifdef H5_HAVE_DIRECT + H5FD__direct_unregister(); +#endif + H5FD__family_unregister(); +#ifdef H5_HAVE_LIBHDFS + H5FD__hdfs_unregister(); +#endif +#ifdef H5_HAVE_IOC_VFD + H5FD__ioc_unregister(); +#endif + H5FD__log_unregister(); +#ifdef H5_HAVE_MIRROR_VFD + H5FD__mirror_unregister(); +#endif +#ifdef H5_HAVE_PARALLEL + H5FD__mpio_unregister(); +#endif + H5FD__multi_unregister(); + H5FD__onion_unregister(); +#ifdef H5_HAVE_ROS3_VFD + H5FD__ros3_unregister(); +#endif + H5FD__sec2_unregister(); + H5FD__splitter_unregister(); + H5FD__stdio_unregister(); +#ifdef H5_HAVE_SUBFILING_VFD + H5FD__subfiling_unregister(); +#endif + + n++; /*H5I*/ + } /* end if */ + else { + /* Destroy the VFL driver ID group */ + n += (H5I_dec_type_ref(H5I_VFL) > 0); + + /* Mark closed */ + if (0 == n) + H5_PKG_INIT_VAR = false; + } /* end else */ + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5FD_term_package() */ @@ -154,7 +276,7 @@ H5FD_term_package(void) * * Purpose: Frees a file driver class struct and returns an indication of * success. This function is used as the free callback for the - * virtual file layer object identifiers (cf H5FD_init). + * virtual file layer object identifiers (cf H5FD__init_package). * * Return: SUCCEED/FAIL * @@ -441,7 +563,7 @@ H5FD_sb_size(H5FD_t *file) { hsize_t ret_value = 0; - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(0) /* Sanity checks */ assert(file); @@ -451,6 +573,7 @@ H5FD_sb_size(H5FD_t *file) if (file->cls->sb_size) ret_value = (file->cls->sb_size)(file); +done: FUNC_LEAVE_NOAPI(ret_value) } @@ -578,7 +701,7 @@ H5FD_fapl_get(H5FD_t *file) { void *ret_value = NULL; - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(NULL) /* Sanity checks */ assert(file); @@ -588,6 +711,7 @@ H5FD_fapl_get(H5FD_t *file) if (file->cls->fapl_get) ret_value = (file->cls->fapl_get)(file); +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5FD_fapl_get() */ @@ -945,7 +1069,7 @@ H5FD_cmp(const H5FD_t *f1, const H5FD_t *f2) { int ret_value = -1; /* Return value */ - FUNC_ENTER_NOAPI_NOERR /* return value is arbitrary */ + FUNC_ENTER_NOAPI(-1) /* return value is arbitrary */ if ((!f1 || !f1->cls) && (!f2 || !f2->cls)) HGOTO_DONE(0); @@ -1299,7 +1423,7 @@ H5FD_get_maxaddr(const H5FD_t *file) { haddr_t ret_value = HADDR_UNDEF; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(HADDR_UNDEF) /* Sanity checks */ assert(file); @@ -1307,6 +1431,7 @@ H5FD_get_maxaddr(const H5FD_t *file) /* Set return value */ ret_value = file->maxaddr; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5FD_get_maxaddr() */ diff --git a/src/H5FDcore.c b/src/H5FDcore.c index 86dda9763d2..b1aeef9032d 100644 --- a/src/H5FDcore.c +++ b/src/H5FDcore.c @@ -16,13 +16,13 @@ * access to small, temporary hdf5 files. */ -#include "H5FDdrvr_module.h" /* This source code file is part of the H5FD driver module */ +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ #include "H5private.h" /* Generic Functions */ #include "H5Eprivate.h" /* Error handling */ #include "H5Fprivate.h" /* File access */ -#include "H5FDprivate.h" /* File drivers */ #include "H5FDcore.h" /* Core file driver */ +#include "H5FDpkg.h" /* File drivers */ #include "H5FLprivate.h" /* Free lists */ #include "H5Iprivate.h" /* IDs */ #include "H5MMprivate.h" /* Memory management */ @@ -30,10 +30,7 @@ #include "H5SLprivate.h" /* Skip lists */ /* The driver identification number, initialized at runtime */ -static hid_t H5FD_CORE_g = 0; - -/* Whether to ignore file locks when disabled (env var value) */ -static htri_t ignore_disabled_file_locks_s = FAIL; +hid_t H5FD_CORE_id_g = H5I_INVALID_HID; /* The skip list node type. Represents a region in the file. */ typedef struct H5FD_core_region_t { @@ -126,7 +123,6 @@ typedef struct H5FD_core_fapl_t { static herr_t H5FD__core_add_dirty_region(H5FD_core_t *file, haddr_t start, haddr_t end); static herr_t H5FD__core_destroy_dirty_list(H5FD_core_t *file); static herr_t H5FD__core_write_to_bstore(H5FD_core_t *file, haddr_t addr, size_t size); -static herr_t H5FD__core_term(void); static void *H5FD__core_fapl_get(H5FD_t *_file); static H5FD_t *H5FD__core_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr); static herr_t H5FD__core_close(H5FD_t *_file); @@ -153,7 +149,7 @@ static const H5FD_class_t H5FD_core_g = { "core", /* name */ MAXADDR, /* maxaddr */ H5F_CLOSE_WEAK, /* fc_degree */ - H5FD__core_term, /* terminate */ + NULL, /* terminate */ NULL, /* sb_size */ NULL, /* sb_encode */ NULL, /* sb_decode */ @@ -443,61 +439,48 @@ H5FD__core_get_default_config(void) } /* end H5FD__core_get_default_config() */ /*------------------------------------------------------------------------- - * Function: H5FD_core_init + * Function: H5FD__core_register * - * Purpose: Initialize this driver by registering the driver with the - * library. + * Purpose: Register the driver with the library. * - * Return: Success: The driver ID for the core driver - * Failure: H5I_INVALID_HID + * Return: SUCCEED/FAIL * *------------------------------------------------------------------------- */ -hid_t -H5FD_core_init(void) +herr_t +H5FD__core_register(void) { - char *lock_env_var = NULL; /* Environment variable pointer */ - hid_t ret_value = H5I_INVALID_HID; /* Return value */ - - FUNC_ENTER_NOAPI_NOERR - - /* Check the use disabled file locks environment variable */ - lock_env_var = getenv(HDF5_USE_FILE_LOCKING); - if (lock_env_var && !strcmp(lock_env_var, "BEST_EFFORT")) - ignore_disabled_file_locks_s = true; /* Override: Ignore disabled locks */ - else if (lock_env_var && (!strcmp(lock_env_var, "TRUE") || !strcmp(lock_env_var, "1"))) - ignore_disabled_file_locks_s = false; /* Override: Don't ignore disabled locks */ - else - ignore_disabled_file_locks_s = FAIL; /* Environment variable not set, or not set correctly */ + herr_t ret_value = SUCCEED; /* Return value */ - if (H5I_VFL != H5I_get_type(H5FD_CORE_g)) - H5FD_CORE_g = H5FD_register(&H5FD_core_g, sizeof(H5FD_class_t), false); + FUNC_ENTER_PACKAGE - /* Set return value */ - ret_value = H5FD_CORE_g; + if (H5I_VFL != H5I_get_type(H5FD_CORE_id_g)) + if ((H5FD_CORE_id_g = H5FD_register(&H5FD_core_g, sizeof(H5FD_class_t), false)) < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register core driver"); +done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_core_init() */ +} /* end H5FD__core_register() */ /*--------------------------------------------------------------------------- - * Function: H5FD__core_term + * Function: H5FD__core_unregister * - * Purpose: Shut down the VFD + * Purpose: Reset library driver info. * * Returns: SUCCEED (Can't fail) * *--------------------------------------------------------------------------- */ -static herr_t -H5FD__core_term(void) +herr_t +H5FD__core_unregister(void) { FUNC_ENTER_PACKAGE_NOERR /* Reset VFL ID */ - H5FD_CORE_g = 0; + H5FD_CORE_id_g = H5I_INVALID_HID; FUNC_LEAVE_NOAPI(SUCCEED) -} /* end H5FD__core_term() */ +} /* end H5FD__core_unregister() */ /*------------------------------------------------------------------------- * Function: H5Pset_core_write_tracking @@ -798,9 +781,9 @@ H5FD__core_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr file->fi_callbacks = file_image_info.callbacks; /* Check the file locking flags in the fapl */ - if (ignore_disabled_file_locks_s != FAIL) + if (H5FD_ignore_disabled_file_locks_p != FAIL) /* The environment variable was set, so use that preferentially */ - file->ignore_disabled_file_locks = ignore_disabled_file_locks_s; + file->ignore_disabled_file_locks = H5FD_ignore_disabled_file_locks_p; else { /* Use the value in the property list */ if (H5P_get(plist, H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_NAME, &file->ignore_disabled_file_locks) < 0) diff --git a/src/H5FDcore.h b/src/H5FDcore.h index 7b21ca32865..97aa138761f 100644 --- a/src/H5FDcore.h +++ b/src/H5FDcore.h @@ -16,8 +16,11 @@ #ifndef H5FDcore_H #define H5FDcore_H -/** Initializer for the core VFD */ -#define H5FD_CORE (H5FDperform_init(H5FD_core_init)) +/* Public header files */ +#include "H5FDpublic.h" /* File drivers */ + +/** ID for the core VFD */ +#define H5FD_CORE (H5OPEN H5FD_CORE_id_g) /** Identifier for the core VFD */ #define H5FD_CORE_VALUE H5_VFD_CORE @@ -28,9 +31,9 @@ extern "C" { /** @private * - * \brief Private initializer for the core VFD + * \brief ID for the core VFD */ -H5_DLL hid_t H5FD_core_init(void); +H5_DLLVAR hid_t H5FD_CORE_id_g; /** * \ingroup FAPL diff --git a/src/H5FDdevelop.h b/src/H5FDdevelop.h index 88e8113a2a0..f6915ef3c73 100644 --- a/src/H5FDdevelop.h +++ b/src/H5FDdevelop.h @@ -359,7 +359,6 @@ typedef hid_t (*H5FD_init_t)(void); extern "C" { #endif -H5_DLL hid_t H5FDperform_init(H5FD_init_t op); H5_DLL hid_t H5FDregister(const H5FD_class_t *cls); H5_DLL htri_t H5FDis_driver_registered_by_name(const char *driver_name); H5_DLL htri_t H5FDis_driver_registered_by_value(H5FD_class_value_t driver_value); diff --git a/src/H5FDdirect.c b/src/H5FDdirect.c index eea9fd11bc9..147013f7c95 100644 --- a/src/H5FDdirect.c +++ b/src/H5FDdirect.c @@ -16,13 +16,13 @@ * buffer. The main system support this feature is Linux. */ -#include "H5FDdrvr_module.h" /* This source code file is part of the H5FD driver module */ +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ #include "H5private.h" /* Generic Functions */ #include "H5Eprivate.h" /* Error handling */ #include "H5Fprivate.h" /* File access */ -#include "H5FDprivate.h" /* File drivers */ #include "H5FDdirect.h" /* Direct file driver */ +#include "H5FDpkg.h" /* File drivers */ #include "H5FLprivate.h" /* Free Lists */ #include "H5Iprivate.h" /* IDs */ #include "H5MMprivate.h" /* Memory management */ @@ -31,10 +31,7 @@ #ifdef H5_HAVE_DIRECT /* The driver identification number, initialized at runtime */ -static hid_t H5FD_DIRECT_g = 0; - -/* Whether to ignore file locks when disabled (env var value) */ -static htri_t ignore_disabled_file_locks_s = FAIL; +hid_t H5FD_DIRECT_id_g = H5I_INVALID_HID; /* File operations */ #define OP_UNKNOWN 0 @@ -115,7 +112,6 @@ typedef struct H5FD_direct_t { (ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) || HADDR_UNDEF == (A) + (Z) || (HDoff_t)((A) + (Z)) < (HDoff_t)(A)) /* Prototypes */ -static herr_t H5FD__direct_term(void); static herr_t H5FD__direct_populate_config(size_t boundary, size_t block_size, size_t cbuf_size, H5FD_direct_fapl_t *fa_out); static void *H5FD__direct_fapl_get(H5FD_t *file); @@ -143,7 +139,7 @@ static const H5FD_class_t H5FD_direct_g = { "direct", /* name */ MAXADDR, /* maxaddr */ H5F_CLOSE_WEAK, /* fc_degree */ - H5FD__direct_term, /* terminate */ + NULL, /* terminate */ NULL, /* sb_size */ NULL, /* sb_encode */ NULL, /* sb_decode */ @@ -184,65 +180,48 @@ static const H5FD_class_t H5FD_direct_g = { H5FL_DEFINE_STATIC(H5FD_direct_t); /*------------------------------------------------------------------------- - * Function: H5FD_direct_init + * Function: H5FD__direct_register * - * Purpose: Initialize this driver by registering the driver with the - * library. + * Purpose: Register the driver with the library. * - * Return: Success: The driver ID for the direct driver - * Failure: H5I_INVALID_HID + * Return: SUCCEED/FAIL * *------------------------------------------------------------------------- */ -hid_t -H5FD_direct_init(void) +herr_t +H5FD__direct_register(void) { - char *lock_env_var = NULL; /* Environment variable pointer */ - hid_t ret_value = H5I_INVALID_HID; /* Return value */ - - FUNC_ENTER_NOAPI(H5I_INVALID_HID) - - /* Check the use disabled file locks environment variable */ - lock_env_var = getenv(HDF5_USE_FILE_LOCKING); - if (lock_env_var && !strcmp(lock_env_var, "BEST_EFFORT")) - ignore_disabled_file_locks_s = true; /* Override: Ignore disabled locks */ - else if (lock_env_var && (!strcmp(lock_env_var, "TRUE") || !strcmp(lock_env_var, "1"))) - ignore_disabled_file_locks_s = false; /* Override: Don't ignore disabled locks */ - else - ignore_disabled_file_locks_s = FAIL; /* Environment variable not set, or not set correctly */ + herr_t ret_value = SUCCEED; /* Return value */ - if (H5I_VFL != H5I_get_type(H5FD_DIRECT_g)) { - H5FD_DIRECT_g = H5FD_register(&H5FD_direct_g, sizeof(H5FD_class_t), false); - if (H5I_INVALID_HID == H5FD_DIRECT_g) - HGOTO_ERROR(H5E_ID, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to register direct"); - } + FUNC_ENTER_PACKAGE - /* Set return value */ - ret_value = H5FD_DIRECT_g; + if (H5I_VFL != H5I_get_type(H5FD_DIRECT_id_g)) + if ((H5FD_DIRECT_id_g = H5FD_register(&H5FD_direct_g, sizeof(H5FD_class_t), false)) < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register direct driver"); done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_direct_init() */ +} /* end H5FD__direct_register() */ /*--------------------------------------------------------------------------- - * Function: H5FD__direct_term + * Function: H5FD__direct_unregister * - * Purpose: Shut down the VFD + * Purpose: Reset library driver info. * * Returns: Non-negative on success or negative on failure * *--------------------------------------------------------------------------- */ -static herr_t -H5FD__direct_term(void) +herr_t +H5FD__direct_unregister(void) { FUNC_ENTER_PACKAGE_NOERR /* Reset VFL ID */ - H5FD_DIRECT_g = 0; + H5FD_DIRECT_id_g = H5I_INVALID_HID; FUNC_LEAVE_NOAPI(SUCCEED) -} /* end H5FD__direct_term() */ +} /* end H5FD__direct_unregister() */ /*------------------------------------------------------------------------- * Function: H5Pset_fapl_direct @@ -437,7 +416,7 @@ H5FD__direct_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxad int fd = (-1); H5FD_direct_t *file = NULL; const H5FD_direct_fapl_t *fa; - H5FD_direct_fapl_t default_fa; + H5FD_direct_fapl_t default_fa = {0}; #ifdef H5_HAVE_WIN32_API HFILE filehandle; struct _BY_HANDLE_FILE_INFORMATION fileinfo; @@ -511,9 +490,9 @@ H5FD__direct_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxad file->fa.cbsize = fa->cbsize; /* Check the file locking flags in the fapl */ - if (ignore_disabled_file_locks_s != FAIL) + if (H5FD_ignore_disabled_file_locks_p != FAIL) /* The environment variable was set, so use that preferentially */ - file->ignore_disabled_file_locks = ignore_disabled_file_locks_s; + file->ignore_disabled_file_locks = H5FD_ignore_disabled_file_locks_p; else { /* Use the value in the property list */ if (H5P_get(plist, H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_NAME, &file->ignore_disabled_file_locks) < 0) diff --git a/src/H5FDdirect.h b/src/H5FDdirect.h index ac5bf3ec99e..6ceca0e9c17 100644 --- a/src/H5FDdirect.h +++ b/src/H5FDdirect.h @@ -16,10 +16,13 @@ #ifndef H5FDdirect_H #define H5FDdirect_H +/* Public header files */ +#include "H5FDpublic.h" /* File drivers */ + #ifdef H5_HAVE_DIRECT -/** Initializer for the direct VFD */ -#define H5FD_DIRECT (H5FDperform_init(H5FD_direct_init)) +/** ID for the direct VFD */ +#define H5FD_DIRECT (H5OPEN H5FD_DIRECT_id_g) /** Identifier for the direct VFD */ #define H5FD_DIRECT_VALUE H5_VFD_DIRECT @@ -50,9 +53,9 @@ extern "C" { /** @private * - * \brief Private initializer for the direct VFD + * \brief ID for the direct VFD */ -H5_DLL hid_t H5FD_direct_init(void); +H5_DLLVAR hid_t H5FD_DIRECT_id_g; /** * \ingroup FAPL diff --git a/src/H5FDfamily.c b/src/H5FDfamily.c index 1a70f9875fc..e186c06017e 100644 --- a/src/H5FDfamily.c +++ b/src/H5FDfamily.c @@ -28,13 +28,13 @@ * */ -#include "H5FDdrvr_module.h" /* This source code file is part of the H5FD driver module */ +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ #include "H5private.h" /* Generic Functions */ #include "H5Eprivate.h" /* Error handling */ #include "H5Fprivate.h" /* File access */ -#include "H5FDprivate.h" /* File drivers */ #include "H5FDfamily.h" /* Family file driver */ +#include "H5FDpkg.h" /* File drivers */ #include "H5Iprivate.h" /* IDs */ #include "H5MMprivate.h" /* Memory management */ #include "H5Pprivate.h" /* Property lists */ @@ -46,7 +46,7 @@ #define H5FD_FAM_DEF_MEM_SIZE ((hsize_t)(100 * H5_MB)) /* The driver identification number, initialized at runtime */ -static hid_t H5FD_FAMILY_g = 0; +hid_t H5FD_FAMILY_id_g = H5I_INVALID_HID; /* The description of a file belonging to this driver. */ typedef struct H5FD_family_t { @@ -80,7 +80,6 @@ static herr_t H5FD__family_get_default_config(H5FD_family_fapl_t *fa_out); static char *H5FD__family_get_default_printf_filename(const char *old_filename); /* Callback prototypes */ -static herr_t H5FD__family_term(void); static void *H5FD__family_fapl_get(H5FD_t *_file); static void *H5FD__family_fapl_copy(const void *_old_fa); static herr_t H5FD__family_fapl_free(void *_fa); @@ -112,7 +111,7 @@ static const H5FD_class_t H5FD_family_g = { "family", /* name */ HADDR_MAX, /* maxaddr */ H5F_CLOSE_WEAK, /* fc_degree */ - H5FD__family_term, /* terminate */ + NULL, /* terminate */ H5FD__family_sb_size, /* sb_size */ H5FD__family_sb_encode, /* sb_encode */ H5FD__family_sb_decode, /* sb_decode */ @@ -267,51 +266,48 @@ H5FD__family_get_default_printf_filename(const char *old_filename) } /* end H5FD__family_get_default_printf_filename() */ /*------------------------------------------------------------------------- - * Function: H5FD_family_init + * Function: H5FD__family_register * - * Purpose: Initialize this driver by registering the driver with the - * library. + * Purpose: Register the driver with the library. * - * Return: Success: The driver ID for the family driver - * Failure: H5I_INVALID_HID + * Return: SUCCEED/FAIL * *------------------------------------------------------------------------- */ -hid_t -H5FD_family_init(void) +herr_t +H5FD__family_register(void) { - hid_t ret_value = H5I_INVALID_HID; + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR - - if (H5I_VFL != H5I_get_type(H5FD_FAMILY_g)) - H5FD_FAMILY_g = H5FD_register(&H5FD_family_g, sizeof(H5FD_class_t), false); + FUNC_ENTER_PACKAGE - /* Set return value */ - ret_value = H5FD_FAMILY_g; + if (H5I_VFL != H5I_get_type(H5FD_FAMILY_id_g)) + if ((H5FD_FAMILY_id_g = H5FD_register(&H5FD_family_g, sizeof(H5FD_class_t), false)) < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register family driver"); +done: FUNC_LEAVE_NOAPI(ret_value) -} /* H5FD_family_init() */ +} /* H5FD__family_register() */ /*--------------------------------------------------------------------------- - * Function: H5FD__family_term + * Function: H5FD__family_unregister * - * Purpose: Shut down the VFD + * Purpose: Reset library driver info. * * Returns: Non-negative on success or negative on failure * *--------------------------------------------------------------------------- */ -static herr_t -H5FD__family_term(void) +herr_t +H5FD__family_unregister(void) { FUNC_ENTER_PACKAGE_NOERR /* Reset VFL ID */ - H5FD_FAMILY_g = 0; + H5FD_FAMILY_id_g = H5I_INVALID_HID; FUNC_LEAVE_NOAPI(SUCCEED) -} /* end H5FD__family_term() */ +} /* end H5FD__family_unregister() */ /*------------------------------------------------------------------------- * Function: H5Pset_fapl_family diff --git a/src/H5FDfamily.h b/src/H5FDfamily.h index b2aac30c74b..3f032f8aae1 100644 --- a/src/H5FDfamily.h +++ b/src/H5FDfamily.h @@ -16,8 +16,11 @@ #ifndef H5FDfamily_H #define H5FDfamily_H -/** Initializer for the family VFD */ -#define H5FD_FAMILY (H5FDperform_init(H5FD_family_init)) +/* Public header files */ +#include "H5FDpublic.h" /* File drivers */ + +/** ID for the family VFD */ +#define H5FD_FAMILY (H5OPEN H5FD_FAMILY_id_g) /** Identifier for the family VFD */ #define H5FD_FAMILY_VALUE H5_VFD_FAMILY @@ -28,9 +31,9 @@ extern "C" { /** @private * - * \brief Private initializer for the family VFD + * \brief ID for the family VFD */ -H5_DLL hid_t H5FD_family_init(void); +H5_DLLVAR hid_t H5FD_FAMILY_id_g; /** * \ingroup FAPL diff --git a/src/H5FDhdfs.c b/src/H5FDhdfs.c index c28972a4a1c..e217948137b 100644 --- a/src/H5FDhdfs.c +++ b/src/H5FDhdfs.c @@ -15,21 +15,19 @@ * File System (HDFS). */ +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ + +#include "H5private.h" /* Generic Functions */ + #ifdef H5_HAVE_LIBHDFS -/* This source code file is part of the H5FD driver module */ -#include "H5FDdrvr_module.h" -#endif -#include "H5private.h" /* Generic Functions */ #include "H5Eprivate.h" /* Error handling */ -#include "H5FDprivate.h" /* File drivers */ #include "H5FDhdfs.h" /* hdfs file driver */ +#include "H5FDpkg.h" /* File drivers */ #include "H5FLprivate.h" /* Free Lists */ #include "H5Iprivate.h" /* IDs */ #include "H5MMprivate.h" /* Memory management */ -#ifdef H5_HAVE_LIBHDFS - /* HDFS routines */ #include "hdfs.h" @@ -40,7 +38,12 @@ #define HDFS_STATS 0 /* The driver identification number, initialized at runtime */ -static hid_t H5FD_HDFS_g = 0; +hid_t H5FD_HDFS_id_g = H5I_INVALID_HID; + +/* Flag to indicate whether global driver resources & settings have been + * initialized. + */ +static bool H5FD_hdfs_init_s = false; #if HDFS_STATS @@ -241,7 +244,6 @@ typedef struct H5FD_hdfs_t { #define ADDR_OVERFLOW(A) (HADDR_UNDEF == (A) || ((A) & ~(haddr_t)MAXADDR)) /* Prototypes */ -static herr_t H5FD__hdfs_term(void); static void *H5FD__hdfs_fapl_get(H5FD_t *_file); static void *H5FD__hdfs_fapl_copy(const void *_old_fa); static herr_t H5FD__hdfs_fapl_free(void *_fa); @@ -267,7 +269,7 @@ static const H5FD_class_t H5FD_hdfs_g = { "hdfs", /* name */ MAXADDR, /* maxaddr */ H5F_CLOSE_WEAK, /* fc_degree */ - H5FD__hdfs_term, /* terminate */ + NULL, /* terminate */ NULL, /* sb_size */ NULL, /* sb_encode */ NULL, /* sb_decode */ @@ -308,61 +310,44 @@ static const H5FD_class_t H5FD_hdfs_g = { H5FL_DEFINE_STATIC(H5FD_hdfs_t); /*------------------------------------------------------------------------- - * Function: H5FD_hdfs_init + * Function: H5FD__hdfs_register * - * Purpose: Initialize this driver by registering the driver with the - * library. + * Purpose: Register the driver with the library. * - * Return: Success: The driver ID for the hdfs driver. - * Failure: Negative + * Return: SUCCEED/FAIL * *------------------------------------------------------------------------- */ -hid_t -H5FD_hdfs_init(void) +herr_t +H5FD__hdfs_register(void) { - hid_t ret_value = H5I_INVALID_HID; -#if HDFS_STATS - unsigned int bin_i; -#endif + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(H5I_INVALID_HID) + FUNC_ENTER_PACKAGE #if HDFS_DEBUG fprintf(stdout, "called %s.\n", __func__); #endif - if (H5I_VFL != H5I_get_type(H5FD_HDFS_g)) - H5FD_HDFS_g = H5FD_register(&H5FD_hdfs_g, sizeof(H5FD_class_t), false); - -#if HDFS_STATS - /* pre-compute statsbin boundaries - */ - for (bin_i = 0; bin_i < HDFS_STATS_BIN_COUNT; bin_i++) { - unsigned long long value = 0; - - HDFS_STATS_POW(bin_i, &value) - hdfs_stats_boundaries[bin_i] = value; - } -#endif - - ret_value = H5FD_HDFS_g; + if (H5I_VFL != H5I_get_type(H5FD_HDFS_id_g)) + if ((H5FD_HDFS_id_g = H5FD_register(&H5FD_hdfs_g, sizeof(H5FD_class_t), false)) < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register hdfs driver"); done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_hdfs_init() */ +} /* end H5FD__hdfs_register() */ /*--------------------------------------------------------------------------- - * Function: H5FD__hdfs_term + * Function: H5FD__hdfs_unregister * - * Purpose: Shut down the VFD + * Purpose: Reset library driver info. * * Returns: SUCCEED (Can't fail) * *--------------------------------------------------------------------------- */ -static herr_t -H5FD__hdfs_term(void) +herr_t +H5FD__hdfs_unregister(void) { FUNC_ENTER_PACKAGE_NOERR @@ -371,10 +356,48 @@ H5FD__hdfs_term(void) #endif /* Reset VFL ID */ - H5FD_HDFS_g = 0; + H5FD_HDFS_id_g = H5I_INVALID_HID; FUNC_LEAVE_NOAPI(SUCCEED) -} /* end H5FD__hdfs_term() */ +} /* end H5FD__hdfs_unregister() */ + +/*------------------------------------------------------------------------- + * Function: H5FD__hdfs_init + * + * Purpose: Singleton to initialize global driver settings & resources. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +static herr_t +H5FD__hdfs_init(void) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_PACKAGE + +#if HDFS_DEBUG + fprintf(stdout, "called %s.\n", __func__); +#endif + +#if HDFS_STATS + /* pre-compute statsbin boundaries + */ + for (unsigned bin_i = 0; bin_i < HDFS_STATS_BIN_COUNT; bin_i++) { + unsigned long long value = 0; + + HDFS_STATS_POW(bin_i, &value) + hdfs_stats_boundaries[bin_i] = value; + } +#endif + + /* Indicate that driver is set up */ + H5FD_hdfs_init_s = true; + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5FD__hdfs_init() */ /*-------------------------------------------------------------------------- * Function: H5FD__hdfs_handle_open @@ -401,6 +424,11 @@ H5FD__hdfs_handle_open(const char *path, const char *namenode_name, const int32_ fprintf(stdout, "called %s.\n", __func__); #endif + /* Initialize driver, if it's not yet */ + if (!H5FD_hdfs_init_s) + if (H5FD__hdfs_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, NULL, "can't initialize driver"); + if (path == NULL || path[0] == '\0') HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "path cannot be null"); if (namenode_name == NULL) diff --git a/src/H5FDhdfs.h b/src/H5FDhdfs.h index 22fbbc50d17..cc667ac1d81 100644 --- a/src/H5FDhdfs.h +++ b/src/H5FDhdfs.h @@ -18,10 +18,13 @@ #ifndef H5FDhdfs_H #define H5FDhdfs_H +/* Public header files */ +#include "H5FDpublic.h" /* File drivers */ + #ifdef H5_HAVE_LIBHDFS -/** Initializer for the hdfs VFD */ -#define H5FD_HDFS (H5FDperform_init(H5FD_hdfs_init)) +/** ID for the HDFS VFD */ +#define H5FD_HDFS (H5OPEN H5FD_HDFS_id_g) /** Identifier for the hdfs VFD */ #define H5FD_HDFS_VALUE H5_VFD_HDFS @@ -37,9 +40,6 @@ #endif /* H5_HAVE_LIBHDFS */ #ifdef H5_HAVE_LIBHDFS -#ifdef __cplusplus -extern "C" { -#endif /** * The version number of the H5FD_hdfs_fapl_t configuration @@ -93,11 +93,15 @@ typedef struct H5FD_hdfs_fapl_t { int32_t stream_buffer_size; } H5FD_hdfs_fapl_t; +#ifdef __cplusplus +extern "C" { +#endif + /** @private * - * \brief Private initializer for the hdfs VFD + * \brief ID for the HDFS VFD */ -H5_DLL hid_t H5FD_hdfs_init(void); +H5_DLLVAR hid_t H5FD_HDFS_id_g; /** * \ingroup FAPL diff --git a/src/H5FDint.c b/src/H5FDint.c index 12049ca87cc..4456ae485fa 100644 --- a/src/H5FDint.c +++ b/src/H5FDint.c @@ -3044,7 +3044,7 @@ H5FD_check_plugin_load(const H5FD_class_t *cls, const H5PL_key_t *key, bool *suc { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity checks */ assert(cls); @@ -3066,6 +3066,7 @@ H5FD_check_plugin_load(const H5FD_class_t *cls, const H5PL_key_t *key, bool *suc *success = true; } +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5FD_check_plugin_load() */ diff --git a/src/H5FDlog.c b/src/H5FDlog.c index 726a8f6e105..13e64ef939c 100644 --- a/src/H5FDlog.c +++ b/src/H5FDlog.c @@ -20,23 +20,20 @@ * With custom modifications... */ -#include "H5FDdrvr_module.h" /* This source code file is part of the H5FD driver module */ +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ #include "H5private.h" /* Generic Functions */ #include "H5Eprivate.h" /* Error handling */ #include "H5Fprivate.h" /* File access */ -#include "H5FDprivate.h" /* File drivers */ #include "H5FDlog.h" /* Logging file driver */ +#include "H5FDpkg.h" /* File drivers */ #include "H5FLprivate.h" /* Free Lists */ #include "H5Iprivate.h" /* IDs */ #include "H5MMprivate.h" /* Memory management */ #include "H5Pprivate.h" /* Property lists */ /* The driver identification number, initialized at runtime */ -static hid_t H5FD_LOG_g = 0; - -/* Whether to ignore file locks when disabled (env var value) */ -static htri_t ignore_disabled_file_locks_s = FAIL; +hid_t H5FD_LOG_id_g = H5I_INVALID_HID; /* Driver-specific file access properties */ typedef struct H5FD_log_fapl_t { @@ -154,7 +151,6 @@ typedef struct H5FD_log_t { (ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) || HADDR_UNDEF == (A) + (Z) || (HDoff_t)((A) + (Z)) < (HDoff_t)(A)) /* Prototypes */ -static herr_t H5FD__log_term(void); static void *H5FD__log_fapl_get(H5FD_t *file); static void *H5FD__log_fapl_copy(const void *_old_fa); static herr_t H5FD__log_fapl_free(void *_fa); @@ -183,7 +179,7 @@ static const H5FD_class_t H5FD_log_g = { "log", /* name */ MAXADDR, /* maxaddr */ H5F_CLOSE_WEAK, /* fc_degree */ - H5FD__log_term, /* terminate */ + NULL, /* terminate */ NULL, /* sb_size */ NULL, /* sb_encode */ NULL, /* sb_decode */ @@ -227,61 +223,48 @@ static const H5FD_log_fapl_t H5FD_log_default_config_g = {NULL, H5FD_LOG_LOC_IO H5FL_DEFINE_STATIC(H5FD_log_t); /*------------------------------------------------------------------------- - * Function: H5FD_log_init + * Function: H5FD__log_register * - * Purpose: Initialize this driver by registering the driver with the - * library. + * Purpose: Register the driver with the library. * - * Return: Success: The driver ID for the log driver - * Failure: H5I_INVALID_HID + * Return: SUCCEED/FAIL * *------------------------------------------------------------------------- */ -hid_t -H5FD_log_init(void) +herr_t +H5FD__log_register(void) { - char *lock_env_var = NULL; /* Environment variable pointer */ - hid_t ret_value = H5I_INVALID_HID; /* Return value */ - - FUNC_ENTER_NOAPI_NOERR - - /* Check the use disabled file locks environment variable */ - lock_env_var = getenv(HDF5_USE_FILE_LOCKING); - if (lock_env_var && !strcmp(lock_env_var, "BEST_EFFORT")) - ignore_disabled_file_locks_s = true; /* Override: Ignore disabled locks */ - else if (lock_env_var && (!strcmp(lock_env_var, "TRUE") || !strcmp(lock_env_var, "1"))) - ignore_disabled_file_locks_s = false; /* Override: Don't ignore disabled locks */ - else - ignore_disabled_file_locks_s = FAIL; /* Environment variable not set, or not set correctly */ + herr_t ret_value = SUCCEED; /* Return value */ - if (H5I_VFL != H5I_get_type(H5FD_LOG_g)) - H5FD_LOG_g = H5FD_register(&H5FD_log_g, sizeof(H5FD_class_t), false); + FUNC_ENTER_PACKAGE - /* Set return value */ - ret_value = H5FD_LOG_g; + if (H5I_VFL != H5I_get_type(H5FD_LOG_id_g)) + if ((H5FD_LOG_id_g = H5FD_register(&H5FD_log_g, sizeof(H5FD_class_t), false)) < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register log driver"); +done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_log_init() */ +} /* end H5FD__log_register() */ /*--------------------------------------------------------------------------- - * Function: H5FD__log_term + * Function: H5FD__log_unregister * - * Purpose: Shut down the VFD + * Purpose: Reset library driver info. * * Returns: SUCCEED (Can't fail) * *--------------------------------------------------------------------------- */ -static herr_t -H5FD__log_term(void) +herr_t +H5FD__log_unregister(void) { FUNC_ENTER_PACKAGE_NOERR /* Reset VFL ID */ - H5FD_LOG_g = 0; + H5FD_LOG_id_g = H5I_INVALID_HID; FUNC_LEAVE_NOAPI(SUCCEED) -} /* end H5FD__log_term() */ +} /* end H5FD__log_unregister() */ /*------------------------------------------------------------------------- * Function: H5Pset_fapl_log @@ -599,9 +582,9 @@ H5FD__log_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr) } /* Check the file locking flags in the fapl */ - if (ignore_disabled_file_locks_s != FAIL) + if (H5FD_ignore_disabled_file_locks_p != FAIL) /* The environment variable was set, so use that preferentially */ - file->ignore_disabled_file_locks = ignore_disabled_file_locks_s; + file->ignore_disabled_file_locks = H5FD_ignore_disabled_file_locks_p; else { /* Use the value in the property list */ if (H5P_get(plist, H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_NAME, &file->ignore_disabled_file_locks) < 0) diff --git a/src/H5FDlog.h b/src/H5FDlog.h index e957157a5a5..871845cf189 100644 --- a/src/H5FDlog.h +++ b/src/H5FDlog.h @@ -17,7 +17,11 @@ #define H5FDlog_H /** Initializer for the log VFD */ -#define H5FD_LOG (H5FDperform_init(H5FD_log_init)) +/* Public header files */ +#include "H5FDpublic.h" /* File drivers */ + +/** ID for the log VFD */ +#define H5FD_LOG (H5OPEN H5FD_LOG_id_g) /** Identifier for the log VFD */ #define H5FD_LOG_VALUE H5_VFD_LOG @@ -67,9 +71,9 @@ extern "C" { /** @private * - * \brief Private initializer for the log VFD + * \brief ID for the log VFD */ -H5_DLL hid_t H5FD_log_init(void); +H5_DLLVAR hid_t H5FD_LOG_id_g; /** * \ingroup FAPL diff --git a/src/H5FDmirror.c b/src/H5FDmirror.c index c0fc9d07817..5e4ccd7cc9b 100644 --- a/src/H5FDmirror.c +++ b/src/H5FDmirror.c @@ -15,24 +15,24 @@ * a remote host. */ +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ + #include "H5private.h" /* Generic Functions */ #ifdef H5_HAVE_MIRROR_VFD -#include "H5FDdrvr_module.h" /* This source code file is part of the H5FD driver module */ - #include "H5Eprivate.h" /* Error handling */ #include "H5Fprivate.h" /* File access */ -#include "H5FDprivate.h" /* File drivers */ #include "H5FDmirror.h" /* "Mirror" definitions */ #include "H5FDmirror_priv.h" /* Private header for the mirror VFD */ +#include "H5FDpkg.h" /* File drivers */ #include "H5FLprivate.h" /* Free Lists */ #include "H5Iprivate.h" /* IDs */ #include "H5MMprivate.h" /* Memory management */ #include "H5Pprivate.h" /* Property lists */ /* The driver identification number, initialized at runtime */ -static hid_t H5FD_MIRROR_g = 0; +hid_t H5FD_MIRROR_id_g = H5I_INVALID_HID; /* Virtual file structure for a Mirror Driver */ typedef struct H5FD_mirror_t { @@ -139,7 +139,6 @@ typedef struct H5FD_mirror_t { #endif /* MIRROR_DEBUG_OP_CALLS */ /* Prototypes */ -static herr_t H5FD__mirror_term(void); static void *H5FD__mirror_fapl_get(H5FD_t *_file); static void *H5FD__mirror_fapl_copy(const void *_old_fa); static herr_t H5FD__mirror_fapl_free(void *_fa); @@ -165,7 +164,7 @@ static const H5FD_class_t H5FD_mirror_g = { "mirror", /* name */ MAXADDR, /* maxaddr */ H5F_CLOSE_WEAK, /* fc_degree */ - H5FD__mirror_term, /* terminate */ + NULL, /* terminate */ NULL, /* sb_size */ NULL, /* sb_encode */ NULL, /* sb_decode */ @@ -212,55 +211,52 @@ H5FL_DEFINE_STATIC(H5FD_mirror_t); H5FL_DEFINE_STATIC(H5FD_mirror_xmit_open_t); /* ------------------------------------------------------------------------- - * Function: H5FD_mirror_init + * Function: H5FD__mirror_register * - * Purpose: Initialize this driver by registering the driver with the - * library. + * Purpose: Register the driver with the library. + * + * Return: SUCCEED/FAIL * - * Return: Success: The driver ID for the mirror driver. - * Failure: Negative * ------------------------------------------------------------------------- */ -hid_t -H5FD_mirror_init(void) +herr_t +H5FD__mirror_register(void) { - hid_t ret_value = H5I_INVALID_HID; + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(H5I_INVALID_HID) + FUNC_ENTER_PACKAGE LOG_OP_CALL(__func__); - if (H5I_VFL != H5I_get_type(H5FD_MIRROR_g)) { - H5FD_MIRROR_g = H5FD_register(&H5FD_mirror_g, sizeof(H5FD_class_t), false); - if (H5I_INVALID_HID == H5FD_MIRROR_g) - HGOTO_ERROR(H5E_ID, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to register mirror"); - } - ret_value = H5FD_MIRROR_g; + if (H5I_VFL != H5I_get_type(H5FD_MIRROR_id_g)) + if ((H5FD_MIRROR_id_g = H5FD_register(&H5FD_mirror_g, sizeof(H5FD_class_t), false)) < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register mirror driver"); done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_mirror_init() */ +} /* end H5FD__mirror_register() */ /* --------------------------------------------------------------------------- - * Function: H5FD__mirror_term + * Function: H5FD__mirror_unregister * - * Purpose: Shut down the VFD + * Purpose: Reset library driver info. * * Returns: SUCCEED (Can't fail) + * * --------------------------------------------------------------------------- */ -static herr_t -H5FD__mirror_term(void) +herr_t +H5FD__mirror_unregister(void) { FUNC_ENTER_PACKAGE_NOERR - /* Reset VFL ID */ - H5FD_MIRROR_g = 0; - LOG_OP_CALL(__func__); + /* Reset VFL ID */ + H5FD_MIRROR_id_g = H5I_INVALID_HID; + FUNC_LEAVE_NOAPI(SUCCEED) -} /* end H5FD__mirror_term() */ +} /* end H5FD__mirror_unregister() */ /* --------------------------------------------------------------------------- * Function: H5FD__mirror_xmit_decode_uint16 diff --git a/src/H5FDmirror.h b/src/H5FDmirror.h index d64d6d778b7..3758dc083fa 100644 --- a/src/H5FDmirror.h +++ b/src/H5FDmirror.h @@ -17,10 +17,13 @@ #ifndef H5FDmirror_H #define H5FDmirror_H +/* Public header files */ +#include "H5FDpublic.h" /* File drivers */ + #ifdef H5_HAVE_MIRROR_VFD -/** Initializer for the mirror VFD */ -#define H5FD_MIRROR (H5FDperform_init(H5FD_mirror_init)) +/** ID for the mirror VFD */ +#define H5FD_MIRROR (H5OPEN H5FD_MIRROR_id_g) /** Identifier for the mirror VFD */ #define H5FD_MIRROR_VALUE H5_VFD_MIRROR @@ -75,9 +78,9 @@ extern "C" { /** @private * - * \brief Private initializer for the mirror VFD + * \brief ID for the mirror VFD */ -H5_DLL hid_t H5FD_mirror_init(void); +H5_DLLVAR hid_t H5FD_MIRROR_id_g; /** * \ingroup FAPL diff --git a/src/H5FDmodule.h b/src/H5FDmodule.h index ed399a4cb12..d692b8fef0d 100644 --- a/src/H5FDmodule.h +++ b/src/H5FDmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5FD_MODULE -#define H5_MY_PKG H5FD -#define H5_MY_PKG_ERR H5E_VFL +#define H5_MY_PKG H5FD +#define H5_MY_PKG_ERR H5E_VFL +#define H5_MY_PKG_INIT YES #endif /* H5FDmodule_H */ diff --git a/src/H5FDmpi.c b/src/H5FDmpi.c index 761cdf026ae..e5cbc2458c3 100644 --- a/src/H5FDmpi.c +++ b/src/H5FDmpi.c @@ -14,13 +14,16 @@ * Purpose: Common routines for all MPI-based VFL drivers. */ -#include "H5private.h" /* Generic Functions */ -#include "H5Eprivate.h" /* Error handling */ -#include "H5FDprivate.h" /* File drivers */ -#include "H5FDmpi.h" /* Common MPI file driver */ +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ + +#include "H5private.h" /* Generic Functions */ #ifdef H5_HAVE_PARALLEL +#include "H5Eprivate.h" /* Error handling */ +#include "H5FDmpi.h" /* Common MPI file driver */ +#include "H5FDpkg.h" /* File drivers */ + /*------------------------------------------------------------------------- * Function: H5FD_mpi_get_rank * @@ -36,10 +39,10 @@ int H5FD_mpi_get_rank(H5FD_t *file) { const H5FD_class_t *cls; - uint64_t flags = H5FD_CTL_FAIL_IF_UNKNOWN_FLAG | H5FD_CTL_ROUTE_TO_TERMINAL_VFD_FLAG; - int rank = -1; - void *rank_ptr = (void *)(&rank); - int ret_value; + uint64_t flags = H5FD_CTL_FAIL_IF_UNKNOWN_FLAG | H5FD_CTL_ROUTE_TO_TERMINAL_VFD_FLAG; + int rank = -1; + void *rank_ptr = (void *)(&rank); + int ret_value = -1; FUNC_ENTER_NOAPI(FAIL) @@ -75,10 +78,10 @@ int H5FD_mpi_get_size(H5FD_t *file) { const H5FD_class_t *cls; - uint64_t flags = H5FD_CTL_FAIL_IF_UNKNOWN_FLAG | H5FD_CTL_ROUTE_TO_TERMINAL_VFD_FLAG; - int size = 0; - void *size_ptr = (void *)(&size); - int ret_value; + uint64_t flags = H5FD_CTL_FAIL_IF_UNKNOWN_FLAG | H5FD_CTL_ROUTE_TO_TERMINAL_VFD_FLAG; + int size = 0; + void *size_ptr = (void *)(&size); + int ret_value = 0; FUNC_ENTER_NOAPI(FAIL) @@ -114,10 +117,10 @@ MPI_Comm H5FD_mpi_get_comm(H5FD_t *file) { const H5FD_class_t *cls; - uint64_t flags = H5FD_CTL_FAIL_IF_UNKNOWN_FLAG | H5FD_CTL_ROUTE_TO_TERMINAL_VFD_FLAG; - MPI_Comm comm = MPI_COMM_NULL; - void *comm_ptr = (void *)(&comm); - MPI_Comm ret_value; + uint64_t flags = H5FD_CTL_FAIL_IF_UNKNOWN_FLAG | H5FD_CTL_ROUTE_TO_TERMINAL_VFD_FLAG; + MPI_Comm comm = MPI_COMM_NULL; + void *comm_ptr = (void *)(&comm); + MPI_Comm ret_value = MPI_COMM_NULL; FUNC_ENTER_NOAPI(MPI_COMM_NULL) @@ -153,10 +156,10 @@ MPI_Info H5FD_mpi_get_info(H5FD_t *file) { const H5FD_class_t *cls; - uint64_t flags = H5FD_CTL_FAIL_IF_UNKNOWN_FLAG | H5FD_CTL_ROUTE_TO_TERMINAL_VFD_FLAG; - MPI_Info info = MPI_INFO_NULL; - void *info_ptr = (void *)(&info); - MPI_Info ret_value; + uint64_t flags = H5FD_CTL_FAIL_IF_UNKNOWN_FLAG | H5FD_CTL_ROUTE_TO_TERMINAL_VFD_FLAG; + MPI_Info info = MPI_INFO_NULL; + void *info_ptr = (void *)(&info); + MPI_Info ret_value = MPI_INFO_NULL; FUNC_ENTER_NOAPI(MPI_INFO_NULL) diff --git a/src/H5FDmpio.c b/src/H5FDmpio.c index 2d950f236cf..2d811ac68cc 100644 --- a/src/H5FDmpio.c +++ b/src/H5FDmpio.c @@ -14,34 +14,40 @@ * Purpose: This is the MPI I/O driver. */ -#include "H5FDdrvr_module.h" /* This source code file is part of the H5FD driver module */ +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ + +#include "H5private.h" /* Generic Functions */ + +#ifdef H5_HAVE_PARALLEL -#include "H5private.h" /* Generic Functions */ #include "H5CXprivate.h" /* API Contexts */ #include "H5Dprivate.h" /* Dataset functions */ #include "H5Eprivate.h" /* Error handling */ #include "H5Fprivate.h" /* File access */ -#include "H5FDprivate.h" /* File drivers */ #include "H5FDmpi.h" /* MPI-based file drivers */ +#include "H5FDpkg.h" /* File drivers */ #include "H5Iprivate.h" /* IDs */ #include "H5MMprivate.h" /* Memory management */ #include "H5Pprivate.h" /* Property lists */ -#ifdef H5_HAVE_PARALLEL - /* * The driver identification number, initialized at runtime if H5_HAVE_PARALLEL * is defined. This allows applications to still have the H5FD_MPIO * "constants" in their source code. */ -static hid_t H5FD_MPIO_g = 0; +hid_t H5FD_MPIO_id_g = H5I_INVALID_HID; + +/* Flag to indicate whether global driver resources & settings have been + * initialized. + */ +static bool H5FD_mpio_init_s = false; /* Whether to allow collective I/O operations */ /* (Can be changed by setting "HDF5_MPI_OPT_TYPES" environment variable to '0' or '1') */ bool H5FD_mpi_opt_types_g = true; /* Whether the driver initialized MPI on its own */ -static bool H5FD_mpi_self_initialized = false; +static bool H5FD_mpi_self_initialized_s = false; /* * The view is set to this value @@ -256,79 +262,110 @@ H5FD__mem_t_to_str(H5FD_mem_t mem_type) #endif /* H5FDmpio_DEBUG */ /*------------------------------------------------------------------------- - * Function: H5FD_mpio_init + * Function: H5FD__mpio_register * - * Purpose: Initialize this driver by registering the driver with the - * library. + * Purpose: Register the driver with the library. * - * Return: Success: The driver ID for the mpio driver - * Failure: H5I_INVALID_HID + * Return: SUCCEED/FAIL * *------------------------------------------------------------------------- */ -hid_t -H5FD_mpio_init(void) +herr_t +H5FD__mpio_register(void) { - static int H5FD_mpio_Debug_inited = 0; - char *env = NULL; - hid_t ret_value = H5I_INVALID_HID; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(H5I_INVALID_HID) + FUNC_ENTER_PACKAGE /* Register the MPI-IO VFD, if it isn't already */ - if (H5I_VFL != H5I_get_type(H5FD_MPIO_g)) { - H5FD_MPIO_g = H5FD_register((const H5FD_class_t *)&H5FD_mpio_g, sizeof(H5FD_class_t), false); - - /* Check if MPI driver has been loaded dynamically */ - env = getenv(HDF5_DRIVER); - if (env && !strcmp(env, "mpio")) { - int mpi_initialized = 0; - - /* Initialize MPI if not already initialized */ - if (MPI_SUCCESS != MPI_Initialized(&mpi_initialized)) - HGOTO_ERROR(H5E_VFL, H5E_UNINITIALIZED, H5I_INVALID_HID, "can't check if MPI is initialized"); - if (!mpi_initialized) { - if (MPI_SUCCESS != MPI_Init(NULL, NULL)) - HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, H5I_INVALID_HID, "can't initialize MPI"); - H5FD_mpi_self_initialized = true; - } + if (H5I_VFL != H5I_get_type(H5FD_MPIO_id_g)) + if ((H5FD_MPIO_id_g = H5FD_register(&H5FD_mpio_g, sizeof(H5FD_class_t), false)) < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register mpio driver"); + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5FD__mpio_register() */ + +/*--------------------------------------------------------------------------- + * Function: H5FD__mpio_unregister + * + * Purpose: Reset library driver info. + * + * Returns: SUCCEED (Can't fail) + * + *--------------------------------------------------------------------------- + */ +herr_t +H5FD__mpio_unregister(void) +{ + FUNC_ENTER_PACKAGE_NOERR + + /* Reset VFL ID */ + H5FD_MPIO_id_g = H5I_INVALID_HID; + + FUNC_LEAVE_NOAPI(SUCCEED) +} /* end H5FD__mpio_unregister() */ + +/*------------------------------------------------------------------------- + * Function: H5FD__mpio_init + * + * Purpose: Singleton to initialize global driver settings & resources. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +static herr_t +H5FD__mpio_init(void) +{ + char *env = NULL; + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_PACKAGE + + /* Check if MPI driver has been loaded dynamically */ + env = getenv(HDF5_DRIVER); + if (env && !strcmp(env, "mpio")) { + int mpi_initialized = 0; + + /* Initialize MPI if not already initialized */ + if (MPI_SUCCESS != MPI_Initialized(&mpi_initialized)) + HGOTO_ERROR(H5E_VFL, H5E_UNINITIALIZED, FAIL, "can't check if MPI is initialized"); + if (!mpi_initialized) { + if (MPI_SUCCESS != MPI_Init(NULL, NULL)) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize MPI"); + H5FD_mpi_self_initialized_s = true; } } - if (!H5FD_mpio_Debug_inited) { - const char *s; /* String for environment variables */ - - /* Allow MPI buf-and-file-type optimizations? */ - s = getenv("HDF5_MPI_OPT_TYPES"); - if (s && isdigit(*s)) - H5FD_mpi_opt_types_g = (0 == strtol(s, NULL, 0)) ? false : true; + /* Allow MPI buf-and-file-type optimizations? */ + env = getenv("HDF5_MPI_OPT_TYPES"); + if (env && isdigit(*env)) + H5FD_mpi_opt_types_g = (0 == strtol(env, NULL, 0)) ? false : true; #ifdef H5FDmpio_DEBUG - /* Clear the flag buffer */ - memset(H5FD_mpio_debug_flags_s, 0, sizeof(H5FD_mpio_debug_flags_s)); + /* Clear the flag buffer */ + memset(H5FD_mpio_debug_flags_s, 0, sizeof(H5FD_mpio_debug_flags_s)); - /* Retrieve MPI-IO debugging environment variable */ - s = getenv("H5FD_mpio_Debug"); - if (s) - H5FD__mpio_parse_debug_str(s); + /* Retrieve MPI-IO debugging environment variable */ + env = getenv("H5FD_mpio_Debug"); + if (env) + H5FD__mpio_parse_debug_str(env); #endif /* H5FDmpio_DEBUG */ - H5FD_mpio_Debug_inited++; - } /* end if */ - - /* Set return value */ - ret_value = H5FD_MPIO_g; + /* Indicate that driver is set up */ + H5FD_mpio_init_s = true; done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_mpio_init() */ +} /* end H5FD__mpio_init() */ /*--------------------------------------------------------------------------- * Function: H5FD__mpio_term * * Purpose: Shut down the VFD * - * Returns: Non-negative on success or negative on failure + * Returns: SUCCEED (Can't fail) * *--------------------------------------------------------------------------- */ @@ -338,19 +375,16 @@ H5FD__mpio_term(void) FUNC_ENTER_PACKAGE_NOERR /* Terminate MPI if the driver initialized it */ - if (H5FD_mpi_self_initialized) { + if (H5FD_mpi_self_initialized_s) { int mpi_finalized = 0; MPI_Finalized(&mpi_finalized); if (!mpi_finalized) MPI_Finalize(); - H5FD_mpi_self_initialized = false; + H5FD_mpi_self_initialized_s = false; } - /* Reset VFL ID */ - H5FD_MPIO_g = 0; - FUNC_LEAVE_NOAPI(SUCCEED) } /* end H5FD__mpio_term() */ @@ -398,6 +432,11 @@ H5Pset_fapl_mpio(hid_t fapl_id, MPI_Comm comm, MPI_Info info) if (MPI_COMM_NULL == comm) HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "MPI_COMM_NULL is not a valid communicator"); + /* Initialize driver, if it's not yet */ + if (!H5FD_mpio_init_s) + if (H5FD__mpio_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize driver"); + /* Set the MPI communicator and info object */ if (H5P_set(plist, H5F_ACS_MPI_PARAMS_COMM_NAME, &comm) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set MPI communicator"); @@ -451,6 +490,11 @@ H5Pget_fapl_mpio(hid_t fapl_id, MPI_Comm *comm /*out*/, MPI_Info *info /*out*/) if (H5FD_MPIO != H5P_peek_driver(plist)) HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "VFL driver is not MPI-I/O"); + /* Initialize driver, if it's not yet */ + if (!H5FD_mpio_init_s) + if (H5FD__mpio_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize driver"); + /* Get the MPI communicator and info object */ if (comm) if (H5P_get(plist, H5F_ACS_MPI_PARAMS_COMM_NAME, comm) < 0) @@ -510,6 +554,11 @@ H5Pset_dxpl_mpio(hid_t dxpl_id, H5FD_mpio_xfer_t xfer_mode) if (H5FD_MPIO_INDEPENDENT != xfer_mode && H5FD_MPIO_COLLECTIVE != xfer_mode) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "incorrect xfer_mode"); + /* Initialize driver, if it's not yet */ + if (!H5FD_mpio_init_s) + if (H5FD__mpio_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize driver"); + /* Set the transfer mode */ if (H5P_set(plist, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value"); @@ -543,6 +592,11 @@ H5Pget_dxpl_mpio(hid_t dxpl_id, H5FD_mpio_xfer_t *xfer_mode /*out*/) if (NULL == (plist = H5P_object_verify(dxpl_id, H5P_DATASET_XFER))) HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a dxpl"); + /* Initialize driver, if it's not yet */ + if (!H5FD_mpio_init_s) + if (H5FD__mpio_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize driver"); + /* Get the transfer mode */ if (xfer_mode) if (H5P_get(plist, H5D_XFER_IO_XFER_MODE_NAME, xfer_mode) < 0) @@ -582,6 +636,11 @@ H5Pset_dxpl_mpio_collective_opt(hid_t dxpl_id, H5FD_mpio_collective_opt_t opt_mo if (NULL == (plist = H5P_object_verify(dxpl_id, H5P_DATASET_XFER))) HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a dxpl"); + /* Initialize driver, if it's not yet */ + if (!H5FD_mpio_init_s) + if (H5FD__mpio_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize driver"); + /* Set the transfer mode */ if (H5P_set(plist, H5D_XFER_MPIO_COLLECTIVE_OPT_NAME, &opt_mode) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value"); @@ -620,6 +679,11 @@ H5Pset_dxpl_mpio_chunk_opt(hid_t dxpl_id, H5FD_mpio_chunk_opt_t opt_mode) if (NULL == (plist = H5P_object_verify(dxpl_id, H5P_DATASET_XFER))) HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a dxpl"); + /* Initialize driver, if it's not yet */ + if (!H5FD_mpio_init_s) + if (H5FD__mpio_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize driver"); + /* Set the transfer mode */ if (H5P_set(plist, H5D_XFER_MPIO_CHUNK_OPT_HARD_NAME, &opt_mode) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value"); @@ -656,6 +720,11 @@ H5Pset_dxpl_mpio_chunk_opt_num(hid_t dxpl_id, unsigned num_chunk_per_proc) if (NULL == (plist = H5P_object_verify(dxpl_id, H5P_DATASET_XFER))) HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a dxpl"); + /* Initialize driver, if it's not yet */ + if (!H5FD_mpio_init_s) + if (H5FD__mpio_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize driver"); + /* Set the transfer mode */ if (H5P_set(plist, H5D_XFER_MPIO_CHUNK_OPT_NUM_NAME, &num_chunk_per_proc) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value"); @@ -695,6 +764,11 @@ H5Pset_dxpl_mpio_chunk_opt_ratio(hid_t dxpl_id, unsigned percent_num_proc_per_ch if (NULL == (plist = H5P_object_verify(dxpl_id, H5P_DATASET_XFER))) HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a dxpl"); + /* Initialize driver, if it's not yet */ + if (!H5FD_mpio_init_s) + if (H5FD__mpio_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize driver"); + /* Set the transfer mode */ if (H5P_set(plist, H5D_XFER_MPIO_CHUNK_OPT_RATIO_NAME, &percent_num_proc_per_chunk) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value"); @@ -824,11 +898,16 @@ H5FD__mpio_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t H5_ATTR FUNC_ENTER_PACKAGE + /* Initialize driver, if it's not yet */ + if (!H5FD_mpio_init_s) + if (H5FD__mpio_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, NULL, "can't initialize driver"); + /* Get a pointer to the fapl */ if (NULL == (plist = H5P_object_verify(fapl_id, H5P_FILE_ACCESS))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list"); - if (H5FD_mpi_self_initialized) { + if (H5FD_mpi_self_initialized_s) { comm = MPI_COMM_WORLD; } else { @@ -3738,11 +3817,16 @@ H5FD__mpio_delete(const char *filename, hid_t fapl_id) assert(filename); + /* Initialize driver, if it's not yet */ + if (!H5FD_mpio_init_s) + if (H5FD__mpio_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize driver"); + if (NULL == (plist = H5P_object_verify(fapl_id, H5P_FILE_ACCESS))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list"); assert(H5FD_MPIO == H5P_peek_driver(plist)); - if (H5FD_mpi_self_initialized) { + if (H5FD_mpi_self_initialized_s) { comm = MPI_COMM_WORLD; } else { diff --git a/src/H5FDmpio.h b/src/H5FDmpio.h index 453b58221a3..1ae96ab517c 100644 --- a/src/H5FDmpio.h +++ b/src/H5FDmpio.h @@ -16,10 +16,13 @@ #ifndef H5FDmpio_H #define H5FDmpio_H +/* Public header files */ +#include "H5FDpublic.h" /* File drivers */ + #ifdef H5_HAVE_PARALLEL -/** Initializer for the mpio VFD */ -#define H5FD_MPIO (H5FDperform_init(H5FD_mpio_init)) +/** ID for the mpio VFD */ +#define H5FD_MPIO (H5OPEN H5FD_MPIO_id_g) #else @@ -35,19 +38,19 @@ #define H5FDmpio_DEBUG #endif -/* Global var whose value comes from environment variable */ -/* (Defined in H5FDmpio.c) */ -H5_DLLVAR hbool_t H5FD_mpi_opt_types_g; - #ifdef __cplusplus extern "C" { #endif +/* Global var whose value comes from environment variable */ +/* (Defined in H5FDmpio.c) */ +H5_DLLVAR hbool_t H5FD_mpi_opt_types_g; + /** @private * - * \brief Private initializer for the mpio VFD + * \brief ID for the mpio VFD */ -H5_DLL hid_t H5FD_mpio_init(void); +H5_DLLVAR hid_t H5FD_MPIO_id_g; /** * \ingroup FAPL diff --git a/src/H5FDmulti.c b/src/H5FDmulti.c index 82c36a2df78..72d7fd4c455 100644 --- a/src/H5FDmulti.c +++ b/src/H5FDmulti.c @@ -72,9 +72,6 @@ #define H5FD_MULT_MAX_FILE_NAME_LEN 1024 -/* The driver identification number, initialized at runtime */ -static hid_t H5FD_MULTI_g = 0; - /* Driver-specific file access properties */ typedef struct H5FD_multi_fapl_t { H5FD_mem_t memb_map[H5FD_MEM_NTYPES]; /*memory usage map */ @@ -119,7 +116,6 @@ static int compute_next(H5FD_multi_t *file); static int open_members(H5FD_multi_t *file); /* Callback prototypes */ -static herr_t H5FD_multi_term(void); static hsize_t H5FD_multi_sb_size(H5FD_t *file); static herr_t H5FD_multi_sb_encode(H5FD_t *file, char *name /*out*/, unsigned char *buf /*out*/); static herr_t H5FD_multi_sb_decode(H5FD_t *file, const char *name, const unsigned char *buf); @@ -150,13 +146,13 @@ static herr_t H5FD_multi_ctl(H5FD_t *_file, uint64_t op_code, uint64_t flags, c void **output); /* The class struct */ -static const H5FD_class_t H5FD_multi_g = { +const H5FD_class_t H5FD_multi_g = { H5FD_CLASS_VERSION, /* struct version */ H5_VFD_MULTI, /* value */ "multi", /* name */ HADDR_MAX, /* maxaddr */ H5F_CLOSE_WEAK, /* fc_degree */ - H5FD_multi_term, /* terminate */ + NULL, /* terminate */ H5FD_multi_sb_size, /* sb_size */ H5FD_multi_sb_encode, /* sb_encode */ H5FD_multi_sb_decode, /* sb_decode */ @@ -193,47 +189,6 @@ static const H5FD_class_t H5FD_multi_g = { H5FD_FLMAP_DEFAULT /* fl_map */ }; -/*------------------------------------------------------------------------- - * Function: H5FD_multi_init - * - * Purpose: Initialize this driver by registering the driver with the - * library. - * - * Return: Success: The driver ID for the multi driver - * Failure: H5I_INVALID_HID - * - *------------------------------------------------------------------------- - */ -hid_t -H5FD_multi_init(void) -{ - /* Clear the error stack */ - H5Eclear2(H5E_DEFAULT); - - if (H5I_VFL != H5Iget_type(H5FD_MULTI_g)) - H5FD_MULTI_g = H5FDregister(&H5FD_multi_g); - - return H5FD_MULTI_g; -} /* end H5FD_multi_init() */ - -/*--------------------------------------------------------------------------- - * Function: H5FD_multi_term - * - * Purpose: Shut down the VFD - * - * Returns: Non-negative on success or negative on failure - * - *--------------------------------------------------------------------------- - */ -static herr_t -H5FD_multi_term(void) -{ - /* Reset VFL ID */ - H5FD_MULTI_g = 0; - - return 0; -} /* end H5FD_multi_term() */ - /*------------------------------------------------------------------------- * Function: H5Pset_fapl_split * @@ -251,15 +206,14 @@ herr_t H5Pset_fapl_split(hid_t fapl, const char *meta_ext, hid_t meta_plist_id, const char *raw_ext, hid_t raw_plist_id) { - H5FD_multi_fapl_t fa; - static const char *func = "H5Pset_fapl_split"; /* Function Name for error reporting */ + H5FD_multi_fapl_t fa; /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); if (H5FD_split_populate_config(meta_ext, meta_plist_id, raw_ext, raw_plist_id, true, &fa) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_CANTSET, "can't setup split driver configuration", - -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_CANTSET, + "can't setup split driver configuration", -1); return H5Pset_driver(fapl, H5FD_MULTI, &fa); } @@ -341,17 +295,16 @@ herr_t H5Pset_fapl_multi(hid_t fapl_id, const H5FD_mem_t *memb_map, const hid_t *memb_fapl, const char *const *memb_name, const haddr_t *memb_addr, hbool_t relax) { - H5FD_multi_fapl_t fa; - static const char *func = "H5FDset_fapl_multi"; /* Function Name for error reporting */ + H5FD_multi_fapl_t fa; /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); /* Check arguments and supply default values */ if (H5I_GENPROP_LST != H5Iget_type(fapl_id) || true != H5Pisa_class(fapl_id, H5P_FILE_ACCESS)) - H5Epush_ret(func, H5E_ERR_CLS, H5E_PLIST, H5E_BADVALUE, "not an access list", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_PLIST, H5E_BADVALUE, "not an access list", -1); if (H5FD_multi_populate_config(memb_map, memb_fapl, memb_name, memb_addr, relax, &fa) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_CANTSET, "can't setup driver configuration", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_CANTSET, "can't setup driver configuration", -1); return H5Pset_driver(fapl_id, H5FD_MULTI, &fa); } @@ -376,15 +329,14 @@ H5Pget_fapl_multi(hid_t fapl_id, H5FD_mem_t *memb_map /*out*/, hid_t *memb_fapl const H5FD_multi_fapl_t *fa; H5FD_multi_fapl_t default_fa; H5FD_mem_t mt; - static const char *func = "H5FDget_fapl_multi"; /* Function Name for error reporting */ /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); if (H5I_GENPROP_LST != H5Iget_type(fapl_id) || true != H5Pisa_class(fapl_id, H5P_FILE_ACCESS)) - H5Epush_ret(func, H5E_ERR_CLS, H5E_PLIST, H5E_BADTYPE, "not an access list", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_PLIST, H5E_BADTYPE, "not an access list", -1); if (H5FD_MULTI != H5Pget_driver(fapl_id)) - H5Epush_ret(func, H5E_ERR_CLS, H5E_PLIST, H5E_BADVALUE, "incorrect VFL driver", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_PLIST, H5E_BADVALUE, "incorrect VFL driver", -1); H5E_BEGIN_TRY { fa = (const H5FD_multi_fapl_t *)H5Pget_driver_info(fapl_id); @@ -392,8 +344,8 @@ H5Pget_fapl_multi(hid_t fapl_id, H5FD_mem_t *memb_map /*out*/, hid_t *memb_fapl H5E_END_TRY if (!fa || (H5P_FILE_ACCESS_DEFAULT == fapl_id)) { if (H5FD_multi_populate_config(NULL, NULL, NULL, NULL, true, &default_fa) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_VFL, H5E_CANTSET, "can't setup default driver configuration", - -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_VFL, H5E_CANTSET, + "can't setup default driver configuration", -1); fa = &default_fa; } @@ -438,7 +390,6 @@ static herr_t H5FD_split_populate_config(const char *meta_ext, hid_t meta_plist_id, const char *raw_ext, hid_t raw_plist_id, bool relax, H5FD_multi_fapl_t *fa_out) { - static const char *func = "H5FD_split_populate_config"; /* Function Name for error reporting */ static char meta_name_g[H5FD_MULT_MAX_FILE_NAME_LEN]; /* Static scratch buffer to store metadata member name */ static char @@ -510,18 +461,20 @@ H5FD_split_populate_config(const char *meta_ext, hid_t meta_plist_id, const char /* Map usage type */ H5FD_mem_t mmt = _memb_map[mt]; if (mmt < 0 || mmt >= H5FD_MEM_NTYPES) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADRANGE, "file resource type out of range", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADRANGE, "file resource type out of range", + -1); /* * All members of MEMB_FAPL must be either defaults or actual file * access property lists. */ if (H5P_DEFAULT != _memb_fapl[mmt] && true != H5Pisa_class(_memb_fapl[mmt], H5P_FILE_ACCESS)) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "file resource type incorrect", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "file resource type incorrect", + -1); /* All names must be defined */ if (!_memb_name[mmt] || !_memb_name[mmt][0]) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "file resource type not set", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "file resource type not set", -1); } END_MEMBERS @@ -541,7 +494,7 @@ H5FD_split_populate_config(const char *meta_ext, hid_t meta_plist_id, const char if (fa_out->memb_fapl[mt] == H5P_DEFAULT) { fa_out->memb_fapl[mt] = H5Pcreate(H5P_FILE_ACCESS); if (H5Pset_fapl_sec2(fa_out->memb_fapl[mt]) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_CANTSET, + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_CANTSET, "can't set sec2 driver on member FAPL", -1); } } @@ -564,7 +517,6 @@ static herr_t H5FD_multi_populate_config(const H5FD_mem_t *memb_map, const hid_t *memb_fapl, const char *const *memb_name, const haddr_t *memb_addr, bool relax, H5FD_multi_fapl_t *fa_out) { - static const char *func = "H5FD_multi_populate_config"; /* Function Name for error reporting */ static const char *letters = "Xsbrglo"; static char _memb_name_g[H5FD_MEM_NTYPES][16]; /* Static scratch buffer to store member names */ H5FD_mem_t mt, mmt; @@ -585,7 +537,7 @@ H5FD_multi_populate_config(const H5FD_mem_t *memb_map, const hid_t *memb_fapl, c for (mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; mt = (H5FD_mem_t)(mt + 1)) { _memb_fapl[mt] = H5Pcreate(H5P_FILE_ACCESS); if (H5Pset_fapl_sec2(_memb_fapl[mt]) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_CANTSET, + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_CANTSET, "can't set sec2 driver on member FAPL", -1); } memb_fapl = _memb_fapl; @@ -608,7 +560,8 @@ H5FD_multi_populate_config(const H5FD_mem_t *memb_map, const hid_t *memb_fapl, c /* Map usage type */ mmt = memb_map[mt]; if (mmt < 0 || mmt >= H5FD_MEM_NTYPES) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADRANGE, "file resource type out of range", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADRANGE, "file resource type out of range", + -1); if (H5FD_MEM_DEFAULT == mmt) mmt = mt; @@ -617,11 +570,12 @@ H5FD_multi_populate_config(const H5FD_mem_t *memb_map, const hid_t *memb_fapl, c * access property lists. */ if (H5P_DEFAULT != memb_fapl[mmt] && true != H5Pisa_class(memb_fapl[mmt], H5P_FILE_ACCESS)) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "file resource type incorrect", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "file resource type incorrect", + -1); /* All names must be defined */ if (!memb_name[mmt] || !memb_name[mmt][0]) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "file resource type not set", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "file resource type not set", -1); } /* @@ -640,7 +594,7 @@ H5FD_multi_populate_config(const H5FD_mem_t *memb_map, const hid_t *memb_fapl, c if (fa_out->memb_fapl[mt] == H5P_DEFAULT) { fa_out->memb_fapl[mt] = H5Pcreate(H5P_FILE_ACCESS); if (H5Pset_fapl_sec2(fa_out->memb_fapl[mt]) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_CANTSET, + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_CANTSET, "can't set sec2 driver on member FAPL", -1); } } @@ -712,13 +666,12 @@ H5FD_multi_sb_size(H5FD_t *_file) static herr_t H5FD_multi_sb_encode(H5FD_t *_file, char *name /*out*/, unsigned char *buf /*out*/) { - H5FD_multi_t *file = (H5FD_multi_t *)_file; - haddr_t memb_eoa; - unsigned char *p; - size_t nseen; - size_t i; - H5FD_mem_t m; - static const char *func = "H5FD_multi_sb_encode"; /* Function Name for error reporting */ + H5FD_multi_t *file = (H5FD_multi_t *)_file; + haddr_t memb_eoa; + unsigned char *p; + size_t nseen; + size_t i; + H5FD_mem_t m; /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); @@ -754,7 +707,8 @@ H5FD_multi_sb_encode(H5FD_t *_file, char *name /*out*/, unsigned char *buf /*out } END_MEMBERS if (H5Tconvert(H5T_NATIVE_HADDR, H5T_STD_U64LE, nseen * 2, buf + 8, NULL, H5P_DEFAULT) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_DATATYPE, H5E_CANTCONVERT, "can't convert superblock info", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_DATATYPE, H5E_CANTCONVERT, "can't convert superblock info", + -1); /* Encode all name templates */ p = buf + 8 + nseen * 2 * 8; @@ -790,25 +744,24 @@ H5FD_multi_sb_encode(H5FD_t *_file, char *name /*out*/, unsigned char *buf /*out static herr_t H5FD_multi_sb_decode(H5FD_t *_file, const char *name, const unsigned char *buf) { - H5FD_multi_t *file = (H5FD_multi_t *)_file; - char x[2 * H5FD_MEM_NTYPES * 8]; - H5FD_mem_t map[H5FD_MEM_NTYPES]; - int i; - size_t nseen = 0; - bool map_changed = false; - bool in_use[H5FD_MEM_NTYPES]; - const char *memb_name[H5FD_MEM_NTYPES]; - haddr_t memb_addr[H5FD_MEM_NTYPES]; - haddr_t memb_eoa[H5FD_MEM_NTYPES]; - haddr_t *ap; - static const char *func = "H5FD_multi_sb_decode"; /* Function Name for error reporting */ + H5FD_multi_t *file = (H5FD_multi_t *)_file; + char x[2 * H5FD_MEM_NTYPES * 8]; + H5FD_mem_t map[H5FD_MEM_NTYPES]; + int i; + size_t nseen = 0; + bool map_changed = false; + bool in_use[H5FD_MEM_NTYPES]; + const char *memb_name[H5FD_MEM_NTYPES]; + haddr_t memb_addr[H5FD_MEM_NTYPES]; + haddr_t memb_eoa[H5FD_MEM_NTYPES]; + haddr_t *ap; /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); /* Make sure the name/version number is correct */ if (strcmp(name, "NCSAmult") != 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_FILE, H5E_BADVALUE, "invalid multi superblock", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_FILE, H5E_BADVALUE, "invalid multi superblock", -1); /* Set default values */ ALL_MEMBERS (mt) { @@ -840,7 +793,8 @@ H5FD_multi_sb_decode(H5FD_t *_file, const char *name, const unsigned char *buf) memcpy(x, buf, (nseen * 2 * 8)); buf += nseen * 2 * 8; if (H5Tconvert(H5T_STD_U64LE, H5T_NATIVE_HADDR, nseen * 2, x, NULL, H5P_DEFAULT) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_DATATYPE, H5E_CANTCONVERT, "can't convert superblock info", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_DATATYPE, H5E_CANTCONVERT, "can't convert superblock info", + -1); ap = (haddr_t *)((void *)x); /* Extra (void *) cast to quiet "cast to create alignment" warning - 2019/07/05, QAK */ UNIQUE_MEMBERS (map, mt) { @@ -897,17 +851,17 @@ H5FD_multi_sb_decode(H5FD_t *_file, const char *name, const unsigned char *buf) } END_MEMBERS if (compute_next(file) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "compute_next() failed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "compute_next() failed", -1); /* Open all necessary files */ if (open_members(file) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "open_members() failed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "open_members() failed", -1); /* Set the EOA marker for all open files */ UNIQUE_MEMBERS (file->fa.memb_map, mt) { if (file->memb[mt]) if (H5FDset_eoa(file->memb[mt], mt, memb_eoa[mt]) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_CANTSET, "set_eoa() failed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_CANTSET, "set_eoa() failed", -1); /* Save the individual EOAs in one place for later comparison (in H5FD_multi_set_eoa) */ @@ -960,7 +914,6 @@ H5FD_multi_fapl_copy(const void *_old_fa) const H5FD_multi_fapl_t *old_fa = (const H5FD_multi_fapl_t *)_old_fa; H5FD_multi_fapl_t *new_fa = (H5FD_multi_fapl_t *)calloc(1, sizeof(H5FD_multi_fapl_t)); int nerrors = 0; - static const char *func = "H5FD_multi_fapl_copy"; /* Function Name for error reporting */ assert(new_fa); @@ -995,7 +948,7 @@ H5FD_multi_fapl_copy(const void *_old_fa) } END_MEMBERS free(new_fa); - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "can't release object on error", NULL); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "can't release object on error", NULL); } return new_fa; } @@ -1014,8 +967,7 @@ H5FD_multi_fapl_copy(const void *_old_fa) static herr_t H5FD_multi_fapl_free(void *_fa) { - H5FD_multi_fapl_t *fa = (H5FD_multi_fapl_t *)_fa; - static const char *func = "H5FD_multi_fapl_free"; /* Function Name for error reporting */ + H5FD_multi_fapl_t *fa = (H5FD_multi_fapl_t *)_fa; /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); @@ -1023,7 +975,8 @@ H5FD_multi_fapl_free(void *_fa) ALL_MEMBERS (mt) { if (fa->memb_fapl[mt] >= 0) if (H5Idec_ref(fa->memb_fapl[mt]) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_FILE, H5E_CANTCLOSEOBJ, "can't close property list", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_FILE, H5E_CANTCLOSEOBJ, "can't close property list", + -1); if (fa->memb_name[mt]) free(fa->memb_name[mt]); } @@ -1053,16 +1006,15 @@ H5FD_multi_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr hid_t close_fapl = -1; const H5FD_multi_fapl_t *fa; H5FD_mem_t m; - static const char *func = "H5FD_multi_open"; /* Function Name for error reporting */ /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); /* Check arguments */ if (!name || !*name) - H5Epush_ret(func, H5E_ERR_CLS, H5E_ARGS, H5E_BADVALUE, "invalid file name", NULL); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_ARGS, H5E_BADVALUE, "invalid file name", NULL); if (0 == maxaddr || HADDR_UNDEF == maxaddr) - H5Epush_ret(func, H5E_ERR_CLS, H5E_ARGS, H5E_BADRANGE, "bogus maxaddr", NULL); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_ARGS, H5E_BADRANGE, "bogus maxaddr", NULL); /* * Initialize the file from the file access properties, using default @@ -1071,7 +1023,7 @@ H5FD_multi_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr * in H5FD_multi_t. */ if (NULL == (file = (H5FD_multi_t *)calloc((size_t)1, sizeof(H5FD_multi_t)))) - H5Epush_ret(func, H5E_ERR_CLS, H5E_RESOURCE, H5E_NOSPACE, "memory allocation failed", NULL); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_RESOURCE, H5E_NOSPACE, "memory allocation failed", NULL); H5E_BEGIN_TRY { fa = (const H5FD_multi_fapl_t *)H5Pget_driver_info(fapl_id); @@ -1083,11 +1035,11 @@ H5FD_multi_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr close_fapl = fapl_id = H5Pcreate(H5P_FILE_ACCESS); if (env && !strcmp(env, "split")) { if (H5Pset_fapl_split(fapl_id, NULL, H5P_DEFAULT, NULL, H5P_DEFAULT) < 0) - H5Epush_goto(func, H5E_ERR_CLS, H5E_FILE, H5E_CANTSET, "can't set property value", error); + H5Epush_goto(__func__, H5E_ERR_CLS, H5E_FILE, H5E_CANTSET, "can't set property value", error); } else { if (H5Pset_fapl_multi(fapl_id, NULL, NULL, NULL, NULL, true) < 0) - H5Epush_goto(func, H5E_ERR_CLS, H5E_FILE, H5E_CANTSET, "can't set property value", error); + H5Epush_goto(__func__, H5E_ERR_CLS, H5E_FILE, H5E_CANTSET, "can't set property value", error); } fa = (const H5FD_multi_fapl_t *)H5Pget_driver_info(fapl_id); @@ -1110,13 +1062,14 @@ H5FD_multi_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr file->name = my_strdup(name); if (close_fapl >= 0) if (H5Pclose(close_fapl) < 0) - H5Epush_goto(func, H5E_ERR_CLS, H5E_FILE, H5E_CANTCLOSEOBJ, "can't close property list", error); + H5Epush_goto(__func__, H5E_ERR_CLS, H5E_FILE, H5E_CANTCLOSEOBJ, "can't close property list", + error); /* Compute derived properties and open member files */ if (compute_next(file) < 0) - H5Epush_goto(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "compute_next() failed", error); + H5Epush_goto(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "compute_next() failed", error); if (open_members(file) < 0) - H5Epush_goto(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "open_members() failed", error); + H5Epush_goto(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "open_members() failed", error); /* We must have opened at least the superblock file */ if (H5FD_MEM_DEFAULT == (m = file->fa.memb_map[H5FD_MEM_SUPER])) @@ -1161,9 +1114,8 @@ H5FD_multi_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr static herr_t H5FD_multi_close(H5FD_t *_file) { - H5FD_multi_t *file = (H5FD_multi_t *)_file; - int nerrors = 0; - static const char *func = "H5FD_multi_close"; /* Function Name for error reporting */ + H5FD_multi_t *file = (H5FD_multi_t *)_file; + int nerrors = 0; /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); @@ -1181,7 +1133,7 @@ H5FD_multi_close(H5FD_t *_file) } END_MEMBERS if (nerrors) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "error closing member files", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "error closing member files", -1); /* Clean up other stuff */ ALL_MEMBERS (mt) { @@ -1311,7 +1263,6 @@ H5FD_multi_get_eoa(const H5FD_t *_file, H5FD_mem_t type) { const H5FD_multi_t *file = (const H5FD_multi_t *)_file; haddr_t eoa = 0; - static const char *func = "H5FD_multi_get_eoa"; /* Function Name for error reporting */ /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); @@ -1335,8 +1286,8 @@ H5FD_multi_get_eoa(const H5FD_t *_file, H5FD_mem_t type) H5E_END_TRY if (HADDR_UNDEF == memb_eoa) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "member file has unknown eoa", - HADDR_UNDEF); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, + "member file has unknown eoa", HADDR_UNDEF); if (memb_eoa > 0) memb_eoa += file->fa.memb_addr[mt]; } @@ -1349,7 +1300,7 @@ H5FD_multi_get_eoa(const H5FD_t *_file, H5FD_mem_t type) assert(HADDR_UNDEF != memb_eoa); } else { - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "bad eoa", HADDR_UNDEF); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "bad eoa", HADDR_UNDEF); } if (memb_eoa > eoa) @@ -1371,7 +1322,7 @@ H5FD_multi_get_eoa(const H5FD_t *_file, H5FD_mem_t type) H5E_END_TRY if (HADDR_UNDEF == eoa) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "member file has unknown eoa", + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "member file has unknown eoa", HADDR_UNDEF); if (eoa > 0) eoa += file->fa.memb_addr[mmt]; @@ -1385,7 +1336,7 @@ H5FD_multi_get_eoa(const H5FD_t *_file, H5FD_mem_t type) assert(HADDR_UNDEF != eoa); } else { - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "bad eoa", HADDR_UNDEF); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "bad eoa", HADDR_UNDEF); } } @@ -1409,10 +1360,9 @@ H5FD_multi_get_eoa(const H5FD_t *_file, H5FD_mem_t type) static herr_t H5FD_multi_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t eoa) { - H5FD_multi_t *file = (H5FD_multi_t *)_file; - H5FD_mem_t mmt; - herr_t status; - static const char *func = "H5FD_multi_set_eoa"; /* Function Name for error reporting */ + H5FD_multi_t *file = (H5FD_multi_t *)_file; + H5FD_mem_t mmt; + herr_t status; /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); @@ -1448,7 +1398,7 @@ H5FD_multi_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t eoa) } H5E_END_TRY if (status < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_FILE, H5E_BADVALUE, "member H5FDset_eoa failed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_FILE, H5E_BADVALUE, "member H5FDset_eoa failed", -1); return 0; } /* end H5FD_multi_set_eoa() */ @@ -1472,7 +1422,6 @@ H5FD_multi_get_eof(const H5FD_t *_file, H5FD_mem_t type) { const H5FD_multi_t *file = (const H5FD_multi_t *)_file; haddr_t eof = 0; - static const char *func = "H5FD_multi_get_eof"; /* Function Name for error reporting */ /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); @@ -1490,8 +1439,8 @@ H5FD_multi_get_eof(const H5FD_t *_file, H5FD_mem_t type) H5E_END_TRY if (HADDR_UNDEF == tmp_eof) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "member file has unknown eof", - HADDR_UNDEF); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, + "member file has unknown eof", HADDR_UNDEF); if (tmp_eof > 0) tmp_eof += file->fa.memb_addr[mt]; } @@ -1504,7 +1453,7 @@ H5FD_multi_get_eof(const H5FD_t *_file, H5FD_mem_t type) assert(HADDR_UNDEF != tmp_eof); } else { - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "bad eof", HADDR_UNDEF); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "bad eof", HADDR_UNDEF); } if (tmp_eof > eof) eof = tmp_eof; @@ -1526,7 +1475,7 @@ H5FD_multi_get_eof(const H5FD_t *_file, H5FD_mem_t type) H5E_END_TRY if (HADDR_UNDEF == eof) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "member file has unknown eof", + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "member file has unknown eof", HADDR_UNDEF); if (eof > 0) eof += file->fa.memb_addr[mmt]; @@ -1540,7 +1489,7 @@ H5FD_multi_get_eof(const H5FD_t *_file, H5FD_mem_t type) assert(HADDR_UNDEF != eof); } else { - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "bad eof", HADDR_UNDEF); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "bad eof", HADDR_UNDEF); } } return eof; @@ -1558,16 +1507,15 @@ H5FD_multi_get_eof(const H5FD_t *_file, H5FD_mem_t type) static herr_t H5FD_multi_get_handle(H5FD_t *_file, hid_t fapl, void **file_handle) { - H5FD_multi_t *file = (H5FD_multi_t *)_file; - H5FD_mem_t type, mmt; - static const char *func = "H5FD_multi_get_handle"; /* Function Name for error reporting */ + H5FD_multi_t *file = (H5FD_multi_t *)_file; + H5FD_mem_t type, mmt; /* Get data type for multi driver */ if (H5Pget_multi_type(fapl, &type) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "can't get data type for multi driver", + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "can't get data type for multi driver", -1); if (type < H5FD_MEM_DEFAULT || type >= H5FD_MEM_NTYPES) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "data type is out of range", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "data type is out of range", -1); mmt = file->fa.memb_map[type]; if (H5FD_MEM_DEFAULT == mmt) mmt = type; @@ -1589,10 +1537,9 @@ H5FD_multi_get_handle(H5FD_t *_file, hid_t fapl, void **file_handle) static haddr_t H5FD_multi_alloc(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size) { - H5FD_multi_t *file = (H5FD_multi_t *)_file; - H5FD_mem_t mmt; - haddr_t addr; - static const char *func = "H5FD_multi_alloc"; /* Function Name for error reporting */ + H5FD_multi_t *file = (H5FD_multi_t *)_file; + H5FD_mem_t mmt; + haddr_t addr; mmt = file->fa.memb_map[type]; if (H5FD_MEM_DEFAULT == mmt) @@ -1608,23 +1555,10 @@ H5FD_multi_alloc(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size) } if (HADDR_UNDEF == (addr = H5FDalloc(file->memb[mmt], mmt, dxpl_id, size))) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "member file can't alloc", HADDR_UNDEF); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "member file can't alloc", + HADDR_UNDEF); addr += file->fa.memb_addr[mmt]; - /*#ifdef TMP - if ( addr + size > file->eoa ) { - - if ( H5FD_multi_set_eoa(_file, addr + size) < 0 ) { - - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, \ - "can't set eoa", HADDR_UNDEF); - } - } - #else - if ( addr + size > file->eoa ) - file->eoa = addr + size; - #endif */ - return addr; } @@ -1758,42 +1692,9 @@ H5FD_multi_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, si static herr_t H5FD_multi_flush(H5FD_t *_file, hid_t dxpl_id, bool closing) { - H5FD_multi_t *file = (H5FD_multi_t *)_file; - H5FD_mem_t mt; - int nerrors = 0; - static const char *func = "H5FD_multi_flush"; /* Function Name for error reporting */ - -#if 0 - H5FD_mem_t mmt; - - /* Debugging stuff... */ - fprintf(stderr, "multifile access information:\n"); - - /* print the map */ - fprintf(stderr, " map="); - for (mt=1; mtmemb_map[mt]; - if (H5FD_MEM_DEFAULT==mmt) mmt = mt; - fprintf(stderr, "%s%d", 1==mt?"":",", (int)mmt); - } - fprintf(stderr, "\n"); - - /* print info about each file */ - fprintf(stderr, " File Starting Allocated Next Member\n"); - fprintf(stderr, " Number Address Size Address Name\n"); - fprintf(stderr, " ------ -------------------- -------------------- -------------------- ------------------------------\n"); - - for (mt=1; mtmemb_addr[mt]) { - haddr_t eoa = H5FDget_eoa(file->memb[mt], mt); - fprintf(stderr, " %6d %20llu %20llu %20llu %s\n", - (int)mt, (unsigned long long)(file->memb_addr[mt]), - (unsigned long long)eoa, - (unsigned long long)(file->memb_next[mt]), - file->memb_name[mt]); - } - } -#endif + H5FD_multi_t *file = (H5FD_multi_t *)_file; + H5FD_mem_t mt; + int nerrors = 0; /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); @@ -1810,7 +1711,7 @@ H5FD_multi_flush(H5FD_t *_file, hid_t dxpl_id, bool closing) } } if (nerrors) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "error flushing member files", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "error flushing member files", -1); return 0; } @@ -1828,10 +1729,9 @@ H5FD_multi_flush(H5FD_t *_file, hid_t dxpl_id, bool closing) static herr_t H5FD_multi_truncate(H5FD_t *_file, hid_t dxpl_id, bool closing) { - H5FD_multi_t *file = (H5FD_multi_t *)_file; - H5FD_mem_t mt; - int nerrors = 0; - static const char *func = "H5FD_multi_truncate"; /* Function Name for error reporting */ + H5FD_multi_t *file = (H5FD_multi_t *)_file; + H5FD_mem_t mt; + int nerrors = 0; /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); @@ -1848,7 +1748,7 @@ H5FD_multi_truncate(H5FD_t *_file, hid_t dxpl_id, bool closing) } } if (nerrors) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "error truncating member files", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "error truncating member files", -1); return 0; } /* end H5FD_multi_truncate() */ @@ -1869,10 +1769,9 @@ H5FD_multi_truncate(H5FD_t *_file, hid_t dxpl_id, bool closing) static herr_t H5FD_multi_lock(H5FD_t *_file, bool rw) { - H5FD_multi_t *file = (H5FD_multi_t *)_file; - int nerrors = 0; - H5FD_mem_t out_mt = H5FD_MEM_DEFAULT; - static const char *func = "H5FD_multi_unlock"; /* Function Name for error reporting */ + H5FD_multi_t *file = (H5FD_multi_t *)_file; + int nerrors = 0; + H5FD_mem_t out_mt = H5FD_MEM_DEFAULT; /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); @@ -1908,7 +1807,7 @@ H5FD_multi_lock(H5FD_t *_file, bool rw) } /* end if */ if (nerrors) - H5Epush_ret(func, H5E_ERR_CLS, H5E_VFL, H5E_CANTLOCKFILE, "error locking member files", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_VFL, H5E_CANTLOCKFILE, "error locking member files", -1); return 0; } /* H5FD_multi_lock() */ @@ -1928,9 +1827,8 @@ H5FD_multi_lock(H5FD_t *_file, bool rw) static herr_t H5FD_multi_unlock(H5FD_t *_file) { - H5FD_multi_t *file = (H5FD_multi_t *)_file; - int nerrors = 0; - static const char *func = "H5FD_multi_unlock"; /* Function Name for error reporting */ + H5FD_multi_t *file = (H5FD_multi_t *)_file; + int nerrors = 0; /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); @@ -1943,7 +1841,7 @@ H5FD_multi_unlock(H5FD_t *_file) END_MEMBERS if (nerrors) - H5Epush_ret(func, H5E_ERR_CLS, H5E_VFL, H5E_CANTUNLOCKFILE, "error unlocking member files", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_VFL, H5E_CANTUNLOCKFILE, "error unlocking member files", -1); return 0; } /* H5FD_multi_unlock() */ @@ -2010,10 +1908,9 @@ H5_GCC_CLANG_DIAG_OFF("format-nonliteral") static int open_members(H5FD_multi_t *file) { - char tmp[H5FD_MULT_MAX_FILE_NAME_LEN]; - int nerrors = 0; - int nchars; - static const char *func = "(H5FD_multi)open_members"; /* Function Name for error reporting */ + char tmp[H5FD_MULT_MAX_FILE_NAME_LEN]; + int nerrors = 0; + int nchars; /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); @@ -2025,7 +1922,7 @@ open_members(H5FD_multi_t *file) nchars = snprintf(tmp, sizeof(tmp), file->fa.memb_name[mt], file->name); if (nchars < 0 || nchars >= (int)sizeof(tmp)) - H5Epush_ret(func, H5E_ERR_CLS, H5E_VFL, H5E_BADVALUE, + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_VFL, H5E_BADVALUE, "filename is too long and would be truncated", -1); H5E_BEGIN_TRY @@ -2040,7 +1937,7 @@ open_members(H5FD_multi_t *file) } END_MEMBERS if (nerrors) - H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "error opening member files", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "error opening member files", -1); return 0; } @@ -2063,7 +1960,6 @@ H5FD_multi_delete(const char *filename, hid_t fapl_id) int nchars; const H5FD_multi_fapl_t *fa; H5FD_multi_fapl_t default_fa; - static const char *func = "H5FD_multi_delete"; /* Function Name for error reporting */ /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); @@ -2081,11 +1977,13 @@ H5FD_multi_delete(const char *filename, hid_t fapl_id) if (env && !strcmp(env, "split")) { if (H5FD_split_populate_config(NULL, H5P_DEFAULT, NULL, H5P_DEFAULT, true, &default_fa) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_VFL, H5E_CANTSET, "can't setup driver configuration", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_VFL, H5E_CANTSET, "can't setup driver configuration", + -1); } else { if (H5FD_multi_populate_config(NULL, NULL, NULL, NULL, true, &default_fa) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_VFL, H5E_CANTSET, "can't setup driver configuration", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_VFL, H5E_CANTSET, "can't setup driver configuration", + -1); } fa = &default_fa; @@ -2099,11 +1997,11 @@ H5FD_multi_delete(const char *filename, hid_t fapl_id) nchars = snprintf(full_filename, sizeof(full_filename), fa->memb_name[mt], filename); if (nchars < 0 || nchars >= (int)sizeof(full_filename)) - H5Epush_ret(func, H5E_ERR_CLS, H5E_VFL, H5E_BADVALUE, + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_VFL, H5E_BADVALUE, "filename is too long and would be truncated", -1); if (H5FDdelete(full_filename, fa->memb_fapl[mt]) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_VFL, H5E_BADVALUE, "error deleting member files", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_VFL, H5E_BADVALUE, "error deleting member files", -1); } END_MEMBERS @@ -2134,9 +2032,8 @@ H5_GCC_CLANG_DIAG_ON("format-nonliteral") static herr_t H5FD_multi_ctl(H5FD_t *_file, uint64_t op_code, uint64_t flags, const void *input, void **output) { - H5FD_multi_t *file = (H5FD_multi_t *)_file; - static const char *func = "H5FD_multi_ctl"; /* Function Name for error reporting */ - herr_t ret_value = 0; + H5FD_multi_t *file = (H5FD_multi_t *)_file; + herr_t ret_value = 0; /* Silence compiler */ (void)file; @@ -2150,7 +2047,7 @@ H5FD_multi_ctl(H5FD_t *_file, uint64_t op_code, uint64_t flags, const void *inpu /* Unknown op code */ default: if (flags & H5FD_CTL_FAIL_IF_UNKNOWN_FLAG) - H5Epush_ret(func, H5E_ERR_CLS, H5E_VFL, H5E_FCNTL, + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_VFL, H5E_FCNTL, "VFD ctl request failed (unknown op code and fail if unknown flag is set)", -1); break; diff --git a/src/H5FDmulti.h b/src/H5FDmulti.h index d32ed3ed66a..3ac0788a8dd 100644 --- a/src/H5FDmulti.h +++ b/src/H5FDmulti.h @@ -16,8 +16,11 @@ #ifndef H5FDmulti_H #define H5FDmulti_H -/** Initializer for the multi VFD */ -#define H5FD_MULTI (H5FDperform_init(H5FD_multi_init)) +/* Public header files */ +#include "H5FDpublic.h" /* File drivers */ + +/** ID for the multi VFD */ +#define H5FD_MULTI (H5OPEN H5FD_MULTI_id_g) #ifdef __cplusplus extern "C" { @@ -25,9 +28,9 @@ extern "C" { /** @private * - * \brief Private initializer for the multi VFD + * \brief ID for the multi VFD */ -H5_DLL hid_t H5FD_multi_init(void); +H5_DLLVAR hid_t H5FD_MULTI_id_g; /** * \ingroup FAPL diff --git a/src/H5FDmulti_int.c b/src/H5FDmulti_int.c new file mode 100644 index 00000000000..714aee2d518 --- /dev/null +++ b/src/H5FDmulti_int.c @@ -0,0 +1,83 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the COPYING file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* + * Purpose: Private routines for the multi VFD. + * + * Necessary for using internal library routines, which are + * disallowed within the actual multi VFD code. + * + */ + +/****************/ +/* Module Setup */ +/****************/ + +#define H5FD_FRIEND /* Suppress error about including H5FDpkg */ + +/***********/ +/* Headers */ +/***********/ + +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5Iprivate.h" /* IDs */ +#include "H5FDpkg.h" /* File drivers */ + +#include "H5FDmulti_private.h" /* multi VFD */ + +/* The driver identification number, initialized at runtime */ +hid_t H5FD_MULTI_id_g = H5I_INVALID_HID; + +/*------------------------------------------------------------------------- + * Function: H5FD__multi_register + * + * Purpose: Register the driver with the library. + * + * Return: SUCCEED/FAIL + * + *------------------------------------------------------------------------- + */ +herr_t +H5FD__multi_register(void) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_PACKAGE + + if (H5I_VFL != H5I_get_type(H5FD_MULTI_id_g)) + if ((H5FD_MULTI_id_g = H5FD_register(&H5FD_multi_g, sizeof(H5FD_class_t), false)) < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register multi driver"); + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5FD__multi_register() */ + +/*--------------------------------------------------------------------------- + * Function: H5FD__multi_unregister + * + * Purpose: Reset library driver info. + * + * Returns: SUCCEED (Can't fail) + * + *--------------------------------------------------------------------------- + */ +herr_t +H5FD__multi_unregister(void) +{ + FUNC_ENTER_PACKAGE_NOERR + + /* Reset VFL ID */ + H5FD_MULTI_id_g = H5I_INVALID_HID; + + FUNC_LEAVE_NOAPI(SUCCEED) +} /* end H5FD_multi_unregister() */ diff --git a/src/H5FDdrvr_module.h b/src/H5FDmulti_private.h similarity index 53% rename from src/H5FDdrvr_module.h rename to src/H5FDmulti_private.h index 6757f564b4b..47e3b7121b0 100644 --- a/src/H5FDdrvr_module.h +++ b/src/H5FDmulti_private.h @@ -11,17 +11,35 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* - * Purpose: This file contains declarations which define macros for the - * H5FD driver package. Including this header means that the source file - * is part of the H5FD driver package. + * Purpose: The private header file for the multi VFD */ -#ifndef H5FDdrvr_module_H -#define H5FDdrvr_module_H -/* Define the proper control macros for the generic FUNC_ENTER/LEAVE and error - * reporting macros. - */ -#define H5_MY_PKG H5FD -#define H5_MY_PKG_ERR H5E_FILE +#ifndef H5FDmulti_private_H +#define H5FDmulti_private_H + +/* Include VFD's public header */ +#include "H5FDmulti.h" /* multi VFD */ + +/* Private headers needed by this file */ +#include "H5FDprivate.h" /* File drivers */ + +/**************************/ +/* Library Private Macros */ +/**************************/ + +/****************************/ +/* Library Private Typedefs */ +/****************************/ + +/*****************************/ +/* Library Private Variables */ +/*****************************/ + +/* multi VFD's class struct */ +H5_DLLVAR const H5FD_class_t H5FD_multi_g; + +/******************************/ +/* Library Private Prototypes */ +/******************************/ -#endif /* H5FDdrvr_module_H */ +#endif /* H5FDmulti_private_H */ diff --git a/src/H5FDonion.c b/src/H5FDonion.c index 2f77eebf5a9..c9b2567f25c 100644 --- a/src/H5FDonion.c +++ b/src/H5FDonion.c @@ -16,22 +16,20 @@ * Purpose: Provide in-file provenance and revision/version control. */ -/* This source code file is part of the H5FD driver module */ -#include "H5FDdrvr_module.h" +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ #include "H5private.h" /* Generic Functions */ #include "H5Eprivate.h" /* Error handling */ #include "H5Fprivate.h" /* Files */ -#include "H5FDprivate.h" /* File drivers */ -#include "H5FDonion.h" /* Onion file driver */ +#include "H5FDsec2.h" /* Sec2 file driver */ +#include "H5FDpkg.h" /* File drivers */ #include "H5FDonion_priv.h" /* Onion file driver internals */ -#include "H5FDsec2.h" /* Sec2 file driver */ #include "H5FLprivate.h" /* Free Lists */ #include "H5Iprivate.h" /* IDs */ #include "H5MMprivate.h" /* Memory management */ /* The driver identification number, initialized at runtime */ -static hid_t H5FD_ONION_g = 0; +hid_t H5FD_ONION_id_g = H5I_INVALID_HID; /****************************************************************************** * @@ -160,7 +158,6 @@ static haddr_t H5FD__onion_get_eof(const H5FD_t *, H5FD_mem_t); static H5FD_t *H5FD__onion_open(const char *, unsigned int, hid_t, haddr_t); static herr_t H5FD__onion_read(H5FD_t *, H5FD_mem_t, hid_t, haddr_t, size_t, void *); static herr_t H5FD__onion_set_eoa(H5FD_t *, H5FD_mem_t, haddr_t); -static herr_t H5FD__onion_term(void); static herr_t H5FD__onion_write(H5FD_t *, H5FD_mem_t, hid_t, haddr_t, size_t, const void *); static herr_t H5FD__onion_open_rw(H5FD_onion_t *, unsigned int, haddr_t, bool new_open); @@ -180,7 +177,7 @@ static const H5FD_class_t H5FD_onion_g = { "onion", /* name */ MAXADDR, /* maxaddr */ H5F_CLOSE_WEAK, /* fc_degree */ - H5FD__onion_term, /* terminate */ + NULL, /* terminate */ H5FD__onion_sb_size, /* sb_size */ H5FD__onion_sb_encode, /* sb_encode */ H5FD__onion_sb_decode, /* sb_decode */ @@ -218,50 +215,48 @@ static const H5FD_class_t H5FD_onion_g = { }; /*----------------------------------------------------------------------------- - * Function: H5FD_onion_init + * Function: H5FD__onion_register * - * Purpose: Initialize this driver by registering the driver with the - * library. + * Purpose: Register the driver with the library. + * + * Return: SUCCEED/FAIL * - * Return: Success: The driver ID for the onion driver. - * Failure: Negative *----------------------------------------------------------------------------- */ -hid_t -H5FD_onion_init(void) +herr_t +H5FD__onion_register(void) { - hid_t ret_value = H5I_INVALID_HID; + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR - - if (H5I_VFL != H5I_get_type(H5FD_ONION_g)) - H5FD_ONION_g = H5FD_register(&H5FD_onion_g, sizeof(H5FD_class_t), false); + FUNC_ENTER_PACKAGE - /* Set return value */ - ret_value = H5FD_ONION_g; + if (H5I_VFL != H5I_get_type(H5FD_ONION_id_g)) + if ((H5FD_ONION_id_g = H5FD_register(&H5FD_onion_g, sizeof(H5FD_class_t), false)) < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register onion driver"); +done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_onion_init() */ +} /* end H5FD__onion_register() */ /*----------------------------------------------------------------------------- - * Function: H5FD__onion_term + * Function: H5FD__onion_unregister * - * Purpose: Shut down the Onion VFD. + * Purpose: Reset library driver info. * * Returns: SUCCEED (Can't fail) + * *----------------------------------------------------------------------------- */ -static herr_t -H5FD__onion_term(void) +herr_t +H5FD__onion_unregister(void) { FUNC_ENTER_PACKAGE_NOERR /* Reset VFL ID */ - H5FD_ONION_g = 0; + H5FD_ONION_id_g = H5I_INVALID_HID; FUNC_LEAVE_NOAPI(SUCCEED) - -} /* end H5FD__onion_term() */ +} /* end H5FD__onion_unregister() */ /*----------------------------------------------------------------------------- * Function: H5Pget_fapl_onion diff --git a/src/H5FDonion.h b/src/H5FDonion.h index eefaf1f0f0c..5c374bb16dd 100644 --- a/src/H5FDonion.h +++ b/src/H5FDonion.h @@ -16,8 +16,11 @@ #ifndef H5FDonion_H #define H5FDonion_H -/** Initializer for the onion VFD */ -#define H5FD_ONION (H5FDperform_init(H5FD_onion_init)) +/* Public header files */ +#include "H5FDpublic.h" /* File drivers */ + +/** ID for the onion VFD */ +#define H5FD_ONION (H5OPEN H5FD_ONION_id_g) /** Identifier for the onion VFD */ #define H5FD_ONION_VALUE H5_VFD_ONION @@ -115,9 +118,9 @@ extern "C" { /** @private * - * \brief Private initializer for the onion VFD + * \brief ID for the onion VFD */ -H5_DLL hid_t H5FD_onion_init(void); +H5_DLLVAR hid_t H5FD_ONION_id_g; /** * -------------------------------------------------------------------------- diff --git a/src/H5FDonion_header.c b/src/H5FDonion_header.c index 46510a20f65..2411f6e712f 100644 --- a/src/H5FDonion_header.c +++ b/src/H5FDonion_header.c @@ -16,13 +16,11 @@ * Purpose: Code for the onion file's header */ -/* This source code file is part of the H5FD driver module */ -#include "H5FDdrvr_module.h" +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ #include "H5private.h" /* Generic Functions */ #include "H5Eprivate.h" /* Error handling */ -#include "H5FDprivate.h" /* File drivers */ -#include "H5FDonion.h" /* Onion file driver */ +#include "H5FDpkg.h" /* File drivers */ #include "H5FDonion_priv.h" /* Onion file driver internals */ #include "H5MMprivate.h" /* Memory management */ diff --git a/src/H5FDonion_history.c b/src/H5FDonion_history.c index 6ef1ad688a8..13231683a6b 100644 --- a/src/H5FDonion_history.c +++ b/src/H5FDonion_history.c @@ -16,13 +16,11 @@ * Purpose: Code for the onion file's history */ -/* This source code file is part of the H5FD driver module */ -#include "H5FDdrvr_module.h" +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ #include "H5private.h" /* Generic Functions */ #include "H5Eprivate.h" /* Error handling */ -#include "H5FDprivate.h" /* File drivers */ -#include "H5FDonion.h" /* Onion file driver */ +#include "H5FDpkg.h" /* File drivers */ #include "H5FDonion_priv.h" /* Onion file driver internals */ #include "H5MMprivate.h" /* Memory management */ diff --git a/src/H5FDonion_index.c b/src/H5FDonion_index.c index 639e69019ab..8e9512c102c 100644 --- a/src/H5FDonion_index.c +++ b/src/H5FDonion_index.c @@ -16,13 +16,11 @@ * Purpose: Code for the archival and revision indexes */ -/* This source code file is part of the H5FD driver module */ -#include "H5FDdrvr_module.h" +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ #include "H5private.h" /* Generic Functions */ #include "H5Eprivate.h" /* Error handling */ -#include "H5FDprivate.h" /* File drivers */ -#include "H5FDonion.h" /* Onion file driver */ +#include "H5FDpkg.h" /* File drivers */ #include "H5FDonion_priv.h" /* Onion file driver internals */ #include "H5MMprivate.h" /* Memory management */ diff --git a/src/H5FDonion_priv.h b/src/H5FDonion_priv.h index 5d6de960fb9..d95c5eb3bf0 100644 --- a/src/H5FDonion_priv.h +++ b/src/H5FDonion_priv.h @@ -21,6 +21,10 @@ #ifndef H5FDonion_priv_H #define H5FDonion_priv_H +/* Public headers */ +#include "H5FDonion.h" + +/* Private headers */ #include "H5FDonion_header.h" #include "H5FDonion_history.h" #include "H5FDonion_index.h" diff --git a/src/H5FDperform.c b/src/H5FDperform.c deleted file mode 100644 index dc6491ba2ef..00000000000 --- a/src/H5FDperform.c +++ /dev/null @@ -1,57 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright by The HDF Group. * - * All rights reserved. * - * * - * This file is part of HDF5. The full HDF5 copyright notice, including * - * terms governing use, modification, and redistribution, is contained in * - * the LICENSE file, which can be found at the root of the source code * - * distribution tree, or in https://www.hdfgroup.org/licenses. * - * If you do not have access to either file, you may request a copy from * - * help@hdfgroup.org. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/****************/ -/* Module Setup */ -/****************/ - -#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ - -/***********/ -/* Headers */ -/***********/ -#include "H5private.h" /* Generic Functions */ -#include "H5Eprivate.h" /* Error handling */ -#include "H5FDpkg.h" /* File Drivers */ -#include "H5Iprivate.h" /* IDs */ - -/*------------------------------------------------------------------------- - * Function: H5FDperform_init - * - * Purpose: Ensure that the library is initialized and then call - * the provided VFD initializer - * - * Return: Success: Identifier for the VFD just initialized - * Failure: H5I_INVALID_HID - *------------------------------------------------------------------------- - */ -hid_t -H5FDperform_init(H5FD_init_t op) -{ - hid_t ret_value = H5I_INVALID_HID; /* Return value */ - - FUNC_ENTER_API_NOINIT - - /* It is possible that an application will evaluate an - * `H5FD_*` symbol (`H5FD_FAMILY`, `H5FD_MULTI`, `H5FD_SEC2`, etc. - * before the library has had an opportunity to initialize. Call - * H5_init_library() to make sure that the library has been initialized - * before `init` is run. - */ - if (H5_init_library() < 0) - HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, H5I_INVALID_HID, "library initialization failed"); - - ret_value = op(); - -done: - FUNC_LEAVE_API_NOINIT(ret_value) -} diff --git a/src/H5FDpkg.h b/src/H5FDpkg.h index 2c1bea9df69..2ba842df456 100644 --- a/src/H5FDpkg.h +++ b/src/H5FDpkg.h @@ -39,6 +39,9 @@ /* Package Private Variables */ /*****************************/ +/* Whether to ignore file locks when disabled (env var value) */ +H5_DLLVAR htri_t H5FD_ignore_disabled_file_locks_p; + /******************************/ /* Package Private Prototypes */ /******************************/ @@ -46,6 +49,52 @@ H5_DLL haddr_t H5FD__alloc_real(H5FD_t *file, H5FD_mem_t type, hsize_t size, had hsize_t *align_size); H5_DLL herr_t H5FD__free_real(H5FD_t *file, H5FD_mem_t type, haddr_t addr, hsize_t size); +/* Internal VFD init/term routines */ +H5_DLL herr_t H5FD__core_register(void); +H5_DLL herr_t H5FD__core_unregister(void); +#ifdef H5_HAVE_DIRECT +H5_DLL herr_t H5FD__direct_register(void); +H5_DLL herr_t H5FD__direct_unregister(void); +#endif +H5_DLL herr_t H5FD__family_register(void); +H5_DLL herr_t H5FD__family_unregister(void); +#ifdef H5_HAVE_LIBHDFS +H5_DLL herr_t H5FD__hdfs_register(void); +H5_DLL herr_t H5FD__hdfs_unregister(void); +#endif +#ifdef H5_HAVE_IOC_VFD +H5_DLL herr_t H5FD__ioc_register(void); +H5_DLL herr_t H5FD__ioc_unregister(void); +#endif +H5_DLL herr_t H5FD__log_register(void); +H5_DLL herr_t H5FD__log_unregister(void); +#ifdef H5_HAVE_MIRROR_VFD +H5_DLL herr_t H5FD__mirror_register(void); +H5_DLL herr_t H5FD__mirror_unregister(void); +#endif +#ifdef H5_HAVE_PARALLEL +H5_DLL herr_t H5FD__mpio_register(void); +H5_DLL herr_t H5FD__mpio_unregister(void); +#endif +H5_DLL herr_t H5FD__multi_register(void); +H5_DLL herr_t H5FD__multi_unregister(void); +H5_DLL herr_t H5FD__onion_register(void); +H5_DLL herr_t H5FD__onion_unregister(void); +#ifdef H5_HAVE_ROS3_VFD +H5_DLL herr_t H5FD__ros3_register(void); +H5_DLL herr_t H5FD__ros3_unregister(void); +#endif +H5_DLL herr_t H5FD__sec2_register(void); +H5_DLL herr_t H5FD__sec2_unregister(void); +H5_DLL herr_t H5FD__splitter_register(void); +H5_DLL herr_t H5FD__splitter_unregister(void); +H5_DLL herr_t H5FD__stdio_register(void); +H5_DLL herr_t H5FD__stdio_unregister(void); +#ifdef H5_HAVE_SUBFILING_VFD +H5_DLL herr_t H5FD__subfiling_register(void); +H5_DLL herr_t H5FD__subfiling_unregister(void); +#endif + /* Testing functions */ #ifdef H5FD_TESTING H5_DLL bool H5FD__supports_swmr_test(const char *vfd_name); diff --git a/src/H5FDprivate.h b/src/H5FDprivate.h index 86ed6f073b8..53e47902832 100644 --- a/src/H5FDprivate.h +++ b/src/H5FDprivate.h @@ -109,6 +109,7 @@ struct H5S_t; struct H5F_t; union H5PL_key_t; +H5_DLL herr_t H5FD_init(void); H5_DLL int H5FD_term_interface(void); H5_DLL herr_t H5FD_locate_signature(H5FD_t *file, haddr_t *sig_addr); H5_DLL H5FD_class_t *H5FD_get_class(hid_t id); @@ -197,7 +198,6 @@ H5_DLL herr_t H5FD_sort_selection_io_req(bool *selection_was_sorted, size_t coun H5_flexible_const_ptr_t bufs[], hid_t **s_mem_space_ids, hid_t **s_file_space_ids, haddr_t **s_offsets_ptr, size_t **s_element_sizes_ptr, H5_flexible_const_ptr_t **s_bufs_ptr); -H5_DLL herr_t H5FD_init(void); /* Function prototypes for MPI based VFDs*/ #ifdef H5_HAVE_PARALLEL diff --git a/src/H5FDros3.c b/src/H5FDros3.c index b68337e6dd7..253024e0d4a 100644 --- a/src/H5FDros3.c +++ b/src/H5FDros3.c @@ -17,21 +17,19 @@ * Relies on "s3comms" utility layer to implement the AWS REST API. */ +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ + +#include "H5private.h" /* Generic Functions */ + #ifdef H5_HAVE_ROS3_VFD -/* This source code file is part of the H5FD driver module */ -#include "H5FDdrvr_module.h" -#endif -#include "H5private.h" /* Generic Functions */ #include "H5Eprivate.h" /* Error handling */ -#include "H5FDprivate.h" /* File drivers */ +#include "H5FDpkg.h" /* File drivers */ #include "H5FDros3.h" /* ros3 file driver */ +#include "H5FDs3comms.h" /* S3 Communications */ #include "H5FLprivate.h" /* Free Lists */ #include "H5Iprivate.h" /* IDs */ #include "H5MMprivate.h" /* Memory management */ -#include "H5FDs3comms.h" /* S3 Communications */ - -#ifdef H5_HAVE_ROS3_VFD /* Define to turn on stats collection and reporting */ /* #define ROS3_STATS */ @@ -40,7 +38,12 @@ #define ROS3_MAX_CACHE_SIZE 16777216 /* The driver identification number, initialized at runtime */ -static hid_t H5FD_ROS3_g = 0; +hid_t H5FD_ROS3_id_g = H5I_INVALID_HID; + +/* Flag to indicate whether global driver resources & settings have been + * initialized. + */ +static bool H5FD_ros3_init_s = false; /* Session/security token property name */ #define ROS3_TOKEN_PROP_NAME "ros3_token_prop" @@ -139,7 +142,6 @@ typedef struct H5FD_ros3_t { #define ADDR_OVERFLOW(A) (HADDR_UNDEF == (A) || ((A) & ~(haddr_t)MAXADDR)) /* Prototypes */ -static herr_t H5FD__ros3_term(void); static void *H5FD__ros3_fapl_get(H5FD_t *_file); static void *H5FD__ros3_fapl_copy(const void *_old_fa); static herr_t H5FD__ros3_fapl_free(void *_fa); @@ -176,7 +178,7 @@ static const H5FD_class_t H5FD_ros3_g = { "ros3", /* name */ MAXADDR, /* maxaddr */ H5F_CLOSE_WEAK, /* fc_degree */ - H5FD__ros3_term, /* terminate */ + NULL, /* terminate */ NULL, /* sb_size */ NULL, /* sb_encode */ NULL, /* sb_decode */ @@ -217,59 +219,74 @@ static const H5FD_class_t H5FD_ros3_g = { H5FL_DEFINE_STATIC(H5FD_ros3_t); /*------------------------------------------------------------------------- - * Function: H5FD_ros3_init + * Function: H5FD__ros3_register + * + * Purpose: Register the driver with the library. * - * Purpose: Initialize this driver by registering the driver with the - * library. + * Return: SUCCEED/FAIL * - * Return: Success: The driver ID for the ros3 driver - * Failure: H5I_INVALID_HID *------------------------------------------------------------------------- */ -hid_t -H5FD_ros3_init(void) +herr_t +H5FD__ros3_register(void) { - hid_t ret_value = H5I_INVALID_HID; - - FUNC_ENTER_NOAPI(H5I_INVALID_HID) - - if (H5I_VFL != H5I_get_type(H5FD_ROS3_g)) { - H5FD_ROS3_g = H5FD_register(&H5FD_ros3_g, sizeof(H5FD_class_t), false); - if (H5I_INVALID_HID == H5FD_ROS3_g) { - HGOTO_ERROR(H5E_ID, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to register ros3"); - } + herr_t ret_value = SUCCEED; /* Return value */ -#ifdef ROS3_STATS - /* Pre-compute stats bin boundaries on powers of 2 >= 10 */ - for (int i = 0; i < ROS3_STATS_BIN_COUNT; i++) - ros3_stats_boundaries_g[i] = 1 << (10 + i); -#endif - } + FUNC_ENTER_PACKAGE - ret_value = H5FD_ROS3_g; + if (H5I_VFL != H5I_get_type(H5FD_ROS3_id_g)) + if ((H5FD_ROS3_id_g = H5FD_register(&H5FD_ros3_g, sizeof(H5FD_class_t), false)) < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register ros3 driver"); done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_ros3_init() */ +} /* end H5FD__ros3_register() */ /*--------------------------------------------------------------------------- - * Function: H5FD__ros3_term + * Function: H5FD__ros3_unregister * - * Purpose: Shut down the VFD + * Purpose: Reset library driver info. * * Returns: SUCCEED (Can't fail) + * *--------------------------------------------------------------------------- */ -static herr_t -H5FD__ros3_term(void) +herr_t +H5FD__ros3_unregister(void) { FUNC_ENTER_PACKAGE_NOERR /* Reset VFL ID */ - H5FD_ROS3_g = 0; + H5FD_ROS3_id_g = H5I_INVALID_HID; + + FUNC_LEAVE_NOAPI(SUCCEED) +} /* end H5FD__ros3_unregister() */ + +/*------------------------------------------------------------------------- + * Function: H5FD__ros3_init + * + * Purpose: Singleton to initialize global driver settings & resources. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +static herr_t +H5FD__ros3_init(void) +{ + FUNC_ENTER_PACKAGE_NOERR + +#ifdef ROS3_STATS + /* Pre-compute stats bin boundaries on powers of 2 >= 10 */ + for (int i = 0; i < ROS3_STATS_BIN_COUNT; i++) + ros3_stats_boundaries_g[i] = 1 << (10 + i); +#endif + + /* Indicate that driver is set up */ + H5FD_ros3_init_s = true; FUNC_LEAVE_NOAPI(SUCCEED) -} /* end H5FD__ros3_term() */ +} /* end H5FD__ros3_init() */ /*------------------------------------------------------------------------- * Function: H5Pset_fapl_ros3 @@ -715,6 +732,11 @@ H5FD__ros3_open(const char *url, unsigned flags, hid_t fapl_id, haddr_t maxaddr) if (NULL == (plist = H5P_object_verify(fapl_id, H5P_FILE_ACCESS))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list"); + /* Initialize driver, if it's not yet */ + if (!H5FD_ros3_init_s) + if (H5FD__ros3_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, NULL, "can't initialize driver"); + /* Init curl */ if (CURLE_OK != curl_global_init(CURL_GLOBAL_DEFAULT)) HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, NULL, "unable to initialize curl global (placeholder flags)"); diff --git a/src/H5FDros3.h b/src/H5FDros3.h index 896d2e89f5d..8117ad8a1e5 100644 --- a/src/H5FDros3.h +++ b/src/H5FDros3.h @@ -16,12 +16,17 @@ #ifndef H5FDros3_H #define H5FDros3_H +/* Public header files */ +#include "H5FDpublic.h" /* File drivers */ + #ifdef H5_HAVE_ROS3_VFD -/** Initializer for the ros3 VFD */ -#define H5FD_ROS3 (H5FDperform_init(H5FD_ros3_init)) + +/** ID for the ros3 VFD */ +#define H5FD_ROS3 (H5OPEN H5FD_ROS3_id_g) /** Identifier for the ros3 VFD */ #define H5FD_ROS3_VALUE H5_VFD_ROS3 + #else /** Initializer for the ros3 VFD (disabled) */ #define H5FD_ROS3 (H5I_INVALID_HID) @@ -32,48 +37,6 @@ #ifdef H5_HAVE_ROS3_VFD -/**************************************************************************** - * - * Structure: H5FD_ros3_fapl_t - * - * Purpose: - * - * H5FD_ros3_fapl_t is a public structure that is used to pass S3 - * authentication data to the appropriate S3 VFD via the FAPL. A pointer - * to an instance of this structure is a parameter to H5Pset_fapl_ros3() - * and H5Pget_fapl_ros3(). - * - * - * - * `version` (int32_t) - * - * Version number of the H5FD_ros3_fapl_t structure. Any instance passed - * to the above calls must have a recognized version number, or an error - * will be flagged. - * - * This field should be set to H5FD_CURR_ROS3_FAPL_T_VERSION. - * - * `authenticate` (hbool_t) - * - * Flag true or false whether or not requests are to be authenticated - * with the AWS4 algorithm. - * If true, `aws_region`, `secret_id`, and `secret_key` must be populated. - * If false, those three components are unused. - * - * `aws_region` (char[]) - * - * String: name of the AWS "region" of the host, e.g. "us-east-1". - * - * `secret_id` (char[]) - * - * String: "Access ID" for the resource. - * - * `secret_key` (char[]) - * - * String: "Secret Access Key" associated with the ID and resource. - * - ****************************************************************************/ - /** * \def H5FD_CURR_ROS3_FAPL_T_VERSION * The version number of the H5FD_ros3_fapl_t configuration @@ -120,9 +83,11 @@ * \var hbool_t H5FD_ros3_fapl_t::authenticate * A Boolean which specifies if security credentials should be used for * accessing a S3 bucket. + * If true, `aws_region`, `secret_id`, and `secret_key` must be populated. + * If false, those three components are unused. * * \var char H5FD_ros3_fapl_t::aws_region[H5FD_ROS3_MAX_REGION_LEN + 1] - * A string which specifies the AWS region of the S3 bucket. + * A string which specifies the AWS region of the S3 bucket, e.g. "us-east-1". * * \var char H5FD_ros3_fapl_t::secret_id[H5FD_ROS3_MAX_SECRET_ID_LEN + 1] * A string which specifies the security ID. @@ -145,9 +110,9 @@ extern "C" { /** @private * - * \brief Private initializer for the ros3 VFD + * \brief ID for the ros3 VFD */ -H5_DLL hid_t H5FD_ros3_init(void); +H5_DLLVAR hid_t H5FD_ROS3_id_g; /** * \ingroup FAPL diff --git a/src/H5FDsec2.c b/src/H5FDsec2.c index 3f3e93cb978..fa9c8849803 100644 --- a/src/H5FDsec2.c +++ b/src/H5FDsec2.c @@ -19,22 +19,19 @@ * application to the same file). */ -#include "H5FDdrvr_module.h" /* This source code file is part of the H5FD driver module */ +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ #include "H5private.h" /* Generic Functions */ #include "H5Eprivate.h" /* Error handling */ #include "H5Fprivate.h" /* File access */ -#include "H5FDprivate.h" /* File drivers */ +#include "H5FDpkg.h" /* File drivers */ #include "H5FDsec2.h" /* Sec2 file driver */ #include "H5FLprivate.h" /* Free Lists */ #include "H5Iprivate.h" /* IDs */ #include "H5Pprivate.h" /* Property lists */ /* The driver identification number, initialized at runtime */ -static hid_t H5FD_SEC2_g = 0; - -/* Whether to ignore file locks when disabled (env var value) */ -static htri_t ignore_disabled_file_locks_s = FAIL; +hid_t H5FD_SEC2_id_g = H5I_INVALID_HID; /* The description of a file belonging to this driver. The 'eoa' and 'eof' * determine the amount of hdf5 address space in use and the high-water mark @@ -119,7 +116,6 @@ typedef struct H5FD_sec2_t { (ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) || HADDR_UNDEF == (A) + (Z) || (HDoff_t)((A) + (Z)) < (HDoff_t)(A)) /* Prototypes */ -static herr_t H5FD__sec2_term(void); static H5FD_t *H5FD__sec2_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr); static herr_t H5FD__sec2_close(H5FD_t *_file); static int H5FD__sec2_cmp(const H5FD_t *_f1, const H5FD_t *_f2); @@ -145,7 +141,7 @@ static const H5FD_class_t H5FD_sec2_g = { "sec2", /* name */ MAXADDR, /* maxaddr */ H5F_CLOSE_WEAK, /* fc_degree */ - H5FD__sec2_term, /* terminate */ + NULL, /* terminate */ NULL, /* sb_size */ NULL, /* sb_encode */ NULL, /* sb_decode */ @@ -186,61 +182,48 @@ static const H5FD_class_t H5FD_sec2_g = { H5FL_DEFINE_STATIC(H5FD_sec2_t); /*------------------------------------------------------------------------- - * Function: H5FD_sec2_init + * Function: H5FD__sec2_register * - * Purpose: Initialize this driver by registering the driver with the - * library. + * Purpose: Register the driver with the library. * - * Return: Success: The driver ID for the sec2 driver - * Failure: H5I_INVALID_HID + * Return: SUCCEED/FAIL * *------------------------------------------------------------------------- */ -hid_t -H5FD_sec2_init(void) +herr_t +H5FD__sec2_register(void) { - char *lock_env_var = NULL; /* Environment variable pointer */ - hid_t ret_value = H5I_INVALID_HID; /* Return value */ - - FUNC_ENTER_NOAPI_NOERR - - /* Check the use disabled file locks environment variable */ - lock_env_var = getenv(HDF5_USE_FILE_LOCKING); - if (lock_env_var && !strcmp(lock_env_var, "BEST_EFFORT")) - ignore_disabled_file_locks_s = true; /* Override: Ignore disabled locks */ - else if (lock_env_var && (!strcmp(lock_env_var, "TRUE") || !strcmp(lock_env_var, "1"))) - ignore_disabled_file_locks_s = false; /* Override: Don't ignore disabled locks */ - else - ignore_disabled_file_locks_s = FAIL; /* Environment variable not set, or not set correctly */ + herr_t ret_value = SUCCEED; /* Return value */ - if (H5I_VFL != H5I_get_type(H5FD_SEC2_g)) - H5FD_SEC2_g = H5FD_register(&H5FD_sec2_g, sizeof(H5FD_class_t), false); + FUNC_ENTER_PACKAGE - /* Set return value */ - ret_value = H5FD_SEC2_g; + if (H5I_VFL != H5I_get_type(H5FD_SEC2_id_g)) + if ((H5FD_SEC2_id_g = H5FD_register(&H5FD_sec2_g, sizeof(H5FD_class_t), false)) < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register sec2 driver"); +done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_sec2_init() */ +} /* end H5FD__sec2_register() */ /*--------------------------------------------------------------------------- - * Function: H5FD__sec2_term + * Function: H5FD__sec2_unregister * - * Purpose: Shut down the VFD + * Purpose: Reset library driver info. * * Returns: SUCCEED (Can't fail) * *--------------------------------------------------------------------------- */ -static herr_t -H5FD__sec2_term(void) +herr_t +H5FD__sec2_unregister(void) { FUNC_ENTER_PACKAGE_NOERR /* Reset VFL ID */ - H5FD_SEC2_g = 0; + H5FD_SEC2_id_g = H5I_INVALID_HID; FUNC_LEAVE_NOAPI(SUCCEED) -} /* end H5FD__sec2_term() */ +} /* end H5FD__sec2_unregister() */ /*------------------------------------------------------------------------- * Function: H5Pset_fapl_sec2 @@ -361,9 +344,9 @@ H5FD__sec2_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr HGOTO_ERROR(H5E_VFL, H5E_BADTYPE, NULL, "not a file access property list"); /* Check the file locking flags in the fapl */ - if (ignore_disabled_file_locks_s != FAIL) + if (H5FD_ignore_disabled_file_locks_p != FAIL) /* The environment variable was set, so use that preferentially */ - file->ignore_disabled_file_locks = ignore_disabled_file_locks_s; + file->ignore_disabled_file_locks = H5FD_ignore_disabled_file_locks_p; else { /* Use the value in the property list */ if (H5P_get(plist, H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_NAME, &file->ignore_disabled_file_locks) < 0) diff --git a/src/H5FDsec2.h b/src/H5FDsec2.h index b02e5a90c80..d748fc92ece 100644 --- a/src/H5FDsec2.h +++ b/src/H5FDsec2.h @@ -17,8 +17,11 @@ #ifndef H5FDsec2_H #define H5FDsec2_H -/** Initializer for the sec2 VFD */ -#define H5FD_SEC2 (H5FDperform_init(H5FD_sec2_init)) +/* Public header files */ +#include "H5FDpublic.h" /* File drivers */ + +/** ID for the sec2 VFD */ +#define H5FD_SEC2 (H5OPEN H5FD_SEC2_id_g) /** Identifier for the sec2 VFD */ #define H5FD_SEC2_VALUE H5_VFD_SEC2 @@ -29,9 +32,9 @@ extern "C" { /** @private * - * \brief Private initializer for the sec2 VFD + * \brief ID for the sec2 VFD */ -H5_DLL hid_t H5FD_sec2_init(void); +H5_DLLVAR hid_t H5FD_SEC2_id_g; /** * \ingroup FAPL diff --git a/src/H5FDsplitter.c b/src/H5FDsplitter.c index 325d8561956..cee2163fe5b 100644 --- a/src/H5FDsplitter.c +++ b/src/H5FDsplitter.c @@ -16,13 +16,12 @@ * another underlying VFD. Maintains two files simultaneously. */ -/* This source code file is part of the H5FD driver module */ -#include "H5FDdrvr_module.h" +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ #include "H5private.h" /* Generic Functions */ #include "H5Eprivate.h" /* Error handling */ #include "H5Fprivate.h" /* File access */ -#include "H5FDprivate.h" /* File drivers */ +#include "H5FDpkg.h" /* File drivers */ #include "H5FDsplitter.h" /* Splitter file driver */ #include "H5FLprivate.h" /* Free Lists */ #include "H5Iprivate.h" /* IDs */ @@ -30,7 +29,7 @@ #include "H5Pprivate.h" /* Property lists */ /* The driver identification number, initialized at runtime */ -static hid_t H5FD_SPLITTER_g = 0; +hid_t H5FD_SPLITTER_id_g = H5I_INVALID_HID; /* Driver-specific file access properties */ typedef struct H5FD_splitter_fapl_t { @@ -103,7 +102,6 @@ static herr_t H5FD__splitter_log_error(const H5FD_splitter_t *file, const char * static int H5FD__copy_plist(hid_t fapl_id, hid_t *id_out_ptr); /* Prototypes */ -static herr_t H5FD__splitter_term(void); static herr_t H5FD__splitter_populate_config(H5FD_splitter_vfd_config_t *vfd_config, H5FD_splitter_fapl_t *fapl_out); static herr_t H5FD__splitter_get_default_wo_path(char *new_path, size_t new_path_len, @@ -143,7 +141,7 @@ static const H5FD_class_t H5FD_splitter_g = { "splitter", /* name */ MAXADDR, /* maxaddr */ H5F_CLOSE_WEAK, /* fc_degree */ - H5FD__splitter_term, /* terminate */ + NULL, /* terminate */ H5FD__splitter_sb_size, /* sb_size */ H5FD__splitter_sb_encode, /* sb_encode */ H5FD__splitter_sb_decode, /* sb_decode */ @@ -187,52 +185,52 @@ H5FL_DEFINE_STATIC(H5FD_splitter_t); H5FL_DEFINE_STATIC(H5FD_splitter_fapl_t); /*------------------------------------------------------------------------- - * Function: H5FD_splitter_init + * Function: H5FD__splitter_register * - * Purpose: Initialize the splitter driver by registering it with the - * library. + * Purpose: Register the driver with the library. + * + * Return: SUCCEED/FAIL * - * Return: Success: The driver ID for the splitter driver. - * Failure: Negative *------------------------------------------------------------------------- */ -hid_t -H5FD_splitter_init(void) +herr_t +H5FD__splitter_register(void) { - hid_t ret_value = H5I_INVALID_HID; + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_PACKAGE H5FD_SPLITTER_LOG_CALL(__func__); - if (H5I_VFL != H5I_get_type(H5FD_SPLITTER_g)) - H5FD_SPLITTER_g = H5FDregister(&H5FD_splitter_g); - - ret_value = H5FD_SPLITTER_g; + if (H5I_VFL != H5I_get_type(H5FD_SPLITTER_id_g)) + if ((H5FD_SPLITTER_id_g = H5FD_register(&H5FD_splitter_g, sizeof(H5FD_class_t), false)) < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register splitter driver"); +done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_splitter_init() */ +} /* end H5FD__splitter_register() */ /*--------------------------------------------------------------------------- - * Function: H5FD__splitter_term + * Function: H5FD__splitter_unregister * - * Purpose: Shut down the splitter VFD. + * Purpose: Reset library driver info. * * Returns: SUCCEED (Can't fail) + * *--------------------------------------------------------------------------- */ -static herr_t -H5FD__splitter_term(void) +herr_t +H5FD__splitter_unregister(void) { FUNC_ENTER_PACKAGE_NOERR H5FD_SPLITTER_LOG_CALL(__func__); /* Reset VFL ID */ - H5FD_SPLITTER_g = 0; + H5FD_SPLITTER_id_g = H5I_INVALID_HID; FUNC_LEAVE_NOAPI(SUCCEED) -} /* end H5FD__splitter_term() */ +} /* end H5FD__splitter_unregister() */ /*------------------------------------------------------------------------- * Function: H5FD__copy_plist diff --git a/src/H5FDsplitter.h b/src/H5FDsplitter.h index ca91f433176..66e3ebaf38f 100644 --- a/src/H5FDsplitter.h +++ b/src/H5FDsplitter.h @@ -17,8 +17,11 @@ #ifndef H5FDsplitter_H #define H5FDsplitter_H -/** Initializer for the splitter VFD */ -#define H5FD_SPLITTER (H5FDperform_init(H5FD_splitter_init)) +/* Public header files */ +#include "H5FDpublic.h" /* File drivers */ + +/** ID for the splitter VFD */ +#define H5FD_SPLITTER (H5OPEN H5FD_SPLITTER_id_g) /** Identifier for the splitter VFD */ #define H5FD_SPLITTER_VALUE H5_VFD_SPLITTER @@ -61,9 +64,9 @@ extern "C" { /** @private * - * \brief Private initializer for the splitter VFD + * \brief ID for the splitter VFD */ -H5_DLL hid_t H5FD_splitter_init(void); +H5_DLLVAR hid_t H5FD_SPLITTER_id_g; /** * \ingroup FAPL diff --git a/src/H5FDstdio.c b/src/H5FDstdio.c index 7c5cf6e2bf9..942d90c7352 100644 --- a/src/H5FDstdio.c +++ b/src/H5FDstdio.c @@ -47,8 +47,10 @@ #endif /* H5_HAVE_WIN32_API */ -/* The driver identification number, initialized at runtime */ -static hid_t H5FD_STDIO_g = 0; +/* Flag to indicate whether global driver resources & settings have been + * initialized. + */ +static bool H5FD_stdio_init_s = false; /* Whether to ignore file locks when disabled (env var value) */ static htri_t ignore_disabled_file_locks_s = -1; @@ -160,7 +162,6 @@ typedef struct H5FD_stdio_t { (file_offset_t)((A) + (Z)) < (file_offset_t)(A)) /* Prototypes */ -static herr_t H5FD_stdio_term(void); static H5FD_t *H5FD_stdio_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr); static herr_t H5FD_stdio_close(H5FD_t *lf); static int H5FD_stdio_cmp(const H5FD_t *_f1, const H5FD_t *_f2); @@ -180,13 +181,13 @@ static herr_t H5FD_stdio_lock(H5FD_t *_file, bool rw); static herr_t H5FD_stdio_unlock(H5FD_t *_file); static herr_t H5FD_stdio_delete(const char *filename, hid_t fapl_id); -static const H5FD_class_t H5FD_stdio_g = { +const H5FD_class_t H5FD_stdio_g = { H5FD_CLASS_VERSION, /* struct version */ H5_VFD_STDIO, /* value */ "stdio", /* name */ MAXADDR, /* maxaddr */ H5F_CLOSE_WEAK, /* fc_degree */ - H5FD_stdio_term, /* terminate */ + NULL, /* terminate */ NULL, /* sb_size */ NULL, /* sb_encode */ NULL, /* sb_decode */ @@ -224,25 +225,19 @@ static const H5FD_class_t H5FD_stdio_g = { }; /*------------------------------------------------------------------------- - * Function: H5FD_stdio_init - * - * Purpose: Initialize this driver by registering the driver with the - * library. + * Function: H5FD__stdio_init * - * Return: Success: The driver ID for the stdio driver. + * Purpose: Singleton to initialize global driver settings & resources. * - * Failure: Negative. + * Return: Non-negative on success/Negative on failure * *------------------------------------------------------------------------- */ -hid_t -H5FD_stdio_init(void) +static herr_t +H5FD__stdio_init(void) { char *lock_env_var = NULL; /* Environment variable pointer */ - /* Clear the error stack */ - H5Eclear2(H5E_DEFAULT); - /* Check the use disabled file locks environment variable */ lock_env_var = getenv(HDF5_USE_FILE_LOCKING); if (lock_env_var && !strcmp(lock_env_var, "BEST_EFFORT")) @@ -252,29 +247,11 @@ H5FD_stdio_init(void) else ignore_disabled_file_locks_s = -1; /* Environment variable not set, or not set correctly */ - if (H5I_VFL != H5Iget_type(H5FD_STDIO_g)) - H5FD_STDIO_g = H5FDregister(&H5FD_stdio_g); - - return H5FD_STDIO_g; -} /* end H5FD_stdio_init() */ - -/*--------------------------------------------------------------------------- - * Function: H5FD_stdio_term - * - * Purpose: Shut down the VFD - * - * Returns: Non-negative on success or negative on failure - * - *--------------------------------------------------------------------------- - */ -static herr_t -H5FD_stdio_term(void) -{ - /* Reset VFL ID */ - H5FD_STDIO_g = 0; + /* Indicate that driver is set up */ + H5FD_stdio_init_s = true; return 0; -} /* end H5FD_stdio_term() */ +} /* end H5FD__stdio_init() */ /*------------------------------------------------------------------------- * Function: H5Pset_fapl_stdio @@ -290,13 +267,12 @@ H5FD_stdio_term(void) herr_t H5Pset_fapl_stdio(hid_t fapl_id) { - static const char *func = "H5FDset_fapl_stdio"; /*for error reporting*/ /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); if (0 == H5Pisa_class(fapl_id, H5P_FILE_ACCESS)) - H5Epush_ret(func, H5E_ERR_CLS, H5E_PLIST, H5E_BADTYPE, "not a file access property list", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_PLIST, H5E_BADTYPE, "not a file access property list", -1); return H5Pset_driver(fapl_id, H5FD_STDIO, NULL); } /* end H5Pset_fapl_stdio() */ @@ -325,10 +301,9 @@ H5Pset_fapl_stdio(hid_t fapl_id) static H5FD_t * H5FD_stdio_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr) { - FILE *f = NULL; - unsigned write_access = 0; /* File opened with write access? */ - H5FD_stdio_t *file = NULL; - static const char *func = "H5FD_stdio_open"; /* Function Name for error reporting */ + FILE *f = NULL; + unsigned write_access = 0; /* File opened with write access? */ + H5FD_stdio_t *file = NULL; #ifdef H5_HAVE_WIN32_API struct _BY_HANDLE_FILE_INFORMATION fileinfo; #else /* H5_HAVE_WIN32_API */ @@ -344,13 +319,18 @@ H5FD_stdio_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); + /* Initialize driver, if it's not yet */ + if (!H5FD_stdio_init_s) + if (H5FD__stdio_init() < 0) + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_VFL, H5E_CANTINIT, "can't initialize driver", NULL); + /* Check arguments */ if (!name || !*name) - H5Epush_ret(func, H5E_ERR_CLS, H5E_ARGS, H5E_BADVALUE, "invalid file name", NULL); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_ARGS, H5E_BADVALUE, "invalid file name", NULL); if (0 == maxaddr || HADDR_UNDEF == maxaddr) - H5Epush_ret(func, H5E_ERR_CLS, H5E_ARGS, H5E_BADRANGE, "bogus maxaddr", NULL); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_ARGS, H5E_BADRANGE, "bogus maxaddr", NULL); if (ADDR_OVERFLOW(maxaddr)) - H5Epush_ret(func, H5E_ERR_CLS, H5E_ARGS, H5E_OVERFLOW, "maxaddr too large", NULL); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_ARGS, H5E_OVERFLOW, "maxaddr too large", NULL); /* Tentatively open file in read-only mode, to check for existence */ if (flags & H5F_ACC_RDWR) @@ -366,14 +346,14 @@ H5FD_stdio_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr write_access = 1; /* Note the write access */ } else - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_CANTOPENFILE, + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_CANTOPENFILE, "file doesn't exist and CREAT wasn't specified", NULL); } else if (flags & H5F_ACC_EXCL) { /* File exists, but EXCL is passed. Fail. */ assert(flags & H5F_ACC_CREAT); fclose(f); - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_FILEEXISTS, + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_FILEEXISTS, "file exists but CREAT and EXCL were specified", NULL); } else if (flags & H5F_ACC_RDWR) { @@ -385,12 +365,12 @@ H5FD_stdio_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr * as the tentative open will work */ if (!f) - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_CANTOPENFILE, "fopen failed", NULL); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_CANTOPENFILE, "fopen failed", NULL); /* Build the return value */ if (NULL == (file = (H5FD_stdio_t *)calloc((size_t)1, sizeof(H5FD_stdio_t)))) { fclose(f); - H5Epush_ret(func, H5E_ERR_CLS, H5E_RESOURCE, H5E_NOSPACE, "memory allocation failed", NULL); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_RESOURCE, H5E_NOSPACE, "memory allocation failed", NULL); } /* end if */ file->fp = f; file->op = H5FD_STDIO_OP_SEEK; @@ -416,7 +396,7 @@ H5FD_stdio_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr if (H5Pget_file_locking(fapl_id, &unused, &file->ignore_disabled_file_locks) < 0) { free(file); fclose(f); - H5Epush_ret(func, H5E_ERR_CLS, H5E_FILE, H5E_CANTGET, + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_FILE, H5E_CANTGET, "unable to get use disabled file locks property", NULL); } } @@ -430,7 +410,7 @@ H5FD_stdio_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr if (file->fd < 0) { free(file); fclose(f); - H5Epush_ret(func, H5E_ERR_CLS, H5E_FILE, H5E_CANTOPENFILE, "unable to get file descriptor", NULL); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_FILE, H5E_CANTOPENFILE, "unable to get file descriptor", NULL); } /* end if */ #ifdef H5_HAVE_WIN32_API @@ -438,13 +418,14 @@ H5FD_stdio_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr if (INVALID_HANDLE_VALUE == file->hFile) { free(file); fclose(f); - H5Epush_ret(func, H5E_ERR_CLS, H5E_FILE, H5E_CANTOPENFILE, "unable to get Windows file handle", NULL); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_FILE, H5E_CANTOPENFILE, "unable to get Windows file handle", + NULL); } /* end if */ if (!GetFileInformationByHandle((HANDLE)file->hFile, &fileinfo)) { free(file); fclose(f); - H5Epush_ret(func, H5E_ERR_CLS, H5E_FILE, H5E_CANTOPENFILE, + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_FILE, H5E_CANTOPENFILE, "unable to get Windows file descriptor information", NULL); } /* end if */ @@ -455,7 +436,7 @@ H5FD_stdio_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr if (fstat(file->fd, &sb) < 0) { free(file); fclose(f); - H5Epush_ret(func, H5E_ERR_CLS, H5E_FILE, H5E_BADFILE, "unable to fstat file", NULL); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_FILE, H5E_BADFILE, "unable to fstat file", NULL); } /* end if */ file->device = sb.st_dev; file->inode = sb.st_ino; @@ -479,14 +460,13 @@ H5FD_stdio_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr static herr_t H5FD_stdio_close(H5FD_t *_file) { - H5FD_stdio_t *file = (H5FD_stdio_t *)_file; - static const char *func = "H5FD_stdio_close"; /* Function Name for error reporting */ + H5FD_stdio_t *file = (H5FD_stdio_t *)_file; /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); if (fclose(file->fp) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_CLOSEERROR, "fclose failed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_CLOSEERROR, "fclose failed", -1); free(file); @@ -727,8 +707,7 @@ H5FD_stdio_get_eof(const H5FD_t *_file, H5FD_mem_t /*UNUSED*/ type) static herr_t H5FD_stdio_get_handle(H5FD_t *_file, hid_t /*UNUSED*/ fapl, void **file_handle) { - H5FD_stdio_t *file = (H5FD_stdio_t *)_file; - static const char *func = "H5FD_stdio_get_handle"; /* Function Name for error reporting */ + H5FD_stdio_t *file = (H5FD_stdio_t *)_file; /* Quiet the compiler */ (void)fapl; @@ -738,7 +717,7 @@ H5FD_stdio_get_handle(H5FD_t *_file, hid_t /*UNUSED*/ fapl, void **file_handle) *file_handle = &(file->fp); if (*file_handle == NULL) - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_WRITEERROR, "get handle failed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_WRITEERROR, "get handle failed", -1); return 0; } /* end H5FD_stdio_get_handle() */ @@ -762,8 +741,7 @@ static herr_t H5FD_stdio_read(H5FD_t *_file, H5FD_mem_t /*UNUSED*/ type, hid_t /*UNUSED*/ dxpl_id, haddr_t addr, size_t size, void /*OUT*/ *buf) { - H5FD_stdio_t *file = (H5FD_stdio_t *)_file; - static const char *func = "H5FD_stdio_read"; /* Function Name for error reporting */ + H5FD_stdio_t *file = (H5FD_stdio_t *)_file; /* Quiet the compiler */ (void)type; @@ -774,9 +752,9 @@ H5FD_stdio_read(H5FD_t *_file, H5FD_mem_t /*UNUSED*/ type, hid_t /*UNUSED*/ dxpl /* Check for overflow */ if (HADDR_UNDEF == addr) - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1); if (REGION_OVERFLOW(addr, size)) - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1); /* Check easy cases */ if (0 == size) @@ -791,7 +769,7 @@ H5FD_stdio_read(H5FD_t *_file, H5FD_mem_t /*UNUSED*/ type, hid_t /*UNUSED*/ dxpl if (file_fseek(file->fp, (file_offset_t)addr, SEEK_SET) < 0) { file->op = H5FD_STDIO_OP_UNKNOWN; file->pos = HADDR_UNDEF; - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_SEEKERROR, "fseek failed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_SEEKERROR, "fseek failed", -1); } file->pos = addr; } @@ -823,7 +801,7 @@ H5FD_stdio_read(H5FD_t *_file, H5FD_mem_t /*UNUSED*/ type, hid_t /*UNUSED*/ dxpl if (0 == bytes_read && ferror(file->fp)) { /* error */ file->op = H5FD_STDIO_OP_UNKNOWN; file->pos = HADDR_UNDEF; - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_READERROR, "fread failed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_READERROR, "fread failed", -1); } /* end if */ if (0 == bytes_read && feof(file->fp)) { @@ -862,8 +840,7 @@ static herr_t H5FD_stdio_write(H5FD_t *_file, H5FD_mem_t /*UNUSED*/ type, hid_t /*UNUSED*/ dxpl_id, haddr_t addr, size_t size, const void *buf) { - H5FD_stdio_t *file = (H5FD_stdio_t *)_file; - static const char *func = "H5FD_stdio_write"; /* Function Name for error reporting */ + H5FD_stdio_t *file = (H5FD_stdio_t *)_file; /* Quiet the compiler */ (void)dxpl_id; @@ -874,16 +851,16 @@ H5FD_stdio_write(H5FD_t *_file, H5FD_mem_t /*UNUSED*/ type, hid_t /*UNUSED*/ dxp /* Check for overflow conditions */ if (HADDR_UNDEF == addr) - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1); if (REGION_OVERFLOW(addr, size)) - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1); /* Seek to the correct file position. */ if ((file->op != H5FD_STDIO_OP_WRITE && file->op != H5FD_STDIO_OP_SEEK) || file->pos != addr) { if (file_fseek(file->fp, (file_offset_t)addr, SEEK_SET) < 0) { file->op = H5FD_STDIO_OP_UNKNOWN; file->pos = HADDR_UNDEF; - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_SEEKERROR, "fseek failed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_SEEKERROR, "fseek failed", -1); } file->pos = addr; } @@ -908,7 +885,7 @@ H5FD_stdio_write(H5FD_t *_file, H5FD_mem_t /*UNUSED*/ type, hid_t /*UNUSED*/ dxp if (bytes_wrote != bytes_in || (0 == bytes_wrote && ferror(file->fp))) { /* error */ file->op = H5FD_STDIO_OP_UNKNOWN; file->pos = HADDR_UNDEF; - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_WRITEERROR, "fwrite failed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_WRITEERROR, "fwrite failed", -1); } /* end if */ assert(bytes_wrote > 0); @@ -946,8 +923,7 @@ H5FD_stdio_write(H5FD_t *_file, H5FD_mem_t /*UNUSED*/ type, hid_t /*UNUSED*/ dxp static herr_t H5FD_stdio_flush(H5FD_t *_file, hid_t /*UNUSED*/ dxpl_id, bool closing) { - H5FD_stdio_t *file = (H5FD_stdio_t *)_file; - static const char *func = "H5FD_stdio_flush"; /* Function Name for error reporting */ + H5FD_stdio_t *file = (H5FD_stdio_t *)_file; /* Quiet the compiler */ (void)dxpl_id; @@ -959,7 +935,7 @@ H5FD_stdio_flush(H5FD_t *_file, hid_t /*UNUSED*/ dxpl_id, bool closing) if (file->write_access) { if (!closing) { if (fflush(file->fp) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_WRITEERROR, "fflush failed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_WRITEERROR, "fflush failed", -1); /* Reset last file I/O information */ file->pos = HADDR_UNDEF; @@ -987,8 +963,7 @@ H5FD_stdio_flush(H5FD_t *_file, hid_t /*UNUSED*/ dxpl_id, bool closing) static herr_t H5FD_stdio_truncate(H5FD_t *_file, hid_t /*UNUSED*/ dxpl_id, bool /*UNUSED*/ closing) { - H5FD_stdio_t *file = (H5FD_stdio_t *)_file; - static const char *func = "H5FD_stdio_truncate"; /* Function Name for error reporting */ + H5FD_stdio_t *file = (H5FD_stdio_t *)_file; /* Quiet the compiler */ (void)dxpl_id; @@ -1025,12 +1000,13 @@ H5FD_stdio_truncate(H5FD_t *_file, hid_t /*UNUSED*/ dxpl_id, bool /*UNUSED*/ clo if (INVALID_SET_FILE_POINTER == dwPtrLow) { dwError = GetLastError(); if (dwError != NO_ERROR) - H5Epush_ret(func, H5E_ERR_CLS, H5E_FILE, H5E_FILEOPEN, "unable to set file pointer", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_FILE, H5E_FILEOPEN, "unable to set file pointer", + -1); } bError = SetEndOfFile(file->hFile); if (0 == bError) - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_SEEKERROR, + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_SEEKERROR, "unable to truncate/extend file properly", -1); #else /* H5_HAVE_WIN32_API */ /* Reset seek offset to beginning of file, so that file isn't re-extended later */ @@ -1038,7 +1014,7 @@ H5FD_stdio_truncate(H5FD_t *_file, hid_t /*UNUSED*/ dxpl_id, bool /*UNUSED*/ clo /* Truncate file to proper length */ if (-1 == file_ftruncate(file->fd, (file_offset_t)file->eoa)) - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_SEEKERROR, + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_SEEKERROR, "unable to truncate/extend file properly", -1); #endif /* H5_HAVE_WIN32_API */ @@ -1053,7 +1029,7 @@ H5FD_stdio_truncate(H5FD_t *_file, hid_t /*UNUSED*/ dxpl_id, bool /*UNUSED*/ clo else { /* Double-check for problems */ if (file->eoa > file->eof) - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_TRUNCATED, "eoa > eof!", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_TRUNCATED, "eoa > eof!", -1); } /* end else */ return 0; @@ -1076,9 +1052,8 @@ static herr_t H5FD_stdio_lock(H5FD_t *_file, bool rw) { #ifdef H5_HAVE_FLOCK - H5FD_stdio_t *file = (H5FD_stdio_t *)_file; /* VFD file struct */ - int lock_flags; /* file locking flags */ - static const char *func = "H5FD_stdio_lock"; /* Function Name for error reporting */ + H5FD_stdio_t *file = (H5FD_stdio_t *)_file; /* VFD file struct */ + int lock_flags; /* file locking flags */ /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); @@ -1096,12 +1071,12 @@ H5FD_stdio_lock(H5FD_t *_file, bool rw) */ errno = 0; else - H5Epush_ret(func, H5E_ERR_CLS, H5E_VFL, H5E_CANTLOCKFILE, "file lock failed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_VFL, H5E_CANTLOCKFILE, "file lock failed", -1); } /* end if */ /* Flush the stream */ if (fflush(file->fp) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_WRITEERROR, "fflush failed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_WRITEERROR, "fflush failed", -1); #endif /* H5_HAVE_FLOCK */ @@ -1125,8 +1100,7 @@ static herr_t H5FD_stdio_unlock(H5FD_t *_file) { #ifdef H5_HAVE_FLOCK - H5FD_stdio_t *file = (H5FD_stdio_t *)_file; /* VFD file struct */ - static const char *func = "H5FD_stdio_unlock"; /* Function Name for error reporting */ + H5FD_stdio_t *file = (H5FD_stdio_t *)_file; /* VFD file struct */ /* Clear the error stack */ H5Eclear2(H5E_DEFAULT); @@ -1135,7 +1109,7 @@ H5FD_stdio_unlock(H5FD_t *_file) /* Flush the stream */ if (fflush(file->fp) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_WRITEERROR, "fflush failed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_IO, H5E_WRITEERROR, "fflush failed", -1); /* Place a non-blocking lock on the file */ if (flock(file->fd, LOCK_UN) < 0) { @@ -1145,7 +1119,7 @@ H5FD_stdio_unlock(H5FD_t *_file) */ errno = 0; else - H5Epush_ret(func, H5E_ERR_CLS, H5E_VFL, H5E_CANTUNLOCKFILE, "file unlock failed", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_VFL, H5E_CANTUNLOCKFILE, "file unlock failed", -1); } /* end if */ #endif /* H5_HAVE_FLOCK */ @@ -1165,18 +1139,22 @@ H5FD_stdio_unlock(H5FD_t *_file) static herr_t H5FD_stdio_delete(const char *filename, hid_t /*UNUSED*/ fapl_id) { - static const char *func = "H5FD_stdio_delete"; /* Function Name for error reporting */ - - /* Clear the error stack */ - H5Eclear2(H5E_DEFAULT); assert(filename); /* Quiet compiler */ (void)fapl_id; + /* Clear the error stack */ + H5Eclear2(H5E_DEFAULT); + + /* Initialize driver, if it's not yet */ + if (!H5FD_stdio_init_s) + if (H5FD__stdio_init() < 0) + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_VFL, H5E_CANTINIT, "can't initialize driver", -1); + if (remove(filename) < 0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_VFL, H5E_CANTDELETEFILE, "can't delete file)", -1); + H5Epush_ret(__func__, H5E_ERR_CLS, H5E_VFL, H5E_CANTDELETEFILE, "can't delete file)", -1); return 0; } /* end H5FD_stdio_delete() */ diff --git a/src/H5FDstdio.h b/src/H5FDstdio.h index 7d51ec73f08..087a2e5cbe3 100644 --- a/src/H5FDstdio.h +++ b/src/H5FDstdio.h @@ -16,10 +16,11 @@ #ifndef H5FDstdio_H #define H5FDstdio_H -#include "H5Ipublic.h" +/* Public header files */ +#include "H5FDpublic.h" /* File drivers */ -/** Initializer for the stdio VFD */ -#define H5FD_STDIO (H5FDperform_init(H5FD_stdio_init)) +/** ID for the stdio VFD */ +#define H5FD_STDIO (H5OPEN H5FD_STDIO_id_g) #ifdef __cplusplus extern "C" { @@ -27,9 +28,9 @@ extern "C" { /** @private * - * \brief Private initializer for the stdio VFD + * \brief ID for the stdio VFD */ -H5_DLL hid_t H5FD_stdio_init(void); +H5_DLLVAR hid_t H5FD_STDIO_id_g; /** * \ingroup FAPL diff --git a/src/H5FDstdio_int.c b/src/H5FDstdio_int.c new file mode 100644 index 00000000000..1f8cb63324c --- /dev/null +++ b/src/H5FDstdio_int.c @@ -0,0 +1,83 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the COPYING file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* + * Purpose: Private routines for the stdio VFD. + * + * Necessary for using internal library routines, which are + * disallowed within the actual stdio VFD code. + * + */ + +/****************/ +/* Module Setup */ +/****************/ + +#define H5FD_FRIEND /* Suppress error about including H5FDpkg */ + +/***********/ +/* Headers */ +/***********/ + +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5Iprivate.h" /* IDs */ +#include "H5FDpkg.h" /* File drivers */ + +#include "H5FDstdio_private.h" /* stdio VFD */ + +/* The driver identification number, initialized at runtime */ +hid_t H5FD_STDIO_id_g = H5I_INVALID_HID; + +/*------------------------------------------------------------------------- + * Function: H5FD__stdio_register + * + * Purpose: Register the driver with the library. + * + * Return: SUCCEED/FAIL + * + *------------------------------------------------------------------------- + */ +herr_t +H5FD__stdio_register(void) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_PACKAGE + + if (H5I_VFL != H5I_get_type(H5FD_STDIO_id_g)) + if ((H5FD_STDIO_id_g = H5FD_register(&H5FD_stdio_g, sizeof(H5FD_class_t), false)) < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "unable to register stdio driver"); + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5FD__stdio_register() */ + +/*--------------------------------------------------------------------------- + * Function: H5FD_stdio_unregister + * + * Purpose: Reset library driver info. + * + * Returns: SUCCEED (Can't fail) + * + *--------------------------------------------------------------------------- + */ +herr_t +H5FD__stdio_unregister(void) +{ + FUNC_ENTER_PACKAGE_NOERR + + /* Reset VFL ID */ + H5FD_STDIO_id_g = H5I_INVALID_HID; + + FUNC_LEAVE_NOAPI(SUCCEED) +} /* end H5FD_stdio_unregister() */ diff --git a/src/H5FDstdio_private.h b/src/H5FDstdio_private.h new file mode 100644 index 00000000000..af65eeb8f44 --- /dev/null +++ b/src/H5FDstdio_private.h @@ -0,0 +1,45 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the COPYING file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* + * Purpose: The private header file for the stdio VFD + */ + +#ifndef H5FDstdio_private_H +#define H5FDstdio_private_H + +/* Include VFD's public header */ +#include "H5FDstdio.h" /* stdio VFD */ + +/* Private headers needed by this file */ +#include "H5FDprivate.h" /* File drivers */ + +/**************************/ +/* Library Private Macros */ +/**************************/ + +/****************************/ +/* Library Private Typedefs */ +/****************************/ + +/*****************************/ +/* Library Private Variables */ +/*****************************/ + +/* stdio VFD's class struct */ +H5_DLLVAR const H5FD_class_t H5FD_stdio_g; + +/******************************/ +/* Library Private Prototypes */ +/******************************/ + +#endif /* H5FDstdio_private_H */ diff --git a/src/H5FDsubfiling/H5FDioc.c b/src/H5FDsubfiling/H5FDioc.c index 5847630255f..ae42b3b58a1 100644 --- a/src/H5FDsubfiling/H5FDioc.c +++ b/src/H5FDsubfiling/H5FDioc.c @@ -16,27 +16,29 @@ * another underlying VFD. Maintains two files simultaneously. */ -/* This source code file is part of the H5FD driver module */ -#include "H5FDdrvr_module.h" +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ #include "H5private.h" /* Generic Functions */ -#include "H5FDpublic.h" /* Basic H5FD definitions */ #include "H5Eprivate.h" /* Error handling */ -#include "H5FDprivate.h" /* File drivers */ -#include "H5FDioc.h" /* IOC file driver */ -#include "H5FDioc_priv.h" /* IOC file driver */ +#include "H5Fprivate.h" /* File access */ +#include "H5FDpkg.h" /* File drivers */ +#include "H5FDioc_priv.h" /* I/O concetrator file driver */ #include "H5FDmpio.h" /* MPI I/O VFD */ #include "H5FLprivate.h" /* Free Lists */ -#include "H5Fprivate.h" /* File access */ #include "H5Iprivate.h" /* IDs */ #include "H5MMprivate.h" /* Memory management */ #include "H5Pprivate.h" /* Property lists */ /* The driver identification number, initialized at runtime */ -static hid_t H5FD_IOC_g = H5I_INVALID_HID; +hid_t H5FD_IOC_id_g = H5I_INVALID_HID; + +/* Flag to indicate whether global driver resources & settings have been + * initialized. + */ +static bool H5FD_ioc_init_s = false; /* Whether the driver initialized MPI on its own */ -static bool H5FD_mpi_self_initialized = false; +static bool H5FD_mpi_self_initialized_s = false; /* Pointer to value for MPI_TAG_UB */ int *H5FD_IOC_tag_ub_val_ptr = NULL; @@ -113,7 +115,7 @@ static herr_t H5FD__ioc_read_vector(H5FD_t *file, hid_t dxpl_id, uint32_t count static herr_t H5FD__ioc_write_vector(H5FD_t *file, hid_t dxpl_id, uint32_t count, H5FD_mem_t types[], haddr_t addrs[], size_t sizes[], const void *bufs[] /* in */); static herr_t H5FD__ioc_truncate(H5FD_t *_file, hid_t dxpl_id, bool closing); -static herr_t H5FD__ioc_del(const char *name, hid_t fapl); +static herr_t H5FD__ioc_delete(const char *name, hid_t fapl); /* static herr_t H5FD__ioc_ctl(H5FD_t *file, uint64_t op_code, uint64_t flags, const void *input, void **result); @@ -167,7 +169,7 @@ static const H5FD_class_t H5FD_ioc_g = { H5FD__ioc_truncate, /* truncate */ NULL, /* lock */ NULL, /* unlock */ - H5FD__ioc_del, /* del */ + H5FD__ioc_delete, /* del */ NULL, /* ctl */ H5FD_FLMAP_DICHOTOMY /* fl_map */ }; @@ -179,77 +181,112 @@ H5FL_DEFINE_STATIC(H5FD_ioc_t); H5FL_DEFINE_STATIC(H5FD_ioc_config_t); /*------------------------------------------------------------------------- - * Function: H5FD_ioc_init + * Function: H5FD__ioc_register * - * Purpose: Initialize the IOC driver by registering it with the - * library. + * Purpose: Register the driver with the library. + * + * Return: SUCCEED/FAIL * - * Return: Success: The driver ID for the ioc driver. - * Failure: Negative *------------------------------------------------------------------------- */ -hid_t -H5FD_ioc_init(void) +herr_t +H5FD__ioc_register(void) { - hid_t ret_value = H5I_INVALID_HID; + herr_t ret_value = SUCCEED; - FUNC_ENTER_NOAPI(H5I_INVALID_HID) + FUNC_ENTER_PACKAGE /* Register the IOC VFD, if it isn't already registered */ - if (H5I_VFL != H5I_get_type(H5FD_IOC_g)) { - char *env_var; - int key_val_retrieved = 0; - int mpi_code; - - if ((H5FD_IOC_g = H5FD_register(&H5FD_ioc_g, sizeof(H5FD_class_t), false)) < 0) - HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, H5I_INVALID_HID, "can't register IOC VFD"); - - /* Check if IOC VFD has been loaded dynamically */ - env_var = getenv(HDF5_DRIVER); - if (env_var && strlen(env_var) > 0 && !strcmp(env_var, H5FD_IOC_NAME)) { - int mpi_initialized = 0; - int provided = 0; - - /* Initialize MPI if not already initialized */ - if (MPI_SUCCESS != (mpi_code = MPI_Initialized(&mpi_initialized))) - HMPI_GOTO_ERROR(H5I_INVALID_HID, "MPI_Initialized failed", mpi_code); - if (mpi_initialized) { - /* If MPI is initialized, validate that it was initialized with MPI_THREAD_MULTIPLE */ - if (MPI_SUCCESS != (mpi_code = MPI_Query_thread(&provided))) - HMPI_GOTO_ERROR(H5I_INVALID_HID, "MPI_Query_thread failed", mpi_code); - if (provided != MPI_THREAD_MULTIPLE) - HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, H5I_INVALID_HID, - "IOC VFD requires the use of MPI_Init_thread with MPI_THREAD_MULTIPLE"); - } - else { - int required = MPI_THREAD_MULTIPLE; - - /* Otherwise, initialize MPI */ - if (MPI_SUCCESS != (mpi_code = MPI_Init_thread(NULL, NULL, required, &provided))) - HMPI_GOTO_ERROR(H5I_INVALID_HID, "MPI_Init_thread failed", mpi_code); - - H5FD_mpi_self_initialized = true; - - if (provided != required) - HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, H5I_INVALID_HID, - "MPI doesn't support MPI_Init_thread with MPI_THREAD_MULTIPLE"); - } + if (H5I_VFL != H5I_get_type(H5FD_IOC_id_g)) + if ((H5FD_IOC_id_g = H5FD_register(&H5FD_ioc_g, sizeof(H5FD_class_t), false)) < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "can't register IOC VFD"); + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5FD__ioc_register() */ + +/*--------------------------------------------------------------------------- + * Function: H5FD__ioc_unregister + * + * Purpose: Reset library driver info. + * + * Return: SUCCEED/FAIL + * + *--------------------------------------------------------------------------- + */ +herr_t +H5FD__ioc_unregister(void) +{ + FUNC_ENTER_PACKAGE_NOERR + + /* Reset VFL ID */ + H5FD_IOC_id_g = H5I_INVALID_HID; + + FUNC_LEAVE_NOAPI(SUCCEED) +} /* end H5FD__ioc_unregister() */ + +/*------------------------------------------------------------------------- + * Function: H5FD__ioc_init + * + * Purpose: Singleton to initialize global driver settings & resources. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +static herr_t +H5FD__ioc_init(void) +{ + char *env_var; + int key_val_retrieved = 0; + int mpi_code; + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_PACKAGE + + /* Check if IOC VFD has been loaded dynamically */ + env_var = getenv(HDF5_DRIVER); + if (env_var && strlen(env_var) > 0 && !strcmp(env_var, H5FD_IOC_NAME)) { + int mpi_initialized = 0; + int provided = 0; + + /* Initialize MPI if not already initialized */ + if (MPI_SUCCESS != (mpi_code = MPI_Initialized(&mpi_initialized))) + HMPI_GOTO_ERROR(FAIL, "MPI_Initialized failed", mpi_code); + if (mpi_initialized) { + /* If MPI is initialized, validate that it was initialized with MPI_THREAD_MULTIPLE */ + if (MPI_SUCCESS != (mpi_code = MPI_Query_thread(&provided))) + HMPI_GOTO_ERROR(FAIL, "MPI_Query_thread failed", mpi_code); + if (provided != MPI_THREAD_MULTIPLE) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, + "IOC VFD requires the use of MPI_Init_thread with MPI_THREAD_MULTIPLE"); } + else { + /* Otherwise, initialize MPI */ + if (MPI_SUCCESS != (mpi_code = MPI_Init_thread(NULL, NULL, MPI_THREAD_MULTIPLE, &provided))) + HMPI_GOTO_ERROR(FAIL, "MPI_Init_thread failed", mpi_code); - /* Retrieve upper bound for MPI message tag value */ - if (MPI_SUCCESS != (mpi_code = MPI_Comm_get_attr(MPI_COMM_WORLD, MPI_TAG_UB, &H5FD_IOC_tag_ub_val_ptr, - &key_val_retrieved))) - HMPI_GOTO_ERROR(H5I_INVALID_HID, "MPI_Comm_get_attr failed", mpi_code); + H5FD_mpi_self_initialized_s = true; - if (!key_val_retrieved) - HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, H5I_INVALID_HID, "couldn't retrieve value for MPI_TAG_UB"); + if (provided != MPI_THREAD_MULTIPLE) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, + "MPI doesn't support MPI_Init_thread with MPI_THREAD_MULTIPLE"); + } } - ret_value = H5FD_IOC_g; + /* Retrieve upper bound for MPI message tag value */ + if (MPI_SUCCESS != (mpi_code = MPI_Comm_get_attr(MPI_COMM_WORLD, MPI_TAG_UB, &H5FD_IOC_tag_ub_val_ptr, + &key_val_retrieved))) + HMPI_GOTO_ERROR(FAIL, "MPI_Comm_get_attr failed", mpi_code); + if (!key_val_retrieved) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "couldn't retrieve value for MPI_TAG_UB"); + + /* Indicate that driver is set up */ + H5FD_ioc_init_s = true; done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_ioc_init() */ +} /* end H5FD__ioc_init() */ /*--------------------------------------------------------------------------- * Function: H5FD__ioc_term @@ -257,6 +294,7 @@ H5FD_ioc_init(void) * Purpose: Shut down the IOC VFD. * * Return: SUCCEED/FAIL + * *--------------------------------------------------------------------------- */ static herr_t @@ -266,26 +304,21 @@ H5FD__ioc_term(void) FUNC_ENTER_PACKAGE - if (H5FD_IOC_g >= 0) { - /* Terminate MPI if the driver initialized it */ - if (H5FD_mpi_self_initialized) { - int mpi_finalized = 0; - int mpi_code; + /* Terminate MPI if the driver initialized it */ + if (H5FD_mpi_self_initialized_s) { + int mpi_finalized = 0; + int mpi_code; - if (MPI_SUCCESS != (mpi_code = MPI_Finalized(&mpi_finalized))) - HMPI_GOTO_ERROR(FAIL, "MPI_Finalized failed", mpi_code); - if (!mpi_finalized) - if (MPI_SUCCESS != (mpi_code = MPI_Finalize())) - HMPI_GOTO_ERROR(FAIL, "MPI_Finalize failed", mpi_code); + if (MPI_SUCCESS != (mpi_code = MPI_Finalized(&mpi_finalized))) + HMPI_GOTO_ERROR(FAIL, "MPI_Finalized failed", mpi_code); + if (!mpi_finalized) + if (MPI_SUCCESS != (mpi_code = MPI_Finalize())) + HMPI_GOTO_ERROR(FAIL, "MPI_Finalize failed", mpi_code); - H5FD_mpi_self_initialized = false; - } + H5FD_mpi_self_initialized_s = false; } done: - /* Reset VFL ID */ - H5FD_IOC_g = H5I_INVALID_HID; - FUNC_LEAVE_NOAPI(ret_value) } /* end H5FD__ioc_term() */ @@ -310,6 +343,11 @@ H5Pset_fapl_ioc(hid_t fapl_id, H5FD_ioc_config_t *vfd_config) if (NULL == (plist = H5P_object_verify(fapl_id, H5P_FILE_ACCESS))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list"); + /* Initialize driver, if it's not yet */ + if (!H5FD_ioc_init_s) + if (H5FD__ioc_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize driver"); + if (vfd_config == NULL) { /* Get IOC VFD defaults */ if (H5FD__subfiling_get_default_ioc_config(&ioc_conf) < 0) @@ -355,6 +393,11 @@ H5Pget_fapl_ioc(hid_t fapl_id, H5FD_ioc_config_t *config_out) if (NULL == (plist = H5P_object_verify(fapl_id, H5P_FILE_ACCESS))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list"); + /* Initialize driver, if it's not yet */ + if (!H5FD_ioc_init_s) + if (H5FD__ioc_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize driver"); + if (H5FD_IOC != H5P_peek_driver(plist)) use_default_config = true; else { @@ -679,6 +722,11 @@ H5FD__ioc_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr) if (ADDR_OVERFLOW(maxaddr)) HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, NULL, "bogus maxaddr"); + /* Initialize driver, if it's not yet */ + if (!H5FD_ioc_init_s) + if (H5FD__ioc_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, NULL, "can't initialize driver"); + if (NULL == (file = (H5FD_ioc_t *)H5FL_CALLOC(H5FD_ioc_t))) HGOTO_ERROR(H5E_VFL, H5E_CANTALLOC, NULL, "unable to allocate file struct"); file->comm = MPI_COMM_NULL; @@ -695,7 +743,7 @@ H5FD__ioc_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr) if (NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list"); - if (H5FD_mpi_self_initialized) { + if (H5FD_mpi_self_initialized_s) { file->comm = MPI_COMM_WORLD; file->info = MPI_INFO_NULL; @@ -1192,8 +1240,17 @@ H5FD__ioc_truncate(H5FD_t *_file, hid_t H5_ATTR_UNUSED dxpl_id, bool H5_ATTR_UNU FUNC_LEAVE_NOAPI(ret_value) } /* end H5FD__ioc_truncate */ +/*------------------------------------------------------------------------- + * Function: H5FD__ioc_delete + * + * Purpose: Delete a file + * + * Return: SUCCEED/FAIL + * + *------------------------------------------------------------------------- + */ static herr_t -H5FD__ioc_del(const char *name, hid_t fapl) +H5FD__ioc_delete(const char *name, hid_t fapl) { H5P_genplist_t *plist; MPI_Comm comm = MPI_COMM_NULL; @@ -1208,11 +1265,16 @@ H5FD__ioc_del(const char *name, hid_t fapl) FUNC_ENTER_PACKAGE + /* Initialize driver, if it's not yet */ + if (!H5FD_ioc_init_s) + if (H5FD__ioc_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize driver"); + if (NULL == (plist = H5P_object_verify(fapl, H5P_FILE_ACCESS))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list"); assert(H5FD_IOC == H5P_peek_driver(plist)); - if (H5FD_mpi_self_initialized) + if (H5FD_mpi_self_initialized_s) comm = MPI_COMM_WORLD; else { /* Get the MPI communicator and info from the fapl */ @@ -1314,7 +1376,7 @@ H5FD__ioc_del(const char *name, hid_t fapl) HMPI_DONE_ERROR(FAIL, "MPI_Barrier failed", mpi_code); } - if (!H5FD_mpi_self_initialized) { + if (!H5FD_mpi_self_initialized_s) { /* Free duplicated MPI Communicator and Info objects */ if (H5_mpi_comm_free(&comm) < 0) HDONE_ERROR(H5E_VFL, H5E_CANTFREE, FAIL, "unable to free MPI communicator"); diff --git a/src/H5FDsubfiling/H5FDioc.h b/src/H5FDsubfiling/H5FDioc.h index 820258ed2f0..c9fe0d751ae 100644 --- a/src/H5FDsubfiling/H5FDioc.h +++ b/src/H5FDsubfiling/H5FDioc.h @@ -20,14 +20,16 @@ #ifndef H5FDioc_H #define H5FDioc_H -#include "H5FDsubfiling.h" +/* Public header files */ +#include "H5FDpublic.h" /* File drivers */ #ifdef H5_HAVE_IOC_VFD + /** * \def H5FD_IOC * Macro that returns the identifier for the #H5FD_IOC driver. \hid_t{file driver} */ -#define H5FD_IOC (H5FDperform_init(H5FD_ioc_init)) +#define H5FD_IOC (H5OPEN H5FD_IOC_id_g) #else #define H5FD_IOC (H5I_INVALID_HID) #endif @@ -114,11 +116,12 @@ typedef struct H5FD_ioc_config_t { extern "C" { #endif -/** - * \brief Internal routine to initialize #H5FD_IOC driver. Not meant to be - * called directly by an HDF5 application +/** @private + * + * \brief ID for the IOC VFD */ -H5_DLL hid_t H5FD_ioc_init(void); +H5_DLLVAR hid_t H5FD_IOC_id_g; + /** * \ingroup FAPL * diff --git a/src/H5FDsubfiling/H5FDioc_int.c b/src/H5FDsubfiling/H5FDioc_int.c index 4a1f8486ba6..c334624726c 100644 --- a/src/H5FDsubfiling/H5FDioc_int.c +++ b/src/H5FDsubfiling/H5FDioc_int.c @@ -14,7 +14,12 @@ * Purpose: This is part of an I/O concentrator driver. */ -#include "H5FDioc_priv.h" +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ + +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5FDpkg.h" /* File drivers */ +#include "H5FDioc_priv.h" /* I/O concetrator file driver */ /* * Given a file offset, the stripe size, the number of IOCs and the number of @@ -80,12 +85,12 @@ herr_t H5FD__ioc_write_independent_async(int64_t context_id, int64_t offset, int64_t elements, const void *data, io_req_t **io_req) { - subfiling_context_t *sf_context = NULL; - MPI_Request ack_request = MPI_REQUEST_NULL; - io_req_t *sf_io_request = NULL; - int64_t ioc_start; - int64_t ioc_offset; - int64_t ioc_subfile_idx; + subfiling_context_t *sf_context = NULL; + MPI_Request ack_request = MPI_REQUEST_NULL; + io_req_t *sf_io_request = NULL; + int64_t ioc_start = -1; + int64_t ioc_offset = -1; + int64_t ioc_subfile_idx = -1; int64_t msg[3] = {0}; int *io_concentrators = NULL; int num_io_concentrators; @@ -236,13 +241,13 @@ herr_t H5FD__ioc_read_independent_async(int64_t context_id, int64_t offset, int64_t elements, void *data, io_req_t **io_req) { - subfiling_context_t *sf_context = NULL; - MPI_Request ack_request = MPI_REQUEST_NULL; - io_req_t *sf_io_request = NULL; - bool need_data_tag = false; - int64_t ioc_start; - int64_t ioc_offset; - int64_t ioc_subfile_idx; + subfiling_context_t *sf_context = NULL; + MPI_Request ack_request = MPI_REQUEST_NULL; + io_req_t *sf_io_request = NULL; + bool need_data_tag = false; + int64_t ioc_start = -1; + int64_t ioc_offset = -1; + int64_t ioc_subfile_idx = -1; int64_t msg[3] = {0}; int *io_concentrators = NULL; int num_io_concentrators; diff --git a/src/H5FDsubfiling/H5FDioc_priv.h b/src/H5FDsubfiling/H5FDioc_priv.h index fa4c431c6c8..a506392a160 100644 --- a/src/H5FDsubfiling/H5FDioc_priv.h +++ b/src/H5FDsubfiling/H5FDioc_priv.h @@ -21,16 +21,12 @@ /* H5 Headers */ /**************/ +/* Public header */ +#include "H5FDioc.h" /* IOC VFD */ + +/* Private headers */ #include "H5private.h" /* Generic Functions */ -#include "H5CXprivate.h" /* API Contexts */ -#include "H5Dprivate.h" /* Datasets */ -#include "H5Eprivate.h" /* Error handling */ -#include "H5FDioc.h" /* IOC VFD */ -#include "H5Iprivate.h" /* IDs */ -#include "H5MMprivate.h" /* Memory management */ -#include "H5Pprivate.h" /* Property lists */ #include "H5TSprivate.h" /* Threadsafety */ - #include "H5subfiling_common.h" /* diff --git a/src/H5FDsubfiling/H5FDioc_threads.c b/src/H5FDsubfiling/H5FDioc_threads.c index e3f267952fc..21999a0ed9b 100644 --- a/src/H5FDsubfiling/H5FDioc_threads.c +++ b/src/H5FDsubfiling/H5FDioc_threads.c @@ -10,9 +10,12 @@ * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -#include "H5FDioc_priv.h" +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ -#include "H5FDsubfiling.h" +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5FDpkg.h" /* File drivers */ +#include "H5FDioc_priv.h" /* I/O concetrator file driver */ #define MIN_READ_RETRIES 10 diff --git a/src/H5FDsubfiling/H5FDsubfile_int.c b/src/H5FDsubfiling/H5FDsubfile_int.c index 6c687aa69a7..e073f5c8fdd 100644 --- a/src/H5FDsubfiling/H5FDsubfile_int.c +++ b/src/H5FDsubfiling/H5FDsubfile_int.c @@ -19,7 +19,12 @@ /* Headers */ /***********/ -#include "H5FDsubfiling_priv.h" +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ + +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5FDpkg.h" /* File drivers */ +#include "H5FDsubfiling_priv.h" /* Subfiling file driver */ /*------------------------------------------------------------------------- * Function: H5FD__subfiling__truncate_sub_files diff --git a/src/H5FDsubfiling/H5FDsubfiling.c b/src/H5FDsubfiling/H5FDsubfiling.c index 6f14d8492f3..42891bb1bc4 100644 --- a/src/H5FDsubfiling/H5FDsubfiling.c +++ b/src/H5FDsubfiling/H5FDsubfiling.c @@ -16,27 +16,30 @@ * mirror, and family VFDs. */ -#include "H5FDdrvr_module.h" /* This source code file is part of the H5FD driver module */ +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ #include "H5private.h" /* Generic Functions */ #include "H5CXprivate.h" /* API contexts, etc. */ -#include "H5Dprivate.h" /* Dataset stuff */ #include "H5Eprivate.h" /* Error handling */ -#include "H5FDprivate.h" /* File drivers */ -#include "H5FDsubfiling.h" /* Subfiling file driver */ -#include "H5FDsubfiling_priv.h" /* Subfiling file driver */ +#include "H5Fprivate.h" /* File access */ +#include "H5FDpkg.h" /* File drivers */ #include "H5FDsec2.h" /* Sec2 VFD */ +#include "H5FDsubfiling_priv.h" /* Subfiling file driver */ #include "H5FLprivate.h" /* Free Lists */ -#include "H5Fprivate.h" /* File access */ #include "H5Iprivate.h" /* IDs */ #include "H5MMprivate.h" /* Memory management */ #include "H5Pprivate.h" /* Property lists */ /* The driver identification number, initialized at runtime */ -static hid_t H5FD_SUBFILING_g = H5I_INVALID_HID; +hid_t H5FD_SUBFILING_id_g = H5I_INVALID_HID; + +/* Flag to indicate whether global driver resources & settings have been + * initialized. + */ +static bool H5FD_subfiling_init_s = false; /* Whether the driver initialized MPI on its own */ -static bool H5FD_mpi_self_initialized = false; +static bool H5FD_mpi_self_initialized_s = false; /* The description of a file belonging to this driver. The 'eoa' and 'eof' * determine the amount of hdf5 address space in use and the high-water mark @@ -178,7 +181,7 @@ static herr_t H5FD__subfiling_read_vector(H5FD_t *file, hid_t dxpl_id, uint32_t static herr_t H5FD__subfiling_write_vector(H5FD_t *file, hid_t dxpl_id, uint32_t count, H5FD_mem_t types[], haddr_t addrs[], size_t sizes[], const void *bufs[] /* in */); static herr_t H5FD__subfiling_truncate(H5FD_t *_file, hid_t dxpl_id, bool closing); -static herr_t H5FD__subfiling_del(const char *name, hid_t fapl); +static herr_t H5FD__subfiling_delete(const char *name, hid_t fapl); static herr_t H5FD__subfiling_ctl(H5FD_t *_file, uint64_t op_code, uint64_t flags, const void *input, void **output); @@ -238,8 +241,6 @@ static void H5_subfiling_dump_iovecs(subfiling_context_t *sf_context, size_t ior haddr_t *io_addrs, size_t *io_sizes, H5_flexible_const_ptr_t *io_bufs); #endif -void H5FD__subfiling_mpi_finalize(void); - static const H5FD_class_t H5FD_subfiling_g = { H5FD_CLASS_VERSION, /* VFD interface version */ H5_VFD_SUBFILING, /* value */ @@ -278,7 +279,7 @@ static const H5FD_class_t H5FD_subfiling_g = { H5FD__subfiling_truncate, /* truncate */ NULL, /* lock */ NULL, /* unlock */ - H5FD__subfiling_del, /* del */ + H5FD__subfiling_delete, /* del */ H5FD__subfiling_ctl, /* ctl */ H5FD_FLMAP_DICHOTOMY /* fl_map */ }; @@ -286,101 +287,110 @@ static const H5FD_class_t H5FD_subfiling_g = { /* Declare a free list to manage the H5FD_subfiling_t struct */ H5FL_DEFINE_STATIC(H5FD_subfiling_t); -/* - * If this VFD initialized MPI, this routine will be registered - * as an atexit handler in order to finalize MPI before the - * application exits. +/*------------------------------------------------------------------------- + * Function: H5FD__subfiling_register + * + * Purpose: Register the driver with the library. + * + * Return: SUCCEED/FAIL + * + *------------------------------------------------------------------------- */ -void -H5FD__subfiling_mpi_finalize(void) +herr_t +H5FD__subfiling_register(void) { - /* - * Don't call normal FUNC_ENTER() since we don't want to initialize the - * whole library just to release it all right away. It is safe to call - * this function for an uninitialized library. - */ - FUNC_ENTER_NOAPI_NOINIT_NOERR + herr_t ret_value = SUCCEED; /* Return value */ - H5_term_library(); - MPI_Finalize(); + FUNC_ENTER_PACKAGE - FUNC_LEAVE_NOAPI_VOID -} + /* Register the Subfiling VFD, if it isn't already registered */ + if (H5I_VFL != H5I_get_type(H5FD_SUBFILING_id_g)) + if ((H5FD_SUBFILING_id_g = H5FD_register(&H5FD_subfiling_g, sizeof(H5FD_class_t), false)) < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, FAIL, "can't register subfiling VFD"); -/*------------------------------------------------------------------------- - * Function: H5FD_subfiling_init +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5FD__subfiling_register() */ + +/*--------------------------------------------------------------------------- + * Function: H5FD__subfiling_unregister * - * Purpose: Initialize this driver by registering the driver with the - * library. + * Purpose: Reset library driver info. * - * Return: Success: The driver ID for the subfiling driver - * Failure: H5I_INVALID_HID + * Returns: SUCCEED (Can't fail) * - *------------------------------------------------------------------------- + *--------------------------------------------------------------------------- */ -hid_t -H5FD_subfiling_init(void) +herr_t +H5FD__subfiling_unregister(void) { - hid_t ret_value = H5I_INVALID_HID; /* Return value */ + FUNC_ENTER_PACKAGE_NOERR - FUNC_ENTER_NOAPI(H5I_INVALID_HID) + /* Reset VFL ID */ + H5FD_SUBFILING_id_g = H5I_INVALID_HID; - /* Register the Subfiling VFD, if it isn't already registered */ - if (H5I_VFL != H5I_get_type(H5FD_SUBFILING_g)) { - int mpi_initialized = 0; - int provided = 0; - int mpi_code; - - if ((H5FD_SUBFILING_g = H5FD_register(&H5FD_subfiling_g, sizeof(H5FD_class_t), false)) < 0) - HGOTO_ERROR(H5E_VFL, H5E_CANTREGISTER, H5I_INVALID_HID, "can't register subfiling VFD"); - - /* Initialize MPI if not already initialized */ - if (MPI_SUCCESS != (mpi_code = MPI_Initialized(&mpi_initialized))) - HMPI_GOTO_ERROR(H5I_INVALID_HID, "MPI_Initialized failed", mpi_code); - if (mpi_initialized) { - /* If MPI is initialized, validate that it was initialized with MPI_THREAD_MULTIPLE */ - if (MPI_SUCCESS != (mpi_code = MPI_Query_thread(&provided))) - HMPI_GOTO_ERROR(H5I_INVALID_HID, "MPI_Query_thread failed", mpi_code); - if (provided != MPI_THREAD_MULTIPLE) - HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, H5I_INVALID_HID, - "Subfiling VFD requires the use of MPI_Init_thread with MPI_THREAD_MULTIPLE"); - } - else { - int required = MPI_THREAD_MULTIPLE; + FUNC_LEAVE_NOAPI(SUCCEED) +} /* end H5FD__subfiling_unregister() */ + +/*------------------------------------------------------------------------- + * Function: H5FD__subfiling_init + * + * Purpose: Singleton to initialize global driver settings & resources. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +static herr_t +H5FD__subfiling_init(void) +{ + int mpi_initialized = 0; + int provided = 0; + int mpi_code; + herr_t ret_value = SUCCEED; /* Return value */ - if (MPI_SUCCESS != (mpi_code = MPI_Init_thread(NULL, NULL, required, &provided))) - HMPI_GOTO_ERROR(H5I_INVALID_HID, "MPI_Init_thread failed", mpi_code); + FUNC_ENTER_PACKAGE - H5FD_mpi_self_initialized = true; + /* Initialize MPI if not already initialized */ + if (MPI_SUCCESS != (mpi_code = MPI_Initialized(&mpi_initialized))) + HMPI_GOTO_ERROR(FAIL, "MPI_Initialized failed", mpi_code); + if (mpi_initialized) { + /* If MPI is initialized, validate that it was initialized with MPI_THREAD_MULTIPLE */ + if (MPI_SUCCESS != (mpi_code = MPI_Query_thread(&provided))) + HMPI_GOTO_ERROR(FAIL, "MPI_Query_thread failed", mpi_code); + if (provided != MPI_THREAD_MULTIPLE) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, + "Subfiling VFD requires the use of MPI_Init_thread with MPI_THREAD_MULTIPLE"); + } + else { + if (MPI_SUCCESS != (mpi_code = MPI_Init_thread(NULL, NULL, MPI_THREAD_MULTIPLE, &provided))) + HMPI_GOTO_ERROR(FAIL, "MPI_Init_thread failed", mpi_code); - if (provided != required) - HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, H5I_INVALID_HID, - "MPI doesn't support MPI_Init_thread with MPI_THREAD_MULTIPLE"); + H5FD_mpi_self_initialized_s = true; - if (atexit(H5FD__subfiling_mpi_finalize) < 0) - HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, H5I_INVALID_HID, - "can't register atexit handler for MPI_Finalize"); - } + if (provided != MPI_THREAD_MULTIPLE) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, + "MPI doesn't support MPI_Init_thread with MPI_THREAD_MULTIPLE"); + } - /* - * Create the MPI Datatype that will be used - * for sending/receiving RPC messages - */ - HDcompile_assert(sizeof(((sf_work_request_t *)NULL)->header) == 3 * sizeof(int64_t)); - if (H5_subfiling_rpc_msg_type == MPI_DATATYPE_NULL) { - if (MPI_SUCCESS != (mpi_code = MPI_Type_contiguous(3, MPI_INT64_T, &H5_subfiling_rpc_msg_type))) - HMPI_GOTO_ERROR(H5I_INVALID_HID, "MPI_Type_contiguous failed", mpi_code); - if (MPI_SUCCESS != (mpi_code = MPI_Type_commit(&H5_subfiling_rpc_msg_type))) - HMPI_GOTO_ERROR(H5I_INVALID_HID, "MPI_Type_commit failed", mpi_code); - } + /* + * Create the MPI Datatype that will be used + * for sending/receiving RPC messages + */ + HDcompile_assert(sizeof(((sf_work_request_t *)NULL)->header) == 3 * sizeof(int64_t)); + if (H5_subfiling_rpc_msg_type == MPI_DATATYPE_NULL) { + if (MPI_SUCCESS != (mpi_code = MPI_Type_contiguous(3, MPI_INT64_T, &H5_subfiling_rpc_msg_type))) + HMPI_GOTO_ERROR(FAIL, "MPI_Type_contiguous failed", mpi_code); + if (MPI_SUCCESS != (mpi_code = MPI_Type_commit(&H5_subfiling_rpc_msg_type))) + HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code); } - /* Set return value */ - ret_value = H5FD_SUBFILING_g; + /* Indicate that driver is set up */ + H5FD_subfiling_init_s = true; done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_subfiling_init() */ +} /* end H5FD__subfiling_init() */ /*--------------------------------------------------------------------------- * Function: H5FD__subfiling_term @@ -394,44 +404,45 @@ H5FD_subfiling_init(void) static herr_t H5FD__subfiling_term(void) { + int mpi_finalized; + int mpi_code; herr_t ret_value = SUCCEED; FUNC_ENTER_PACKAGE - if (H5FD_SUBFILING_g >= 0) { - int mpi_finalized; - int mpi_code; - - /* - * Retrieve status of whether MPI has already been terminated. - * This can happen if an HDF5 ID is left unclosed and HDF5 - * shuts down after MPI_Finalize() is called in an application. - */ - if (MPI_SUCCESS != (mpi_code = MPI_Finalized(&mpi_finalized))) - HMPI_GOTO_ERROR(FAIL, "MPI_Finalized failed", mpi_code); + /* + * Retrieve status of whether MPI has already been terminated. + * This can happen if an HDF5 ID is left unclosed and HDF5 + * shuts down after MPI_Finalize() is called in an application. + */ + if (MPI_SUCCESS != (mpi_code = MPI_Finalized(&mpi_finalized))) + HMPI_GOTO_ERROR(FAIL, "MPI_Finalized failed", mpi_code); + if (!mpi_finalized) { /* Free RPC message MPI Datatype */ - if (H5_subfiling_rpc_msg_type != MPI_DATATYPE_NULL) { - if (!mpi_finalized) { - if (MPI_SUCCESS != (mpi_code = MPI_Type_free(&H5_subfiling_rpc_msg_type))) - HMPI_GOTO_ERROR(FAIL, "MPI_Type_free failed", mpi_code); - } + if (H5_subfiling_rpc_msg_type != MPI_DATATYPE_NULL) + if (MPI_SUCCESS != (mpi_code = MPI_Type_free(&H5_subfiling_rpc_msg_type))) + HMPI_GOTO_ERROR(FAIL, "MPI_Type_free failed", mpi_code); + + /* Terminate MPI if the driver initialized it */ + if (H5FD_mpi_self_initialized_s) { + if (MPI_SUCCESS != (mpi_code = MPI_Finalize())) + HMPI_GOTO_ERROR(FAIL, "MPI_Finalize failed", mpi_code); + + H5FD_mpi_self_initialized_s = false; + } + } #ifdef H5_SUBFILING_DEBUG - else - printf("** WARNING **: HDF5 is terminating the Subfiling VFD after MPI_Finalize() was called " - "- an HDF5 ID was probably left unclosed\n"); + else + printf("** WARNING **: HDF5 is terminating the Subfiling VFD after MPI_Finalize() was called " + "- an HDF5 ID was probably left unclosed\n"); #endif - } - /* Clean up resources */ - if (H5FD__subfiling_terminate() < 0) - HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, FAIL, "can't cleanup internal subfiling resources"); - } + /* Clean up resources */ + if (H5FD__subfiling_terminate() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTRELEASE, FAIL, "can't cleanup internal subfiling resources"); done: - /* Reset VFL ID */ - H5FD_SUBFILING_g = H5I_INVALID_HID; - FUNC_LEAVE_NOAPI(ret_value) } /* end H5FD__subfiling_term() */ @@ -461,13 +472,14 @@ H5Pset_fapl_subfiling(hid_t fapl_id, const H5FD_subfiling_config_t *vfd_config) FUNC_ENTER_API(FAIL) - /* Ensure Subfiling (and therefore MPI) is initialized before doing anything */ - if (H5FD_subfiling_init() < 0) - HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize subfiling VFD"); - if (NULL == (plist = H5P_object_verify(fapl_id, H5P_FILE_ACCESS))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list"); + /* Initialize driver, if it's not yet */ + if (!H5FD_subfiling_init_s) + if (H5FD__subfiling_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize driver"); + if (vfd_config == NULL) { if (NULL == (subfiling_conf = H5MM_calloc(sizeof(*subfiling_conf)))) HGOTO_ERROR(H5E_VFL, H5E_CANTALLOC, FAIL, "can't allocate subfiling VFD configuration"); @@ -544,6 +556,11 @@ H5Pget_fapl_subfiling(hid_t fapl_id, H5FD_subfiling_config_t *config_out) if (NULL == (plist = H5P_object_verify(fapl_id, H5P_FILE_ACCESS))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list"); + /* Initialize driver, if it's not yet */ + if (!H5FD_subfiling_init_s) + if (H5FD__subfiling_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize driver"); + if (H5FD_SUBFILING != H5P_peek_driver(plist)) use_default_config = true; else { @@ -1113,6 +1130,11 @@ H5FD__subfiling_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t ma if (ADDR_OVERFLOW(maxaddr)) HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, NULL, "bogus maxaddr"); + /* Initialize driver, if it's not yet */ + if (!H5FD_subfiling_init_s) + if (H5FD__subfiling_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, NULL, "can't initialize driver"); + if (NULL == (file = (H5FD_subfiling_t *)H5FL_CALLOC(H5FD_subfiling_t))) HGOTO_ERROR(H5E_VFL, H5E_CANTALLOC, NULL, "unable to allocate file struct"); file->comm = MPI_COMM_NULL; @@ -1127,7 +1149,7 @@ H5FD__subfiling_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t ma if (NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list"); - if (H5FD_mpi_self_initialized) { + if (H5FD_mpi_self_initialized_s) { file->comm = MPI_COMM_WORLD; file->info = MPI_INFO_NULL; } @@ -1759,8 +1781,17 @@ H5FD__subfiling_truncate(H5FD_t *_file, hid_t H5_ATTR_UNUSED dxpl_id, bool H5_AT FUNC_LEAVE_NOAPI(ret_value) } /* end H5FD__subfiling_truncate() */ +/*------------------------------------------------------------------------- + * Function: H5FD__subfiling_delete + * + * Purpose: Delete a file + * + * Return: SUCCEED/FAIL + * + *------------------------------------------------------------------------- + */ static herr_t -H5FD__subfiling_del(const char *name, hid_t fapl) +H5FD__subfiling_delete(const char *name, hid_t fapl) { const H5FD_subfiling_config_t *subfiling_config = NULL; H5FD_subfiling_config_t default_config; @@ -1769,6 +1800,11 @@ H5FD__subfiling_del(const char *name, hid_t fapl) FUNC_ENTER_PACKAGE + /* Initialize driver, if it's not yet */ + if (!H5FD_subfiling_init_s) + if (H5FD__subfiling_init() < 0) + HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "can't initialize driver"); + if (NULL == (plist = H5P_object_verify(fapl, H5P_FILE_ACCESS))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list"); diff --git a/src/H5FDsubfiling/H5FDsubfiling.h b/src/H5FDsubfiling/H5FDsubfiling.h index 7d546bca84a..01938e4f8d9 100644 --- a/src/H5FDsubfiling/H5FDsubfiling.h +++ b/src/H5FDsubfiling/H5FDsubfiling.h @@ -14,12 +14,16 @@ #ifndef H5FDsubfiling_H #define H5FDsubfiling_H +/* Public header files */ +#include "H5FDpublic.h" /* File drivers */ + #ifdef H5_HAVE_SUBFILING_VFD + /** * \def H5FD_SUBFILING * Macro that returns the identifier for the #H5FD_SUBFILING driver. \hid_t{file driver} */ -#define H5FD_SUBFILING (H5FDperform_init(H5FD_subfiling_init)) +#define H5FD_SUBFILING (H5OPEN H5FD_SUBFILING_id_g) #else #define H5FD_SUBFILING (H5I_INVALID_HID) #endif @@ -319,11 +323,12 @@ typedef struct H5FD_subfiling_config_t { extern "C" { #endif -/** - * \brief Internal routine to initialize #H5FD_SUBFILING driver. Not meant to be - * called directly by an HDF5 application +/** @private + * + * \brief ID for the SUBFILING VFD */ -H5_DLL hid_t H5FD_subfiling_init(void); +H5_DLLVAR hid_t H5FD_SUBFILING_id_g; + /** * \ingroup FAPL * diff --git a/src/H5FDsubfiling/H5FDsubfiling_priv.h b/src/H5FDsubfiling/H5FDsubfiling_priv.h index fd6779c4178..b746326959c 100644 --- a/src/H5FDsubfiling/H5FDsubfiling_priv.h +++ b/src/H5FDsubfiling/H5FDsubfiling_priv.h @@ -21,16 +21,11 @@ /* H5 Headers */ /**************/ -#include "H5private.h" /* Generic Functions */ -#include "H5CXprivate.h" /* API Contexts */ -#include "H5Dprivate.h" /* Datasets */ -#include "H5Eprivate.h" /* Error handling */ +/* Public header */ #include "H5FDsubfiling.h" /* Subfiling VFD */ -#include "H5FDioc.h" /* IOC VFD */ -#include "H5Iprivate.h" /* IDs */ -#include "H5MMprivate.h" /* Memory management */ -#include "H5Pprivate.h" /* Property lists */ +/* Private headers */ +#include "H5private.h" /* Generic Functions */ #include "H5subfiling_common.h" #define DRIVER_INFO_MESSAGE_MAX_INFO 65536 diff --git a/src/H5FDsubfiling/H5subfiling_common.c b/src/H5FDsubfiling/H5subfiling_common.c index 63078a3c031..9b393412242 100644 --- a/src/H5FDsubfiling/H5subfiling_common.c +++ b/src/H5FDsubfiling/H5subfiling_common.c @@ -14,12 +14,16 @@ * Generic code for integrating an HDF5 VFD with the subfiling feature */ +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ + +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5FDpkg.h" /* File drivers */ +#include "H5Iprivate.h" /* IDs */ +#include "H5MMprivate.h" /* Memory management */ +#include "H5TSprivate.h" /* Threadsafety */ #include "H5subfiling_common.h" -#include "H5Eprivate.h" -#include "H5MMprivate.h" -#include "H5TSprivate.h" /* Threadsafety */ - typedef struct { /* Format of a context map entry */ uint64_t file_id; /* key value (linear search of the cache) */ int64_t sf_context_id; /* The return value if matching file_handle */ @@ -94,7 +98,7 @@ static int64_t H5FD__subfiling_new_object_id(sf_obj_type_t obj_type) { int64_t index_val = 0; - int64_t ret_value; + int64_t ret_value = 0; FUNC_ENTER_PACKAGE diff --git a/src/H5FDsubfiling/H5subfiling_common.h b/src/H5FDsubfiling/H5subfiling_common.h index 8dc08ac82f9..6e140cccb4c 100644 --- a/src/H5FDsubfiling/H5subfiling_common.h +++ b/src/H5FDsubfiling/H5subfiling_common.h @@ -17,14 +17,11 @@ #ifndef H5_SUBFILING_COMMON_H #define H5_SUBFILING_COMMON_H -#include "H5private.h" /* Generic Functions */ -#include "H5FDprivate.h" /* File Drivers */ -#include "H5Iprivate.h" /* IDs */ -#include "H5Pprivate.h" /* Property lists */ -#include "H5TSprivate.h" /* Threads */ - -#include "H5FDsubfiling.h" -#include "H5FDioc.h" +#include "H5private.h" /* Generic Functions */ +#include "H5FDsubfiling.h" /* Subfiling file driver */ +#include "H5FDioc.h" /* I/O concentrator file driver */ +#include "H5Pprivate.h" /* Property lists */ +#include "H5TSprivate.h" /* Threads */ #ifndef PATH_MAX #define PATH_MAX 4096 diff --git a/src/H5FDwindows.c b/src/H5FDwindows.c index c44de9935fc..182958fcb15 100644 --- a/src/H5FDwindows.c +++ b/src/H5FDwindows.c @@ -10,15 +10,18 @@ * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -#include "H5private.h" /* Generic Functions */ +#include "H5FDmodule.h" /* This source code file is part of the H5FD module */ + +#include "H5private.h" /* Generic Functions */ + +#ifdef H5_HAVE_WINDOWS + #include "H5Eprivate.h" /* Error handling */ -#include "H5FDprivate.h" /* File drivers */ -#include "H5FDwindows.h" /* Windows file driver */ #include "H5FDsec2.h" /* Windows file driver */ +#include "H5FDpkg.h" /* File drivers */ +#include "H5FDwindows.h" /* Windows file driver */ #include "H5Pprivate.h" /* Property lists */ -#ifdef H5_HAVE_WINDOWS - /*------------------------------------------------------------------------- * Function: H5Pset_fapl_windows * diff --git a/src/H5FDwindows.h b/src/H5FDwindows.h index 02e20008357..dccb73f80bc 100644 --- a/src/H5FDwindows.h +++ b/src/H5FDwindows.h @@ -20,13 +20,22 @@ #ifndef H5FDwindows_H #define H5FDwindows_H -/** Initializer for the Windows VFD */ -#define H5FD_WINDOWS (H5FD_sec2_init()) +/* Public header files */ +#include "H5FDpublic.h" /* File drivers */ + +/** ID for the windows VFD */ +#define H5FD_WINDOWS (H5OPEN H5FD_SEC2_id_g) #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ +/** @private + * + * \brief ID for the windows (sec2) VFD + */ +H5_DLLVAR hid_t H5FD_SEC2_id_g; + /** * \ingroup FAPL * diff --git a/src/H5FL.c b/src/H5FL.c index 4f7a94060f1..9430a109107 100644 --- a/src/H5FL.c +++ b/src/H5FL.c @@ -110,6 +110,9 @@ struct H5FL_fac_node_t { struct H5FL_fac_node_t *next; /* Pointer to next block in free list */ }; +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* The head of the list of factory things to garbage collect */ static H5FL_fac_gc_list_t H5FL_fac_gc_head = {0, NULL}; @@ -168,15 +171,20 @@ H5FL_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR + if (H5_PKG_INIT_VAR) { /* Garbage collect any nodes on the free lists */ - (void) - H5FL_garbage_coll(); - - /* Shut down the various kinds of free lists */ - n += H5FL__reg_term(); - n += H5FL__fac_term_all(); - n += H5FL__arr_term(); - n += H5FL__blk_term(); + (void)H5FL_garbage_coll(); + + /* Shut down the various kinds of free lists */ + n += H5FL__reg_term(); + n += H5FL__fac_term_all(); + n += H5FL__arr_term(); + n += H5FL__blk_term(); + + /* Mark interface closed */ + if (0 == n) + H5_PKG_INIT_VAR = false; + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5FL_term_package() */ diff --git a/src/H5FLmodule.h b/src/H5FLmodule.h index 172c13d1b55..97fbed8f345 100644 --- a/src/H5FLmodule.h +++ b/src/H5FLmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5FL_MODULE -#define H5_MY_PKG H5FL -#define H5_MY_PKG_ERR H5E_RESOURCE +#define H5_MY_PKG H5FL +#define H5_MY_PKG_ERR H5E_RESOURCE +#define H5_MY_PKG_INIT NO #endif /* H5FLmodule_H */ diff --git a/src/H5FS.c b/src/H5FS.c index 2f8d28fdec6..d00c870ff04 100644 --- a/src/H5FS.c +++ b/src/H5FS.c @@ -58,6 +58,9 @@ static herr_t H5FS__sinfo_free_node_cb(void *item, void *key, void *op_data); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Declare a free list to manage the H5FS_section_class_t sequence information */ H5FL_SEQ_DEFINE(H5FS_section_class_t); diff --git a/src/H5FSint.c b/src/H5FSint.c index 8db6d367bc5..7ccd7584a66 100644 --- a/src/H5FSint.c +++ b/src/H5FSint.c @@ -64,6 +64,28 @@ /* Local Variables */ /*******************/ +/*------------------------------------------------------------------------- + * Function: H5FS_init + * + * Purpose: Initialize the interface in case it is unable to initialize + * itself soon enough. + * + * Return: Success: non-negative + * Failure: negative + * + *------------------------------------------------------------------------- + */ +herr_t +H5FS_init(void) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_NOAPI_NOERR + /* FUNC_ENTER() does all the work */ + + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5FS_init() */ + /*------------------------------------------------------------------------- * Function: H5FS__create_flush_depend * diff --git a/src/H5FSmodule.h b/src/H5FSmodule.h index a44bb4c4810..48ae8d37277 100644 --- a/src/H5FSmodule.h +++ b/src/H5FSmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5FS_MODULE -#define H5_MY_PKG H5FS -#define H5_MY_PKG_ERR H5E_FSPACE +#define H5_MY_PKG H5FS +#define H5_MY_PKG_ERR H5E_FSPACE +#define H5_MY_PKG_INIT NO #endif /* H5FSmodule_H */ diff --git a/src/H5FSprivate.h b/src/H5FSprivate.h index 9e92c7544b6..957f6f9a665 100644 --- a/src/H5FSprivate.h +++ b/src/H5FSprivate.h @@ -183,6 +183,9 @@ H5FL_SEQ_EXTERN(H5FS_section_class_t); /* Library-private Function Prototypes */ /***************************************/ +/* Package initialization routine */ +H5_DLL herr_t H5FS_init(void); + /* Free space manager routines */ H5_DLL H5FS_t *H5FS_create(H5F_t *f, haddr_t *fs_addr, const H5FS_create_t *fs_create, uint16_t nclasses, const H5FS_section_class_t *classes[], void *cls_init_udata, hsize_t alignment, diff --git a/src/H5Fcwfs.c b/src/H5Fcwfs.c index 62de3da6fe6..f6674b2d703 100644 --- a/src/H5Fcwfs.c +++ b/src/H5Fcwfs.c @@ -240,7 +240,7 @@ H5F_cwfs_advance_heap(H5F_t *f, H5HG_heap_t *heap, bool add_heap) unsigned u; /* Local index variable */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Check args */ assert(f); @@ -260,6 +260,7 @@ H5F_cwfs_advance_heap(H5F_t *f, H5HG_heap_t *heap, bool add_heap) f->shared->cwfs[f->shared->ncwfs - 1] = heap; } /* end if */ +done: FUNC_LEAVE_NOAPI(ret_value) } /* H5F_cwfs_advance_heap() */ @@ -279,7 +280,7 @@ H5F_cwfs_remove_heap(H5F_shared_t *shared, H5HG_heap_t *heap) unsigned u; /* Local index variable */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Check args */ assert(shared); @@ -294,5 +295,6 @@ H5F_cwfs_remove_heap(H5F_shared_t *shared, H5HG_heap_t *heap) } /* end if */ } /* end for */ +done: FUNC_LEAVE_NOAPI(ret_value) } /* H5F_cwfs_remove_heap() */ diff --git a/src/H5Fint.c b/src/H5Fint.c index c3d2e3ae82a..d2ede2f978d 100644 --- a/src/H5Fint.c +++ b/src/H5Fint.c @@ -91,6 +91,9 @@ static herr_t H5F__flush_phase2(H5F_t *f, bool closing); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Based on the value of the HDF5_USE_FILE_LOCKING environment variable. * true/false have obvious meanings. FAIL means the environment variable was * not set, so the code should ignore it and use the fapl value instead. @@ -136,6 +139,29 @@ H5F_init(void) herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) + /* FUNC_ENTER() does all the work */ + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5F_init() */ + +/*-------------------------------------------------------------------------- +NAME + H5F__init_package -- Initialize interface-specific information +USAGE + herr_t H5F__init_package() +RETURNS + Non-negative on success/Negative on failure +DESCRIPTION + Initializes any interface-specific data or routines. + +--------------------------------------------------------------------------*/ +herr_t +H5F__init_package(void) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_PACKAGE /* Initialize the ID group for the file IDs */ if (H5I_register_type(H5I_FILE_CLS) < 0) @@ -147,7 +173,7 @@ H5F_init(void) done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5F_init() */ +} /* H5F__init_package() */ /*------------------------------------------------------------------------- * Function: H5F_term_package @@ -171,17 +197,23 @@ H5F_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - if (H5I_nmembers(H5I_FILE) > 0) { - (void)H5I_clear_type(H5I_FILE, false, false); - n++; /*H5I*/ - } /* end if */ - else { - /* Make certain we've cleaned up all the shared file objects */ - H5F_sfile_assert_num(0); + if (H5_PKG_INIT_VAR) { + if (H5I_nmembers(H5I_FILE) > 0) { + (void)H5I_clear_type(H5I_FILE, false, false); + n++; /*H5I*/ + } /* end if */ + else { + /* Make certain we've cleaned up all the shared file objects */ + H5F_sfile_assert_num(0); - /* Destroy the file object id group */ - n += (H5I_dec_type_ref(H5I_FILE) > 0); - } /* end else */ + /* Destroy the file object id group */ + n += (H5I_dec_type_ref(H5I_FILE) > 0); + + /* Mark closed */ + if (0 == n) + H5_PKG_INIT_VAR = false; + } /* end else */ + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5F_term_package() */ diff --git a/src/H5Fmodule.h b/src/H5Fmodule.h index 23463226137..ba9ab98f4dc 100644 --- a/src/H5Fmodule.h +++ b/src/H5Fmodule.h @@ -22,8 +22,9 @@ * reporting macros. */ #define H5F_MODULE -#define H5_MY_PKG H5F -#define H5_MY_PKG_ERR H5E_FILE +#define H5_MY_PKG H5F +#define H5_MY_PKG_ERR H5E_FILE +#define H5_MY_PKG_INIT YES /** \page H5F_UG HDF5 File * diff --git a/src/H5Fmpi.c b/src/H5Fmpi.c index d3e38119524..78909aa1bf2 100644 --- a/src/H5Fmpi.c +++ b/src/H5Fmpi.c @@ -432,7 +432,7 @@ H5F_mpi_retrieve_comm(hid_t loc_id, hid_t acspl_id, MPI_Comm *mpi_comm) bool H5F_get_coll_metadata_reads(const H5F_t *file) { - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI_NOINIT_NOERR assert(file && file->shared); @@ -458,7 +458,7 @@ H5F_shared_get_coll_metadata_reads(const H5F_shared_t *f_sh) H5P_coll_md_read_flag_t file_flag = H5P_USER_FALSE; bool ret_value = false; - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI_NOINIT_NOERR assert(f_sh); @@ -536,7 +536,7 @@ H5F_set_coll_metadata_reads(H5F_t *file, H5P_coll_md_read_flag_t *file_flag, boo H5P_coll_md_read_flag_t prev_file_flag = H5P_USER_FALSE; bool prev_context_flag = false; - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI_NOINIT_NOERR assert(file && file->shared); assert(file_flag); diff --git a/src/H5Fpublic.h b/src/H5Fpublic.h index 4e9214f0a4b..c9b8b9e7731 100644 --- a/src/H5Fpublic.h +++ b/src/H5Fpublic.h @@ -20,48 +20,28 @@ #include "H5ACpublic.h" /* Metadata Cache */ #include "H5Ipublic.h" /* Identifiers */ -/* When this header is included from a private header, don't make calls to H5check() */ -#undef H5CHECK -#ifndef H5private_H -#define H5CHECK H5check(), -#else /* H5private_H */ -#define H5CHECK -#endif /* H5private_H */ - -/* When this header is included from a private HDF5 header, don't make calls to H5open() */ -#undef H5OPEN -#ifndef H5private_H -#define H5OPEN H5open(), -#else /* H5private_H */ -#define H5OPEN -#endif /* H5private_H */ - /* * These are the bits that can be passed to the `flags' argument of * H5Fcreate() and H5Fopen(). Use the bit-wise OR operator (|) to combine - * them as needed. As a side effect, they call H5check_version() to make sure - * that the application is compiled with a version of the hdf5 header files - * which are compatible with the library to which the application is linked. - * We're assuming that these constants are used rather early in the hdf5 - * session. - */ -#define H5F_ACC_RDONLY (H5CHECK H5OPEN 0x0000u) /**< Absence of RDWR: read-only */ -#define H5F_ACC_RDWR (H5CHECK H5OPEN 0x0001u) /**< Open for read and write */ -#define H5F_ACC_TRUNC (H5CHECK H5OPEN 0x0002u) /**< Overwrite existing files */ -#define H5F_ACC_EXCL (H5CHECK H5OPEN 0x0004u) /**< Fail if file already exists*/ + * them as needed. + */ +#define H5F_ACC_RDONLY (0x0000u) /**< Absence of RDWR: read-only */ +#define H5F_ACC_RDWR (0x0001u) /**< Open for read and write */ +#define H5F_ACC_TRUNC (0x0002u) /**< Overwrite existing files */ +#define H5F_ACC_EXCL (0x0004u) /**< Fail if file already exists*/ /* NOTE: 0x0008u was H5F_ACC_DEBUG, now deprecated */ -#define H5F_ACC_CREAT (H5CHECK H5OPEN 0x0010u) /**< Create non-existing files */ +#define H5F_ACC_CREAT (0x0010u) /**< Create non-existing files */ #define H5F_ACC_SWMR_WRITE \ - (H5CHECK 0x0020u) /**< Indicate that this file is open for writing in a \ - * single-writer/multi-reader (SWMR) scenario. \ - * Note that the process(es) opening the file for reading \ - * must open the file with #H5F_ACC_RDONLY and use the \ - * #H5F_ACC_SWMR_READ access flag. */ + (0x0020u) /**< Indicate that this file is open for writing in a \ + * single-writer/multi-reader (SWMR) scenario. \ + * Note that the process(es) opening the file for reading \ + * must open the file with #H5F_ACC_RDONLY and use the \ + * #H5F_ACC_SWMR_READ access flag. */ #define H5F_ACC_SWMR_READ \ - (H5CHECK 0x0040u) /**< Indicate that this file is open for reading in a \ - * single-writer/multi-reader (SWMR) scenario. Note that \ - * the process(es) opening the file for SWMR reading must \ - * also open the file with the #H5F_ACC_RDONLY flag. */ + (0x0040u) /**< Indicate that this file is open for reading in a \ + * single-writer/multi-reader (SWMR) scenario. Note that \ + * the process(es) opening the file for SWMR reading must \ + * also open the file with the #H5F_ACC_RDONLY flag. */ /** * Default property list identifier @@ -69,7 +49,7 @@ * \internal Value passed to H5Pset_elink_acc_flags to cause flags to be taken from the parent file. * \internal ignore setting on lapl */ -#define H5F_ACC_DEFAULT (H5CHECK H5OPEN 0xffffu) +#define H5F_ACC_DEFAULT (0xffffu) /* Flags for H5Fget_obj_count() & H5Fget_obj_ids() calls */ #define H5F_OBJ_FILE (0x0001u) /**< File objects */ @@ -1879,7 +1859,7 @@ H5_DLL herr_t H5Fformat_convert(hid_t fid); #ifndef H5_NO_DEPRECATED_SYMBOLS /* Macros */ -#define H5F_ACC_DEBUG (H5CHECK H5OPEN 0x0000u) /**< Print debug info \deprecated In which version? */ +#define H5F_ACC_DEBUG (0x0000u) /**< Print debug info \deprecated In which version? */ /* Typedefs */ diff --git a/src/H5Fquery.c b/src/H5Fquery.c index 5a119a287f6..89d2e70f0bc 100644 --- a/src/H5Fquery.c +++ b/src/H5Fquery.c @@ -1365,7 +1365,7 @@ H5F_get_use_file_locking(const H5F_t *f) bool H5F_has_vector_select_io(const H5F_t *f, bool is_write) { - bool ret_value; /* Return value */ + bool ret_value = false; /* Return value */ FUNC_ENTER_NOAPI_NOINIT_NOERR diff --git a/src/H5Gint.c b/src/H5Gint.c index 2a7dbf5e255..c037b99de8b 100644 --- a/src/H5Gint.c +++ b/src/H5Gint.c @@ -89,6 +89,9 @@ static herr_t H5G__close_cb(H5VL_object_t *grp_vol_obj, void **request); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Declare a free list to manage the H5G_t struct */ H5FL_DEFINE(H5G_t); H5FL_DEFINE(H5G_shared_t); @@ -112,6 +115,9 @@ static const H5I_class_t H5I_GROUP_CLS[1] = {{ (H5I_free_t)H5G__close_cb /* Callback routine for closing objects of this class */ }}; +/* Flag indicating "top" of interface has been initialized */ +static bool H5G_top_package_initialize_s = false; + /*------------------------------------------------------------------------- * Function: H5G_init * @@ -128,13 +134,48 @@ H5G_init(void) herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) + /* FUNC_ENTER() does all the work */ + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5G_init() */ + +/*------------------------------------------------------------------------- + * Function: H5G__init_package + * + * Purpose: Initializes the H5G interface. + * + * Return: Non-negative on success/Negative on failure + * + * Programmer: Robb Matzke + * Monday, January 5, 1998 + * + * Notes: The group creation properties are registered in the property + * list interface initialization routine (H5P_init_package) + * so that the file creation property class can inherit from it + * correctly. (Which allows the file creation property list to + * control the group creation properties of the root group of + * a file) QAK - 24/10/2005 + * + *------------------------------------------------------------------------- + */ +herr_t +H5G__init_package(void) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_PACKAGE + /* Initialize the ID group for the group IDs */ if (H5I_register_type(H5I_GROUP_CLS) < 0) HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to initialize interface"); + /* Mark "top" of interface as initialized, too */ + H5G_top_package_initialize_s = true; + done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5G_init() */ +} /* end H5G__init_package() */ /*------------------------------------------------------------------------- * Function: H5G_top_term_package @@ -154,10 +195,16 @@ H5G_top_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - if (H5I_nmembers(H5I_GROUP) > 0) { - (void)H5I_clear_type(H5I_GROUP, false, false); - n++; - } + if (H5G_top_package_initialize_s) { + if (H5I_nmembers(H5I_GROUP) > 0) { + (void)H5I_clear_type(H5I_GROUP, false, false); + n++; + } + + /* Mark closed */ + if (0 == n) + H5G_top_package_initialize_s = false; + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5G_top_term_package() */ @@ -183,11 +230,18 @@ H5G_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - /* Sanity checks */ - assert(0 == H5I_nmembers(H5I_GROUP)); + if (H5_PKG_INIT_VAR) { + /* Sanity checks */ + assert(0 == H5I_nmembers(H5I_GROUP)); + assert(false == H5G_top_package_initialize_s); + + /* Destroy the group object id group */ + n += (H5I_dec_type_ref(H5I_GROUP) > 0); - /* Destroy the group object id group */ - n += (H5I_dec_type_ref(H5I_GROUP) > 0); + /* Mark closed */ + if (0 == n) + H5_PKG_INIT_VAR = false; + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5G_term_package() */ diff --git a/src/H5Gmodule.h b/src/H5Gmodule.h index d91afc4d601..3457db90b03 100644 --- a/src/H5Gmodule.h +++ b/src/H5Gmodule.h @@ -22,8 +22,9 @@ * reporting macros. */ #define H5G_MODULE -#define H5_MY_PKG H5G -#define H5_MY_PKG_ERR H5E_SYM +#define H5_MY_PKG H5G +#define H5_MY_PKG_ERR H5E_SYM +#define H5_MY_PKG_INIT YES /** \page H5G_UG HDF5 Groups * diff --git a/src/H5Gname.c b/src/H5Gname.c index 5ee05433d0c..a6c9afdd860 100644 --- a/src/H5Gname.c +++ b/src/H5Gname.c @@ -199,17 +199,23 @@ H5G__common_path(const H5RS_str_t *fullpath_r, const H5RS_str_t *prefix_r) size_t nchars1, nchars2; /* Number of characters in components */ htri_t ret_value = false; /* Return value */ - FUNC_ENTER_PACKAGE_NOERR + FUNC_ENTER_PACKAGE /* Get component of each name */ - fullpath = H5RS_get_str(fullpath_r); - assert(fullpath); - fullpath = H5G__component(fullpath, &nchars1); - assert(fullpath); - prefix = H5RS_get_str(prefix_r); - assert(prefix); - prefix = H5G__component(prefix, &nchars2); - assert(prefix); + if (NULL == (fullpath = H5RS_get_str(fullpath_r))) + HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve full path"); + nchars1 = SIZE_MAX; + if (NULL == (fullpath = H5G__component(fullpath, &nchars1))) + HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve pointer to path component"); + if (SIZE_MAX == nchars1) + HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve component length"); + if (NULL == (prefix = H5RS_get_str(prefix_r))) + HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve path prefix"); + nchars2 = SIZE_MAX; + if (NULL == (prefix = H5G__component(prefix, &nchars2))) + HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve pointer to path component"); + if (SIZE_MAX == nchars2) + HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve component length"); /* Check if we have a real string for each component */ while (*fullpath && *prefix) { @@ -226,6 +232,15 @@ H5G__common_path(const H5RS_str_t *fullpath_r, const H5RS_str_t *prefix_r) assert(fullpath); prefix = H5G__component(prefix, &nchars2); assert(prefix); + if (NULL == (fullpath = H5G__component(fullpath, &nchars1))) + HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve pointer to path component"); + if (SIZE_MAX == nchars1) + HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve component length"); + nchars2 = SIZE_MAX; + if (NULL == (prefix = H5G__component(prefix, &nchars2))) + HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve pointer to path component"); + if (SIZE_MAX == nchars2) + HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve component length"); } /* end if */ else HGOTO_DONE(false); diff --git a/src/H5HF.c b/src/H5HF.c index acb37fa6c66..24af93a7a4e 100644 --- a/src/H5HF.c +++ b/src/H5HF.c @@ -59,6 +59,9 @@ /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /*****************************/ /* Library Private Variables */ /*****************************/ diff --git a/src/H5HFmodule.h b/src/H5HFmodule.h index 435b21a6c1b..ac617415c59 100644 --- a/src/H5HFmodule.h +++ b/src/H5HFmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5HF_MODULE -#define H5_MY_PKG H5HF -#define H5_MY_PKG_ERR H5E_HEAP +#define H5_MY_PKG H5HF +#define H5_MY_PKG_ERR H5E_HEAP +#define H5_MY_PKG_INIT NO #endif /* H5HFmodule_H */ diff --git a/src/H5HFsection.c b/src/H5HFsection.c index b008b3db01d..589b5f84693 100644 --- a/src/H5HFsection.c +++ b/src/H5HFsection.c @@ -673,10 +673,10 @@ H5HF__sect_single_reduce(H5HF_hdr_t *hdr, H5HF_free_section_t *sect, size_t amt) static herr_t H5HF__sect_single_full_dblock(H5HF_hdr_t *hdr, H5HF_free_section_t *sect) { - haddr_t dblock_addr; /* Section's direct block's address */ - size_t dblock_size; /* Section's direct block's size */ - size_t dblock_overhead; /* Direct block's overhead */ - herr_t ret_value = SUCCEED; /* Return value */ + haddr_t dblock_addr = HADDR_UNDEF; /* Section's direct block's address */ + size_t dblock_size = SIZE_MAX; /* Section's direct block's size */ + size_t dblock_overhead; /* Direct block's overhead */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -688,6 +688,10 @@ H5HF__sect_single_full_dblock(H5HF_hdr_t *hdr, H5HF_free_section_t *sect) /* Retrieve direct block address from section */ if (H5HF__sect_single_dblock_info(hdr, sect, &dblock_addr, &dblock_size) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve direct block information"); + if (!H5_addr_defined(dblock_addr)) + HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve data block address"); + if (SIZE_MAX == dblock_size) + HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve data block size"); /* Check for section occupying entire direct block */ /* (and not the root direct block) */ @@ -971,9 +975,9 @@ H5HF__sect_single_shrink(H5FS_section_info_t **_sect, void *_udata) H5HF_sect_add_ud_t *udata = (H5HF_sect_add_ud_t *)_udata; /* User callback data */ H5HF_hdr_t *hdr = udata->hdr; /* Fractal heap header */ H5HF_direct_t *dblock; /* Pointer to direct block for section */ - haddr_t dblock_addr; /* Section's direct block's address */ - size_t dblock_size; /* Section's direct block's size */ - herr_t ret_value = SUCCEED; /* Return value */ + haddr_t dblock_addr = HADDR_UNDEF; /* Section's direct block's address */ + size_t dblock_size = SIZE_MAX; /* Section's direct block's size */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -990,6 +994,10 @@ H5HF__sect_single_shrink(H5FS_section_info_t **_sect, void *_udata) /* Retrieve direct block address from section */ if (H5HF__sect_single_dblock_info(hdr, (*sect), &dblock_addr, &dblock_size) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve direct block information"); + if (!H5_addr_defined(dblock_addr)) + HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve data block address"); + if (SIZE_MAX == dblock_size) + HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve data block size"); /* Protect the direct block for the section */ /* (should be a root direct block) */ @@ -1066,8 +1074,9 @@ static herr_t H5HF__sect_single_valid(const H5FS_section_class_t H5_ATTR_UNUSED *cls, const H5FS_section_info_t *_sect) { const H5HF_free_section_t *sect = (const H5HF_free_section_t *)_sect; /* Pointer to section to check */ + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_PACKAGE_NOERR + FUNC_ENTER_PACKAGE /* Check arguments. */ assert(sect); @@ -1077,8 +1086,8 @@ H5HF__sect_single_valid(const H5FS_section_class_t H5_ATTR_UNUSED *cls, const H5 /* (not enough information to check on a single section in a root direct block) */ if (sect->u.single.parent != NULL) { H5HF_indirect_t *iblock; /* Indirect block that section's direct block resides in */ - haddr_t dblock_addr; /* Direct block address */ - size_t dblock_size; /* Direct block size */ + haddr_t dblock_addr = HADDR_UNDEF; /* Direct block address */ + size_t dblock_size = SIZE_MAX; /* Direct block size */ unsigned dblock_status = 0; /* Direct block's status in the metadata cache */ size_t H5_ATTR_NDEBUG_UNUSED dblock_overhead; /* Direct block's overhead */ herr_t H5_ATTR_NDEBUG_UNUSED status; /* Generic status value */ @@ -1088,11 +1097,14 @@ H5HF__sect_single_valid(const H5FS_section_class_t H5_ATTR_UNUSED *cls, const H5 assert(H5_addr_defined(iblock->ents[sect->u.single.par_entry].addr)); /* Retrieve direct block address from section */ - status = H5HF__sect_single_dblock_info(iblock->hdr, (const H5HF_free_section_t *)sect, - &dblock_addr, &dblock_size); - assert(status >= 0); + if (H5HF__sect_single_dblock_info(iblock->hdr, (const H5HF_free_section_t *)sect, &dblock_addr, + &dblock_size) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve direct block information"); + if (!H5_addr_defined(dblock_addr)) + HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve data block address"); + if (SIZE_MAX == dblock_size) + HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve data block size"); assert(H5_addr_eq(iblock->ents[sect->u.single.par_entry].addr, dblock_addr)); - assert(dblock_size > 0); /* Check if the section is actually within the heap */ assert(sect->sect_info.addr < iblock->hdr->man_iter_off); @@ -1132,7 +1144,8 @@ H5HF__sect_single_valid(const H5FS_section_class_t H5_ATTR_UNUSED *cls, const H5 } /* end if */ } /* end if */ - FUNC_LEAVE_NOAPI(SUCCEED) +done: + FUNC_LEAVE_NOAPI(ret_value) } /* H5HF__sect_single_valid() */ /*------------------------------------------------------------------------- @@ -3259,15 +3272,15 @@ H5HF__sect_indirect_get_iblock(H5HF_free_section_t *sect) static herr_t H5HF__sect_indirect_merge_row(H5HF_hdr_t *hdr, H5HF_free_section_t *row_sect1, H5HF_free_section_t *row_sect2) { - H5HF_free_section_t *sect1, *sect2; /* Indirect sections underlying row sections */ - unsigned start_entry1; /* Start entry for section #1 */ - unsigned start_row1, start_col1; /* Starting row & column for section #1 */ - unsigned end_entry1; /* End entry for section #1 */ - unsigned end_row1; /* Ending row for section #1 */ - unsigned start_row2; /* Starting row for section #2 */ - bool merged_rows; /* Flag to indicate that rows was merged together */ - unsigned u; /* Local index variable */ - herr_t ret_value = SUCCEED; /* Return value */ + H5HF_free_section_t *sect1 = NULL, *sect2 = NULL; /* Indirect sections underlying row sections */ + unsigned start_entry1; /* Start entry for section #1 */ + unsigned start_row1, start_col1; /* Starting row & column for section #1 */ + unsigned end_entry1; /* End entry for section #1 */ + unsigned end_row1; /* Ending row for section #1 */ + unsigned start_row2; /* Starting row for section #2 */ + bool merged_rows; /* Flag to indicate that rows was merged together */ + unsigned u; /* Local index variable */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -3280,10 +3293,10 @@ H5HF__sect_indirect_merge_row(H5HF_hdr_t *hdr, H5HF_free_section_t *row_sect1, H assert(row_sect2->sect_info.type == H5HF_FSPACE_SECT_FIRST_ROW); /* Set up indirect section information */ - sect1 = H5HF__sect_indirect_top(row_sect1->u.row.under); - assert(sect1); - sect2 = H5HF__sect_indirect_top(row_sect2->u.row.under); - assert(sect2); + if (NULL == (sect1 = H5HF__sect_indirect_top(row_sect1->u.row.under))) + HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve pointer to sections"); + if (NULL == (sect2 = H5HF__sect_indirect_top(row_sect2->u.row.under))) + HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve pointer to sections"); /* Sanity check some assumptions about the indirect sections */ assert(sect1->u.indirect.span_size > 0); diff --git a/src/H5HG.c b/src/H5HG.c index 96f3fa3dc79..d28c457d6cb 100644 --- a/src/H5HG.c +++ b/src/H5HG.c @@ -81,6 +81,9 @@ static size_t H5HG__alloc(H5F_t *f, H5HG_heap_t *heap, size_t size, unsigned *h /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Declare a free list to manage the H5HG_heap_t struct */ H5FL_DEFINE(H5HG_heap_t); diff --git a/src/H5HGmodule.h b/src/H5HGmodule.h index 0ed32ceb003..8ec5d9de5f1 100644 --- a/src/H5HGmodule.h +++ b/src/H5HGmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5HG_MODULE -#define H5_MY_PKG H5HG -#define H5_MY_PKG_ERR H5E_HEAP +#define H5_MY_PKG H5HG +#define H5_MY_PKG_ERR H5E_HEAP +#define H5_MY_PKG_INIT NO #endif /* H5HGmodule_H */ diff --git a/src/H5HL.c b/src/H5HL.c index 45df1b2e6e8..b55b3690617 100644 --- a/src/H5HL.c +++ b/src/H5HL.c @@ -64,6 +64,9 @@ static herr_t H5HL__dirty(H5HL_t *heap); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Declare a free list to manage the H5HL_free_t struct */ H5FL_DEFINE(H5HL_free_t); diff --git a/src/H5HLmodule.h b/src/H5HLmodule.h index e9d2ef5e45f..40e32563de7 100644 --- a/src/H5HLmodule.h +++ b/src/H5HLmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5HL_MODULE -#define H5_MY_PKG H5HL -#define H5_MY_PKG_ERR H5E_HEAP +#define H5_MY_PKG H5HL +#define H5_MY_PKG_ERR H5E_HEAP +#define H5_MY_PKG_INIT NO #endif /* H5HLmodule_H */ diff --git a/src/H5HLpkg.h b/src/H5HLpkg.h index aae0078a4c9..2018db25f8a 100644 --- a/src/H5HLpkg.h +++ b/src/H5HLpkg.h @@ -42,15 +42,6 @@ H5FL_BLK_EXTERN(lheap_chunk); /* Package Private Macros */ /**************************/ -/* If this package header is being included in one of the H5HL source files, - * define the proper control macros for the generic FUNC_ENTER/LEAVE and - * error reporting macros. - */ -#ifdef H5HL_PACKAGE -#define H5_MY_PKG H5HL -#define H5_MY_PKG_ERR H5E_HEAP -#endif - #define H5HL_SIZEOF_HDR(F) \ H5HL_ALIGN(H5_SIZEOF_MAGIC + /* heap signature */ \ 1 + /* version */ \ diff --git a/src/H5Iint.c b/src/H5Iint.c index 57bb75bbbd1..785dd9f0e86 100644 --- a/src/H5Iint.c +++ b/src/H5Iint.c @@ -84,6 +84,9 @@ static int H5I__find_id_cb(void *_item, void *_key, void *_udata); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Declared extern in H5Ipkg.h and documented there */ H5I_type_info_t *H5I_type_info_array_g[H5I_MAX_NUM_TYPES]; int H5I_next_type_g = (int)H5I_NTYPES; @@ -123,24 +126,30 @@ H5I_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - H5I_type_info_t *type_info = NULL; /* Pointer to ID type */ - int i; - - /* Count the number of types still in use */ - for (i = 0; i < H5I_next_type_g; i++) - if ((type_info = H5I_type_info_array_g[i]) && type_info->hash_table) - in_use++; - - /* If no types are still being used then clean up */ - if (0 == in_use) { - for (i = 0; i < H5I_next_type_g; i++) { - type_info = H5I_type_info_array_g[i]; - if (type_info) { - assert(NULL == type_info->hash_table); - type_info = H5MM_xfree(type_info); - H5I_type_info_array_g[i] = NULL; + if (H5_PKG_INIT_VAR) { + H5I_type_info_t *type_info = NULL; /* Pointer to ID type */ + int i; + + /* Count the number of types still in use */ + for (i = 0; i < H5I_next_type_g; i++) + if ((type_info = H5I_type_info_array_g[i]) && type_info->hash_table) in_use++; + + /* If no types are still being used then clean up */ + if (0 == in_use) { + for (i = 0; i < H5I_next_type_g; i++) { + type_info = H5I_type_info_array_g[i]; + if (type_info) { + assert(NULL == type_info->hash_table); + type_info = H5MM_xfree(type_info); + H5I_type_info_array_g[i] = NULL; + in_use++; + } } + + /* Mark interface closed */ + if (0 == in_use) + H5_PKG_INIT_VAR = false; } } diff --git a/src/H5Imodule.h b/src/H5Imodule.h index 6f9c4491fb0..45631409862 100644 --- a/src/H5Imodule.h +++ b/src/H5Imodule.h @@ -22,8 +22,9 @@ * reporting macros. */ #define H5I_MODULE -#define H5_MY_PKG H5I -#define H5_MY_PKG_ERR H5E_ID +#define H5_MY_PKG H5I +#define H5_MY_PKG_ERR H5E_ID +#define H5_MY_PKG_INIT NO /** \page H5I_UG HDF5 Identifiers * @todo Under Construction diff --git a/src/H5Lint.c b/src/H5Lint.c index 96f4a6937f9..ab066dd20fd 100644 --- a/src/H5Lint.c +++ b/src/H5Lint.c @@ -174,6 +174,9 @@ static herr_t H5L__get_name_by_idx_cb(H5G_loc_t *grp_loc /*in*/, const char *nam /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /*****************************/ /* Library Private Variables */ /*****************************/ @@ -204,6 +207,27 @@ H5L_init(void) herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) + /* FUNC_ENTER() does all the work */ + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5L_init() */ + +/*------------------------------------------------------------------------- + * Function: H5L__init_package + * + * Purpose: Initialize information specific to H5L interface. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5L__init_package(void) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_PACKAGE /* Initialize user-defined link classes */ if (H5L_register_external() < 0) @@ -211,12 +235,12 @@ H5L_init(void) done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5L_init() */ +} /* end H5L_init_package() */ /*------------------------------------------------------------------------- * Function: H5L_term_package * - * Purpose: Terminate any resources allocated in H5L_init. + * Purpose: Terminate any resources allocated in H5L__init_package. * * Return: Non-negative on success/Negative on failure * @@ -229,11 +253,17 @@ H5L_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - /* Free the table of link types */ - if (H5L_table_g) { - H5L_table_g = (H5L_class_t *)H5MM_xfree(H5L_table_g); - H5L_table_used_g = H5L_table_alloc_g = 0; - n++; + if (H5_PKG_INIT_VAR) { + /* Free the table of link types */ + if (H5L_table_g) { + H5L_table_g = (H5L_class_t *)H5MM_xfree(H5L_table_g); + H5L_table_used_g = H5L_table_alloc_g = 0; + n++; + } /* end if */ + + /* Mark the interface as uninitialized */ + if (0 == n) + H5_PKG_INIT_VAR = false; } /* end if */ FUNC_LEAVE_NOAPI(n) diff --git a/src/H5Lmodule.h b/src/H5Lmodule.h index fda22a9b6ca..963005ab34e 100644 --- a/src/H5Lmodule.h +++ b/src/H5Lmodule.h @@ -22,8 +22,9 @@ * reporting macros. */ #define H5L_MODULE -#define H5_MY_PKG H5L -#define H5_MY_PKG_ERR H5E_LINK +#define H5_MY_PKG H5L +#define H5_MY_PKG_ERR H5E_LINK +#define H5_MY_PKG_INIT YES /** \page H5L_UG HDF5 Links * @todo Under Construction diff --git a/src/H5M.c b/src/H5M.c index a862bad54fe..8108303e43f 100644 --- a/src/H5M.c +++ b/src/H5M.c @@ -57,6 +57,9 @@ static herr_t H5M__get_api_common(hid_t map_id, hid_t key_mem_type_id, const voi /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /*****************************/ /* Library Private Variables */ /*****************************/ @@ -73,6 +76,9 @@ static const H5I_class_t H5I_MAP_CLS[1] = {{ (H5I_free_t)H5M__close_cb /* Callback routine for closing objects of this class */ }}; +/* Flag indicating "top" of interface has been initialized */ +static bool H5M_top_package_initialize_s = false; + /*------------------------------------------------------------------------- * Function: H5M_init * @@ -89,14 +95,40 @@ H5M_init(void) herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) + /* FUNC_ENTER() does all the work */ + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5M_init() */ + +/*------------------------------------------------------------------------- +NAME + H5M__init_package -- Initialize interface-specific information +USAGE + herr_t H5M__init_package() +RETURNS + Non-negative on success/Negative on failure +DESCRIPTION + Initializes any interface-specific data or routines. +--------------------------------------------------------------------------- +*/ +herr_t +H5M__init_package(void) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_PACKAGE /* Initialize the ID group for the map IDs */ if (H5I_register_type(H5I_MAP_CLS) < 0) HGOTO_ERROR(H5E_MAP, H5E_CANTINIT, FAIL, "unable to initialize interface"); + /* Mark "top" of interface as initialized, too */ + H5M_top_package_initialize_s = true; + done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5M_init() */ +} /* end H5M__init_package() */ /*------------------------------------------------------------------------- * Function: H5M_top_term_package @@ -115,10 +147,16 @@ H5M_top_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - if (H5I_nmembers(H5I_MAP) > 0) { - (void)H5I_clear_type(H5I_MAP, false, false); - n++; - } + if (H5M_top_package_initialize_s) { + if (H5I_nmembers(H5I_MAP) > 0) { + (void)H5I_clear_type(H5I_MAP, false, false); + n++; + } + + /* Mark closed */ + if (0 == n) + H5M_top_package_initialize_s = false; + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5M_top_term_package() */ @@ -143,11 +181,18 @@ H5M_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - /* Sanity checks */ - assert(0 == H5I_nmembers(H5I_MAP)); + if (H5_PKG_INIT_VAR) { + /* Sanity checks */ + assert(0 == H5I_nmembers(H5I_MAP)); + assert(false == H5M_top_package_initialize_s); - /* Destroy the dataset object id group */ - n += (H5I_dec_type_ref(H5I_MAP) > 0); + /* Destroy the dataset object id group */ + n += (H5I_dec_type_ref(H5I_MAP) > 0); + + /* Mark closed */ + if (0 == n) + H5_PKG_INIT_VAR = false; + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5M_term_package() */ diff --git a/src/H5MF.c b/src/H5MF.c index a09bb3afcc3..f259318c0ac 100644 --- a/src/H5MF.c +++ b/src/H5MF.c @@ -111,6 +111,9 @@ static herr_t H5MF__sects_cb(H5FS_section_info_t *_sect, void *_udata); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /*****************************/ /* Library Private Variables */ /*****************************/ @@ -1229,14 +1232,14 @@ H5MF_xfree(H5F_t *f, H5FD_mem_t alloc_type, haddr_t addr, hsize_t size) htri_t H5MF_try_extend(H5F_t *f, H5FD_mem_t alloc_type, haddr_t addr, hsize_t size, hsize_t extra_requested) { - H5AC_ring_t orig_ring = H5AC_RING_INV; /* Original ring value */ - H5AC_ring_t fsm_ring; /* Ring of FSM */ - haddr_t end; /* End of block to extend */ - H5FD_mem_t map_type; /* Mapped type */ - H5F_mem_page_t fs_type; /* free space type */ - htri_t allow_extend = true; /* Possible to extend the block */ - hsize_t frag_size = 0; /* Size of mis-aligned fragment */ - htri_t ret_value = false; /* Return value */ + H5AC_ring_t orig_ring = H5AC_RING_INV; /* Original ring value */ + H5AC_ring_t fsm_ring; /* Ring of FSM */ + haddr_t end; /* End of block to extend */ + H5FD_mem_t map_type; /* Mapped type */ + H5F_mem_page_t fs_type = H5F_MEM_PAGE_NTYPES; /* free space type */ + htri_t allow_extend = true; /* Possible to extend the block */ + hsize_t frag_size = 0; /* Size of mis-aligned fragment */ + htri_t ret_value = false; /* Return value */ FUNC_ENTER_NOAPI_TAG(H5AC__FREESPACE_TAG, FAIL) #ifdef H5MF_ALLOC_DEBUG @@ -2552,14 +2555,14 @@ H5MF_settle_raw_data_fsm(H5F_t *f, bool *fsm_settled) { int pass_count; hsize_t alloc_size; - H5F_mem_t mem_type; /* Memory type for iteration */ - H5F_mem_page_t fsm_type; /* FSM type for iteration */ - H5O_fsinfo_t fsinfo; /* Free space manager info message */ - H5FS_stat_t fs_stat; /* Information for free-space manager */ - H5AC_ring_t orig_ring = H5AC_RING_INV; /* Original ring value */ - H5AC_ring_t curr_ring = H5AC_RING_INV; /* Current ring value */ - H5AC_ring_t needed_ring = H5AC_RING_INV; /* Ring value needed for this iteration */ - herr_t ret_value = SUCCEED; /* Return value */ + H5F_mem_t mem_type; /* Memory type for iteration */ + H5F_mem_page_t fsm_type = H5F_MEM_PAGE_NTYPES; /* FSM type for iteration */ + H5O_fsinfo_t fsinfo; /* Free space manager info message */ + H5FS_stat_t fs_stat; /* Information for free-space manager */ + H5AC_ring_t orig_ring = H5AC_RING_INV; /* Original ring value */ + H5AC_ring_t curr_ring = H5AC_RING_INV; /* Current ring value */ + H5AC_ring_t needed_ring = H5AC_RING_INV; /* Ring value needed for this iteration */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI_TAG(H5AC__FREESPACE_TAG, FAIL) @@ -3018,8 +3021,8 @@ H5MF_settle_raw_data_fsm(H5F_t *f, bool *fsm_settled) herr_t H5MF_settle_meta_data_fsm(H5F_t *f, bool *fsm_settled) { - H5F_mem_page_t sm_fshdr_fs_type; /* small fs hdr fsm */ - H5F_mem_page_t sm_fssinfo_fs_type; /* small fs sinfo fsm */ + H5F_mem_page_t sm_fshdr_fs_type = H5F_MEM_PAGE_NTYPES; /* small fs hdr fsm */ + H5F_mem_page_t sm_fssinfo_fs_type = H5F_MEM_PAGE_NTYPES; /* small fs sinfo fsm */ H5F_mem_page_t lg_fshdr_fs_type = H5F_MEM_PAGE_DEFAULT; /* large fs hdr fsm */ H5F_mem_page_t lg_fssinfo_fs_type = H5F_MEM_PAGE_DEFAULT; /* large fs sinfo fsm */ H5FS_t *sm_hdr_fspace = NULL; /* ptr to sm FSM hdr alloc FSM */ @@ -3309,11 +3312,11 @@ H5MF__continue_alloc_fsm(H5F_shared_t *f_sh, H5FS_t *sm_hdr_fspace, H5FS_t *sm_s static bool H5MF__fsm_type_is_self_referential(H5F_shared_t *f_sh, H5F_mem_page_t fsm_type) { - H5F_mem_page_t sm_fshdr_fsm; - H5F_mem_page_t sm_fssinfo_fsm; - H5F_mem_page_t lg_fshdr_fsm; - H5F_mem_page_t lg_fssinfo_fsm; - bool result = false; + H5F_mem_page_t sm_fshdr_fsm = H5F_MEM_PAGE_NTYPES; + H5F_mem_page_t sm_fssinfo_fsm = H5F_MEM_PAGE_NTYPES; + H5F_mem_page_t lg_fshdr_fsm = H5F_MEM_PAGE_NTYPES; + H5F_mem_page_t lg_fssinfo_fsm = H5F_MEM_PAGE_NTYPES; + bool result = false; FUNC_ENTER_PACKAGE_NOERR @@ -3361,9 +3364,9 @@ H5MF__fsm_type_is_self_referential(H5F_shared_t *f_sh, H5F_mem_page_t fsm_type) static bool H5MF__fsm_is_self_referential(H5F_shared_t *f_sh, H5FS_t *fspace) { - H5F_mem_page_t sm_fshdr_fsm; - H5F_mem_page_t sm_fssinfo_fsm; - bool result = false; + H5F_mem_page_t sm_fshdr_fsm = H5F_MEM_PAGE_NTYPES; + H5F_mem_page_t sm_fssinfo_fsm = H5F_MEM_PAGE_NTYPES; + bool result = false; FUNC_ENTER_PACKAGE_NOERR @@ -3375,8 +3378,8 @@ H5MF__fsm_is_self_referential(H5F_shared_t *f_sh, H5FS_t *fspace) H5MF__alloc_to_fs_type(f_sh, H5FD_MEM_FSPACE_SINFO, (size_t)1, &sm_fssinfo_fsm); if (H5F_SHARED_PAGED_AGGR(f_sh)) { - H5F_mem_page_t lg_fshdr_fsm; - H5F_mem_page_t lg_fssinfo_fsm; + H5F_mem_page_t lg_fshdr_fsm = H5F_MEM_PAGE_NTYPES; + H5F_mem_page_t lg_fssinfo_fsm = H5F_MEM_PAGE_NTYPES; H5MF__alloc_to_fs_type(f_sh, H5FD_MEM_FSPACE_HDR, f_sh->fs_page_size + 1, &lg_fshdr_fsm); H5MF__alloc_to_fs_type(f_sh, H5FD_MEM_FSPACE_SINFO, f_sh->fs_page_size + 1, &lg_fssinfo_fsm); diff --git a/src/H5MFmodule.h b/src/H5MFmodule.h index 94ae9ed32e1..e196ab03e61 100644 --- a/src/H5MFmodule.h +++ b/src/H5MFmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5MF_MODULE -#define H5_MY_PKG H5MF -#define H5_MY_PKG_ERR H5E_RESOURCE +#define H5_MY_PKG H5MF +#define H5_MY_PKG_ERR H5E_RESOURCE +#define H5_MY_PKG_INIT NO #endif /* H5MFmodule_H */ diff --git a/src/H5Mmodule.h b/src/H5Mmodule.h index 2305cad9cb9..a143fe3f1a5 100644 --- a/src/H5Mmodule.h +++ b/src/H5Mmodule.h @@ -22,8 +22,9 @@ * reporting macros. */ #define H5M_MODULE -#define H5_MY_PKG H5M -#define H5_MY_PKG_ERR H5E_MAP +#define H5_MY_PKG H5M +#define H5_MY_PKG_ERR H5E_MAP +#define H5_MY_PKG_INIT YES /** * \page H5M_UG HDF5 VOL Data Mapping diff --git a/src/H5Oint.c b/src/H5Oint.c index 6077a9e99b0..070ff9b3162 100644 --- a/src/H5Oint.c +++ b/src/H5Oint.c @@ -82,6 +82,9 @@ static herr_t H5O__reset_info2(H5O_info2_t *oinfo); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Header message ID to class mapping * * Remember to increment H5O_MSG_TYPES in H5Opkg.h when adding a new @@ -180,10 +183,11 @@ static const H5O_obj_class_t *const H5O_obj_class_g[] = { /*------------------------------------------------------------------------- * Function: H5O_init * - * Purpose: Initialize the interface from some other layer. + * Purpose: Initialize the interface from some other package. + * + * Return: Success: non-negative + * Failure: negative * - * Return: Success: non-negative - * Failure: negative *------------------------------------------------------------------------- */ H5_ATTR_CONST herr_t @@ -191,7 +195,27 @@ H5O_init(void) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) + /* FUNC_ENTER() does all the work */ + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5O_init() */ + +/*------------------------------------------------------------------------- + * Function: H5O__init_package + * + * Purpose: Initialize information specific to H5O interface. + * + * Return: Success: non-negative + * Failure: negative + * + *------------------------------------------------------------------------- + */ +herr_t +H5O__init_package(void) +{ + FUNC_ENTER_PACKAGE_NOERR /* H5O interface sanity checks */ HDcompile_assert(H5O_MSG_TYPES == NELMTS(H5O_msg_class_g)); @@ -199,8 +223,8 @@ H5O_init(void) HDcompile_assert(H5O_UNKNOWN_ID < H5O_MSG_TYPES); - FUNC_LEAVE_NOAPI(ret_value) -} + FUNC_LEAVE_NOAPI(SUCCEED) +} /* end H5O__init_package() */ /*------------------------------------------------------------------------- * Function: H5O__set_version @@ -546,7 +570,7 @@ H5O_open(H5O_loc_t *loc) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Check args */ assert(loc); @@ -558,6 +582,7 @@ H5O_open(H5O_loc_t *loc) else H5F_INCR_NOPEN_OBJS(loc->file); +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5O_open() */ diff --git a/src/H5Omodule.h b/src/H5Omodule.h index de697a296d9..4cd06fe3b0a 100644 --- a/src/H5Omodule.h +++ b/src/H5Omodule.h @@ -22,8 +22,9 @@ * reporting macros. */ #define H5O_MODULE -#define H5_MY_PKG H5O -#define H5_MY_PKG_ERR H5E_OHDR +#define H5_MY_PKG H5O +#define H5_MY_PKG_ERR H5E_OHDR +#define H5_MY_PKG_INIT YES /** \page H5O_UG HDF5 Objects * @todo Under Construction diff --git a/src/H5P.c b/src/H5P.c index 41ba7da4422..daf998fc135 100644 --- a/src/H5P.c +++ b/src/H5P.c @@ -52,6 +52,9 @@ typedef struct { /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /*****************************/ /* Library Private Variables */ /*****************************/ @@ -1492,7 +1495,7 @@ H5Pclose(hid_t plist_id) EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ -char * +H5_ATTR_MALLOC char * H5Pget_class_name(hid_t pclass_id) { H5P_genclass_t *pclass; /* Property class to query */ diff --git a/src/H5PB.c b/src/H5PB.c index 68b711185ff..37831d03e5d 100644 --- a/src/H5PB.c +++ b/src/H5PB.c @@ -130,6 +130,9 @@ static herr_t H5PB__write_entry(H5F_shared_t *f_sh, H5PB_entry_t *page_entry); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /*****************************/ /* Library Private Variables */ /*****************************/ diff --git a/src/H5PBmodule.h b/src/H5PBmodule.h index ba89f9e7dda..647e8205407 100644 --- a/src/H5PBmodule.h +++ b/src/H5PBmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5PB_MODULE -#define H5_MY_PKG H5PB -#define H5_MY_PKG_ERR H5E_RESOURCE +#define H5_MY_PKG H5PB +#define H5_MY_PKG_ERR H5E_RESOURCE +#define H5_MY_PKG_INIT NO #endif /* H5PBmodule_H */ diff --git a/src/H5PLint.c b/src/H5PLint.c index 8b6cd32f360..a1003147944 100644 --- a/src/H5PLint.c +++ b/src/H5PLint.c @@ -45,6 +45,9 @@ /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /*****************************/ /* Library Private Variables */ /*****************************/ @@ -119,21 +122,22 @@ H5PL__set_plugin_control_mask(unsigned int mask) } /* end H5PL__set_plugin_control_mask() */ /*------------------------------------------------------------------------- - * Function: H5PL_init + * Function: H5PL__init_package * - * Purpose: Initialize the interface from some other layer. + * Purpose: Initialize any package-specific data and call any init + * routines for the package. * * Return: Success: non-negative * Failure: negative *------------------------------------------------------------------------- */ herr_t -H5PL_init(void) +H5PL__init_package(void) { char *env_var = NULL; herr_t ret_value = SUCCEED; - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE /* Check the environment variable to determine if the user wants * to ignore plugins. The special symbol H5PL_NO_PLUGIN (defined in @@ -155,7 +159,7 @@ H5PL_init(void) done: FUNC_LEAVE_NOAPI(ret_value) -} +} /* end H5PL__init_package() */ /*------------------------------------------------------------------------- * Function: H5PL_term_package @@ -178,17 +182,23 @@ H5PL_term_package(void) FUNC_ENTER_NOAPI_NOINIT - /* Close the plugin cache. - * We need to bump the return value if we did any real work here. - */ - if (H5PL__close_plugin_cache(&already_closed) < 0) - HGOTO_ERROR(H5E_PLUGIN, H5E_CANTFREE, (-1), "problem closing plugin cache"); - if (!already_closed) - ret_value++; + if (H5_PKG_INIT_VAR) { + /* Close the plugin cache. + * We need to bump the return value if we did any real work here. + */ + if (H5PL__close_plugin_cache(&already_closed) < 0) + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTFREE, (-1), "problem closing plugin cache"); + if (!already_closed) + ret_value++; - /* Close the search path table and free the paths */ - if (H5PL__close_path_table() < 0) - HGOTO_ERROR(H5E_PLUGIN, H5E_CANTFREE, (-1), "problem closing search path table"); + /* Close the search path table and free the paths */ + if (H5PL__close_path_table() < 0) + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTFREE, (-1), "problem closing search path table"); + + /* Mark the interface as uninitialized */ + if (0 == ret_value) + H5_PKG_INIT_VAR = false; + } /* end if */ done: FUNC_LEAVE_NOAPI(ret_value) @@ -504,9 +514,10 @@ H5PL_iterate(H5PL_iterate_type_t iter_type, H5PL_iterate_t iter_op, void *op_dat { herr_t ret_value = H5_ITER_CONT; - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(H5_ITER_ERROR) ret_value = H5PL__path_table_iterate(iter_type, iter_op, op_data); +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5PL_iterate() */ diff --git a/src/H5PLmodule.h b/src/H5PLmodule.h index 46b586c91dd..e750344ac32 100644 --- a/src/H5PLmodule.h +++ b/src/H5PLmodule.h @@ -23,8 +23,9 @@ * reporting macros. */ #define H5PL_MODULE -#define H5_MY_PKG H5PL -#define H5_MY_PKG_ERR H5E_PLUGIN +#define H5_MY_PKG H5PL +#define H5_MY_PKG_ERR H5E_PLUGIN +#define H5_MY_PKG_INIT YES /** \page H5PL_UG HDF5 Plugins * diff --git a/src/H5PLprivate.h b/src/H5PLprivate.h index 32ba263e56d..504b43f89ce 100644 --- a/src/H5PLprivate.h +++ b/src/H5PLprivate.h @@ -82,6 +82,5 @@ typedef herr_t (*H5PL_iterate_t)(H5PL_type_t plugin_type, const void *plugin_inf /* Internal API routines */ H5_DLL const void *H5PL_load(H5PL_type_t plugin_type, const H5PL_key_t *key); H5_DLL herr_t H5PL_iterate(H5PL_iterate_type_t iter_type, H5PL_iterate_t iter_op, void *op_data); -H5_DLL herr_t H5PL_init(void); #endif /* H5PLprivate_H */ diff --git a/src/H5Pint.c b/src/H5Pint.c index 4e9a41ff676..da6fbc89274 100644 --- a/src/H5Pint.c +++ b/src/H5Pint.c @@ -118,7 +118,7 @@ static herr_t H5P__free_del_name_cb(void *item, void H5_ATTR_UNUSED *key, void H /* * Predefined property list classes. These are initialized at runtime by - * H5P_init() in this source file. + * H5P__init_package() in this source file. */ hid_t H5P_CLS_ROOT_ID_g = H5I_INVALID_HID; H5P_genclass_t *H5P_CLS_ROOT_g = NULL; @@ -168,7 +168,7 @@ H5P_genclass_t *H5P_CLS_VOL_INITIALIZE_g = NULL; /* * Predefined property lists for each predefined class. These are initialized - * at runtime by H5P_init() in this source file. + * at runtime by H5P__init_package() in this source file. */ hid_t H5P_LST_ATTRIBUTE_ACCESS_ID_g = H5I_INVALID_HID; hid_t H5P_LST_ATTRIBUTE_CREATE_ID_g = H5I_INVALID_HID; @@ -421,13 +421,64 @@ static const H5I_class_t H5I_GENPROPLST_CLS[1] = {{ */ herr_t H5P_init_phase1(void) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_NOAPI(FAIL) + /* FUNC_ENTER() does all the work */ + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5P_init_phase1() */ + +/*------------------------------------------------------------------------- + * Function: H5P_init_phase2 + * + * Purpose: Finish initializing the interface from some other package. + * + * Note: This is broken out as a separate routine so that the + * library's default VFL driver can be chosen and initialized + * after the entire H5P interface has been initialized. + * + * Return: Success: Non-negative + * Failure: Negative + * + *------------------------------------------------------------------------- + */ +herr_t +H5P_init_phase2(void) +{ + herr_t ret_value = SUCCEED; + + FUNC_ENTER_NOAPI(FAIL) + + /* Set up the default VFL driver */ + if (H5P__facc_set_def_driver() < 0) + HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set default VFL driver"); + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5P_init_phase2() */ + +/*-------------------------------------------------------------------------- +NAME + H5P__init_package -- Initialize interface-specific information +USAGE + herr_t H5P__init_package() +RETURNS + Non-negative on success/Negative on failure +DESCRIPTION + Initializes any interface-specific data or routines. +--------------------------------------------------------------------------*/ +herr_t +H5P__init_package(void) { size_t tot_init = 0; /* Total # of classes initialized */ size_t pass_init; /* # of classes initialized in each pass */ size_t u; herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE /* Sanity check */ HDcompile_assert(H5P_TYPE_REFERENCE_ACCESS == (H5P_TYPE_MAX_TYPE - 1)); @@ -518,36 +569,7 @@ H5P_init_phase1(void) } FUNC_LEAVE_NOAPI(ret_value) -} - -/*------------------------------------------------------------------------- - * Function: H5P_init_phase2 - * - * Purpose: Finish initializing the interface from some other package. - * - * Note: This is broken out as a separate routine so that the - * library's default VFL driver can be chosen and initialized - * after the entire H5P interface has been initialized. - * - * Return: Success: Non-negative - * Failure: Negative - * - *------------------------------------------------------------------------- - */ -herr_t -H5P_init_phase2(void) -{ - herr_t ret_value = SUCCEED; - - FUNC_ENTER_NOAPI(FAIL) - - /* Set up the default VFL driver */ - if (H5P__facc_set_def_driver() < 0) - HGOTO_ERROR(H5E_VFL, H5E_CANTSET, FAIL, "unable to set default VFL driver"); - -done: - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5P_init_phase2() */ +} /* end H5P__init_package() */ /*-------------------------------------------------------------------------- NAME @@ -573,107 +595,113 @@ H5P_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - int64_t nlist, nclass; - - /* Destroy HDF5 library property classes & lists */ - - /* Check if there are any open property list classes or lists */ - nclass = H5I_nmembers(H5I_GENPROP_CLS); - nlist = H5I_nmembers(H5I_GENPROP_LST); - - /* If there are any open classes or groups, attempt to get rid of them. */ - if ((nclass + nlist) > 0) { - /* Clear the lists */ - if (nlist > 0) { - (void)H5I_clear_type(H5I_GENPROP_LST, false, false); - - /* Reset the default property lists, if they've been closed */ - if (H5I_nmembers(H5I_GENPROP_LST) == 0) { - H5P_LST_ATTRIBUTE_ACCESS_ID_g = H5I_INVALID_HID; - H5P_LST_ATTRIBUTE_CREATE_ID_g = H5I_INVALID_HID; - H5P_LST_DATASET_ACCESS_ID_g = H5I_INVALID_HID; - H5P_LST_DATASET_CREATE_ID_g = H5I_INVALID_HID; - H5P_LST_DATASET_XFER_ID_g = H5I_INVALID_HID; - H5P_LST_DATATYPE_ACCESS_ID_g = H5I_INVALID_HID; - H5P_LST_DATATYPE_CREATE_ID_g = H5I_INVALID_HID; - H5P_LST_FILE_ACCESS_ID_g = H5I_INVALID_HID; - H5P_LST_FILE_CREATE_ID_g = H5I_INVALID_HID; - H5P_LST_FILE_MOUNT_ID_g = H5I_INVALID_HID; - H5P_LST_GROUP_ACCESS_ID_g = H5I_INVALID_HID; - H5P_LST_GROUP_CREATE_ID_g = H5I_INVALID_HID; - H5P_LST_LINK_ACCESS_ID_g = H5I_INVALID_HID; - H5P_LST_LINK_CREATE_ID_g = H5I_INVALID_HID; - H5P_LST_MAP_ACCESS_ID_g = H5I_INVALID_HID; - H5P_LST_MAP_CREATE_ID_g = H5I_INVALID_HID; - H5P_LST_OBJECT_COPY_ID_g = H5I_INVALID_HID; - H5P_LST_REFERENCE_ACCESS_ID_g = H5I_INVALID_HID; - H5P_LST_VOL_INITIALIZE_ID_g = H5I_INVALID_HID; + if (H5_PKG_INIT_VAR) { + int64_t nlist, nclass; + + /* Destroy HDF5 library property classes & lists */ + + /* Check if there are any open property list classes or lists */ + nclass = H5I_nmembers(H5I_GENPROP_CLS); + nlist = H5I_nmembers(H5I_GENPROP_LST); + + /* If there are any open classes or groups, attempt to get rid of them. */ + if ((nclass + nlist) > 0) { + /* Clear the lists */ + if (nlist > 0) { + (void)H5I_clear_type(H5I_GENPROP_LST, false, false); + + /* Reset the default property lists, if they've been closed */ + if (H5I_nmembers(H5I_GENPROP_LST) == 0) { + H5P_LST_ATTRIBUTE_ACCESS_ID_g = H5I_INVALID_HID; + H5P_LST_ATTRIBUTE_CREATE_ID_g = H5I_INVALID_HID; + H5P_LST_DATASET_ACCESS_ID_g = H5I_INVALID_HID; + H5P_LST_DATASET_CREATE_ID_g = H5I_INVALID_HID; + H5P_LST_DATASET_XFER_ID_g = H5I_INVALID_HID; + H5P_LST_DATATYPE_ACCESS_ID_g = H5I_INVALID_HID; + H5P_LST_DATATYPE_CREATE_ID_g = H5I_INVALID_HID; + H5P_LST_FILE_ACCESS_ID_g = H5I_INVALID_HID; + H5P_LST_FILE_CREATE_ID_g = H5I_INVALID_HID; + H5P_LST_FILE_MOUNT_ID_g = H5I_INVALID_HID; + H5P_LST_GROUP_ACCESS_ID_g = H5I_INVALID_HID; + H5P_LST_GROUP_CREATE_ID_g = H5I_INVALID_HID; + H5P_LST_LINK_ACCESS_ID_g = H5I_INVALID_HID; + H5P_LST_LINK_CREATE_ID_g = H5I_INVALID_HID; + H5P_LST_MAP_ACCESS_ID_g = H5I_INVALID_HID; + H5P_LST_MAP_CREATE_ID_g = H5I_INVALID_HID; + H5P_LST_OBJECT_COPY_ID_g = H5I_INVALID_HID; + H5P_LST_REFERENCE_ACCESS_ID_g = H5I_INVALID_HID; + H5P_LST_VOL_INITIALIZE_ID_g = H5I_INVALID_HID; + } } - } - /* Only attempt to close the classes after all the lists are closed */ - if (nlist == 0 && nclass > 0) { - (void)H5I_clear_type(H5I_GENPROP_CLS, false, false); - - /* Reset the default property classes and IDs if they've been closed */ - if (H5I_nmembers(H5I_GENPROP_CLS) == 0) { - H5P_CLS_ROOT_g = NULL; - - H5P_CLS_ATTRIBUTE_ACCESS_g = NULL; - H5P_CLS_ATTRIBUTE_CREATE_g = NULL; - H5P_CLS_DATASET_ACCESS_g = NULL; - H5P_CLS_DATASET_CREATE_g = NULL; - H5P_CLS_DATASET_XFER_g = NULL; - H5P_CLS_DATATYPE_ACCESS_g = NULL; - H5P_CLS_DATATYPE_CREATE_g = NULL; - H5P_CLS_FILE_ACCESS_g = NULL; - H5P_CLS_FILE_CREATE_g = NULL; - H5P_CLS_FILE_MOUNT_g = NULL; - H5P_CLS_GROUP_ACCESS_g = NULL; - H5P_CLS_GROUP_CREATE_g = NULL; - H5P_CLS_LINK_ACCESS_g = NULL; - H5P_CLS_LINK_CREATE_g = NULL; - H5P_CLS_MAP_ACCESS_g = NULL; - H5P_CLS_MAP_CREATE_g = NULL; - H5P_CLS_OBJECT_COPY_g = NULL; - H5P_CLS_OBJECT_CREATE_g = NULL; - H5P_CLS_REFERENCE_ACCESS_g = NULL; - H5P_CLS_STRING_CREATE_g = NULL; - H5P_CLS_VOL_INITIALIZE_g = NULL; - - H5P_CLS_ROOT_ID_g = H5I_INVALID_HID; - - H5P_CLS_ATTRIBUTE_ACCESS_ID_g = H5I_INVALID_HID; - H5P_CLS_ATTRIBUTE_CREATE_ID_g = H5I_INVALID_HID; - H5P_CLS_DATASET_ACCESS_ID_g = H5I_INVALID_HID; - H5P_CLS_DATASET_CREATE_ID_g = H5I_INVALID_HID; - H5P_CLS_DATASET_XFER_ID_g = H5I_INVALID_HID; - H5P_CLS_DATATYPE_ACCESS_ID_g = H5I_INVALID_HID; - H5P_CLS_DATATYPE_CREATE_ID_g = H5I_INVALID_HID; - H5P_CLS_FILE_ACCESS_ID_g = H5I_INVALID_HID; - H5P_CLS_FILE_CREATE_ID_g = H5I_INVALID_HID; - H5P_CLS_FILE_MOUNT_ID_g = H5I_INVALID_HID; - H5P_CLS_GROUP_ACCESS_ID_g = H5I_INVALID_HID; - H5P_CLS_GROUP_CREATE_ID_g = H5I_INVALID_HID; - H5P_CLS_LINK_ACCESS_ID_g = H5I_INVALID_HID; - H5P_CLS_LINK_CREATE_ID_g = H5I_INVALID_HID; - H5P_CLS_MAP_ACCESS_ID_g = H5I_INVALID_HID; - H5P_CLS_MAP_CREATE_ID_g = H5I_INVALID_HID; - H5P_CLS_OBJECT_COPY_ID_g = H5I_INVALID_HID; - H5P_CLS_OBJECT_CREATE_ID_g = H5I_INVALID_HID; - H5P_CLS_REFERENCE_ACCESS_ID_g = H5I_INVALID_HID; - H5P_CLS_STRING_CREATE_ID_g = H5I_INVALID_HID; - H5P_CLS_VOL_INITIALIZE_ID_g = H5I_INVALID_HID; + /* Only attempt to close the classes after all the lists are closed */ + if (nlist == 0 && nclass > 0) { + (void)H5I_clear_type(H5I_GENPROP_CLS, false, false); + + /* Reset the default property classes and IDs if they've been closed */ + if (H5I_nmembers(H5I_GENPROP_CLS) == 0) { + H5P_CLS_ROOT_g = NULL; + + H5P_CLS_ATTRIBUTE_ACCESS_g = NULL; + H5P_CLS_ATTRIBUTE_CREATE_g = NULL; + H5P_CLS_DATASET_ACCESS_g = NULL; + H5P_CLS_DATASET_CREATE_g = NULL; + H5P_CLS_DATASET_XFER_g = NULL; + H5P_CLS_DATATYPE_ACCESS_g = NULL; + H5P_CLS_DATATYPE_CREATE_g = NULL; + H5P_CLS_FILE_ACCESS_g = NULL; + H5P_CLS_FILE_CREATE_g = NULL; + H5P_CLS_FILE_MOUNT_g = NULL; + H5P_CLS_GROUP_ACCESS_g = NULL; + H5P_CLS_GROUP_CREATE_g = NULL; + H5P_CLS_LINK_ACCESS_g = NULL; + H5P_CLS_LINK_CREATE_g = NULL; + H5P_CLS_MAP_ACCESS_g = NULL; + H5P_CLS_MAP_CREATE_g = NULL; + H5P_CLS_OBJECT_COPY_g = NULL; + H5P_CLS_OBJECT_CREATE_g = NULL; + H5P_CLS_REFERENCE_ACCESS_g = NULL; + H5P_CLS_STRING_CREATE_g = NULL; + H5P_CLS_VOL_INITIALIZE_g = NULL; + + H5P_CLS_ROOT_ID_g = H5I_INVALID_HID; + + H5P_CLS_ATTRIBUTE_ACCESS_ID_g = H5I_INVALID_HID; + H5P_CLS_ATTRIBUTE_CREATE_ID_g = H5I_INVALID_HID; + H5P_CLS_DATASET_ACCESS_ID_g = H5I_INVALID_HID; + H5P_CLS_DATASET_CREATE_ID_g = H5I_INVALID_HID; + H5P_CLS_DATASET_XFER_ID_g = H5I_INVALID_HID; + H5P_CLS_DATATYPE_ACCESS_ID_g = H5I_INVALID_HID; + H5P_CLS_DATATYPE_CREATE_ID_g = H5I_INVALID_HID; + H5P_CLS_FILE_ACCESS_ID_g = H5I_INVALID_HID; + H5P_CLS_FILE_CREATE_ID_g = H5I_INVALID_HID; + H5P_CLS_FILE_MOUNT_ID_g = H5I_INVALID_HID; + H5P_CLS_GROUP_ACCESS_ID_g = H5I_INVALID_HID; + H5P_CLS_GROUP_CREATE_ID_g = H5I_INVALID_HID; + H5P_CLS_LINK_ACCESS_ID_g = H5I_INVALID_HID; + H5P_CLS_LINK_CREATE_ID_g = H5I_INVALID_HID; + H5P_CLS_MAP_ACCESS_ID_g = H5I_INVALID_HID; + H5P_CLS_MAP_CREATE_ID_g = H5I_INVALID_HID; + H5P_CLS_OBJECT_COPY_ID_g = H5I_INVALID_HID; + H5P_CLS_OBJECT_CREATE_ID_g = H5I_INVALID_HID; + H5P_CLS_REFERENCE_ACCESS_ID_g = H5I_INVALID_HID; + H5P_CLS_STRING_CREATE_ID_g = H5I_INVALID_HID; + H5P_CLS_VOL_INITIALIZE_ID_g = H5I_INVALID_HID; + } } + + n++; /*H5I*/ } + else { + /* Destroy the property list and class id groups */ + n += (H5I_dec_type_ref(H5I_GENPROP_LST) > 0); + n += (H5I_dec_type_ref(H5I_GENPROP_CLS) > 0); - n++; /*H5I*/ - } - else { - /* Destroy the property list and class id groups */ - n += (H5I_dec_type_ref(H5I_GENPROP_LST) > 0); - n += (H5I_dec_type_ref(H5I_GENPROP_CLS) > 0); - } /* end else */ + /* Mark closed */ + if (0 == n) + H5_PKG_INIT_VAR = false; + } /* end else */ + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5P_term_package() */ @@ -3541,7 +3569,7 @@ H5P_get_nprops_pclass(const H5P_genclass_t *pclass, size_t *nprops, bool recurse { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) assert(pclass); assert(nprops); @@ -3556,6 +3584,7 @@ H5P_get_nprops_pclass(const H5P_genclass_t *pclass, size_t *nprops, bool recurse *nprops += pclass->nprops; } /* end while */ +done: FUNC_LEAVE_NOAPI(ret_value) } /* H5P_get_nprops_pclass() */ @@ -3986,7 +4015,7 @@ H5P_class_isa(const H5P_genclass_t *pclass1, const H5P_genclass_t *pclass2) { htri_t ret_value = FAIL; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) assert(pclass1); assert(pclass2); @@ -5281,13 +5310,14 @@ H5P_get_class_name(H5P_genclass_t *pclass) { char *ret_value = NULL; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(NULL) assert(pclass); /* Get class name */ ret_value = H5MM_xstrdup(pclass->name); +done: FUNC_LEAVE_NOAPI(ret_value) } /* H5P_get_class_name() */ diff --git a/src/H5Pmodule.h b/src/H5Pmodule.h index 88cab4d3a12..b7eb4c78a75 100644 --- a/src/H5Pmodule.h +++ b/src/H5Pmodule.h @@ -22,8 +22,9 @@ * reporting macros. */ #define H5P_MODULE -#define H5_MY_PKG H5P -#define H5_MY_PKG_ERR H5E_PLIST +#define H5_MY_PKG H5P +#define H5_MY_PKG_ERR H5E_PLIST +#define H5_MY_PKG_INIT YES /** \page H5P_UG Properties and Property Lists in HDF5 * diff --git a/src/H5Ppublic.h b/src/H5Ppublic.h index fa4c3ba5b8c..4a7e3d0229b 100644 --- a/src/H5Ppublic.h +++ b/src/H5Ppublic.h @@ -34,14 +34,6 @@ /* Public Macros */ /*****************/ -/* When this header is included from a private HDF5 header, don't make calls to H5open() */ -#undef H5OPEN -#ifndef H5private_H -#define H5OPEN H5open(), -#else /* H5private_H */ -#define H5OPEN -#endif /* H5private_H */ - /* * The library's property list classes */ diff --git a/src/H5RS.c b/src/H5RS.c index 238390335eb..b83f6da8401 100644 --- a/src/H5RS.c +++ b/src/H5RS.c @@ -69,6 +69,9 @@ static herr_t H5RS__resize_for_append(H5RS_str_t *rs, size_t len); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /*****************************/ /* Library Private Variables */ /*****************************/ diff --git a/src/H5RSmodule.h b/src/H5RSmodule.h index 578474a9729..5079f363447 100644 --- a/src/H5RSmodule.h +++ b/src/H5RSmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5RS_MODULE -#define H5_MY_PKG H5RS -#define H5_MY_PKG_ERR H5E_RS +#define H5_MY_PKG H5RS +#define H5_MY_PKG_ERR H5E_RS +#define H5_MY_PKG_INIT NO #endif /* H5RSmodule_H */ diff --git a/src/H5Rint.c b/src/H5Rint.c index 1c5b0b68841..85282b1d4d6 100644 --- a/src/H5Rint.c +++ b/src/H5Rint.c @@ -135,6 +135,9 @@ static herr_t H5R__decode_string(const unsigned char *buf, size_t *nbytes, char /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /*****************************/ /* Library Private Variables */ /*****************************/ @@ -143,27 +146,26 @@ static herr_t H5R__decode_string(const unsigned char *buf, size_t *nbytes, char /* Local Variables */ /*******************/ -/*------------------------------------------------------------------------- - * Function: H5R_init - * - * Purpose: Initialize the interface from some other layer. - * - * Return: Success: non-negative - * Failure: negative - *------------------------------------------------------------------------- - */ +/*-------------------------------------------------------------------------- +NAME + H5R__init_package -- Initialize interface-specific information +USAGE + herr_t H5R__init_package() +RETURNS + Non-negative on success/Negative on failure +DESCRIPTION + Initializes any interface-specific data or routines. +--------------------------------------------------------------------------*/ herr_t -H5R_init(void) +H5R__init_package(void) { - herr_t ret_value = SUCCEED; - FUNC_ENTER_NOAPI_NOINIT_NOERR /* Sanity check, if assert fails, H5R_REF_BUF_SIZE must be increased */ HDcompile_assert(sizeof(H5R_ref_priv_t) <= H5R_REF_BUF_SIZE); - FUNC_LEAVE_NOAPI(ret_value) -} + FUNC_LEAVE_NOAPI(SUCCEED) +} /* end H5R__init_package() */ /*------------------------------------------------------------------------- * Function: H5R__create_object diff --git a/src/H5Rmodule.h b/src/H5Rmodule.h index 87a367796a6..78328effab5 100644 --- a/src/H5Rmodule.h +++ b/src/H5Rmodule.h @@ -21,8 +21,9 @@ * reporting macros. */ #define H5R_MODULE -#define H5_MY_PKG H5R -#define H5_MY_PKG_ERR H5E_REFERENCE +#define H5_MY_PKG H5R +#define H5_MY_PKG_ERR H5E_REFERENCE +#define H5_MY_PKG_INIT YES /** \page H5R_UG HDF5 References * diff --git a/src/H5Rprivate.h b/src/H5Rprivate.h index 723dd30e953..8a3102860a1 100644 --- a/src/H5Rprivate.h +++ b/src/H5Rprivate.h @@ -38,6 +38,4 @@ /* Library Private Prototypes */ /******************************/ -H5_DLL herr_t H5R_init(void); - #endif /* H5Rprivate_H */ diff --git a/src/H5S.c b/src/H5S.c index d39232776ad..69c4224c6ed 100644 --- a/src/H5S.c +++ b/src/H5S.c @@ -54,6 +54,9 @@ static htri_t H5S__is_simple(const H5S_t *sdim); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Format version bounds for dataspace */ const unsigned H5O_sdspace_ver_bounds[] = { H5O_SDSPACE_VERSION_1, /* H5F_LIBVER_EARLIEST */ @@ -95,6 +98,9 @@ static const H5I_class_t H5I_SPACE_SEL_ITER_CLS[1] = {{ (H5I_free_t)H5S__sel_iter_close_cb /* Callback routine for closing objects of this class */ }}; +/* Flag indicating "top" of interface has been initialized */ +static bool H5S_top_package_initialize_s = false; + /*------------------------------------------------------------------------- * Function: H5S_init * @@ -110,6 +116,28 @@ H5S_init(void) herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) + /* FUNC_ENTER() does all the work */ + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5S_init() */ + +/*-------------------------------------------------------------------------- +NAME + H5S__init_package -- Initialize interface-specific information +USAGE + herr_t H5S__init_package() +RETURNS + Non-negative on success/Negative on failure +DESCRIPTION + Initializes any interface-specific data or routines. +--------------------------------------------------------------------------*/ +herr_t +H5S__init_package(void) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_PACKAGE /* Initialize the ID group for the dataspace IDs */ if (H5I_register_type(H5I_DATASPACE_CLS) < 0) @@ -120,9 +148,12 @@ H5S_init(void) HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to initialize dataspace selection iterator ID class"); + /* Mark "top" of interface as initialized, too */ + H5S_top_package_initialize_s = true; + done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5S_init() */ +} /* end H5S__init_package() */ /*-------------------------------------------------------------------------- NAME @@ -149,14 +180,20 @@ H5S_top_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - if (H5I_nmembers(H5I_DATASPACE) > 0) { - (void)H5I_clear_type(H5I_DATASPACE, false, false); - n++; - } - if (H5I_nmembers(H5I_SPACE_SEL_ITER) > 0) { - (void)H5I_clear_type(H5I_SPACE_SEL_ITER, false, false); - n++; - } + if (H5S_top_package_initialize_s) { + if (H5I_nmembers(H5I_DATASPACE) > 0) { + (void)H5I_clear_type(H5I_DATASPACE, false, false); + n++; + } + if (H5I_nmembers(H5I_SPACE_SEL_ITER) > 0) { + (void)H5I_clear_type(H5I_SPACE_SEL_ITER, false, false); + n++; + } + + /* Mark "top" of interface as closed */ + if (0 == n) + H5S_top_package_initialize_s = false; + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5S_top_term_package() */ @@ -188,15 +225,22 @@ H5S_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - /* Sanity checks */ - assert(0 == H5I_nmembers(H5I_DATASPACE)); - assert(0 == H5I_nmembers(H5I_SPACE_SEL_ITER)); + if (H5_PKG_INIT_VAR) { + /* Sanity checks */ + assert(0 == H5I_nmembers(H5I_DATASPACE)); + assert(0 == H5I_nmembers(H5I_SPACE_SEL_ITER)); + assert(false == H5S_top_package_initialize_s); + + /* Destroy the dataspace object id group */ + n += (H5I_dec_type_ref(H5I_DATASPACE) > 0); - /* Destroy the dataspace object id group */ - n += (H5I_dec_type_ref(H5I_DATASPACE) > 0); + /* Destroy the dataspace selection iterator object id group */ + n += (H5I_dec_type_ref(H5I_SPACE_SEL_ITER) > 0); - /* Destroy the dataspace selection iterator object id group */ - n += (H5I_dec_type_ref(H5I_SPACE_SEL_ITER) > 0); + /* Mark interface as closed */ + if (0 == n) + H5_PKG_INIT_VAR = false; + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5S_term_package() */ @@ -686,7 +730,7 @@ H5S_get_simple_extent_npoints(const H5S_t *ds) { hssize_t ret_value = -1; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(-1) /* check args */ assert(ds); @@ -694,6 +738,7 @@ H5S_get_simple_extent_npoints(const H5S_t *ds) /* Get the number of elements in extent */ ret_value = (hssize_t)ds->extent.nelem; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5S_get_simple_extent_npoints() */ @@ -1630,12 +1675,13 @@ H5S_get_simple_extent_type(const H5S_t *space) { H5S_class_t ret_value = H5S_NO_CLASS; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(H5S_NO_CLASS) assert(space); ret_value = H5S_GET_EXTENT_TYPE(space); +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5S_get_simple_extent_type() */ diff --git a/src/H5SL.c b/src/H5SL.c index 813a5961064..3b548b3ff54 100644 --- a/src/H5SL.c +++ b/src/H5SL.c @@ -509,6 +509,9 @@ static H5SL_node_t *H5SL__insert_common(H5SL_t *slist, void *item, const void *k static herr_t H5SL__release_common(H5SL_t *slist, H5SL_operator_t op, void *op_data); static herr_t H5SL__close_common(H5SL_t *slist, H5SL_operator_t op, void *op_data); +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Declare a free list to manage the H5SL_t struct */ H5FL_DEFINE_STATIC(H5SL_t); @@ -520,21 +523,26 @@ static H5FL_fac_head_t **H5SL_fac_g; static size_t H5SL_fac_nused_g; static size_t H5SL_fac_nalloc_g; -/*------------------------------------------------------------------------- - * Function: H5SL_init - * - * Purpose: Initialize the interface from some other layer. - * - * Return: Success: non-negative - * Failure: negative - *------------------------------------------------------------------------- - */ +/*-------------------------------------------------------------------------- + NAME + H5SL__init_package + PURPOSE + Initialize interface-specific information + USAGE + herr_t H5SL__init_package() + RETURNS + Non-negative on success/Negative on failure + DESCRIPTION + Initializes any interface-specific data or routines. + GLOBAL VARIABLES + COMMENTS, BUGS, ASSUMPTIONS + EXAMPLES + REVISION LOG +--------------------------------------------------------------------------*/ herr_t -H5SL_init(void) +H5SL__init_package(void) { - herr_t ret_value = SUCCEED; - - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_PACKAGE_NOERR /* Allocate space for array of factories */ H5SL_fac_g = (H5FL_fac_head_t **)H5MM_malloc(sizeof(H5FL_fac_head_t *)); @@ -546,8 +554,8 @@ H5SL_init(void) assert(H5SL_fac_g[0]); H5SL_fac_nused_g = 1; - FUNC_LEAVE_NOAPI(ret_value) -} + FUNC_LEAVE_NOAPI(SUCCEED) +} /* end H5SL__init_package() */ /*-------------------------------------------------------------------------- NAME @@ -575,26 +583,32 @@ H5SL_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - /* Terminate all the factories */ - if (H5SL_fac_nused_g > 0) { - size_t i; - herr_t H5_ATTR_NDEBUG_UNUSED ret; + if (H5_PKG_INIT_VAR) { + /* Terminate all the factories */ + if (H5SL_fac_nused_g > 0) { + size_t i; + herr_t H5_ATTR_NDEBUG_UNUSED ret; + + for (i = 0; i < H5SL_fac_nused_g; i++) { + ret = H5FL_fac_term(H5SL_fac_g[i]); + assert(ret >= 0); + } + H5SL_fac_nused_g = 0; - for (i = 0; i < H5SL_fac_nused_g; i++) { - ret = H5FL_fac_term(H5SL_fac_g[i]); - assert(ret >= 0); + n++; } - H5SL_fac_nused_g = 0; - n++; - } + /* Free the list of factories */ + if (H5SL_fac_g) { + H5SL_fac_g = (H5FL_fac_head_t **)H5MM_xfree((void *)H5SL_fac_g); + H5SL_fac_nalloc_g = 0; - /* Free the list of factories */ - if (H5SL_fac_g) { - H5SL_fac_g = (H5FL_fac_head_t **)H5MM_xfree((void *)H5SL_fac_g); - H5SL_fac_nalloc_g = 0; + n++; + } - n++; + /* Mark the interface as uninitialized */ + if (0 == n) + H5_PKG_INIT_VAR = false; } FUNC_LEAVE_NOAPI(n) diff --git a/src/H5SLmodule.h b/src/H5SLmodule.h index 83cfa591327..a3a42654c93 100644 --- a/src/H5SLmodule.h +++ b/src/H5SLmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5SL_MODULE -#define H5_MY_PKG H5SL -#define H5_MY_PKG_ERR H5E_SLIST +#define H5_MY_PKG H5SL +#define H5_MY_PKG_ERR H5E_SLIST +#define H5_MY_PKG_INIT YES #endif /* H5SLmodule_H */ diff --git a/src/H5SLprivate.h b/src/H5SLprivate.h index 14eee279509..cd42d92c706 100644 --- a/src/H5SLprivate.h +++ b/src/H5SLprivate.h @@ -81,7 +81,6 @@ H5_DLL herr_t H5SL_release(H5SL_t *slist); H5_DLL herr_t H5SL_free(H5SL_t *slist, H5SL_operator_t op, void *op_data); H5_DLL herr_t H5SL_close(H5SL_t *slist); H5_DLL herr_t H5SL_destroy(H5SL_t *slist, H5SL_operator_t op, void *op_data); -H5_DLL herr_t H5SL_init(void); H5_DLL int H5SL_term_interface(void); #endif /* H5SLprivate_H */ diff --git a/src/H5SM.c b/src/H5SM.c index f096a50c8b8..2b98bdbb98b 100644 --- a/src/H5SM.c +++ b/src/H5SM.c @@ -82,6 +82,9 @@ static herr_t H5SM__read_mesg(H5F_t *f, const H5SM_sohm_t *mesg, H5HF_t *fheap, /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + H5FL_DEFINE(H5SM_master_table_t); H5FL_ARR_DEFINE(H5SM_index_header_t, H5O_SHMESG_MAX_NINDEXES); H5FL_DEFINE(H5SM_list_t); diff --git a/src/H5SMmodule.h b/src/H5SMmodule.h index d0f247f3a00..d669d5dc76a 100644 --- a/src/H5SMmodule.h +++ b/src/H5SMmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5SM_MODULE -#define H5_MY_PKG H5SM -#define H5_MY_PKG_ERR H5E_SOHM +#define H5_MY_PKG H5SM +#define H5_MY_PKG_ERR H5E_SOHM +#define H5_MY_PKG_INIT NO #endif /* H5SMmodule_H */ diff --git a/src/H5Shyper.c b/src/H5Shyper.c index e0ca727bd09..560e2bf1c85 100644 --- a/src/H5Shyper.c +++ b/src/H5Shyper.c @@ -3725,10 +3725,10 @@ H5S__hyper_get_version_enc_size(H5S_t *space, hsize_t block_count, uint32_t *ver static hssize_t H5S__hyper_serial_size(H5S_t *space) { - hsize_t block_count = 0; /* block counter for regular hyperslabs */ - uint32_t version; /* Version number */ - uint8_t enc_size; /* Encoded size of hyperslab selection info */ - hssize_t ret_value = -1; /* return value */ + hsize_t block_count = 0; /* block counter for regular hyperslabs */ + uint32_t version = UINT_MAX; /* Version number */ + uint8_t enc_size; /* Encoded size of hyperslab selection info */ + hssize_t ret_value = -1; /* return value */ FUNC_ENTER_PACKAGE @@ -12100,7 +12100,7 @@ H5S_hyper_get_clip_extent(const H5S_t *clip_space, const H5S_t *match_space, boo hsize_t num_slices; /* Number of slices in unlimited dimension */ hsize_t ret_value = 0; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(0) /* Check parameters */ assert(clip_space); @@ -12122,6 +12122,7 @@ H5S_hyper_get_clip_extent(const H5S_t *clip_space, const H5S_t *match_space, boo /* Call "real" get_clip_extent function */ ret_value = H5S__hyper_get_clip_extent_real(clip_space, num_slices, incl_trail); +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5S_hyper_get_clip_extent() */ @@ -12157,7 +12158,7 @@ H5S_hyper_get_clip_extent_match(const H5S_t *clip_space, const H5S_t *match_spac hsize_t num_slices; /* Number of slices in unlimited dimension */ hsize_t ret_value = 0; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(0) /* Check parameters */ assert(clip_space); @@ -12203,6 +12204,7 @@ H5S_hyper_get_clip_extent_match(const H5S_t *clip_space, const H5S_t *match_spac /* Call "real" get_clip_extent function */ ret_value = H5S__hyper_get_clip_extent_real(clip_space, num_slices, incl_trail); +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5S_hyper_get_clip_extent_match() */ @@ -12318,7 +12320,7 @@ H5S_hyper_get_first_inc_block(const H5S_t *space, hsize_t clip_size, bool *parti H5S_hyper_dim_t *diminfo; /* Convenience pointer to diminfo in unlimited dimension */ hsize_t ret_value = 0; - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(0) /* Check parameters */ assert(space); @@ -12348,6 +12350,7 @@ H5S_hyper_get_first_inc_block(const H5S_t *space, hsize_t clip_size, bool *parti } /* end if */ } /* end else */ +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5S_hyper_get_first_inc_block */ diff --git a/src/H5Smodule.h b/src/H5Smodule.h index b0cdc574744..94103d05eb0 100644 --- a/src/H5Smodule.h +++ b/src/H5Smodule.h @@ -22,8 +22,9 @@ * reporting macros. */ #define H5S_MODULE -#define H5_MY_PKG H5S -#define H5_MY_PKG_ERR H5E_DATASPACE +#define H5_MY_PKG H5S +#define H5_MY_PKG_ERR H5E_DATASPACE +#define H5_MY_PKG_INIT YES /** \page H5S_UG Dataspaces and Partial I/O * diff --git a/src/H5T.c b/src/H5T.c index 9befc0836b5..dc8c59c963d 100644 --- a/src/H5T.c +++ b/src/H5T.c @@ -416,8 +416,11 @@ H5T_order_t H5T_native_order_g = H5T_ORDER_ERROR; /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* - * Predefined data types. These are initialized at runtime by H5T_init(). + * Predefined data types. These are initialized at runtime by H5T__init_package(). * * If more of these are added, the new ones must be added to the list of * types to reset in H5T_term_package(). @@ -642,6 +645,34 @@ static const H5I_class_t H5I_DATATYPE_CLS[1] = {{ (H5I_free_t)H5T__close_cb /* Callback routine for closing objects of this class */ }}; +/* Flag indicating "top" of interface has been initialized */ +static bool H5T_top_package_initialize_s = false; + +/*------------------------------------------------------------------------- + * Function: H5T_init + * + * Purpose: Initialize the interface from some other package. + * + * Return: Success: non-negative + * Failure: negative + * + * Programmer: Robb Matzke + * Wednesday, December 16, 1998 + * + *------------------------------------------------------------------------- + */ +herr_t +H5T_init(void) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_NOAPI(FAIL) + /* FUNC_ENTER() does all the work */ + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5T_init() */ + /*------------------------------------------------------------------------- * Function: H5T__init_inf * @@ -794,17 +825,18 @@ H5T__init_inf(void) FUNC_LEAVE_NOAPI(ret_value) } /* end H5T__init_inf() */ -/*------------------------------------------------------------------------- - * Function: H5T_init - * - * Purpose: Initialize the interface from some other layer. - * - * Return: Success: non-negative - * Failure: negative - *------------------------------------------------------------------------- - */ +/*-------------------------------------------------------------------------- +NAME + H5T__init_package -- Initialize interface-specific information +USAGE + herr__t H5T_init_package() +RETURNS + Non-negative on success/Negative on failure +DESCRIPTION + Initializes any interface-specific data or routines. +--------------------------------------------------------------------------*/ herr_t -H5T_init(void) +H5T__init_package(void) { H5T_t *native_schar = NULL; /* Datatype structure for native signed char */ H5T_t *native_uchar = NULL; /* Datatype structure for native unsigned char */ @@ -848,7 +880,7 @@ H5T_init(void) #endif herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_NOAPI_NOINIT /* Initialize the ID group for the file IDs */ if (H5I_register_type(H5I_DATATYPE_CLS) < 0) @@ -1595,7 +1627,7 @@ H5T_init(void) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to register conversion function(s)"); /* Register datatype creation property class properties here. See similar - * code in H5D_init(), etc. for example. + * code in H5D__init_package(), etc. for example. */ /* Only register the default property list if it hasn't been created yet */ @@ -1608,6 +1640,9 @@ H5T_init(void) HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "can't insert property into class"); } /* end if */ + /* Mark "top" of interface as initialized, too */ + H5T_top_package_initialize_s = true; + done: /* General cleanup */ if (compound != NULL) @@ -1635,7 +1670,7 @@ H5T_init(void) } /* end if */ FUNC_LEAVE_NOAPI(ret_value) -} /* end H5T_init() */ +} /* end H5T__init_package() */ /*------------------------------------------------------------------------- * Function: H5T__unlock_cb @@ -1684,143 +1719,149 @@ H5T_top_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - /* Unregister all conversion functions */ - if (H5T_g.path) { - H5T_conv_ctx_t conv_ctx = {0}; + if (H5T_top_package_initialize_s) { + /* Unregister all conversion functions */ + if (H5T_g.path) { + H5T_conv_ctx_t conv_ctx = {0}; - conv_ctx.u.free.src_type_id = H5I_INVALID_HID; - conv_ctx.u.free.dst_type_id = H5I_INVALID_HID; + conv_ctx.u.free.src_type_id = H5I_INVALID_HID; + conv_ctx.u.free.dst_type_id = H5I_INVALID_HID; - for (int i = 0; i < H5T_g.npaths; i++) { - H5T_path_t *path = H5T_g.path[i]; + for (int i = 0; i < H5T_g.npaths; i++) { + H5T_path_t *path = H5T_g.path[i]; - (void)H5T__path_free(path, &conv_ctx); + (void)H5T__path_free(path, &conv_ctx); - H5T_g.path[i] = NULL; - } /* end for */ + H5T_g.path[i] = NULL; + } /* end for */ - /* Clear conversion tables */ - H5T_g.path = (H5T_path_t **)H5MM_xfree(H5T_g.path); - H5T_g.npaths = 0; - H5T_g.apaths = 0; - H5T_g.soft = (H5T_soft_t *)H5MM_xfree(H5T_g.soft); - H5T_g.nsoft = 0; - H5T_g.asoft = 0; + /* Clear conversion tables */ + H5T_g.path = (H5T_path_t **)H5MM_xfree(H5T_g.path); + H5T_g.npaths = 0; + H5T_g.apaths = 0; + H5T_g.soft = (H5T_soft_t *)H5MM_xfree(H5T_g.soft); + H5T_g.nsoft = 0; + H5T_g.asoft = 0; - n++; - } /* end if */ + n++; + } /* end if */ + + /* Unlock all datatypes, then free them */ + /* note that we are ignoring the return value from H5I_iterate() */ + /* Also note that we are incrementing 'n' in the callback */ + H5I_iterate(H5I_DATATYPE, H5T__unlock_cb, &n, false); + + /* Release all datatype IDs */ + if (H5I_nmembers(H5I_DATATYPE) > 0) { + (void)H5I_clear_type(H5I_DATATYPE, false, false); + n++; /*H5I*/ + } /* end if */ + + /* Reset all the datatype IDs */ + if (H5T_IEEE_F32BE_g > 0) { + H5T_IEEE_F16BE_g = H5I_INVALID_HID; + H5T_IEEE_F16LE_g = H5I_INVALID_HID; + H5T_IEEE_F32BE_g = H5I_INVALID_HID; + H5T_IEEE_F32LE_g = H5I_INVALID_HID; + H5T_IEEE_F64BE_g = H5I_INVALID_HID; + H5T_IEEE_F64LE_g = H5I_INVALID_HID; + + H5T_STD_I8BE_g = H5I_INVALID_HID; + H5T_STD_I8LE_g = H5I_INVALID_HID; + H5T_STD_I16BE_g = H5I_INVALID_HID; + H5T_STD_I16LE_g = H5I_INVALID_HID; + H5T_STD_I32BE_g = H5I_INVALID_HID; + H5T_STD_I32LE_g = H5I_INVALID_HID; + H5T_STD_I64BE_g = H5I_INVALID_HID; + H5T_STD_I64LE_g = H5I_INVALID_HID; + H5T_STD_U8BE_g = H5I_INVALID_HID; + H5T_STD_U8LE_g = H5I_INVALID_HID; + H5T_STD_U16BE_g = H5I_INVALID_HID; + H5T_STD_U16LE_g = H5I_INVALID_HID; + H5T_STD_U32BE_g = H5I_INVALID_HID; + H5T_STD_U32LE_g = H5I_INVALID_HID; + H5T_STD_U64BE_g = H5I_INVALID_HID; + H5T_STD_U64LE_g = H5I_INVALID_HID; + H5T_STD_B8BE_g = H5I_INVALID_HID; + H5T_STD_B8LE_g = H5I_INVALID_HID; + H5T_STD_B16BE_g = H5I_INVALID_HID; + H5T_STD_B16LE_g = H5I_INVALID_HID; + H5T_STD_B32BE_g = H5I_INVALID_HID; + H5T_STD_B32LE_g = H5I_INVALID_HID; + H5T_STD_B64BE_g = H5I_INVALID_HID; + H5T_STD_B64LE_g = H5I_INVALID_HID; + H5T_STD_REF_OBJ_g = H5I_INVALID_HID; + H5T_STD_REF_DSETREG_g = H5I_INVALID_HID; + H5T_STD_REF_g = H5I_INVALID_HID; + + H5T_UNIX_D32BE_g = H5I_INVALID_HID; + H5T_UNIX_D32LE_g = H5I_INVALID_HID; + H5T_UNIX_D64BE_g = H5I_INVALID_HID; + H5T_UNIX_D64LE_g = H5I_INVALID_HID; + + H5T_C_S1_g = H5I_INVALID_HID; + + H5T_FORTRAN_S1_g = H5I_INVALID_HID; + + H5T_NATIVE_SCHAR_g = H5I_INVALID_HID; + H5T_NATIVE_UCHAR_g = H5I_INVALID_HID; + H5T_NATIVE_SHORT_g = H5I_INVALID_HID; + H5T_NATIVE_USHORT_g = H5I_INVALID_HID; + H5T_NATIVE_INT_g = H5I_INVALID_HID; + H5T_NATIVE_UINT_g = H5I_INVALID_HID; + H5T_NATIVE_LONG_g = H5I_INVALID_HID; + H5T_NATIVE_ULONG_g = H5I_INVALID_HID; + H5T_NATIVE_LLONG_g = H5I_INVALID_HID; + H5T_NATIVE_ULLONG_g = H5I_INVALID_HID; + H5T_NATIVE_FLOAT16_g = H5I_INVALID_HID; + H5T_NATIVE_FLOAT_g = H5I_INVALID_HID; + H5T_NATIVE_DOUBLE_g = H5I_INVALID_HID; + H5T_NATIVE_LDOUBLE_g = H5I_INVALID_HID; + H5T_NATIVE_B8_g = H5I_INVALID_HID; + H5T_NATIVE_B16_g = H5I_INVALID_HID; + H5T_NATIVE_B32_g = H5I_INVALID_HID; + H5T_NATIVE_B64_g = H5I_INVALID_HID; + H5T_NATIVE_OPAQUE_g = H5I_INVALID_HID; + H5T_NATIVE_HADDR_g = H5I_INVALID_HID; + H5T_NATIVE_HSIZE_g = H5I_INVALID_HID; + H5T_NATIVE_HSSIZE_g = H5I_INVALID_HID; + H5T_NATIVE_HERR_g = H5I_INVALID_HID; + H5T_NATIVE_HBOOL_g = H5I_INVALID_HID; + + H5T_NATIVE_INT8_g = H5I_INVALID_HID; + H5T_NATIVE_UINT8_g = H5I_INVALID_HID; + H5T_NATIVE_INT_LEAST8_g = H5I_INVALID_HID; + H5T_NATIVE_UINT_LEAST8_g = H5I_INVALID_HID; + H5T_NATIVE_INT_FAST8_g = H5I_INVALID_HID; + H5T_NATIVE_UINT_FAST8_g = H5I_INVALID_HID; + + H5T_NATIVE_INT16_g = H5I_INVALID_HID; + H5T_NATIVE_UINT16_g = H5I_INVALID_HID; + H5T_NATIVE_INT_LEAST16_g = H5I_INVALID_HID; + H5T_NATIVE_UINT_LEAST16_g = H5I_INVALID_HID; + H5T_NATIVE_INT_FAST16_g = H5I_INVALID_HID; + H5T_NATIVE_UINT_FAST16_g = H5I_INVALID_HID; + + H5T_NATIVE_INT32_g = H5I_INVALID_HID; + H5T_NATIVE_UINT32_g = H5I_INVALID_HID; + H5T_NATIVE_INT_LEAST32_g = H5I_INVALID_HID; + H5T_NATIVE_UINT_LEAST32_g = H5I_INVALID_HID; + H5T_NATIVE_INT_FAST32_g = H5I_INVALID_HID; + H5T_NATIVE_UINT_FAST32_g = H5I_INVALID_HID; + + H5T_NATIVE_INT64_g = H5I_INVALID_HID; + H5T_NATIVE_UINT64_g = H5I_INVALID_HID; + H5T_NATIVE_INT_LEAST64_g = H5I_INVALID_HID; + H5T_NATIVE_UINT_LEAST64_g = H5I_INVALID_HID; + H5T_NATIVE_INT_FAST64_g = H5I_INVALID_HID; + H5T_NATIVE_UINT_FAST64_g = H5I_INVALID_HID; + + n++; + } /* end if */ - /* Unlock all datatypes, then free them */ - /* note that we are ignoring the return value from H5I_iterate() */ - /* Also note that we are incrementing 'n' in the callback */ - H5I_iterate(H5I_DATATYPE, H5T__unlock_cb, &n, false); - - /* Release all datatype IDs */ - if (H5I_nmembers(H5I_DATATYPE) > 0) { - (void)H5I_clear_type(H5I_DATATYPE, false, false); - n++; /*H5I*/ - } /* end if */ - - /* Reset all the datatype IDs */ - if (H5T_IEEE_F32BE_g > 0) { - H5T_IEEE_F16BE_g = H5I_INVALID_HID; - H5T_IEEE_F16LE_g = H5I_INVALID_HID; - H5T_IEEE_F32BE_g = H5I_INVALID_HID; - H5T_IEEE_F32LE_g = H5I_INVALID_HID; - H5T_IEEE_F64BE_g = H5I_INVALID_HID; - H5T_IEEE_F64LE_g = H5I_INVALID_HID; - - H5T_STD_I8BE_g = H5I_INVALID_HID; - H5T_STD_I8LE_g = H5I_INVALID_HID; - H5T_STD_I16BE_g = H5I_INVALID_HID; - H5T_STD_I16LE_g = H5I_INVALID_HID; - H5T_STD_I32BE_g = H5I_INVALID_HID; - H5T_STD_I32LE_g = H5I_INVALID_HID; - H5T_STD_I64BE_g = H5I_INVALID_HID; - H5T_STD_I64LE_g = H5I_INVALID_HID; - H5T_STD_U8BE_g = H5I_INVALID_HID; - H5T_STD_U8LE_g = H5I_INVALID_HID; - H5T_STD_U16BE_g = H5I_INVALID_HID; - H5T_STD_U16LE_g = H5I_INVALID_HID; - H5T_STD_U32BE_g = H5I_INVALID_HID; - H5T_STD_U32LE_g = H5I_INVALID_HID; - H5T_STD_U64BE_g = H5I_INVALID_HID; - H5T_STD_U64LE_g = H5I_INVALID_HID; - H5T_STD_B8BE_g = H5I_INVALID_HID; - H5T_STD_B8LE_g = H5I_INVALID_HID; - H5T_STD_B16BE_g = H5I_INVALID_HID; - H5T_STD_B16LE_g = H5I_INVALID_HID; - H5T_STD_B32BE_g = H5I_INVALID_HID; - H5T_STD_B32LE_g = H5I_INVALID_HID; - H5T_STD_B64BE_g = H5I_INVALID_HID; - H5T_STD_B64LE_g = H5I_INVALID_HID; - H5T_STD_REF_OBJ_g = H5I_INVALID_HID; - H5T_STD_REF_DSETREG_g = H5I_INVALID_HID; - H5T_STD_REF_g = H5I_INVALID_HID; - - H5T_UNIX_D32BE_g = H5I_INVALID_HID; - H5T_UNIX_D32LE_g = H5I_INVALID_HID; - H5T_UNIX_D64BE_g = H5I_INVALID_HID; - H5T_UNIX_D64LE_g = H5I_INVALID_HID; - - H5T_C_S1_g = H5I_INVALID_HID; - - H5T_FORTRAN_S1_g = H5I_INVALID_HID; - - H5T_NATIVE_SCHAR_g = H5I_INVALID_HID; - H5T_NATIVE_UCHAR_g = H5I_INVALID_HID; - H5T_NATIVE_SHORT_g = H5I_INVALID_HID; - H5T_NATIVE_USHORT_g = H5I_INVALID_HID; - H5T_NATIVE_INT_g = H5I_INVALID_HID; - H5T_NATIVE_UINT_g = H5I_INVALID_HID; - H5T_NATIVE_LONG_g = H5I_INVALID_HID; - H5T_NATIVE_ULONG_g = H5I_INVALID_HID; - H5T_NATIVE_LLONG_g = H5I_INVALID_HID; - H5T_NATIVE_ULLONG_g = H5I_INVALID_HID; - H5T_NATIVE_FLOAT16_g = H5I_INVALID_HID; - H5T_NATIVE_FLOAT_g = H5I_INVALID_HID; - H5T_NATIVE_DOUBLE_g = H5I_INVALID_HID; - H5T_NATIVE_LDOUBLE_g = H5I_INVALID_HID; - H5T_NATIVE_B8_g = H5I_INVALID_HID; - H5T_NATIVE_B16_g = H5I_INVALID_HID; - H5T_NATIVE_B32_g = H5I_INVALID_HID; - H5T_NATIVE_B64_g = H5I_INVALID_HID; - H5T_NATIVE_OPAQUE_g = H5I_INVALID_HID; - H5T_NATIVE_HADDR_g = H5I_INVALID_HID; - H5T_NATIVE_HSIZE_g = H5I_INVALID_HID; - H5T_NATIVE_HSSIZE_g = H5I_INVALID_HID; - H5T_NATIVE_HERR_g = H5I_INVALID_HID; - H5T_NATIVE_HBOOL_g = H5I_INVALID_HID; - - H5T_NATIVE_INT8_g = H5I_INVALID_HID; - H5T_NATIVE_UINT8_g = H5I_INVALID_HID; - H5T_NATIVE_INT_LEAST8_g = H5I_INVALID_HID; - H5T_NATIVE_UINT_LEAST8_g = H5I_INVALID_HID; - H5T_NATIVE_INT_FAST8_g = H5I_INVALID_HID; - H5T_NATIVE_UINT_FAST8_g = H5I_INVALID_HID; - - H5T_NATIVE_INT16_g = H5I_INVALID_HID; - H5T_NATIVE_UINT16_g = H5I_INVALID_HID; - H5T_NATIVE_INT_LEAST16_g = H5I_INVALID_HID; - H5T_NATIVE_UINT_LEAST16_g = H5I_INVALID_HID; - H5T_NATIVE_INT_FAST16_g = H5I_INVALID_HID; - H5T_NATIVE_UINT_FAST16_g = H5I_INVALID_HID; - - H5T_NATIVE_INT32_g = H5I_INVALID_HID; - H5T_NATIVE_UINT32_g = H5I_INVALID_HID; - H5T_NATIVE_INT_LEAST32_g = H5I_INVALID_HID; - H5T_NATIVE_UINT_LEAST32_g = H5I_INVALID_HID; - H5T_NATIVE_INT_FAST32_g = H5I_INVALID_HID; - H5T_NATIVE_UINT_FAST32_g = H5I_INVALID_HID; - - H5T_NATIVE_INT64_g = H5I_INVALID_HID; - H5T_NATIVE_UINT64_g = H5I_INVALID_HID; - H5T_NATIVE_INT_LEAST64_g = H5I_INVALID_HID; - H5T_NATIVE_UINT_LEAST64_g = H5I_INVALID_HID; - H5T_NATIVE_INT_FAST64_g = H5I_INVALID_HID; - H5T_NATIVE_UINT_FAST64_g = H5I_INVALID_HID; - - n++; + /* Mark "top" of interface as closed */ + if (0 == n) + H5T_top_package_initialize_s = false; } /* end if */ FUNC_LEAVE_NOAPI(n) @@ -1848,11 +1889,18 @@ H5T_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - /* Sanity check */ - assert(0 == H5I_nmembers(H5I_DATATYPE)); + if (H5_PKG_INIT_VAR) { + /* Sanity check */ + assert(0 == H5I_nmembers(H5I_DATATYPE)); + assert(false == H5T_top_package_initialize_s); - /* Destroy the datatype object id group */ - n += (H5I_dec_type_ref(H5I_DATATYPE) > 0); + /* Destroy the datatype object id group */ + n += (H5I_dec_type_ref(H5I_DATATYPE) > 0); + + /* Mark interface as closed */ + if (0 == n) + H5_PKG_INIT_VAR = false; + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5T_term_package() */ @@ -2248,7 +2296,7 @@ H5T_get_class(const H5T_t *dt, htri_t internal) { H5T_class_t ret_value = H5T_NO_CLASS; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(H5T_NO_CLASS) assert(dt); @@ -2263,6 +2311,7 @@ H5T_get_class(const H5T_t *dt, htri_t internal) ret_value = dt->shared->type; } +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5T_get_class() */ @@ -2314,7 +2363,7 @@ H5T_detect_class(const H5T_t *dt, H5T_class_t cls, bool from_api) unsigned i; htri_t ret_value = false; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) assert(dt); assert(cls > H5T_NO_CLASS && cls < H5T_NCLASSES); @@ -6023,13 +6072,14 @@ H5T_is_immutable(const H5T_t *dt) { htri_t ret_value = false; - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) assert(dt); if (dt->shared->state == H5T_STATE_IMMUTABLE) ret_value = true; +done: FUNC_LEAVE_NOAPI(ret_value) } @@ -6047,7 +6097,7 @@ H5T_is_named(const H5T_t *dt) { htri_t ret_value = false; - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) assert(dt); @@ -6056,6 +6106,7 @@ H5T_is_named(const H5T_t *dt) else ret_value = (H5T_STATE_OPEN == dt->shared->state || H5T_STATE_NAMED == dt->shared->state); +done: FUNC_LEAVE_NOAPI(ret_value) } @@ -6131,13 +6182,14 @@ H5T_get_ref_type(const H5T_t *dt) { H5R_type_t ret_value = H5R_BADTYPE; - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(H5R_BADTYPE) assert(dt); if (dt->shared->type == H5T_REFERENCE) ret_value = dt->shared->u.atomic.u.r.rtype; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5T_get_ref_type() */ @@ -6158,7 +6210,7 @@ H5T_is_sensible(const H5T_t *dt) { htri_t ret_value = FAIL; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) assert(dt); @@ -6196,6 +6248,7 @@ H5T_is_sensible(const H5T_t *dt) break; } /* end switch */ +done: FUNC_LEAVE_NOAPI(ret_value) } @@ -6385,7 +6438,7 @@ H5T_is_relocatable(const H5T_t *dt) { htri_t ret_value = false; - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity check */ assert(dt); @@ -6394,6 +6447,7 @@ H5T_is_relocatable(const H5T_t *dt) if (H5T_detect_class(dt, H5T_VLEN, false) || H5T_detect_class(dt, H5T_REFERENCE, false)) ret_value = true; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5T_is_relocatable() */ @@ -6478,7 +6532,7 @@ H5T_is_vl_storage(const H5T_t *dt) { htri_t ret_value = false; - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity check */ assert(dt); @@ -6491,6 +6545,7 @@ H5T_is_vl_storage(const H5T_t *dt) else ret_value = false; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5T_is_vl_storage() */ @@ -6633,7 +6688,7 @@ H5T_patch_file(H5T_t *dt, H5F_t *f) { herr_t ret_value = SUCCEED; - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity check */ assert(dt); @@ -6644,6 +6699,7 @@ H5T_patch_file(H5T_t *dt, H5F_t *f) dt->sh_loc.file = f; } /* end if */ +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5T_patch_file() */ diff --git a/src/H5TSint.c b/src/H5TSint.c index 410ae408a23..6f0c49648e2 100644 --- a/src/H5TSint.c +++ b/src/H5TSint.c @@ -79,6 +79,9 @@ static H5TS_tinfo_node_t *H5TS__tinfo_create(void); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Per-thread info */ H5TS_key_t H5TS_thrd_info_key_g; diff --git a/src/H5TSmodule.h b/src/H5TSmodule.h index e550d3a9edb..71d0de45349 100644 --- a/src/H5TSmodule.h +++ b/src/H5TSmodule.h @@ -22,7 +22,8 @@ * reporting macros. */ #define H5TS_MODULE -#define H5_MY_PKG H5TS -#define H5_MY_PKG_ERR H5E_THREADSAFE +#define H5_MY_PKG H5TS +#define H5_MY_PKG_ERR H5E_THREADSAFE +#define H5_MY_PKG_INIT YES #endif /* H5TSmodule_H */ diff --git a/src/H5TSwin.c b/src/H5TSwin.c index d6198dab0ba..c1f281360c1 100644 --- a/src/H5TSwin.c +++ b/src/H5TSwin.c @@ -70,7 +70,7 @@ static herr_t H5TS__win32_thread_exit(void); * * Purpose: Per-process setup on Windows when using Win32 threads. * - * Returns: true on success, FALSE on failure + * Returns: TRUE on success, FALSE on failure * *-------------------------------------------------------------------------- */ diff --git a/src/H5Tfields.c b/src/H5Tfields.c index 8d3ec8f6fb8..2b6ab80a62c 100644 --- a/src/H5Tfields.c +++ b/src/H5Tfields.c @@ -106,7 +106,7 @@ H5T_get_nmembers(const H5T_t *dt) * *------------------------------------------------------------------------- */ -char * +H5_ATTR_MALLOC char * H5Tget_member_name(hid_t type_id, unsigned membno) { H5T_t *dt = NULL; diff --git a/src/H5Tmodule.h b/src/H5Tmodule.h index 55ba2d9d478..139414fcf78 100644 --- a/src/H5Tmodule.h +++ b/src/H5Tmodule.h @@ -22,8 +22,9 @@ * reporting macros. */ #define H5T_MODULE -#define H5_MY_PKG H5T -#define H5_MY_PKG_ERR H5E_DATATYPE +#define H5_MY_PKG H5T +#define H5_MY_PKG_ERR H5E_DATATYPE +#define H5_MY_PKG_INIT YES /** \page H5T_UG HDF5 Datatypes * diff --git a/src/H5Topaque.c b/src/H5Topaque.c index c4165b15c0e..2875b388bab 100644 --- a/src/H5Topaque.c +++ b/src/H5Topaque.c @@ -72,7 +72,7 @@ H5Tset_tag(hid_t type_id, const char *tag) * *------------------------------------------------------------------------- */ -char * +H5_ATTR_MALLOC char * H5Tget_tag(hid_t type_id) { H5T_t *dt = NULL; diff --git a/src/H5Tpublic.h b/src/H5Tpublic.h index 8de42d507e8..ecededcfda7 100644 --- a/src/H5Tpublic.h +++ b/src/H5Tpublic.h @@ -239,14 +239,6 @@ typedef H5T_conv_ret_t (*H5T_conv_except_func_t)(H5T_conv_except_t except_type, void *src_buf, void *dst_buf, void *user_data); //! -/* When this header is included from a private header, don't make calls to H5open() */ -#undef H5OPEN -#ifndef H5private_H -#define H5OPEN H5open(), -#else /* H5private_H */ -#define H5OPEN -#endif /* H5private_H */ - /* * The IEEE floating point types in various byte orders. */ diff --git a/src/H5VLint.c b/src/H5VLint.c index 938b33588ba..c3c4cd744b5 100644 --- a/src/H5VLint.c +++ b/src/H5VLint.c @@ -105,6 +105,9 @@ static herr_t H5VL__free_vol_wrapper(H5VL_wrap_ctx_t *vol_wrap_ctx); /* Package Variables */ /*********************/ +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /*****************************/ /* Library Private Variables */ /*****************************/ @@ -160,9 +163,7 @@ H5VL_init_phase1(void) FUNC_ENTER_NOAPI(FAIL) - /* Initialize the ID group for the VL IDs */ - if (H5I_register_type(H5I_VOL_CLS) < 0) - HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "unable to initialize H5VL interface"); + /* FUNC_ENTER() does all the work */ done: FUNC_LEAVE_NOAPI(ret_value) @@ -184,38 +185,23 @@ H5VL_init_phase1(void) herr_t H5VL_init_phase2(void) { - size_t i; herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) - /* clang-format off */ - struct { - herr_t (*func)(void); - const char *descr; - } initializer[] = { - {H5T_init, "datatype"} - , {H5O_init, "object header"} - , {H5D_init, "dataset"} - , {H5F_init, "file"} - , {H5G_init, "group"} - , {H5A_init, "attribute"} - , {H5M_init, "map"} - , {H5CX_init, "context"} - , {H5ES_init, "event set"} - , {H5Z_init, "transform"} - , {H5R_init, "reference"} - }; - /* Initialize all packages for VOL-managed objects */ - for (i = 0; i < NELMTS(initializer); i++) { - if (initializer[i].func() < 0) { - HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, - "unable to initialize %s interface", initializer[i].descr); - } - } - - /* clang-format on */ + if (H5T_init() < 0) + HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "unable to initialize datatype interface"); + if (H5D_init() < 0) + HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "unable to initialize dataset interface"); + if (H5F_init() < 0) + HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "unable to initialize file interface"); + if (H5G_init() < 0) + HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "unable to initialize group interface"); + if (H5A_init() < 0) + HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "unable to initialize attribute interface"); + if (H5M_init() < 0) + HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "unable to initialize map interface"); /* Register internal VOL connectors */ if (H5VL__native_register() < 0) @@ -235,6 +221,32 @@ H5VL_init_phase2(void) FUNC_LEAVE_NOAPI(ret_value) } /* end H5VL_init_phase2() */ +/*------------------------------------------------------------------------- + * Function: H5VL__init_package + * + * Purpose: Initialize interface-specific information + * + * Return: Success: Non-negative + * + * Failure: Negative + * + *------------------------------------------------------------------------- + */ +herr_t +H5VL__init_package(void) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_PACKAGE + + /* Initialize the ID group for the VL IDs */ + if (H5I_register_type(H5I_VOL_CLS) < 0) + HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "unable to initialize H5VL interface"); + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5VL__init_package() */ + /*------------------------------------------------------------------------- * Function: H5VL_term_package * @@ -253,36 +265,42 @@ H5VL_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR - if (H5VL_def_conn_s.connector) { - /* Release the default VOL connector */ - (void)H5VL_conn_prop_free(&H5VL_def_conn_s); - H5VL_def_conn_s.connector = NULL; - H5VL_def_conn_s.connector_info = NULL; - n++; - } /* end if */ - else { - if (H5I_nmembers(H5I_VOL) > 0) { - /* Unregister all VOL connectors */ - (void)H5I_clear_type(H5I_VOL, true, false); - - /* Reset internal VOL connectors' global vars */ - (void)H5VL__native_unregister(); - (void)H5VL__passthru_unregister(); - + if (H5_PKG_INIT_VAR) { + if (H5VL_def_conn_s.connector) { + /* Release the default VOL connector */ + (void)H5VL_conn_prop_free(&H5VL_def_conn_s); + H5VL_def_conn_s.connector = NULL; + H5VL_def_conn_s.connector_info = NULL; n++; } /* end if */ else { - if (H5VL__num_opt_operation() > 0) { - /* Unregister all dynamically registered optional operations */ - (void)H5VL__term_opt_operation(); + if (H5I_nmembers(H5I_VOL) > 0) { + /* Unregister all VOL connectors */ + (void)H5I_clear_type(H5I_VOL, true, false); + + /* Reset internal VOL connectors' global vars */ + (void)H5VL__native_unregister(); + (void)H5VL__passthru_unregister(); + n++; } /* end if */ else { - /* Destroy the VOL connector ID group */ - n += (H5I_dec_type_ref(H5I_VOL) > 0); - } /* end else */ - } /* end else */ - } /* end else */ + if (H5VL__num_opt_operation() > 0) { + /* Unregister all dynamically registered optional operations */ + (void)H5VL__term_opt_operation(); + n++; + } /* end if */ + else { + /* Destroy the VOL connector ID group */ + n += (H5I_dec_type_ref(H5I_VOL) > 0); + + /* Mark interface as closed */ + if (0 == n) + H5_PKG_INIT_VAR = false; + } /* end else */ + } /* end else */ + } /* end else */ + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5VL_term_package() */ @@ -959,7 +977,7 @@ H5VL_conn_inc_rc(H5VL_connector_t *connector) { int64_t ret_value = -1; - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(-1) /* Check arguments */ assert(connector); @@ -970,6 +988,7 @@ H5VL_conn_inc_rc(H5VL_connector_t *connector) /* Set return value */ ret_value = connector->nrefs; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5VL_conn_inc_rc() */ @@ -1031,7 +1050,7 @@ H5VL_conn_same_class(const H5VL_connector_t *conn1, const H5VL_connector_t *conn if (conn1 == conn2) HGOTO_DONE(true); else { - int cmp_value; /* Comparison result */ + int cmp_value = 0; /* Comparison result */ /* Compare connector classes */ if (H5VL_cmp_connector_cls(&cmp_value, conn1->cls, conn2->cls) < 0) @@ -1124,7 +1143,7 @@ H5VL__conn_free_id(H5VL_connector_t *connector, void H5_ATTR_UNUSED **request) hsize_t H5VL_object_inc_rc(H5VL_object_t *vol_obj) { - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI_NOINIT_NOERR /* Check arguments */ assert(vol_obj); @@ -1180,7 +1199,7 @@ H5VL_object_is_native(const H5VL_object_t *obj, bool *is_native) { const H5VL_class_t *cls; /* VOL connector class structs for object */ H5VL_connector_t *native; /* Native VOL connector */ - int cmp_value; /* Comparison result */ + int cmp_value = 0; /* Comparison result */ herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) @@ -1222,7 +1241,7 @@ H5VL_file_is_same(const H5VL_object_t *vol_obj1, const H5VL_object_t *vol_obj2, { const H5VL_class_t *cls1; /* VOL connector class struct for first object */ const H5VL_class_t *cls2; /* VOL connector class struct for second object */ - int cmp_value; /* Comparison result */ + int cmp_value = 0; /* Comparison result */ herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) @@ -1512,7 +1531,7 @@ H5VL__register_connector_by_value(H5VL_class_value_t value, hid_t vipl_id) * *------------------------------------------------------------------------- */ -htri_t +H5_ATTR_PURE htri_t H5VL__is_connector_registered_by_name(const char *name) { H5VL_connector_t *connector = NULL; /* Connector for class */ @@ -1549,7 +1568,7 @@ H5VL__is_connector_registered_by_name(const char *name) * *------------------------------------------------------------------------- */ -htri_t +H5_ATTR_PURE htri_t H5VL__is_connector_registered_by_value(H5VL_class_value_t value) { H5VL_connector_t *connector = NULL; /* Connector for class */ @@ -1663,7 +1682,7 @@ H5VL__get_connector_by_value(H5VL_class_value_t value) size_t H5VL__get_connector_name(const H5VL_connector_t *connector, char *name /*out*/, size_t size) { - size_t len; + size_t len = 0; FUNC_ENTER_PACKAGE_NOERR @@ -1943,7 +1962,7 @@ H5VL_cmp_connector_cls(int *cmp_value, const H5VL_class_t *cls1, const H5VL_clas { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity checks */ assert(cls1); @@ -2450,7 +2469,7 @@ H5VL_check_plugin_load(const H5VL_class_t *cls, const H5PL_key_t *key, bool *suc { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity checks */ assert(cls); @@ -2476,6 +2495,7 @@ H5VL_check_plugin_load(const H5VL_class_t *cls, const H5PL_key_t *key, bool *suc if (*success && cls->version != H5VL_VERSION) *success = false; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5VL_check_plugin_load() */ diff --git a/src/H5VLmodule.h b/src/H5VLmodule.h index 8359118998c..9f22cec9c1a 100644 --- a/src/H5VLmodule.h +++ b/src/H5VLmodule.h @@ -23,8 +23,9 @@ * reporting macros. */ #define H5VL_MODULE -#define H5_MY_PKG H5VL -#define H5_MY_PKG_ERR H5E_VOL +#define H5_MY_PKG H5VL +#define H5_MY_PKG_ERR H5E_VOL +#define H5_MY_PKG_INIT YES /** \page H5VL_UG HDF5 Virtual Object Layer (VOL) * diff --git a/src/H5VLnative.h b/src/H5VLnative.h index 3653c2668cc..6b1cc5652ec 100644 --- a/src/H5VLnative.h +++ b/src/H5VLnative.h @@ -25,14 +25,6 @@ /* Public Macros */ /*****************/ -/* When this header is included from a private header, don't make calls to H5open() */ -#undef H5OPEN -#ifndef H5private_H -#define H5OPEN H5open(), -#else /* H5private_H */ -#define H5OPEN -#endif /* H5private_H */ - /* Identifier for the native VOL connector */ #define H5VL_NATIVE (H5OPEN H5VL_NATIVE_g) diff --git a/src/H5VLpassthru.h b/src/H5VLpassthru.h index d3723b72c67..ffe953cea87 100644 --- a/src/H5VLpassthru.h +++ b/src/H5VLpassthru.h @@ -20,14 +20,6 @@ /* Public headers needed by this file */ #include "H5VLpublic.h" /* Virtual Object Layer */ -/* When this header is included from a private header, don't make calls to H5open() */ -#undef H5OPEN -#ifndef H5private_H -#define H5OPEN H5open(), -#else /* H5private_H */ -#define H5OPEN -#endif /* H5private_H */ - /* Identifier for the pass-through VOL connector */ #define H5VL_PASSTHRU (H5OPEN H5VL_PASSTHRU_g) diff --git a/src/H5Z.c b/src/H5Z.c index 67b1a31154f..4ad75a6668c 100644 --- a/src/H5Z.c +++ b/src/H5Z.c @@ -58,6 +58,9 @@ typedef enum { H5Z_PRELUDE_SET_LOCAL /* Call "set local" callback */ } H5Z_prelude_type_t; +/* Package initialization variable */ +bool H5_PKG_INIT_VAR = false; + /* Local variables */ static size_t H5Z_table_alloc_g = 0; static size_t H5Z_table_used_g = 0; @@ -75,23 +78,20 @@ static int H5Z__check_unregister_group_cb(void *obj_ptr, hid_t obj_id, void *key static int H5Z__flush_file_cb(void *obj_ptr, hid_t obj_id, void *key); /*------------------------------------------------------------------------- - * Function: H5Z_init + * Function: H5Z__init_package * - * Purpose: Initialize the interface from some other layer. + * Purpose: Initializes the data filter layer. * * Return: Success: non-negative * Failure: negative *------------------------------------------------------------------------- */ herr_t -H5Z_init(void) +H5Z__init_package(void) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) - - if (H5_TERM_GLOBAL) - HGOTO_DONE(SUCCEED); + FUNC_ENTER_PACKAGE /* Internal filters */ if (H5Z_register(H5Z_SHUFFLE) < 0) @@ -122,7 +122,7 @@ H5Z_init(void) done: FUNC_LEAVE_NOAPI(ret_value) -} +} /* end H5Z__init_package() */ /*------------------------------------------------------------------------- * Function: H5Z_term_package @@ -139,70 +139,76 @@ H5Z_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR + if (H5_PKG_INIT_VAR) { #ifdef H5Z_DEBUG - char comment[16], bandwidth[32]; - int dir, nprint = 0; - size_t i; - - if (DUMP_DEBUG_STATS_g) { - for (i = 0; i < H5Z_table_used_g; i++) { - for (dir = 0; dir < 2; dir++) { - struct { - char *user; - char *system; - char *elapsed; - } timestrs = {H5_timer_get_time_string(H5Z_stat_table_g[i].stats[dir].times.user), - H5_timer_get_time_string(H5Z_stat_table_g[i].stats[dir].times.system), - H5_timer_get_time_string(H5Z_stat_table_g[i].stats[dir].times.elapsed)}; - if (0 == H5Z_stat_table_g[i].stats[dir].total) - goto next; - - if (0 == nprint++) { - /* Print column headers */ - fprintf(stdout, "H5Z: filter statistics " - "accumulated over life of library:\n"); - fprintf(stdout, " %-16s %10s %10s %8s %8s %8s %10s\n", "Filter", "Total", "Errors", - "User", "System", "Elapsed", "Bandwidth"); - fprintf(stdout, " %-16s %10s %10s %8s %8s %8s %10s\n", "------", "-----", "------", - "----", "------", "-------", "---------"); - } /* end if */ - - /* Truncate the comment to fit in the field */ - strncpy(comment, H5Z_table_g[i].name, sizeof comment); - comment[sizeof(comment) - 1] = '\0'; + char comment[16], bandwidth[32]; + int dir, nprint = 0; + size_t i; + + if (DUMP_DEBUG_STATS_g) { + for (i = 0; i < H5Z_table_used_g; i++) { + for (dir = 0; dir < 2; dir++) { + struct { + char *user; + char *system; + char *elapsed; + } timestrs = {H5_timer_get_time_string(H5Z_stat_table_g[i].stats[dir].times.user), + H5_timer_get_time_string(H5Z_stat_table_g[i].stats[dir].times.system), + H5_timer_get_time_string(H5Z_stat_table_g[i].stats[dir].times.elapsed)}; + if (0 == H5Z_stat_table_g[i].stats[dir].total) + goto next; + + if (0 == nprint++) { + /* Print column headers */ + fprintf(stdout, "H5Z: filter statistics " + "accumulated over life of library:\n"); + fprintf(stdout, " %-16s %10s %10s %8s %8s %8s %10s\n", "Filter", "Total", "Errors", + "User", "System", "Elapsed", "Bandwidth"); + fprintf(stdout, " %-16s %10s %10s %8s %8s %8s %10s\n", "------", "-----", "------", + "----", "------", "-------", "---------"); + } /* end if */ - /* - * Format bandwidth to have four significant digits and - * units of `B/s', `kB/s', `MB/s', `GB/s', or `TB/s' or - * the word `Inf' if the elapsed time is zero. - */ - H5_bandwidth(bandwidth, sizeof(bandwidth), (double)(H5Z_stat_table_g[i].stats[dir].total), - H5Z_stat_table_g[i].stats[dir].times.elapsed); - - /* Print the statistics */ - fprintf(stdout, " %s%-15s %10" PRIdHSIZE " %10" PRIdHSIZE " %8s %8s %8s %10s\n", - (dir ? "<" : ">"), comment, H5Z_stat_table_g[i].stats[dir].total, - H5Z_stat_table_g[i].stats[dir].errors, timestrs.user, timestrs.system, - timestrs.elapsed, bandwidth); + /* Truncate the comment to fit in the field */ + strncpy(comment, H5Z_table_g[i].name, sizeof comment); + comment[sizeof(comment) - 1] = '\0'; + + /* + * Format bandwidth to have four significant digits and + * units of `B/s', `kB/s', `MB/s', `GB/s', or `TB/s' or + * the word `Inf' if the elapsed time is zero. + */ + H5_bandwidth(bandwidth, sizeof(bandwidth), (double)(H5Z_stat_table_g[i].stats[dir].total), + H5Z_stat_table_g[i].stats[dir].times.elapsed); + + /* Print the statistics */ + fprintf(stdout, " %s%-15s %10" PRIdHSIZE " %10" PRIdHSIZE " %8s %8s %8s %10s\n", + (dir ? "<" : ">"), comment, H5Z_stat_table_g[i].stats[dir].total, + H5Z_stat_table_g[i].stats[dir].errors, timestrs.user, timestrs.system, + timestrs.elapsed, bandwidth); next: - free(timestrs.user); - free(timestrs.system); - free(timestrs.elapsed); - } /* end for */ - } /* end for */ - } /* end if */ -#endif /* H5Z_DEBUG */ - - /* Free the table of filters */ - if (H5Z_table_g) { - H5Z_table_g = (H5Z_class2_t *)H5MM_xfree(H5Z_table_g); + free(timestrs.user); + free(timestrs.system); + free(timestrs.elapsed); + } /* end for */ + } /* end for */ + } /* end if */ +#endif /* H5Z_DEBUG */ + + /* Free the table of filters */ + if (H5Z_table_g) { + H5Z_table_g = (H5Z_class2_t *)H5MM_xfree(H5Z_table_g); #ifdef H5Z_DEBUG - H5Z_stat_table_g = (H5Z_stats_t *)H5MM_xfree(H5Z_stat_table_g); + H5Z_stat_table_g = (H5Z_stats_t *)H5MM_xfree(H5Z_stat_table_g); #endif /* H5Z_DEBUG */ - H5Z_table_used_g = H5Z_table_alloc_g = 0; + H5Z_table_used_g = H5Z_table_alloc_g = 0; + + n++; + } /* end if */ - n++; + /* Mark interface as closed */ + if (0 == n) + H5_PKG_INIT_VAR = false; } /* end if */ FUNC_LEAVE_NOAPI(n) @@ -1571,7 +1577,7 @@ H5Z_filter_in_pline(const H5O_pline_t *pline, H5Z_filter_t filter) size_t idx; /* Index of filter in pipeline */ htri_t ret_value = true; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) assert(pline); assert(filter >= 0 && filter <= H5Z_FILTER_MAX); @@ -1585,6 +1591,7 @@ H5Z_filter_in_pline(const H5O_pline_t *pline, H5Z_filter_t filter) if (idx >= pline->nused) ret_value = false; +done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5Z_filter_in_pline() */ @@ -1604,7 +1611,7 @@ H5Z_all_filters_avail(const H5O_pline_t *pline) size_t i, j; /* Local index variable */ htri_t ret_value = true; /* Return value */ - FUNC_ENTER_NOAPI_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Check args */ assert(pline); diff --git a/src/H5Zmodule.h b/src/H5Zmodule.h index 23d38368047..8c1dc467042 100644 --- a/src/H5Zmodule.h +++ b/src/H5Zmodule.h @@ -22,8 +22,9 @@ * reporting macros. */ #define H5Z_MODULE -#define H5_MY_PKG H5Z -#define H5_MY_PKG_ERR H5E_PLINE +#define H5_MY_PKG H5Z +#define H5_MY_PKG_ERR H5E_PLINE +#define H5_MY_PKG_INIT YES /** \page H5Z_UG HDF5 Filters * @todo Under Construction diff --git a/src/H5module.h b/src/H5module.h index 918630f1646..c0fb5ad348a 100644 --- a/src/H5module.h +++ b/src/H5module.h @@ -22,8 +22,9 @@ * reporting macros. */ #define H5_MODULE -#define H5_MY_PKG H5 -#define H5_MY_PKG_ERR H5E_LIB +#define H5_MY_PKG H5 +#define H5_MY_PKG_ERR H5E_LIB +#define H5_MY_PKG_INIT YES /** \page H5DM_UG HDF5 Data Model and File Structure * diff --git a/src/H5private.h b/src/H5private.h index b46dc8f7651..6bd1f292e2d 100644 --- a/src/H5private.h +++ b/src/H5private.h @@ -114,14 +114,8 @@ #include #endif -/* Define the default VFD for this platform. Since the removal of the - * Windows VFD, this is sec2 for all platforms. - * - * Note well: if you change the default, then be sure to change - * H5_default_vfd_init() to call that default's initializer. Also, - * make sure that the initializer for each *non*-default VFD calls - * H5_init_library(); also, make sure that the initializer for default - * VFD does *not* call H5_init_library(). +/* Define the default VFD for this platform. + * Since the removal of the Windows VFD, this is sec2 for all platforms. */ #define H5_DEFAULT_VFD H5FD_SEC2 #define H5_DEFAULT_VFD_NAME "sec2" @@ -171,18 +165,6 @@ #define HASH_NONFATAL_OOM 1 /* Don't abort() on out-of-memory */ #include "uthash.h" -/* - * Does the compiler support the __builtin_expect() syntax? - * It's not a problem if not. - */ -#if H5_HAVE_BUILTIN_EXPECT -#define H5_LIKELY(expression) __builtin_expect(!!(expression), 1) -#define H5_UNLIKELY(expression) __builtin_expect(!!(expression), 0) -#else -#define H5_LIKELY(expression) (expression) -#define H5_UNLIKELY(expression) (expression) -#endif - /* * Does the compiler support the __attribute__(()) syntax? It's no * big deal if we don't. @@ -1111,14 +1093,37 @@ extern char H5_lib_vers_info_g[]; #endif /* H5_HAVE_THREADSAFE */ -/* Library init / term status (global) */ -extern bool H5_libinit_g; /* Has the library been initialized? */ -extern bool H5_libterm_g; /* Is the library being shutdown? */ - /* Macros for accessing the global variables */ #define H5_INIT_GLOBAL (H5_libinit_g) #define H5_TERM_GLOBAL (H5_libterm_g) +/* Macros for referencing package initialization symbols */ +#define H5_PACKAGE_INIT_VAR(x) H5_GLUE(x, _init_g) +#define H5_PACKAGE_INIT_FUNC(x) H5_GLUE(x, __init_package) + +/* Macros for defining package initialization routines */ +#ifdef H5_MY_PKG +#define H5_PKG_INIT_VAR H5_PACKAGE_INIT_VAR(H5_MY_PKG) +#define H5_PKG_INIT_FUNC H5_PACKAGE_INIT_FUNC(H5_MY_PKG) +#define H5_PACKAGE_YES_INIT(err) \ + /* Initialize this interface or bust */ \ + if (H5_UNLIKELY(!H5_PKG_INIT_VAR && !H5_TERM_GLOBAL)) { \ + H5_PKG_INIT_VAR = true; \ + if (H5_PKG_INIT_FUNC() < 0) { \ + H5_PKG_INIT_VAR = false; \ + HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, err, "interface initialization failed"); \ + } \ + } +#define H5_PACKAGE_NO_INIT(err) \ + /* Mark a package without an init interface call as initialized */ \ + if (H5_UNLIKELY(!H5_PKG_INIT_VAR && !H5_TERM_GLOBAL)) \ + H5_PKG_INIT_VAR = true; +#define H5_PACKAGE_INIT(pkg_init, err) H5_GLUE3(H5_PACKAGE_, pkg_init, _INIT)(err) +#else /* H5_MY_PKG */ +#define H5_PKG_INIT_VAR (true) +#define H5_PACKAGE_INIT(pkg_init, err) +#endif /* H5_MY_PKG */ + /* Forward declaration of H5CXpush() / H5CXpop() */ /* (Including H5CXprivate.h creates bad circular dependencies - QAK, 3/18/2018) */ H5_DLL herr_t H5CX_push(void); @@ -1160,10 +1165,12 @@ H5_DLL herr_t H5CX_pop(bool update_dxpl_props); #define FUNC_ENTER_API_INIT(err) \ /* Initialize the library */ \ - if (H5_UNLIKELY(!H5_INIT_GLOBAL && !H5_TERM_GLOBAL)) { \ + if (H5_UNLIKELY(!H5_INIT_GLOBAL && !H5_TERM_GLOBAL)) \ if (H5_UNLIKELY(H5_init_library() < 0)) \ HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, err, "library initialization failed"); \ - } + \ + /* Initialize the package, if appropriate */ \ + H5_PACKAGE_INIT(H5_MY_PKG_INIT, err) #define FUNC_ENTER_API_PUSH(err) \ /* Push the API context */ \ @@ -1214,12 +1221,11 @@ H5_DLL herr_t H5CX_pop(bool update_dxpl_props); /* * Use this macro for API functions that shouldn't perform _any_ initialization - * of the library or an interface or push themselves on the function - * stack, just perform tracing, etc. Examples + * of the library or an interface and also don't return errors. Examples * are: H5close, H5check_version, etc. * */ -#define FUNC_ENTER_API_NOINIT_NOERR_NOFS \ +#define FUNC_ENTER_API_NOINIT_NOERR \ { \ { \ { \ @@ -1264,17 +1270,24 @@ H5_DLL herr_t H5CX_pop(bool update_dxpl_props); FUNC_ENTER_COMMON_NOERR(H5_IS_API(__func__)); \ { +/* Note: this macro only works when there's _no_ interface initialization routine for the module */ +#define FUNC_ENTER_NOAPI_INIT(err) \ + /* Initialize the package, if appropriate */ \ + H5_PACKAGE_INIT(H5_MY_PKG_INIT, err) + /* Use this macro for all "normal" non-API functions */ #define FUNC_ENTER_NOAPI(err) \ { \ FUNC_ENTER_COMMON(!H5_IS_API(__func__)); \ - { + FUNC_ENTER_NOAPI_INIT(err) \ + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { /* Use this macro for all non-API functions, which propagate errors, but don't issue them */ #define FUNC_ENTER_NOAPI_NOERR \ { \ FUNC_ENTER_COMMON_NOERR(!H5_IS_API(__func__)); \ - { + FUNC_ENTER_NOAPI_INIT(-) \ + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { /* * Use this macro for non-API functions which fall into these categories: @@ -1287,7 +1300,7 @@ H5_DLL herr_t H5CX_pop(bool update_dxpl_props); #define FUNC_ENTER_NOAPI_NOINIT \ { \ FUNC_ENTER_COMMON(!H5_IS_API(__func__)); \ - { + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { /* * Use this macro for non-API functions which fall into these categories: @@ -1301,7 +1314,7 @@ H5_DLL herr_t H5CX_pop(bool update_dxpl_props); #define FUNC_ENTER_NOAPI_NOINIT_NOERR \ { \ FUNC_ENTER_COMMON_NOERR(!H5_IS_API(__func__)); \ - { + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { /* * Use this macro for non-API functions that shouldn't perform _any_ initialization @@ -1323,7 +1336,8 @@ H5_DLL herr_t H5CX_pop(bool update_dxpl_props); \ FUNC_ENTER_COMMON(!H5_IS_API(__func__)); \ H5AC_tag(tag, &prev_tag); \ - { + FUNC_ENTER_NOAPI_INIT(err) \ + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { #define FUNC_ENTER_NOAPI_NOINIT_TAG(tag) \ { \ @@ -1331,19 +1345,19 @@ H5_DLL herr_t H5CX_pop(bool update_dxpl_props); \ FUNC_ENTER_COMMON(!H5_IS_API(__func__)); \ H5AC_tag(tag, &prev_tag); \ - { + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { /* Use this macro for all "normal" package-level functions */ #define FUNC_ENTER_PACKAGE \ { \ FUNC_ENTER_COMMON(H5_IS_PKG(__func__)); \ - { + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { /* Use this macro for package-level functions which propagate errors, but don't issue them */ #define FUNC_ENTER_PACKAGE_NOERR \ { \ FUNC_ENTER_COMMON_NOERR(H5_IS_PKG(__func__)); \ - { + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { /* Use the following macro as replacement for the FUNC_ENTER_PACKAGE * macro when the function needs to set up a metadata tag. */ @@ -1353,14 +1367,7 @@ H5_DLL herr_t H5CX_pop(bool update_dxpl_props); \ FUNC_ENTER_COMMON(H5_IS_PKG(__func__)); \ H5AC_tag(tag, &prev_tag); \ - { - -/* Use this macro for staticly-scoped functions which propagate errors, but don't issue them */ -/* And that shouldn't push their name on the function stack */ -#define FUNC_ENTER_PACKAGE_NOERR_NOFS \ - { \ - FUNC_ENTER_COMMON_NOERR(H5_IS_PKG(__func__)); \ - { + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { /* * Use this macro for non-API functions that shouldn't perform _any_ initialization @@ -1405,8 +1412,8 @@ H5_DLL herr_t H5CX_pop(bool update_dxpl_props); } \ } /*end scope from beginning of FUNC_ENTER*/ -/* Use this macro to match the FUNC_ENTER_API_NOINIT_NOERR_NOFS macro */ -#define FUNC_LEAVE_API_NOFS(ret_value) \ +/* Use this macro to match the FUNC_ENTER_API_NOINIT_NOERR macro */ +#define FUNC_LEAVE_API_NOERR(ret_value) \ ; \ } /*end scope from end of FUNC_ENTER*/ \ H5_API_UNLOCK \ @@ -1470,6 +1477,19 @@ H5_DLL herr_t H5CX_pop(bool update_dxpl_props); return (ret_value); \ } /*end scope from beginning of FUNC_ENTER*/ +/* Macros to declare package initialization function, if a package initialization routine is defined */ +#define H5_PKG_DECLARE_YES_FUNC(pkg) extern herr_t H5_PACKAGE_INIT_FUNC(pkg)(void); +#define H5_PKG_DECLARE_NO_FUNC(pkg) + +/* Declare package initialization symbols (if in a package) */ +#define H5_PKG_DECLARE_VAR(pkg) extern bool H5_PACKAGE_INIT_VAR(pkg); +#define H5_PKG_DECLARE_FUNC(pkg_init, pkg) H5_GLUE3(H5_PKG_DECLARE_, pkg_init, _FUNC)(pkg) + +#ifdef H5_MY_PKG +H5_PKG_DECLARE_VAR(H5_MY_PKG) +H5_PKG_DECLARE_FUNC(H5_MY_PKG_INIT, H5_MY_PKG) +#endif + /* Macro to begin/end tagging (when FUNC_ENTER_*TAG macros are insufficient). * Make sure to use HGOTO_ERROR_TAG and HGOTO_DONE_TAG between these macros! */ #define H5_BEGIN_TAG(tag) \ diff --git a/src/H5public.h b/src/H5public.h index d898e75b353..d25d2946e48 100644 --- a/src/H5public.h +++ b/src/H5public.h @@ -430,10 +430,43 @@ typedef void (*H5_atclose_func_t)(void *ctx); /* API adapter header (defines H5_DLL, etc.) */ #include "H5api_adpt.h" +/* + * Does the compiler support the __builtin_expect() syntax? + * It's not a problem if not. + */ +#if H5_HAVE_BUILTIN_EXPECT +#define H5_LIKELY(expression) __builtin_expect(!!(expression), 1) +#define H5_UNLIKELY(expression) __builtin_expect(!!(expression), 0) +#else +#define H5_LIKELY(expression) (expression) +#define H5_UNLIKELY(expression) (expression) +#endif + +/* Definition of H5OPEN macro used for returning library defined IDs to + * applications with macros, e.g. H5FD_SEC2. Will only call H5open() for + * the application once per library init/term epoch, and will not call + * H5open() when a macro that uses it is used within the library. + * Note: for library source, this coding pattern requires that H5private.h + * is the first library private header file included in the source file. + */ +#undef H5OPEN +#ifndef H5private_H +#define H5OPEN (H5_UNLIKELY(!H5_libinit_g && !H5_libterm_g) ? H5open() : 0), +#else /* H5private_H */ +#define H5OPEN +#endif /* H5private_H */ + #ifdef __cplusplus extern "C" { #endif +/** @private + * + * \brief Library init / term status (global) + */ +H5_DLLVAR bool H5_libinit_g; /* Has the library been initialized? */ +H5_DLLVAR bool H5_libterm_g; /* Is the library being shutdown? */ + /* Functions in H5.c */ /** * \ingroup H5 diff --git a/src/Makefile.am b/src/Makefile.am index b9306775480..51bb011ff3e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -53,9 +53,10 @@ libhdf5_la_SOURCES= H5.c H5build_settings.c H5checksum.c H5dbg.c H5system.c \ H5FA.c H5FAcache.c H5FAdbg.c H5FAdblock.c H5FAdblkpage.c H5FAhdr.c \ H5FAint.c H5FAstat.c H5FAtest.c \ H5FD.c H5FDcore.c H5FDfamily.c H5FDint.c H5FDlog.c H5FDmulti.c \ + H5FDmulti_int.c \ H5FDonion.c H5FDonion_header.c H5FDonion_history.c H5FDonion_index.c \ - H5FDperform.c H5FDsec2.c H5FDspace.c \ - H5FDsplitter.c H5FDstdio.c H5FDtest.c H5FDwindows.c \ + H5FDsec2.c H5FDspace.c \ + H5FDsplitter.c H5FDstdio.c H5FDstdio_int.c H5FDtest.c H5FDwindows.c \ H5FL.c H5FO.c H5FS.c H5FScache.c H5FSdbg.c H5FSint.c H5FSsection.c \ H5FSstat.c H5FStest.c \ H5G.c H5Gbtree2.c H5Gcache.c H5Gcompact.c H5Gdense.c H5Gdeprec.c \ From 97e1ed4fc80733cf828321c61d13b2c2b27a8cd7 Mon Sep 17 00:00:00 2001 From: Quincey Koziol Date: Thu, 24 Oct 2024 12:09:22 -0500 Subject: [PATCH 037/179] Refactor allocation of API context (#4942) Since each API context is local to a thread, use the stack to store the context instead of allocating & releasing it each time. This improves performance (slightly), reduces alloc/free calls, and eliminates the H5FL package from the push & pop operations, which helps simplify threadsafe operation. One effect of this change is that the H5VLstart_lib_state / H5VLfinish_lib_state API routines for pass through connector authors now require a parameter that can be used to store the library's context. It was probably a mistake to assume that these two routines would not do this previously, so this is essentially a bug fix for them. Some other minor things: * Added API context push+pop operations to cache tests (I'm not actually certain why this was working before) and a few other places * Cleaned up a bunch of warnings in test code (calloc args, mainly) * Made header file inclusions more standard in some source files --- release_docs/RELEASE.txt | 4 + src/H5.c | 5 +- src/H5Atest.c | 9 +- src/H5CX.c | 415 +++----------------- src/H5CXprivate.h | 241 +++++++++++- src/H5FDprivate.h | 2 +- src/H5Fprivate.h | 8 +- src/H5Ftest.c | 18 +- src/H5Gtest.c | 83 ++-- src/H5Itest.c | 15 +- src/H5Otest.c | 96 ++--- src/H5TSmutex.h | 6 +- src/H5TSprivate.h | 22 +- src/H5Tconv_array.c | 7 +- src/H5Tconv_bitfield.c | 5 +- src/H5Tconv_compound.c | 7 +- src/H5Tconv_enum.c | 5 +- src/H5Tconv_float.c | 3 +- src/H5Tconv_integer.c | 3 +- src/H5Tconv_reference.c | 9 +- src/H5Tconv_string.c | 5 +- src/H5Tconv_vlen.c | 9 +- src/H5VL.c | 31 +- src/H5VLconnector_passthru.h | 8 +- src/H5VLint.c | 34 +- src/H5VLprivate.h | 4 +- src/H5Zprivate.h | 2 +- src/H5private.h | 41 +- test/accum.c | 20 +- test/accum_swmr_reader.c | 11 +- test/btree2.c | 7 +- test/cache.c | 733 ++++++++++++++++++++++++++--------- test/cache_common.h | 1 + test/cache_tagging.c | 19 +- test/chunk_info.c | 2 +- test/cmpd_dset.c | 8 +- test/dsets.c | 3 +- test/earray.c | 3 +- test/efc.c | 13 +- test/farray.c | 3 +- test/fheap.c | 7 +- test/freespace.c | 9 +- test/gheap.c | 9 +- test/lheap.c | 25 +- test/mf.c | 15 +- test/ntypes.c | 32 +- test/ohdr.c | 9 +- test/page_buffer.c | 3 +- test/titerate.c | 2 +- test/trefer.c | 74 ++-- test/trefer_deprec.c | 24 +- test/tselect.c | 64 +-- test/unregister.c | 9 +- test/vol.c | 8 +- testpar/t_cache.c | 62 ++- testpar/t_file.c | 27 +- testpar/t_shapesame.c | 4 +- tools/src/misc/h5debug.c | 5 +- 58 files changed, 1354 insertions(+), 954 deletions(-) diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 6a01a10a586..a92e2ed9be8 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -121,6 +121,10 @@ New Features Library: -------- + - The H5VLstart_lib_state / H5VLfinish_lib_state API routines for pass- + through connector authors now require a parameter that can be used to + store the library's context. + - Removed H5FDperform_init API routine. Virtual File Driver (VFD) developers who wish to provide an ID for their driver should create a routine specific to their individual implementation. diff --git a/src/H5.c b/src/H5.c index 8fcc8eeb2b8..3da7a43ccfa 100644 --- a/src/H5.c +++ b/src/H5.c @@ -304,9 +304,10 @@ H5_term_library(void) size_t at = 0; char loop[1024]; H5E_auto2_t func; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ /* Acquire the API lock */ - H5CANCEL_DECL + FUNC_ENTER_API_VARS H5_API_LOCK /* Don't do anything if the library is already closed */ @@ -317,7 +318,7 @@ H5_term_library(void) H5_TERM_GLOBAL = true; /* Push the API context without checking for errors */ - H5CX_push_special(); + H5CX_push(&api_ctx); /* Check if we should display error output */ (void)H5Eget_auto2(H5E_DEFAULT, &func, NULL); diff --git a/src/H5Atest.c b/src/H5Atest.c index 5961ba73664..0cdb75d2cb6 100644 --- a/src/H5Atest.c +++ b/src/H5Atest.c @@ -105,9 +105,10 @@ H5A__is_shared_test(hid_t attr_id) herr_t H5A__get_shared_rc_test(hid_t attr_id, hsize_t *ref_count) { - H5A_t *attr; /* Attribute object for ID */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - herr_t ret_value = SUCCEED; /* Return value */ + H5A_t *attr; /* Attribute object for ID */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -116,7 +117,7 @@ H5A__get_shared_rc_test(hid_t attr_id, hsize_t *ref_count) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an attribute"); /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set API context"); api_ctx_pushed = true; diff --git a/src/H5CX.c b/src/H5CX.c index c2a25e8d7a2..78892aacbd4 100644 --- a/src/H5CX.c +++ b/src/H5CX.c @@ -60,41 +60,43 @@ /* Check if the property list is already available */ \ if (NULL == (*head)->ctx.PL) \ /* Get the property list pointer */ \ - if (NULL == ((*head)->ctx.PL = (H5P_genplist_t *)H5I_object((*head)->ctx.H5_GLUE(PL, _id)))) \ + if (H5_UNLIKELY(NULL == \ + ((*head)->ctx.PL = (H5P_genplist_t *)H5I_object((*head)->ctx.H5_GLUE(PL, _id))))) \ HGOTO_ERROR(H5E_CONTEXT, H5E_BADTYPE, (FAILVAL), "can't get property list"); /* Common macro for the duplicated code to retrieve properties from a property list */ #define H5CX_RETRIEVE_PROP_COMMON(PL, DEF_PL, PROP_NAME, PROP_FIELD) \ - /* Check for default property list */ \ - if ((*head)->ctx.H5_GLUE(PL, _id) == (DEF_PL)) \ - H5MM_memcpy(&(*head)->ctx.PROP_FIELD, &H5_GLUE3(H5CX_def_, PL, _cache).PROP_FIELD, \ - sizeof(H5_GLUE3(H5CX_def_, PL, _cache).PROP_FIELD)); \ - else { \ - /* Retrieve the property list */ \ - H5CX_RETRIEVE_PLIST(PL, FAIL) \ + { \ + \ + /* Check for default property list */ \ + if ((*head)->ctx.H5_GLUE(PL, _id) == (DEF_PL)) \ + H5MM_memcpy(&(*head)->ctx.PROP_FIELD, &H5_GLUE3(H5CX_def_, PL, _cache).PROP_FIELD, \ + sizeof(H5_GLUE3(H5CX_def_, PL, _cache).PROP_FIELD)); \ + else { \ + /* Retrieve the property list */ \ + H5CX_RETRIEVE_PLIST(PL, FAIL) \ \ - /* Get the property */ \ - if (H5P_get((*head)->ctx.PL, (PROP_NAME), &(*head)->ctx.PROP_FIELD) < 0) \ - HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "can't retrieve value from API context"); \ - } /* end else */ \ + /* Get the property */ \ + if (H5_UNLIKELY(H5P_get((*head)->ctx.PL, (PROP_NAME), &(*head)->ctx.PROP_FIELD) < 0)) \ + HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "can't retrieve value from API context"); \ + } /* end else */ \ \ - /* Mark the field as valid */ \ - (*head)->ctx.H5_GLUE(PROP_FIELD, _valid) = true; + /* Mark the field as valid */ \ + (*head)->ctx.H5_GLUE(PROP_FIELD, _valid) = true; \ + } /* Macro for the duplicated code to retrieve a value from a plist if the context value is invalid */ #define H5CX_RETRIEVE_PROP_VALID(PL, DEF_PL, PROP_NAME, PROP_FIELD) \ /* Check if the value has been retrieved already */ \ - if (!(*head)->ctx.H5_GLUE(PROP_FIELD, _valid)) { \ - H5CX_RETRIEVE_PROP_COMMON(PL, DEF_PL, PROP_NAME, PROP_FIELD) \ - } /* end if */ + if (!(*head)->ctx.H5_GLUE(PROP_FIELD, _valid)) \ + H5CX_RETRIEVE_PROP_COMMON(PL, DEF_PL, PROP_NAME, PROP_FIELD) /* Macro for the duplicated code to retrieve a value from a plist if the context value is invalid, or the * library has previously modified the context value for return */ #define H5CX_RETRIEVE_PROP_VALID_SET(PL, DEF_PL, PROP_NAME, PROP_FIELD) \ /* Check if the value has been retrieved already */ \ - if (!((*head)->ctx.H5_GLUE(PROP_FIELD, _valid) || (*head)->ctx.H5_GLUE(PROP_FIELD, _set))) { \ - H5CX_RETRIEVE_PROP_COMMON(PL, DEF_PL, PROP_NAME, PROP_FIELD) \ - } /* end if */ + if (!((*head)->ctx.H5_GLUE(PROP_FIELD, _valid) || (*head)->ctx.H5_GLUE(PROP_FIELD, _set))) \ + H5CX_RETRIEVE_PROP_COMMON(PL, DEF_PL, PROP_NAME, PROP_FIELD) #if defined(H5_HAVE_PARALLEL) && defined(H5_HAVE_INSTRUMENTED_LIBRARY) /* Macro for the duplicated code to set a context field that may not exist as a property */ @@ -107,7 +109,7 @@ /* Retrieve the dataset transfer property list */ \ H5CX_RETRIEVE_PLIST(dxpl, FAIL) \ \ - if ((check_prop = H5P_exist_plist((*head)->ctx.dxpl, PROP_NAME)) < 0) \ + if (H5_UNLIKELY((check_prop = H5P_exist_plist((*head)->ctx.dxpl, PROP_NAME)) < 0)) \ HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "error checking for property"); \ } /* end if */ \ \ @@ -124,247 +126,17 @@ #define H5CX_SET_PROP(PROP_NAME, PROP_FIELD) \ if ((*head)->ctx.H5_GLUE(PROP_FIELD, _set)) { \ /* Retrieve the dataset transfer property list */ \ - H5CX_RETRIEVE_PLIST(dxpl, NULL) \ + H5CX_RETRIEVE_PLIST(dxpl, FAIL) \ \ /* Set the property */ \ - if (H5P_set((*head)->ctx.dxpl, PROP_NAME, &(*head)->ctx.PROP_FIELD) < 0) \ - HGOTO_ERROR(H5E_CONTEXT, H5E_CANTSET, NULL, "error setting data xfer property"); \ + if (H5_UNLIKELY(H5P_set((*head)->ctx.dxpl, PROP_NAME, &(*head)->ctx.PROP_FIELD) < 0)) \ + HGOTO_ERROR(H5E_CONTEXT, H5E_CANTSET, FAIL, "error setting data xfer property"); \ } /* end if */ /******************/ /* Local Typedefs */ /******************/ -/* Typedef for context about each API call, as it proceeds */ -/* Fields in this struct are of several types: - * - The DXPL & LAPL ID are either library default ones (from the API context - * initialization) or passed in from the application via an API call - * parameter. The corresponding H5P_genplist_t* is just the underlying - * property list struct for the ID, to optimize retrieving properties - * from the list multiple times. - * - * - Internal fields, used and set only within the library, for managing the - * operation under way. These do not correspond to properties in the - * DXPL or LAPL and can have any name. - * - * - Cached fields, which are not returned to the application, for managing - * the operation under way. These correspond to properties in the DXPL - * or LAPL, and are retrieved either from the (global) cache for a - * default property list, or from the corresponding property in the - * application's (non-default) property list. Getting / setting these - * properties within the library does _not_ affect the application's - * property list. Note that the naming of these fields, and - * _valid, is important for the H5CX_RETRIEVE_PROP_VALID - * macro to work properly. - * - * - "Return-only" properties that are returned to the application, mainly - * for sending out "introspection" information ("Why did collective I/O - * get broken for this operation?", "Which filters are set on the chunk I - * just directly read in?", etc) Setting these fields will cause the - * corresponding property in the property list to be set when the API - * context is popped, when returning from the API routine. Note that the - * naming of these fields, and _set, is important for the - * H5CX_TEST_SET_PROP and H5CX_SET_PROP macros to work properly. - * - * - "Return-and-read" properties that are returned to the application to send out introspection information, - * but are also queried by the library internally. If the context value has been 'set' by an accessor, - * all future queries will return the stored value from the context, to avoid later queries overwriting - * that stored value with the value from the property list. - * - * These properties have both a 'valid' and 'set' flag. _valid is true if the field has ever been - * populated from its underlying property list. _set flag is true if this field has ever been set on - * the context for application introspection. The naming of these fields is important for the - * H5CX_RETRIEVE_PROP_VALID_SET macro to work properly. - * - * If a field has been set on the context but never read internally, _valid will be false - * despite the context containing a meaningful cached value. - */ -typedef struct H5CX_t { - /* DXPL */ - hid_t dxpl_id; /* DXPL ID for API operation */ - H5P_genplist_t *dxpl; /* Dataset Transfer Property List */ - - /* LCPL */ - hid_t lcpl_id; /* LCPL ID for API operation */ - H5P_genplist_t *lcpl; /* Link Creation Property List */ - - /* LAPL */ - hid_t lapl_id; /* LAPL ID for API operation */ - H5P_genplist_t *lapl; /* Link Access Property List */ - - /* DCPL */ - hid_t dcpl_id; /* DCPL ID for API operation */ - H5P_genplist_t *dcpl; /* Dataset Creation Property List */ - - /* DAPL */ - hid_t dapl_id; /* DAPL ID for API operation */ - H5P_genplist_t *dapl; /* Dataset Access Property List */ - - /* FAPL */ - hid_t fapl_id; /* FAPL ID for API operation */ - H5P_genplist_t *fapl; /* File Access Property List */ - - /* Internal: Object tagging info */ - haddr_t tag; /* Current object's tag (ohdr chunk #0 address) */ - - /* Internal: Metadata cache info */ - H5AC_ring_t ring; /* Current metadata cache ring for entries */ - -#ifdef H5_HAVE_PARALLEL - /* Internal: Parallel I/O settings */ - bool coll_metadata_read; /* Whether to use collective I/O for metadata read */ - MPI_Datatype btype; /* MPI datatype for buffer, when using collective I/O */ - MPI_Datatype ftype; /* MPI datatype for file, when using collective I/O */ - bool mpi_file_flushing; /* Whether an MPI-opened file is being flushed */ - bool rank0_bcast; /* Whether a dataset meets read-with-rank0-and-bcast requirements */ -#endif /* H5_HAVE_PARALLEL */ - - /* Cached DXPL properties */ - size_t max_temp_buf; /* Maximum temporary buffer size (H5D_XFER_MAX_TEMP_BUF_NAME) .*/ - bool max_temp_buf_valid; /* Whether maximum temporary buffer size is valid */ - void *tconv_buf; /* Temporary conversion buffer (H5D_XFER_TCONV_BUF_NAME) */ - bool tconv_buf_valid; /* Whether temporary conversion buffer is valid */ - void *bkgr_buf; /* Background conversion buffer (H5D_XFER_BKGR_BUF_NAME) */ - bool bkgr_buf_valid; /* Whether background conversion buffer is valid */ - H5T_bkg_t bkgr_buf_type; /* Background buffer type (H5D_XFER_BKGR_BUF_TYPE_NAME) */ - bool bkgr_buf_type_valid; /* Whether background buffer type is valid */ - double btree_split_ratio[3]; /* B-tree split ratios (H5D_XFER_BTREE_SPLIT_RATIO_NAME) */ - bool btree_split_ratio_valid; /* Whether B-tree split ratios are valid */ - size_t vec_size; /* Size of hyperslab vector (H5D_XFER_HYPER_VECTOR_SIZE_NAME) */ - bool vec_size_valid; /* Whether hyperslab vector is valid */ -#ifdef H5_HAVE_PARALLEL - H5FD_mpio_xfer_t io_xfer_mode; /* Parallel transfer mode for this request (H5D_XFER_IO_XFER_MODE_NAME) */ - bool io_xfer_mode_valid; /* Whether parallel transfer mode is valid */ - H5FD_mpio_collective_opt_t mpio_coll_opt; /* Parallel transfer with independent IO or collective IO with - this mode (H5D_XFER_MPIO_COLLECTIVE_OPT_NAME) */ - bool mpio_coll_opt_valid; /* Whether parallel transfer option is valid */ - H5FD_mpio_chunk_opt_t - mpio_chunk_opt_mode; /* Collective chunk option (H5D_XFER_MPIO_CHUNK_OPT_HARD_NAME) */ - bool mpio_chunk_opt_mode_valid; /* Whether collective chunk option is valid */ - unsigned mpio_chunk_opt_num; /* Collective chunk threshold (H5D_XFER_MPIO_CHUNK_OPT_NUM_NAME) */ - bool mpio_chunk_opt_num_valid; /* Whether collective chunk threshold is valid */ - unsigned mpio_chunk_opt_ratio; /* Collective chunk ratio (H5D_XFER_MPIO_CHUNK_OPT_RATIO_NAME) */ - bool mpio_chunk_opt_ratio_valid; /* Whether collective chunk ratio is valid */ -#endif /* H5_HAVE_PARALLEL */ - H5Z_EDC_t err_detect; /* Error detection info (H5D_XFER_EDC_NAME) */ - bool err_detect_valid; /* Whether error detection info is valid */ - H5Z_cb_t filter_cb; /* Filter callback function (H5D_XFER_FILTER_CB_NAME) */ - bool filter_cb_valid; /* Whether filter callback function is valid */ - H5Z_data_xform_t *data_transform; /* Data transform info (H5D_XFER_XFORM_NAME) */ - bool data_transform_valid; /* Whether data transform info is valid */ - H5T_vlen_alloc_info_t vl_alloc_info; /* VL datatype alloc info (H5D_XFER_VLEN_*_NAME) */ - bool vl_alloc_info_valid; /* Whether VL datatype alloc info is valid */ - H5T_conv_cb_t dt_conv_cb; /* Datatype conversion struct (H5D_XFER_CONV_CB_NAME) */ - bool dt_conv_cb_valid; /* Whether datatype conversion struct is valid */ - H5D_selection_io_mode_t selection_io_mode; /* Selection I/O mode (H5D_XFER_SELECTION_IO_MODE_NAME) */ - bool selection_io_mode_valid; /* Whether selection I/O mode is valid */ - bool modify_write_buf; /* Whether the library can modify write buffers (H5D_XFER_MODIFY_WRITE_BUF_NAME)*/ - bool modify_write_buf_valid; /* Whether the modify_write_buf field is valid */ - - /* Return-only DXPL properties to return to application */ -#ifdef H5_HAVE_PARALLEL - H5D_mpio_actual_chunk_opt_mode_t mpio_actual_chunk_opt; /* Chunk optimization mode used for parallel I/O - (H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_NAME) */ - bool mpio_actual_chunk_opt_set; /* Whether chunk optimization mode used for parallel I/O is set */ - H5D_mpio_actual_io_mode_t - mpio_actual_io_mode; /* Actual I/O mode used for parallel I/O (H5D_MPIO_ACTUAL_IO_MODE_NAME) */ - bool mpio_actual_io_mode_set; /* Whether actual I/O mode used for parallel I/O is set */ - uint32_t mpio_local_no_coll_cause; /* Local reason for breaking collective I/O - (H5D_MPIO_LOCAL_NO_COLLECTIVE_CAUSE_NAME) */ - bool mpio_local_no_coll_cause_set; /* Whether local reason for breaking collective I/O is set */ - bool mpio_local_no_coll_cause_valid; /* Whether local reason for breaking collective I/O is valid */ - uint32_t mpio_global_no_coll_cause; /* Global reason for breaking collective I/O - (H5D_MPIO_GLOBAL_NO_COLLECTIVE_CAUSE_NAME) */ - bool mpio_global_no_coll_cause_set; /* Whether global reason for breaking collective I/O is set */ - bool mpio_global_no_coll_cause_valid; /* Whether global reason for breaking collective I/O is valid */ -#ifdef H5_HAVE_INSTRUMENTED_LIBRARY - int mpio_coll_chunk_link_hard; /* Instrumented "collective chunk link hard" value - (H5D_XFER_COLL_CHUNK_LINK_HARD_NAME) */ - bool mpio_coll_chunk_link_hard_set; /* Whether instrumented "collective chunk link hard" value is set */ - int mpio_coll_chunk_multi_hard; /* Instrumented "collective chunk multi hard" value - (H5D_XFER_COLL_CHUNK_MULTI_HARD_NAME) */ - bool mpio_coll_chunk_multi_hard_set; /* Whether instrumented "collective chunk multi hard" value is set */ - int mpio_coll_chunk_link_num_true; /* Instrumented "collective chunk link num true" value - (H5D_XFER_COLL_CHUNK_LINK_NUM_TRUE_NAME) */ - bool mpio_coll_chunk_link_num_true_set; /* Whether instrumented "collective chunk link num true" value - is set */ - int mpio_coll_chunk_link_num_false; /* Instrumented "collective chunk link num false" value - (H5D_XFER_COLL_CHUNK_LINK_NUM_FALSE_NAME) */ - bool mpio_coll_chunk_link_num_false_set; /* Whether instrumented "collective chunk link num false" - value is set */ - int mpio_coll_chunk_multi_ratio_coll; /* Instrumented "collective chunk multi ratio coll" value - (H5D_XFER_COLL_CHUNK_MULTI_RATIO_COLL_NAME) */ - bool mpio_coll_chunk_multi_ratio_coll_set; /* Whether instrumented "collective chunk multi ratio coll" - value is set */ - int mpio_coll_chunk_multi_ratio_ind; /* Instrumented "collective chunk multi ratio ind" value - (H5D_XFER_COLL_CHUNK_MULTI_RATIO_IND_NAME) */ - bool mpio_coll_chunk_multi_ratio_ind_set; /* Whether instrumented "collective chunk multi ratio ind" - value is set */ - bool mpio_coll_rank0_bcast; /* Instrumented "collective rank 0 broadcast" value - (H5D_XFER_COLL_RANK0_BCAST_NAME) */ - bool mpio_coll_rank0_bcast_set; /* Whether instrumented "collective rank 0 broadcast" value is set */ -#endif /* H5_HAVE_INSTRUMENTED_LIBRARY */ -#endif /* H5_HAVE_PARALLEL */ - uint32_t no_selection_io_cause; /* Reason for not performing selection I/O - (H5D_XFER_NO_SELECTION_IO_CAUSE_NAME) */ - bool no_selection_io_cause_set; /* Whether reason for not performing selection I/O is set */ - bool no_selection_io_cause_valid; /* Whether reason for not performing selection I/O is valid */ - - uint32_t actual_selection_io_mode; /* Actual selection I/O mode used - (H5D_XFER_ACTUAL_SELECTION_IO_MODE_NAME) */ - bool actual_selection_io_mode_set; /* Whether actual selection I/O mode is set */ - bool actual_selection_io_mode_valid; /* Whether actual selection I/O mode is valid */ - - /* Cached LCPL properties */ - H5T_cset_t encoding; /* Link name character encoding (H5P_STRCRT_CHAR_ENCODING_NAME) */ - bool encoding_valid; /* Whether link name character encoding is valid */ - unsigned intermediate_group; /* Whether to create intermediate groups (H5L_CRT_INTERMEDIATE_GROUP_NAME) */ - bool intermediate_group_valid; /* Whether create intermediate group flag is valid */ - - /* Cached LAPL properties */ - size_t nlinks; /* Number of soft / UD links to traverse (H5L_ACS_NLINKS_NAME) */ - bool nlinks_valid; /* Whether number of soft / UD links to traverse is valid */ - - /* Cached DCPL properties */ - bool do_min_dset_ohdr; /* Whether to minimize dataset object header (H5D_CRT_MIN_DSET_HDR_SIZE_NAME) */ - bool do_min_dset_ohdr_valid; /* Whether minimize dataset object header flag is valid */ - uint8_t ohdr_flags; /* Object header flags (H5O_CRT_OHDR_FLAGS_NAME) */ - bool ohdr_flags_valid; /* Whether the object headers flags are valid */ - - /* Cached DAPL properties */ - const char *extfile_prefix; /* Prefix for external file (H5D_ACS_EFILE_PREFIX_NAME) */ - bool extfile_prefix_valid; /* Whether the prefix for external file is valid */ - const char *vds_prefix; /* Prefix for VDS (H5D_ACS_VDS_PREFIX_NAME) */ - bool vds_prefix_valid; /* Whether the prefix for VDS is valid */ - - /* Cached FAPL properties */ - H5F_libver_t low_bound; /* low_bound property for H5Pset_libver_bounds() - (H5F_ACS_LIBVER_LOW_BOUND_NAME) */ - bool low_bound_valid; /* Whether low_bound property is valid */ - H5F_libver_t high_bound; /* high_bound property for H5Pset_libver_bounds - (H5F_ACS_LIBVER_HIGH_BOUND_NAME) */ - bool high_bound_valid; /* Whether high_bound property is valid */ - - /* Cached VOL settings */ - H5VL_connector_prop_t vol_connector_prop; /* Property for VOL connector ID & info - This is treated as an independent field with - no relation to the property H5F_ACS_VOL_CONN_NAME stored on the FAPL */ - bool vol_connector_prop_valid; /* Whether property for VOL connector ID & info is valid */ - void *vol_wrap_ctx; /* VOL connector's "wrap context" for creating IDs */ - bool vol_wrap_ctx_valid; /* Whether VOL connector's "wrap context" for creating IDs is valid */ -} H5CX_t; - -/* Typedef for nodes on the API context stack */ -/* Each entry into the library through an API routine invokes H5CX_push() - * in a FUNC_ENTER_API* macro, which pushes an H5CX_node_t on the API - * context [thread-local] stack, after initializing it with default values - * in H5CX__push_common(). - */ -typedef struct H5CX_node_t { - H5CX_t ctx; /* Context for current API call */ - struct H5CX_node_t *next; /* Pointer to previous context, on stack */ -} H5CX_node_t; - /* Typedef for cached default dataset transfer property list information */ /* This is initialized to the values in the default DXPL during package * initialization and then remains constant for the rest of the library's @@ -442,8 +214,6 @@ typedef struct H5CX_fapl_cache_t { /********************/ /* Local Prototypes */ /********************/ -static void H5CX__push_common(H5CX_node_t *cnode); -static H5CX_node_t *H5CX__pop_common(bool update_dxpl_props); /*********************/ /* Package Variables */ @@ -478,9 +248,6 @@ static H5CX_dapl_cache_t H5CX_def_dapl_cache; /* Define a "default" file access property list cache structure to use for default FAPLs */ static H5CX_fapl_cache_t H5CX_def_fapl_cache; -/* Declare a static free list to manage H5CX_node_t structs */ -H5FL_DEFINE_STATIC(H5CX_node_t); - /* Declare a static free list to manage H5CX_state_t structs */ H5FL_DEFINE_STATIC(H5CX_state_t); @@ -711,19 +478,14 @@ H5CX_term_package(void) FUNC_ENTER_NOAPI_NOINIT_NOERR if (H5_PKG_INIT_VAR) { - H5CX_node_t *cnode; /* Context node */ + H5CX_node_t **head = NULL; /* Pointer to head of API context list */ - /* Pop the top context node from the stack */ - /* (Can't check for errors, as rest of library is shut down) */ - cnode = H5CX__pop_common(false); + /* Get the pointer to the head of the API context, for this thread */ + head = H5CX_get_my_context(); + assert(head); - /* Free the context node */ - /* (Allocated with malloc() in H5CX_push_special() ) */ - free(cnode); - -#ifndef H5_HAVE_THREADSAFE - H5CX_head_g = NULL; -#endif /* H5_HAVE_THREADSAFE */ + /* Reset head of context list */ + *head = NULL; H5_PKG_INIT_VAR = false; } /* end if */ @@ -758,20 +520,21 @@ H5CX_pushed(void) } /*------------------------------------------------------------------------- - * Function: H5CX__push_common + * Function: H5CX_push * - * Purpose: Internal routine to push a context for an API call. + * Purpose: Pushes a context for an API call. * * Return: Non-negative on success / Negative on failure * *------------------------------------------------------------------------- */ -static void -H5CX__push_common(H5CX_node_t *cnode) +herr_t +H5CX_push(H5CX_node_t *cnode) { - H5CX_node_t **head = NULL; /* Pointer to head of API context list */ + H5CX_node_t **head = NULL; /* Pointer to head of API context list */ + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_PACKAGE_NOERR + FUNC_ENTER_NOAPI(FAIL) /* Sanity check */ assert(cnode); @@ -797,65 +560,10 @@ H5CX__push_common(H5CX_node_t *cnode) cnode->next = *head; *head = cnode; - FUNC_LEAVE_NOAPI_VOID -} /* end H5CX__push_common() */ - -/*------------------------------------------------------------------------- - * Function: H5CX_push - * - * Purpose: Pushes a context for an API call. - * - * Return: Non-negative on success / Negative on failure - * - *------------------------------------------------------------------------- - */ -herr_t -H5CX_push(void) -{ - H5CX_node_t *cnode = NULL; /* Context node */ - herr_t ret_value = SUCCEED; /* Return value */ - - FUNC_ENTER_NOAPI(FAIL) - - /* Allocate & clear API context node */ - if (NULL == (cnode = H5FL_CALLOC(H5CX_node_t))) - HGOTO_ERROR(H5E_CONTEXT, H5E_CANTALLOC, FAIL, "unable to allocate new struct"); - - /* Set context info */ - H5CX__push_common(cnode); - done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5CX_push() */ -/*------------------------------------------------------------------------- - * Function: H5CX_push_special - * - * Purpose: Pushes a context for an API call, without using library routines. - * - * Note: This should only be called in special circumstances, like H5close. - * - * Return: - * - *------------------------------------------------------------------------- - */ -void -H5CX_push_special(void) -{ - H5CX_node_t *cnode = NULL; /* Context node */ - - FUNC_ENTER_NOAPI_NOINIT_NOERR - - /* Allocate & clear API context node, without using library API routines */ - cnode = (H5CX_node_t *)calloc(1, sizeof(H5CX_node_t)); - assert(cnode); - - /* Set context info */ - H5CX__push_common(cnode); - - FUNC_LEAVE_NOAPI_VOID -} /* end H5CX_push_special() */ - /*------------------------------------------------------------------------- * Function: H5CX_retrieve_state * @@ -3596,21 +3304,21 @@ H5CX_get_ohdr_flags(uint8_t *ohdr_flags) } /* End H5CX_get_ohdr_flags() */ /*------------------------------------------------------------------------- - * Function: H5CX__pop_common + * Function: H5CX_pop * - * Purpose: Common code for popping the context for an API call. + * Purpose: Pops the context for an API call. * * Return: Non-negative on success / Negative on failure * *------------------------------------------------------------------------- */ -static H5CX_node_t * -H5CX__pop_common(bool update_dxpl_props) +herr_t +H5CX_pop(bool update_dxpl_props) { - H5CX_node_t **head = NULL; /* Pointer to head of API context list */ - H5CX_node_t *ret_value = NULL; /* Return value */ + H5CX_node_t **head = NULL; /* Pointer to head of API context list */ + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_PACKAGE + FUNC_ENTER_NOAPI(FAIL) /* Sanity check */ head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */ @@ -3647,36 +3355,7 @@ H5CX__pop_common(bool update_dxpl_props) } /* end if */ /* Pop the top context node from the stack */ - ret_value = (*head); - (*head) = (*head)->next; - -done: - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5CX__pop_common() */ - -/*------------------------------------------------------------------------- - * Function: H5CX_pop - * - * Purpose: Pops the context for an API call. - * - * Return: Non-negative on success / Negative on failure - * - *------------------------------------------------------------------------- - */ -herr_t -H5CX_pop(bool update_dxpl_props) -{ - H5CX_node_t *cnode; /* Context node */ - herr_t ret_value = SUCCEED; /* Return value */ - - FUNC_ENTER_NOAPI(FAIL) - - /* Perform common operations and get top context from stack */ - if (NULL == (cnode = H5CX__pop_common(update_dxpl_props))) - HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "error getting API context node"); - - /* Free the context node */ - cnode = H5FL_FREE(H5CX_node_t, cnode); + (*head) = (*head)->next; done: FUNC_LEAVE_NOAPI(ret_value) diff --git a/src/H5CXprivate.h b/src/H5CXprivate.h index 71935de75a4..ad61a1a430e 100644 --- a/src/H5CXprivate.h +++ b/src/H5CXprivate.h @@ -22,6 +22,9 @@ #ifdef H5_HAVE_PARALLEL #include "H5FDprivate.h" /* File drivers */ #endif /* H5_HAVE_PARALLEL */ +#include "H5Pprivate.h" /* Property lists */ +#include "H5Tprivate.h" /* Datatypes */ +#include "H5Tconv.h" /* Datatype conversions */ #include "H5Zprivate.h" /* Data filters */ /**************************/ @@ -47,6 +50,235 @@ typedef struct H5CX_state_t { #endif /* H5_HAVE_PARALLEL */ } H5CX_state_t; +/* Typedef for context about each API call, as it proceeds */ +/* Fields in this struct are of several types: + * - The DXPL & LAPL ID are either library default ones (from the API context + * initialization) or passed in from the application via an API call + * parameter. The corresponding H5P_genplist_t* is just the underlying + * property list struct for the ID, to optimize retrieving properties + * from the list multiple times. + * + * - Internal fields, used and set only within the library, for managing the + * operation under way. These do not correspond to properties in the + * DXPL or LAPL and can have any name. + * + * - Cached fields, which are not returned to the application, for managing + * the operation under way. These correspond to properties in the DXPL + * or LAPL, and are retrieved either from the (global) cache for a + * default property list, or from the corresponding property in the + * application's (non-default) property list. Getting / setting these + * properties within the library does _not_ affect the application's + * property list. Note that the naming of these fields, and + * _valid, is important for the H5CX_RETRIEVE_PROP_VALID + * macro to work properly. + * + * - "Return-only" properties that are returned to the application, mainly + * for sending out "introspection" information ("Why did collective I/O + * get broken for this operation?", "Which filters are set on the chunk I + * just directly read in?", etc) Setting these fields will cause the + * corresponding property in the property list to be set when the API + * context is popped, when returning from the API routine. Note that the + * naming of these fields, and _set, is important for the + * H5CX_TEST_SET_PROP and H5CX_SET_PROP macros to work properly. + * + * - "Return-and-read" properties that are returned to the application to send out introspection information, + * but are also queried by the library internally. If the context value has been 'set' by an accessor, + * all future queries will return the stored value from the context, to avoid later queries overwriting + * that stored value with the value from the property list. + * + * These properties have both a 'valid' and 'set' flag. _valid is true if the field has ever been + * populated from its underlying property list. _set flag is true if this field has ever been set on + * the context for application introspection. The naming of these fields is important for the + * H5CX_RETRIEVE_PROP_VALID_SET macro to work properly. + * + * If a field has been set on the context but never read internally, _valid will be false + * despite the context containing a meaningful cached value. + */ +typedef struct H5CX_t { + /* DXPL */ + hid_t dxpl_id; /* DXPL ID for API operation */ + H5P_genplist_t *dxpl; /* Dataset Transfer Property List */ + + /* LCPL */ + hid_t lcpl_id; /* LCPL ID for API operation */ + H5P_genplist_t *lcpl; /* Link Creation Property List */ + + /* LAPL */ + hid_t lapl_id; /* LAPL ID for API operation */ + H5P_genplist_t *lapl; /* Link Access Property List */ + + /* DCPL */ + hid_t dcpl_id; /* DCPL ID for API operation */ + H5P_genplist_t *dcpl; /* Dataset Creation Property List */ + + /* DAPL */ + hid_t dapl_id; /* DAPL ID for API operation */ + H5P_genplist_t *dapl; /* Dataset Access Property List */ + + /* FAPL */ + hid_t fapl_id; /* FAPL ID for API operation */ + H5P_genplist_t *fapl; /* File Access Property List */ + + /* Internal: Object tagging info */ + haddr_t tag; /* Current object's tag (ohdr chunk #0 address) */ + + /* Internal: Metadata cache info */ + H5AC_ring_t ring; /* Current metadata cache ring for entries */ + +#ifdef H5_HAVE_PARALLEL + /* Internal: Parallel I/O settings */ + bool coll_metadata_read; /* Whether to use collective I/O for metadata read */ + MPI_Datatype btype; /* MPI datatype for buffer, when using collective I/O */ + MPI_Datatype ftype; /* MPI datatype for file, when using collective I/O */ + bool mpi_file_flushing; /* Whether an MPI-opened file is being flushed */ + bool rank0_bcast; /* Whether a dataset meets read-with-rank0-and-bcast requirements */ +#endif /* H5_HAVE_PARALLEL */ + + /* Cached DXPL properties */ + size_t max_temp_buf; /* Maximum temporary buffer size (H5D_XFER_MAX_TEMP_BUF_NAME) .*/ + bool max_temp_buf_valid; /* Whether maximum temporary buffer size is valid */ + void *tconv_buf; /* Temporary conversion buffer (H5D_XFER_TCONV_BUF_NAME) */ + bool tconv_buf_valid; /* Whether temporary conversion buffer is valid */ + void *bkgr_buf; /* Background conversion buffer (H5D_XFER_BKGR_BUF_NAME) */ + bool bkgr_buf_valid; /* Whether background conversion buffer is valid */ + H5T_bkg_t bkgr_buf_type; /* Background buffer type (H5D_XFER_BKGR_BUF_TYPE_NAME) */ + bool bkgr_buf_type_valid; /* Whether background buffer type is valid */ + double btree_split_ratio[3]; /* B-tree split ratios (H5D_XFER_BTREE_SPLIT_RATIO_NAME) */ + bool btree_split_ratio_valid; /* Whether B-tree split ratios are valid */ + size_t vec_size; /* Size of hyperslab vector (H5D_XFER_HYPER_VECTOR_SIZE_NAME) */ + bool vec_size_valid; /* Whether hyperslab vector is valid */ +#ifdef H5_HAVE_PARALLEL + H5FD_mpio_xfer_t io_xfer_mode; /* Parallel transfer mode for this request (H5D_XFER_IO_XFER_MODE_NAME) */ + bool io_xfer_mode_valid; /* Whether parallel transfer mode is valid */ + H5FD_mpio_collective_opt_t mpio_coll_opt; /* Parallel transfer with independent IO or collective IO with + this mode (H5D_XFER_MPIO_COLLECTIVE_OPT_NAME) */ + bool mpio_coll_opt_valid; /* Whether parallel transfer option is valid */ + H5FD_mpio_chunk_opt_t + mpio_chunk_opt_mode; /* Collective chunk option (H5D_XFER_MPIO_CHUNK_OPT_HARD_NAME) */ + bool mpio_chunk_opt_mode_valid; /* Whether collective chunk option is valid */ + unsigned mpio_chunk_opt_num; /* Collective chunk threshold (H5D_XFER_MPIO_CHUNK_OPT_NUM_NAME) */ + bool mpio_chunk_opt_num_valid; /* Whether collective chunk threshold is valid */ + unsigned mpio_chunk_opt_ratio; /* Collective chunk ratio (H5D_XFER_MPIO_CHUNK_OPT_RATIO_NAME) */ + bool mpio_chunk_opt_ratio_valid; /* Whether collective chunk ratio is valid */ +#endif /* H5_HAVE_PARALLEL */ + H5Z_EDC_t err_detect; /* Error detection info (H5D_XFER_EDC_NAME) */ + bool err_detect_valid; /* Whether error detection info is valid */ + H5Z_cb_t filter_cb; /* Filter callback function (H5D_XFER_FILTER_CB_NAME) */ + bool filter_cb_valid; /* Whether filter callback function is valid */ + H5Z_data_xform_t *data_transform; /* Data transform info (H5D_XFER_XFORM_NAME) */ + bool data_transform_valid; /* Whether data transform info is valid */ + H5T_vlen_alloc_info_t vl_alloc_info; /* VL datatype alloc info (H5D_XFER_VLEN_*_NAME) */ + bool vl_alloc_info_valid; /* Whether VL datatype alloc info is valid */ + H5T_conv_cb_t dt_conv_cb; /* Datatype conversion struct (H5D_XFER_CONV_CB_NAME) */ + bool dt_conv_cb_valid; /* Whether datatype conversion struct is valid */ + H5D_selection_io_mode_t selection_io_mode; /* Selection I/O mode (H5D_XFER_SELECTION_IO_MODE_NAME) */ + bool selection_io_mode_valid; /* Whether selection I/O mode is valid */ + bool modify_write_buf; /* Whether the library can modify write buffers (H5D_XFER_MODIFY_WRITE_BUF_NAME)*/ + bool modify_write_buf_valid; /* Whether the modify_write_buf field is valid */ + + /* Return-only DXPL properties to return to application */ +#ifdef H5_HAVE_PARALLEL + H5D_mpio_actual_chunk_opt_mode_t mpio_actual_chunk_opt; /* Chunk optimization mode used for parallel I/O + (H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_NAME) */ + bool mpio_actual_chunk_opt_set; /* Whether chunk optimization mode used for parallel I/O is set */ + H5D_mpio_actual_io_mode_t + mpio_actual_io_mode; /* Actual I/O mode used for parallel I/O (H5D_MPIO_ACTUAL_IO_MODE_NAME) */ + bool mpio_actual_io_mode_set; /* Whether actual I/O mode used for parallel I/O is set */ + uint32_t mpio_local_no_coll_cause; /* Local reason for breaking collective I/O + (H5D_MPIO_LOCAL_NO_COLLECTIVE_CAUSE_NAME) */ + bool mpio_local_no_coll_cause_set; /* Whether local reason for breaking collective I/O is set */ + bool mpio_local_no_coll_cause_valid; /* Whether local reason for breaking collective I/O is valid */ + uint32_t mpio_global_no_coll_cause; /* Global reason for breaking collective I/O + (H5D_MPIO_GLOBAL_NO_COLLECTIVE_CAUSE_NAME) */ + bool mpio_global_no_coll_cause_set; /* Whether global reason for breaking collective I/O is set */ + bool mpio_global_no_coll_cause_valid; /* Whether global reason for breaking collective I/O is valid */ +#ifdef H5_HAVE_INSTRUMENTED_LIBRARY + int mpio_coll_chunk_link_hard; /* Instrumented "collective chunk link hard" value + (H5D_XFER_COLL_CHUNK_LINK_HARD_NAME) */ + bool mpio_coll_chunk_link_hard_set; /* Whether instrumented "collective chunk link hard" value is set */ + int mpio_coll_chunk_multi_hard; /* Instrumented "collective chunk multi hard" value + (H5D_XFER_COLL_CHUNK_MULTI_HARD_NAME) */ + bool mpio_coll_chunk_multi_hard_set; /* Whether instrumented "collective chunk multi hard" value is set */ + int mpio_coll_chunk_link_num_true; /* Instrumented "collective chunk link num true" value + (H5D_XFER_COLL_CHUNK_LINK_NUM_TRUE_NAME) */ + bool mpio_coll_chunk_link_num_true_set; /* Whether instrumented "collective chunk link num true" value + is set */ + int mpio_coll_chunk_link_num_false; /* Instrumented "collective chunk link num false" value + (H5D_XFER_COLL_CHUNK_LINK_NUM_FALSE_NAME) */ + bool mpio_coll_chunk_link_num_false_set; /* Whether instrumented "collective chunk link num false" + value is set */ + int mpio_coll_chunk_multi_ratio_coll; /* Instrumented "collective chunk multi ratio coll" value + (H5D_XFER_COLL_CHUNK_MULTI_RATIO_COLL_NAME) */ + bool mpio_coll_chunk_multi_ratio_coll_set; /* Whether instrumented "collective chunk multi ratio coll" + value is set */ + int mpio_coll_chunk_multi_ratio_ind; /* Instrumented "collective chunk multi ratio ind" value + (H5D_XFER_COLL_CHUNK_MULTI_RATIO_IND_NAME) */ + bool mpio_coll_chunk_multi_ratio_ind_set; /* Whether instrumented "collective chunk multi ratio ind" + value is set */ + bool mpio_coll_rank0_bcast; /* Instrumented "collective rank 0 broadcast" value + (H5D_XFER_COLL_RANK0_BCAST_NAME) */ + bool mpio_coll_rank0_bcast_set; /* Whether instrumented "collective rank 0 broadcast" value is set */ +#endif /* H5_HAVE_INSTRUMENTED_LIBRARY */ +#endif /* H5_HAVE_PARALLEL */ + uint32_t no_selection_io_cause; /* Reason for not performing selection I/O + (H5D_XFER_NO_SELECTION_IO_CAUSE_NAME) */ + bool no_selection_io_cause_set; /* Whether reason for not performing selection I/O is set */ + bool no_selection_io_cause_valid; /* Whether reason for not performing selection I/O is valid */ + + uint32_t actual_selection_io_mode; /* Actual selection I/O mode used + (H5D_XFER_ACTUAL_SELECTION_IO_MODE_NAME) */ + bool actual_selection_io_mode_set; /* Whether actual selection I/O mode is set */ + bool actual_selection_io_mode_valid; /* Whether actual selection I/O mode is valid */ + + /* Cached LCPL properties */ + H5T_cset_t encoding; /* Link name character encoding (H5P_STRCRT_CHAR_ENCODING_NAME) */ + bool encoding_valid; /* Whether link name character encoding is valid */ + unsigned intermediate_group; /* Whether to create intermediate groups (H5L_CRT_INTERMEDIATE_GROUP_NAME) */ + bool intermediate_group_valid; /* Whether create intermediate group flag is valid */ + + /* Cached LAPL properties */ + size_t nlinks; /* Number of soft / UD links to traverse (H5L_ACS_NLINKS_NAME) */ + bool nlinks_valid; /* Whether number of soft / UD links to traverse is valid */ + + /* Cached DCPL properties */ + bool do_min_dset_ohdr; /* Whether to minimize dataset object header (H5D_CRT_MIN_DSET_HDR_SIZE_NAME) */ + bool do_min_dset_ohdr_valid; /* Whether minimize dataset object header flag is valid */ + uint8_t ohdr_flags; /* Object header flags (H5O_CRT_OHDR_FLAGS_NAME) */ + bool ohdr_flags_valid; /* Whether the object headers flags are valid */ + + /* Cached DAPL properties */ + const char *extfile_prefix; /* Prefix for external file (H5D_ACS_EFILE_PREFIX_NAME) */ + bool extfile_prefix_valid; /* Whether the prefix for external file is valid */ + const char *vds_prefix; /* Prefix for VDS (H5D_ACS_VDS_PREFIX_NAME) */ + bool vds_prefix_valid; /* Whether the prefix for VDS is valid */ + + /* Cached FAPL properties */ + H5F_libver_t low_bound; /* low_bound property for H5Pset_libver_bounds() + (H5F_ACS_LIBVER_LOW_BOUND_NAME) */ + bool low_bound_valid; /* Whether low_bound property is valid */ + H5F_libver_t high_bound; /* high_bound property for H5Pset_libver_bounds + (H5F_ACS_LIBVER_HIGH_BOUND_NAME) */ + bool high_bound_valid; /* Whether high_bound property is valid */ + + /* Cached VOL settings */ + H5VL_connector_prop_t vol_connector_prop; /* Property for VOL connector ID & info + This is treated as an independent field with + no relation to the property H5F_ACS_VOL_CONN_NAME stored on the FAPL */ + bool vol_connector_prop_valid; /* Whether property for VOL connector ID & info is valid */ + void *vol_wrap_ctx; /* VOL connector's "wrap context" for creating IDs */ + bool vol_wrap_ctx_valid; /* Whether VOL connector's "wrap context" for creating IDs is valid */ +} H5CX_t; + +/* Typedef for nodes on the API context stack */ +/* Each entry into the library through an API routine invokes H5CX_push() + * in a FUNC_ENTER_API* macro, which pushes an H5CX_node_t on the API + * context [thread-local] stack, after initializing it with default values. + */ +typedef struct H5CX_node_t { + H5CX_t ctx; /* Context for current API call */ + struct H5CX_node_t *next; /* Pointer to previous context, on stack */ +} H5CX_node_t; + /*****************************/ /* Library-private Variables */ /*****************************/ @@ -56,13 +288,10 @@ typedef struct H5CX_state_t { /***************************************/ /* Library private routines */ -#ifndef H5private_H -H5_DLL herr_t H5CX_push(void); +H5_DLL herr_t H5CX_push(H5CX_node_t *cnode); H5_DLL herr_t H5CX_pop(bool update_dxpl_props); -#endif /* H5private_H */ -H5_DLL bool H5CX_pushed(void); -H5_DLL void H5CX_push_special(void); -H5_DLL bool H5CX_is_def_dxpl(void); +H5_DLL bool H5CX_pushed(void); +H5_DLL bool H5CX_is_def_dxpl(void); /* API context state routines */ H5_DLL herr_t H5CX_retrieve_state(H5CX_state_t **api_state); diff --git a/src/H5FDprivate.h b/src/H5FDprivate.h index 53e47902832..68a40f1fec6 100644 --- a/src/H5FDprivate.h +++ b/src/H5FDprivate.h @@ -125,7 +125,7 @@ H5_DLL htri_t H5FD_is_driver_registered_by_name(const char *driver_name, H5_DLL htri_t H5FD_is_driver_registered_by_value(H5FD_class_value_t driver_value, hid_t *registered_id); H5_DLL hid_t H5FD_get_driver_id_by_name(const char *name, bool is_api); H5_DLL hid_t H5FD_get_driver_id_by_value(H5FD_class_value_t value, bool is_api); -H5_DLL herr_t H5FD_open(bool try, H5FD_t **file, const char *name, unsigned flags, hid_t fapl_id, +H5_DLL herr_t H5FD_open(bool attempt, H5FD_t **file, const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr); H5_DLL herr_t H5FD_close(H5FD_t *file); H5_DLL int H5FD_cmp(const H5FD_t *f1, const H5FD_t *f2); diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h index 32375046291..8509a997f79 100644 --- a/src/H5Fprivate.h +++ b/src/H5Fprivate.h @@ -493,7 +493,7 @@ typedef enum H5F_prefix_open_t { /* Private functions */ H5_DLL herr_t H5F_init(void); -H5_DLL herr_t H5F_open(bool try, H5F_t **file, const char *name, unsigned flags, hid_t fcpl_id, +H5_DLL herr_t H5F_open(bool attempt, H5F_t **file, const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id); H5_DLL herr_t H5F_try_close(H5F_t *f, bool *was_closed /*out*/); H5_DLL hid_t H5F_get_file_id(H5VL_object_t *vol_obj, H5I_type_t obj_type, bool app_ref); @@ -657,9 +657,9 @@ H5_DLL herr_t H5F_shared_get_mpi_file_sync_required(const H5F_shared_t *f_sh, H5_DLL herr_t H5F_efc_close(H5F_t *parent, H5F_t *file); /* File prefix routines */ -H5_DLL herr_t H5F_prefix_open_file(bool try, H5F_t **file, H5F_t *primary_file, H5F_prefix_open_t prefix_type, - const char *prop_prefix, const char *file_name, unsigned file_intent, - hid_t fapl_id); +H5_DLL herr_t H5F_prefix_open_file(bool attempt, H5F_t **file, H5F_t *primary_file, + H5F_prefix_open_t prefix_type, const char *prop_prefix, + const char *file_name, unsigned file_intent, hid_t fapl_id); /* Global heap CWFS routines */ H5_DLL herr_t H5F_cwfs_add(H5F_t *f, struct H5HG_heap_t *heap); diff --git a/src/H5Ftest.c b/src/H5Ftest.c index aacdd4cf4e9..540ef9c9b91 100644 --- a/src/H5Ftest.c +++ b/src/H5Ftest.c @@ -82,9 +82,10 @@ herr_t H5F__get_sohm_mesg_count_test(hid_t file_id, unsigned type_id, size_t *mesg_count) { - H5F_t *file; /* File info */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - herr_t ret_value = SUCCEED; /* Return value */ + H5F_t *file; /* File info */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -93,7 +94,7 @@ H5F__get_sohm_mesg_count_test(hid_t file_id, unsigned type_id, size_t *mesg_coun HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file"); /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_FILE, H5E_CANTSET, FAIL, "can't set API context"); api_ctx_pushed = true; @@ -123,9 +124,10 @@ H5F__get_sohm_mesg_count_test(hid_t file_id, unsigned type_id, size_t *mesg_coun herr_t H5F__check_cached_stab_test(hid_t file_id) { - H5F_t *file; /* File info */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - herr_t ret_value = SUCCEED; /* Return value */ + H5F_t *file; /* File info */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -134,7 +136,7 @@ H5F__check_cached_stab_test(hid_t file_id) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file"); /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_FILE, H5E_CANTSET, FAIL, "can't set API context"); api_ctx_pushed = true; diff --git a/src/H5Gtest.c b/src/H5Gtest.c index d8d74ed63f3..c82411b754c 100644 --- a/src/H5Gtest.c +++ b/src/H5Gtest.c @@ -83,11 +83,12 @@ htri_t H5G__is_empty_test(hid_t gid) { - H5G_t *grp = NULL; /* Pointer to group */ - htri_t msg_exists = false; /* Indicate that a header message is present */ - htri_t linfo_exists = false; /* Indicate that the 'link info' message is present */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - htri_t ret_value = true; /* Return value */ + H5G_t *grp = NULL; /* Pointer to group */ + htri_t msg_exists = false; /* Indicate that a header message is present */ + htri_t linfo_exists = false; /* Indicate that the 'link info' message is present */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + htri_t ret_value = true; /* Return value */ FUNC_ENTER_PACKAGE @@ -96,7 +97,7 @@ H5G__is_empty_test(hid_t gid) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a group"); /* Set API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_SYM, H5E_CANTSET, FAIL, "can't set API context"); api_ctx_pushed = true; @@ -203,10 +204,11 @@ H5G__is_empty_test(hid_t gid) htri_t H5G__has_links_test(hid_t gid, unsigned *nmsgs) { - H5G_t *grp = NULL; /* Pointer to group */ - htri_t msg_exists = 0; /* Indicate that a header message is present */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - htri_t ret_value = true; /* Return value */ + H5G_t *grp = NULL; /* Pointer to group */ + htri_t msg_exists = 0; /* Indicate that a header message is present */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + htri_t ret_value = true; /* Return value */ FUNC_ENTER_PACKAGE @@ -215,7 +217,7 @@ H5G__has_links_test(hid_t gid, unsigned *nmsgs) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a group"); /* Set API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_SYM, H5E_CANTSET, FAIL, "can't set API context"); api_ctx_pushed = true; @@ -269,10 +271,11 @@ H5G__has_links_test(hid_t gid, unsigned *nmsgs) htri_t H5G__has_stab_test(hid_t gid) { - H5G_t *grp = NULL; /* Pointer to group */ - htri_t msg_exists = 0; /* Indicate that a header message is present */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - htri_t ret_value = true; /* Return value */ + H5G_t *grp = NULL; /* Pointer to group */ + htri_t msg_exists = 0; /* Indicate that a header message is present */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + htri_t ret_value = true; /* Return value */ FUNC_ENTER_PACKAGE @@ -281,7 +284,7 @@ H5G__has_stab_test(hid_t gid) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a group"); /* Set API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_SYM, H5E_CANTSET, FAIL, "can't set API context"); api_ctx_pushed = true; @@ -327,10 +330,11 @@ H5G__has_stab_test(hid_t gid) htri_t H5G__is_new_dense_test(hid_t gid) { - H5G_t *grp = NULL; /* Pointer to group */ - htri_t msg_exists = 0; /* Indicate that a header message is present */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - htri_t ret_value = true; /* Return value */ + H5G_t *grp = NULL; /* Pointer to group */ + htri_t msg_exists = 0; /* Indicate that a header message is present */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + htri_t ret_value = true; /* Return value */ FUNC_ENTER_PACKAGE @@ -339,7 +343,7 @@ H5G__is_new_dense_test(hid_t gid) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a group"); /* Set API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_SYM, H5E_CANTSET, FAIL, "can't set API context"); api_ctx_pushed = true; @@ -403,12 +407,13 @@ H5G__is_new_dense_test(hid_t gid) herr_t H5G__new_dense_info_test(hid_t gid, hsize_t *name_count, hsize_t *corder_count) { - H5B2_t *bt2_name = NULL; /* v2 B-tree handle for name index */ - H5B2_t *bt2_corder = NULL; /* v2 B-tree handle for creation order index */ - H5O_linfo_t linfo; /* Link info message */ - H5G_t *grp = NULL; /* Pointer to group */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - herr_t ret_value = SUCCEED; /* Return value */ + H5B2_t *bt2_name = NULL; /* v2 B-tree handle for name index */ + H5B2_t *bt2_corder = NULL; /* v2 B-tree handle for creation order index */ + H5O_linfo_t linfo; /* Link info message */ + H5G_t *grp = NULL; /* Pointer to group */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -417,7 +422,7 @@ H5G__new_dense_info_test(hid_t gid, hsize_t *name_count, hsize_t *corder_count) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a group"); /* Set API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_SYM, H5E_CANTSET, FAIL, "can't set API context"); api_ctx_pushed = true; @@ -494,10 +499,11 @@ H5G__new_dense_info_test(hid_t gid, hsize_t *name_count, hsize_t *corder_count) herr_t H5G__lheap_size_test(hid_t gid, size_t *lheap_size) { - H5G_t *grp = NULL; /* Pointer to group */ - H5O_stab_t stab; /* Symbol table message */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - herr_t ret_value = SUCCEED; /* Return value */ + H5G_t *grp = NULL; /* Pointer to group */ + H5O_stab_t stab; /* Symbol table message */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -506,7 +512,7 @@ H5G__lheap_size_test(hid_t gid, size_t *lheap_size) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a group"); /* Set API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_SYM, H5E_CANTSET, FAIL, "can't set API context"); api_ctx_pushed = true; @@ -550,10 +556,11 @@ H5G__lheap_size_test(hid_t gid, size_t *lheap_size) herr_t H5G__user_path_test(hid_t obj_id, char *user_path, size_t *user_path_len, unsigned *obj_hidden) { - void *obj_ptr; /* Pointer to object for ID */ - const H5G_name_t *obj_path; /* Pointer to group hier. path for obj */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - herr_t ret_value = SUCCEED; /* Return value */ + void *obj_ptr; /* Pointer to object for ID */ + const H5G_name_t *obj_path; /* Pointer to group hier. path for obj */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -566,7 +573,7 @@ H5G__user_path_test(hid_t obj_id, char *user_path, size_t *user_path_len, unsign HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get object for ID"); /* Set API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_SYM, H5E_CANTSET, FAIL, "can't set API context"); api_ctx_pushed = true; diff --git a/src/H5Itest.c b/src/H5Itest.c index feb87dda1d2..f1600eed72b 100644 --- a/src/H5Itest.c +++ b/src/H5Itest.c @@ -63,17 +63,18 @@ ssize_t H5I__get_name_test(hid_t id, char *name /*out*/, size_t size, bool *cached) { - H5VL_object_t *vol_obj; /* Object of id */ - H5G_loc_t loc; /* Object location */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - bool vol_wrapper_set = false; /* Whether the VOL object wrapping context was set up */ - size_t name_len = 0; /* Length of name */ - ssize_t ret_value = -1; /* Return value */ + H5VL_object_t *vol_obj; /* Object of id */ + H5G_loc_t loc; /* Object location */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + bool vol_wrapper_set = false; /* Whether the VOL object wrapping context was set up */ + size_t name_len = 0; /* Length of name */ + ssize_t ret_value = -1; /* Return value */ FUNC_ENTER_PACKAGE /* Set API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_SYM, H5E_CANTSET, (-1), "can't set API context"); api_ctx_pushed = true; diff --git a/src/H5Otest.c b/src/H5Otest.c index e44ad929025..dd45ef8c50f 100644 --- a/src/H5Otest.c +++ b/src/H5Otest.c @@ -82,11 +82,12 @@ htri_t H5O__is_attr_dense_test(hid_t oid) { - H5O_t *oh = NULL; /* Object header */ - H5O_ainfo_t ainfo; /* Attribute information for object */ - H5O_loc_t *loc; /* Pointer to object's location */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - htri_t ret_value = FAIL; /* Return value */ + H5O_t *oh = NULL; /* Object header */ + H5O_ainfo_t ainfo; /* Attribute information for object */ + H5O_loc_t *loc; /* Pointer to object's location */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + htri_t ret_value = FAIL; /* Return value */ FUNC_ENTER_PACKAGE @@ -95,7 +96,7 @@ H5O__is_attr_dense_test(hid_t oid) HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found"); /* Set API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set API context"); api_ctx_pushed = true; @@ -151,14 +152,15 @@ H5O__is_attr_dense_test(hid_t oid) htri_t H5O__is_attr_empty_test(hid_t oid) { - H5O_t *oh = NULL; /* Object header */ - H5B2_t *bt2_name = NULL; /* v2 B-tree handle for name index */ - H5O_ainfo_t ainfo; /* Attribute information for object */ - htri_t ainfo_exists = false; /* Whether the attribute info exists in the file */ - H5O_loc_t *loc; /* Pointer to object's location */ - hsize_t nattrs; /* Number of attributes */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - htri_t ret_value = FAIL; /* Return value */ + H5O_t *oh = NULL; /* Object header */ + H5B2_t *bt2_name = NULL; /* v2 B-tree handle for name index */ + H5O_ainfo_t ainfo; /* Attribute information for object */ + htri_t ainfo_exists = false; /* Whether the attribute info exists in the file */ + H5O_loc_t *loc; /* Pointer to object's location */ + hsize_t nattrs; /* Number of attributes */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + htri_t ret_value = FAIL; /* Return value */ FUNC_ENTER_PACKAGE @@ -167,7 +169,7 @@ H5O__is_attr_empty_test(hid_t oid) HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found"); /* Set API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set API context"); api_ctx_pushed = true; @@ -254,13 +256,14 @@ H5O__is_attr_empty_test(hid_t oid) herr_t H5O__num_attrs_test(hid_t oid, hsize_t *nattrs) { - H5O_t *oh = NULL; /* Object header */ - H5B2_t *bt2_name = NULL; /* v2 B-tree handle for name index */ - H5O_ainfo_t ainfo; /* Attribute information for object */ - H5O_loc_t *loc; /* Pointer to object's location */ - hsize_t obj_nattrs; /* Number of attributes */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - herr_t ret_value = SUCCEED; /* Return value */ + H5O_t *oh = NULL; /* Object header */ + H5B2_t *bt2_name = NULL; /* v2 B-tree handle for name index */ + H5O_ainfo_t ainfo; /* Attribute information for object */ + H5O_loc_t *loc; /* Pointer to object's location */ + hsize_t obj_nattrs; /* Number of attributes */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -269,7 +272,7 @@ H5O__num_attrs_test(hid_t oid, hsize_t *nattrs) HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found"); /* Set API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set API context"); api_ctx_pushed = true; @@ -353,13 +356,14 @@ H5O__num_attrs_test(hid_t oid, hsize_t *nattrs) herr_t H5O__attr_dense_info_test(hid_t oid, hsize_t *name_count, hsize_t *corder_count) { - H5O_t *oh = NULL; /* Object header */ - H5B2_t *bt2_name = NULL; /* v2 B-tree handle for name index */ - H5B2_t *bt2_corder = NULL; /* v2 B-tree handle for creation order index */ - H5O_ainfo_t ainfo; /* Attribute information for object */ - H5O_loc_t *loc; /* Pointer to object's location */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - herr_t ret_value = SUCCEED; /* Return value */ + H5O_t *oh = NULL; /* Object header */ + H5B2_t *bt2_name = NULL; /* v2 B-tree handle for name index */ + H5B2_t *bt2_corder = NULL; /* v2 B-tree handle for creation order index */ + H5O_ainfo_t ainfo; /* Attribute information for object */ + H5O_loc_t *loc; /* Pointer to object's location */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -368,7 +372,7 @@ H5O__attr_dense_info_test(hid_t oid, hsize_t *name_count, hsize_t *corder_count) HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found"); /* Set API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set API context"); api_ctx_pushed = true; @@ -624,12 +628,13 @@ H5O__get_rc_test(const H5O_loc_t *loc, unsigned *rc) herr_t H5O__msg_get_chunkno_test(hid_t oid, unsigned msg_type, unsigned *chunk_num) { - H5O_t *oh = NULL; /* Object header */ - H5O_loc_t *loc; /* Pointer to object's location */ - H5O_mesg_t *idx_msg; /* Pointer to message */ - unsigned idx; /* Index of message */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - herr_t ret_value = SUCCEED; /* Return value */ + H5O_t *oh = NULL; /* Object header */ + H5O_loc_t *loc; /* Pointer to object's location */ + H5O_mesg_t *idx_msg; /* Pointer to message */ + unsigned idx; /* Index of message */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -638,7 +643,7 @@ H5O__msg_get_chunkno_test(hid_t oid, unsigned msg_type, unsigned *chunk_num) HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found"); /* Set API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set API context"); api_ctx_pushed = true; @@ -691,12 +696,13 @@ H5O__msg_get_chunkno_test(hid_t oid, unsigned msg_type, unsigned *chunk_num) herr_t H5O__msg_move_to_new_chunk_test(hid_t oid, unsigned msg_type) { - H5O_t *oh = NULL; /* Object header */ - H5O_loc_t *loc; /* Pointer to object's location */ - H5O_mesg_t *curr_msg; /* Pointer to current message */ - unsigned idx; /* Index of message */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - herr_t ret_value = SUCCEED; /* Return value */ + H5O_t *oh = NULL; /* Object header */ + H5O_loc_t *loc; /* Pointer to object's location */ + H5O_mesg_t *curr_msg; /* Pointer to current message */ + unsigned idx; /* Index of message */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -705,7 +711,7 @@ H5O__msg_move_to_new_chunk_test(hid_t oid, unsigned msg_type) HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found"); /* Set API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set API context"); api_ctx_pushed = true; diff --git a/src/H5TSmutex.h b/src/H5TSmutex.h index cb67fb35a85..014634eecb7 100644 --- a/src/H5TSmutex.h +++ b/src/H5TSmutex.h @@ -54,7 +54,7 @@ #ifdef H5_HAVE_C11_THREADS -#define H5TS_mutex_lock(mutex) ((H5_UNLIKELY(mtx_lock(mutex) != thrd_success)) ? FAIL : SUCCEED) +#define H5TS_mutex_lock(mutex) (H5_UNLIKELY(mtx_lock(mutex) != thrd_success) ? FAIL : SUCCEED) #define H5TS_mutex_unlock(mutex) (H5_UNLIKELY(mtx_unlock(mutex) != thrd_success) ? FAIL : SUCCEED) #else @@ -94,8 +94,8 @@ H5TS_mutex_unlock(H5TS_mutex_t *mutex) } /* end H5TS_mutex_unlock() */ #else -#define H5TS_mutex_lock(mutex) (H5_UNLIKELY(pthread_mutex_lock(mutex)) ? FAIL : SUCCEED) -#define H5TS_mutex_unlock(mutex) (H5_UNLIKELY(pthread_mutex_unlock(mutex)) ? FAIL : SUCCEED) +#define H5TS_mutex_lock(mutex) (H5_UNLIKELY(0 != pthread_mutex_lock(mutex)) ? FAIL : SUCCEED) +#define H5TS_mutex_unlock(mutex) (H5_UNLIKELY(0 != pthread_mutex_unlock(mutex)) ? FAIL : SUCCEED) #endif #endif diff --git a/src/H5TSprivate.h b/src/H5TSprivate.h index cc6fc61d860..1e62a4ec9af 100644 --- a/src/H5TSprivate.h +++ b/src/H5TSprivate.h @@ -300,11 +300,13 @@ H5_DLL herr_t H5TS_mutex_destroy(H5TS_mutex_t *mutex); /* R/W locks */ H5_DLL herr_t H5TS_rwlock_init(H5TS_rwlock_t *lock); /* R/W lock & unlock calls are defined in H5TSrwlock.h */ +#if !defined(__cplusplus) static inline herr_t H5TS_rwlock_rdlock(H5TS_rwlock_t *lock); static inline herr_t H5TS_rwlock_rdunlock(H5TS_rwlock_t *lock); static inline herr_t H5TS_rwlock_wrlock(H5TS_rwlock_t *lock); static inline herr_t H5TS_rwlock_wrunlock(H5TS_rwlock_t *lock); -H5_DLL herr_t H5TS_rwlock_destroy(H5TS_rwlock_t *lock); +#endif +H5_DLL herr_t H5TS_rwlock_destroy(H5TS_rwlock_t *lock); /* Condition variable operations */ H5_DLL herr_t H5TS_cond_init(H5TS_cond_t *cond); @@ -325,11 +327,13 @@ H5_DLL void H5TS_thread_yield(void); /* Thread pools */ H5_DLL herr_t H5TS_pool_create(H5TS_pool_t **pool, unsigned num_threads); /* Thread pool add task call is defined in H5TSpool.h */ +#if !defined(__cplusplus) static inline herr_t H5TS_pool_add_task(H5TS_pool_t *pool, H5TS_thread_start_func_t func, void *ctx); -H5_DLL herr_t H5TS_pool_destroy(H5TS_pool_t *pool); +#endif +H5_DLL herr_t H5TS_pool_destroy(H5TS_pool_t *pool); /* Emulated C11 atomics */ -#if !(defined(H5_HAVE_STDATOMIC_H) && !defined(__cplusplus)) +#if !defined(H5_HAVE_STDATOMIC_H) && !defined(__cplusplus) /* atomic_int */ H5_DLL void H5TS_atomic_init_int(H5TS_atomic_int_t *obj, int desired); /* Atomic 'int' load, store, etc. calls are defined in H5TSatomic.h */ @@ -360,26 +364,32 @@ H5_DLL void H5TS_atomic_destroy_voidp(H5TS_atomic_voidp_t *obj); /* Barrier related function declarations */ H5_DLL herr_t H5TS_barrier_init(H5TS_barrier_t *barrier, unsigned count); /* Barrier wait call is defined in H5TSbarrier.h */ +#if !defined(__cplusplus) static inline herr_t H5TS_barrier_wait(H5TS_barrier_t *barrier); -H5_DLL herr_t H5TS_barrier_destroy(H5TS_barrier_t *barrier); +#endif /* H5_HAVE_PTHREAD_BARRIER */ +H5_DLL herr_t H5TS_barrier_destroy(H5TS_barrier_t *barrier); H5_DLL herr_t H5TS_semaphore_init(H5TS_semaphore_t *sem, unsigned initial_count); /* Semaphore signal & wait calls are defined in H5TSsemaphore.h */ +#if !defined(__cplusplus) static inline herr_t H5TS_semaphore_signal(H5TS_semaphore_t *sem); static inline herr_t H5TS_semaphore_wait(H5TS_semaphore_t *sem); -H5_DLL herr_t H5TS_semaphore_destroy(H5TS_semaphore_t *sem); +#endif +H5_DLL herr_t H5TS_semaphore_destroy(H5TS_semaphore_t *sem); /* Headers with inlined routines */ #include "H5TScond.h" #include "H5TSmutex.h" #include "H5TSkey.h" -#if !(defined(H5_HAVE_STDATOMIC_H) && !defined(__cplusplus)) +#if !defined(__cplusplus) +#if !defined(H5_HAVE_STDATOMIC_H) #include "H5TSatomic.h" #endif /* H5_HAVE_STDATOMIC_H */ #include "H5TSbarrier.h" #include "H5TSrwlock.h" #include "H5TSsemaphore.h" #include "H5TSpool.h" +#endif #endif /* H5_HAVE_THREADS */ diff --git a/src/H5Tconv_array.c b/src/H5Tconv_array.c index dc08ab96c50..35f63931866 100644 --- a/src/H5Tconv_array.c +++ b/src/H5Tconv_array.c @@ -22,9 +22,10 @@ /***********/ /* Headers */ /***********/ -#include "H5Eprivate.h" -#include "H5Iprivate.h" -#include "H5Tconv.h" +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5Iprivate.h" /* IDs */ +#include "H5Tconv.h" /* Datatype conversions */ #include "H5Tconv_array.h" /******************/ diff --git a/src/H5Tconv_bitfield.c b/src/H5Tconv_bitfield.c index 8a8a2e4de43..f9b227196f4 100644 --- a/src/H5Tconv_bitfield.c +++ b/src/H5Tconv_bitfield.c @@ -22,8 +22,9 @@ /***********/ /* Headers */ /***********/ -#include "H5Eprivate.h" -#include "H5Tconv.h" +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5Tconv.h" /* Datatype conversions */ #include "H5Tconv_bitfield.h" /*------------------------------------------------------------------------- diff --git a/src/H5Tconv_compound.c b/src/H5Tconv_compound.c index e509c0c4704..b05fb5e75d5 100644 --- a/src/H5Tconv_compound.c +++ b/src/H5Tconv_compound.c @@ -22,9 +22,10 @@ /***********/ /* Headers */ /***********/ -#include "H5Eprivate.h" -#include "H5Iprivate.h" -#include "H5Tconv.h" +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5Iprivate.h" /* IDs */ +#include "H5Tconv.h" /* Datatype conversions */ #include "H5Tconv_compound.h" /******************/ diff --git a/src/H5Tconv_enum.c b/src/H5Tconv_enum.c index 66c5358314c..744f7b9920c 100644 --- a/src/H5Tconv_enum.c +++ b/src/H5Tconv_enum.c @@ -22,8 +22,9 @@ /***********/ /* Headers */ /***********/ -#include "H5Eprivate.h" -#include "H5Tconv.h" +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5Tconv.h" /* Datatype conversions */ #include "H5Tconv_enum.h" /******************/ diff --git a/src/H5Tconv_float.c b/src/H5Tconv_float.c index 561e29714dd..165c360ac4b 100644 --- a/src/H5Tconv_float.c +++ b/src/H5Tconv_float.c @@ -22,7 +22,8 @@ /***********/ /* Headers */ /***********/ -#include "H5Tconv.h" +#include "H5private.h" /* Generic Functions */ +#include "H5Tconv.h" /* Datatype conversions */ #include "H5Tconv_macros.h" #include "H5Tconv_float.h" diff --git a/src/H5Tconv_integer.c b/src/H5Tconv_integer.c index 6d92c67ed24..01808ab5dd6 100644 --- a/src/H5Tconv_integer.c +++ b/src/H5Tconv_integer.c @@ -22,7 +22,8 @@ /***********/ /* Headers */ /***********/ -#include "H5Tconv.h" +#include "H5private.h" /* Generic Functions */ +#include "H5Tconv.h" /* Datatype conversions */ #include "H5Tconv_macros.h" #include "H5Tconv_integer.h" diff --git a/src/H5Tconv_reference.c b/src/H5Tconv_reference.c index 44a642a3cd5..1404127e152 100644 --- a/src/H5Tconv_reference.c +++ b/src/H5Tconv_reference.c @@ -23,10 +23,11 @@ /***********/ /* Headers */ /***********/ -#include "H5Eprivate.h" -#include "H5FLprivate.h" -#include "H5Rpkg.h" -#include "H5Tconv.h" +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5FLprivate.h" /* Free Lists */ +#include "H5Rpkg.h" /* References */ +#include "H5Tconv.h" /* Datatype conversions */ #include "H5Tconv_reference.h" /*******************/ diff --git a/src/H5Tconv_string.c b/src/H5Tconv_string.c index 158ffd7aa6a..727021af959 100644 --- a/src/H5Tconv_string.c +++ b/src/H5Tconv_string.c @@ -22,8 +22,9 @@ /***********/ /* Headers */ /***********/ -#include "H5Eprivate.h" -#include "H5Tconv.h" +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5Tconv.h" /* Datatype conversions */ #include "H5Tconv_string.h" /*------------------------------------------------------------------------- diff --git a/src/H5Tconv_vlen.c b/src/H5Tconv_vlen.c index 2f368879be0..5f6c35f127b 100644 --- a/src/H5Tconv_vlen.c +++ b/src/H5Tconv_vlen.c @@ -22,10 +22,11 @@ /***********/ /* Headers */ /***********/ -#include "H5CXprivate.h" -#include "H5Eprivate.h" -#include "H5Iprivate.h" -#include "H5Tconv.h" +#include "H5private.h" /* Generic Functions */ +#include "H5CXprivate.h" /* API Contexts */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5Iprivate.h" /* IDs */ +#include "H5Tconv.h" /* Datatype conversions */ #include "H5Tconv_vlen.h" /****************/ diff --git a/src/H5VL.c b/src/H5VL.c index 9b0477493ce..04563ce3a7b 100644 --- a/src/H5VL.c +++ b/src/H5VL.c @@ -771,26 +771,36 @@ H5VLretrieve_lib_state(void **state /*out*/) /*--------------------------------------------------------------------------- * Function: H5VLstart_lib_state * - * Purpose: Opens a new internal state for the HDF5 library. + * Purpose: Opens a new internal context for the HDF5 library. The context + * returned (via the OUT parameter) must be passed to + * H5VLfinish_lib_state to conclude the library's context and + * release resources. * * Note: This routine is _only_ for HDF5 VOL connector authors! It is * _not_ part of the public API for HDF5 application developers. * - * Return: Success: Non-negative - * Failure: Negative + * Note: Should probably rename this to 'H5VLopen_lib_context' or + * similar. + * + * Return: Success: Non-negative, *context set + * Failure: Negative, *context unset * *--------------------------------------------------------------------------- */ herr_t -H5VLstart_lib_state(void) +H5VLstart_lib_state(void **context) { herr_t ret_value = SUCCEED; /* Return value */ /* Must use this, to avoid modifying the API context stack in FUNC_ENTER */ FUNC_ENTER_API_NOINIT + /* Check args */ + if (NULL == context) + HGOTO_ERROR(H5E_VOL, H5E_BADVALUE, FAIL, "invalid context pointer"); + /* Start a new library state */ - if (H5VL_start_lib_state() < 0) + if (H5VL_start_lib_state(context) < 0) HGOTO_ERROR(H5E_VOL, H5E_CANTSET, FAIL, "can't start new library state"); done: @@ -843,21 +853,28 @@ H5VLrestore_lib_state(const void *state) * H5VLstart_lib_state. It can be called before / after / * independently of H5VLfree_lib_state. * + * Note: Should probably rename this to 'H5VLclose_lib_context' or + * similar. + * * Return: Success: Non-negative * Failure: Negative * *--------------------------------------------------------------------------- */ herr_t -H5VLfinish_lib_state(void) +H5VLfinish_lib_state(void *context) { herr_t ret_value = SUCCEED; /* Return value */ /* Must use this, to avoid modifying the API context stack in FUNC_ENTER */ FUNC_ENTER_API_NOINIT + /* Check args */ + if (NULL == context) + HGOTO_ERROR(H5E_VOL, H5E_BADVALUE, FAIL, "invalid context pointer"); + /* Reset the library state */ - if (H5VL_finish_lib_state() < 0) + if (H5VL_finish_lib_state(context) < 0) HGOTO_ERROR(H5E_VOL, H5E_CANTRESET, FAIL, "can't reset library state"); done: diff --git a/src/H5VLconnector_passthru.h b/src/H5VLconnector_passthru.h index 90afbbc0610..9438ed117f8 100644 --- a/src/H5VLconnector_passthru.h +++ b/src/H5VLconnector_passthru.h @@ -80,11 +80,13 @@ H5_DLL herr_t H5VLcmp_connector_cls(int *cmp, hid_t connector_id1, hid_t connect * can't be retrieved. * */ -H5_DLL hid_t H5VLwrap_register(void *obj, H5I_type_t type); +H5_DLL hid_t H5VLwrap_register(void *obj, H5I_type_t type); + +/* Library context and state routines */ H5_DLL herr_t H5VLretrieve_lib_state(void **state); -H5_DLL herr_t H5VLstart_lib_state(void); +H5_DLL herr_t H5VLstart_lib_state(void **context); H5_DLL herr_t H5VLrestore_lib_state(const void *state); -H5_DLL herr_t H5VLfinish_lib_state(void); +H5_DLL herr_t H5VLfinish_lib_state(void *context); H5_DLL herr_t H5VLfree_lib_state(void *state); /* Pass-through callbacks */ diff --git a/src/H5VLint.c b/src/H5VLint.c index c3c4cd744b5..6d2864e2d91 100644 --- a/src/H5VLint.c +++ b/src/H5VLint.c @@ -2062,25 +2062,41 @@ H5VL_retrieve_lib_state(void **state) * * Purpose: Opens a new internal state for the HDF5 library. * - * Note: Currently just pushes a new API context state, but could be + * Note: Currently just pushes a new API context, but could be * expanded in the future. * - * Return: SUCCEED / FAIL + * Return: Success: Non-negative, *context set + * Failure: Negative, *context unset * *------------------------------------------------------------------------- */ herr_t -H5VL_start_lib_state(void) +H5VL_start_lib_state(void **context) { - herr_t ret_value = SUCCEED; /* Return value */ + H5CX_node_t *cnode = NULL; /* API context */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) + /* Sanity check */ + assert(context); + + /* Allocate & clear a new API context */ + if (NULL == (cnode = H5MM_calloc(sizeof(H5CX_node_t)))) + HGOTO_ERROR(H5E_VOL, H5E_CANTALLOC, FAIL, "can't allocate library context"); + /* Push a new API context on the stack */ - if (H5CX_push() < 0) + if (H5CX_push(cnode) < 0) HGOTO_ERROR(H5E_VOL, H5E_CANTSET, FAIL, "can't push API context"); + /* Set output parameter */ + *context = cnode; + done: + if (ret_value < 0) + if (cnode) + H5MM_xfree(cnode); + FUNC_LEAVE_NOAPI(ret_value) } /* end H5VL_start_lib_state() */ @@ -2132,16 +2148,22 @@ H5VL_restore_lib_state(const void *state) *------------------------------------------------------------------------- */ herr_t -H5VL_finish_lib_state(void) +H5VL_finish_lib_state(void *context) { herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) + /* Sanity check */ + assert(context); + /* Pop the API context off the stack */ if (H5CX_pop(false) < 0) HGOTO_ERROR(H5E_VOL, H5E_CANTRESET, FAIL, "can't pop API context"); + /* Release library context */ + H5MM_xfree(context); + done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5VL_finish_lib_state() */ diff --git a/src/H5VLprivate.h b/src/H5VLprivate.h index 11b77f890b3..bcdfdba8b7b 100644 --- a/src/H5VLprivate.h +++ b/src/H5VLprivate.h @@ -134,9 +134,9 @@ H5_DLL void H5VL_obj_reset_data(H5VL_object_t *vol_obj); /* Library state functions */ H5_DLL herr_t H5VL_retrieve_lib_state(void **state); -H5_DLL herr_t H5VL_start_lib_state(void); +H5_DLL herr_t H5VL_start_lib_state(void **context); H5_DLL herr_t H5VL_restore_lib_state(const void *state); -H5_DLL herr_t H5VL_finish_lib_state(void); +H5_DLL herr_t H5VL_finish_lib_state(void *context); H5_DLL herr_t H5VL_free_lib_state(void *state); /* ID registration functions */ diff --git a/src/H5Zprivate.h b/src/H5Zprivate.h index 775373d4ca4..eac576874e2 100644 --- a/src/H5Zprivate.h +++ b/src/H5Zprivate.h @@ -78,7 +78,7 @@ H5_DLL herr_t H5Z_modify(const struct H5O_pline_t *pline, H5Z_filter_t filter, u H5_DLL herr_t H5Z_pipeline(const struct H5O_pline_t *pline, unsigned flags, unsigned *filter_mask /*in,out*/, H5Z_EDC_t edc_read, H5Z_cb_t cb_struct, size_t *nbytes /*in,out*/, size_t *buf_size /*in,out*/, void **buf /*in,out*/); -H5_DLL herr_t H5Z_find(bool try, H5Z_filter_t id, H5Z_class2_t **cls); +H5_DLL herr_t H5Z_find(bool attempt, H5Z_filter_t id, H5Z_class2_t **cls); H5_DLL herr_t H5Z_can_apply(hid_t dcpl_id, hid_t type_id); H5_DLL herr_t H5Z_set_local(hid_t dcpl_id, hid_t type_id); H5_DLL herr_t H5Z_can_apply_direct(const struct H5O_pline_t *pline); diff --git a/src/H5private.h b/src/H5private.h index 6bd1f292e2d..5347938bf48 100644 --- a/src/H5private.h +++ b/src/H5private.h @@ -501,6 +501,18 @@ #define LOCK_UN 0x08 #endif /* H5_HAVE_FLOCK */ +/* Private typedefs */ + +/* Union for const/non-const pointer for use by functions that manipulate + * pointers but do not write to their targets or return pointers to const + * specified locations. Also used for I/O functions that work for read and + * write - these functions are expected to never write to these locations in the + * write case. This helps us avoid compiler warnings. */ +typedef union { + void *vp; + const void *cvp; +} H5_flexible_const_ptr_t; + /* If necessary, create a typedef for library usage of the * _Float16 type to avoid issues when compiling the library * with the -pedantic flag or similar where we get warnings @@ -1124,10 +1136,7 @@ extern char H5_lib_vers_info_g[]; #define H5_PACKAGE_INIT(pkg_init, err) #endif /* H5_MY_PKG */ -/* Forward declaration of H5CXpush() / H5CXpop() */ -/* (Including H5CXprivate.h creates bad circular dependencies - QAK, 3/18/2018) */ -H5_DLL herr_t H5CX_push(void); -H5_DLL herr_t H5CX_pop(bool update_dxpl_props); +#include "H5CXprivate.h" /* API Contexts */ #ifndef NDEBUG #define FUNC_ENTER_CHECK_NAME(asrt) \ @@ -1174,7 +1183,7 @@ H5_DLL herr_t H5CX_pop(bool update_dxpl_props); #define FUNC_ENTER_API_PUSH(err) \ /* Push the API context */ \ - if (H5_UNLIKELY(H5CX_push() < 0)) \ + if (H5_UNLIKELY(H5CX_push(&api_ctx) < 0)) \ HGOTO_ERROR(H5E_FUNC, H5E_CANTSET, err, "can't set API context"); \ else \ api_ctx_pushed = true; @@ -1183,7 +1192,8 @@ H5_DLL herr_t H5CX_pop(bool update_dxpl_props); #define FUNC_ENTER_API(err) \ { \ { \ - bool api_ctx_pushed = false; \ + H5CX_node_t api_ctx = {{0}, NULL}; \ + bool api_ctx_pushed = false; \ \ FUNC_ENTER_API_COMMON \ FUNC_ENTER_API_INIT(err); \ @@ -1199,7 +1209,8 @@ H5_DLL herr_t H5CX_pop(bool update_dxpl_props); #define FUNC_ENTER_API_NOCLEAR(err) \ { \ { \ - bool api_ctx_pushed = false; \ + H5CX_node_t api_ctx = {{0}, NULL}; \ + bool api_ctx_pushed = false; \ \ FUNC_ENTER_API_COMMON \ FUNC_ENTER_API_INIT(err); \ @@ -1247,9 +1258,7 @@ H5_DLL herr_t H5CX_pop(bool update_dxpl_props); { \ { \ { \ - FUNC_ENTER_API_VARS \ - FUNC_ENTER_COMMON(H5_IS_API(__func__)); \ - H5_API_LOCK \ + FUNC_ENTER_API_COMMON \ FUNC_ENTER_API_INIT(err); \ { @@ -1508,18 +1517,6 @@ H5_PKG_DECLARE_FUNC(H5_MY_PKG_INIT, H5_MY_PKG) #define HDcompile_assert(e) do { typedef struct { unsigned int b: (e); } x; } while(0) */ -/* Private typedefs */ - -/* Union for const/non-const pointer for use by functions that manipulate - * pointers but do not write to their targets or return pointers to const - * specified locations. Also used for I/O functions that work for read and - * write - these functions are expected to never write to these locations in the - * write case. This helps us avoid compiler warnings. */ -typedef union { - void *vp; - const void *cvp; -} H5_flexible_const_ptr_t; - /* File-independent encode/decode routines */ #include "H5encode.h" diff --git a/test/accum.c b/test/accum.c index e2c70d64f5f..9966b31b69e 100644 --- a/test/accum.c +++ b/test/accum.c @@ -80,12 +80,13 @@ void accum_printf(const H5F_t *f); int main(void) { - unsigned nerrors = 0; /* track errors */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - hid_t fid = H5I_INVALID_HID; - hid_t fapl = H5I_INVALID_HID; /* File access property list */ - char filename[1024]; - H5F_t *f = NULL; /* File for all tests */ + unsigned nerrors = 0; /* track errors */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + hid_t fid = H5I_INVALID_HID; + hid_t fapl = H5I_INVALID_HID; /* File access property list */ + char filename[1024]; + H5F_t *f = NULL; /* File for all tests */ /* Test Setup */ puts("Testing the metadata accumulator"); @@ -101,7 +102,7 @@ main(void) FAIL_STACK_ERROR; /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) FAIL_STACK_ERROR; api_ctx_pushed = true; @@ -2058,7 +2059,8 @@ test_swmr_write_big(bool newest_format) uint8_t wbuf[1024]; /* Buffer for reading & writing */ unsigned u; /* Local index variable */ bool process_success = false; - bool api_ctx_pushed = false; /* Whether API context pushed */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ if (newest_format) TESTING("SWMR write of large metadata: with latest format"); @@ -2110,7 +2112,7 @@ test_swmr_write_big(bool newest_format) FAIL_STACK_ERROR; /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) FAIL_STACK_ERROR; api_ctx_pushed = true; diff --git a/test/accum_swmr_reader.c b/test/accum_swmr_reader.c index 5feb19b4019..a7ad9779118 100644 --- a/test/accum_swmr_reader.c +++ b/test/accum_swmr_reader.c @@ -45,10 +45,11 @@ main(void) hid_t fapl = H5I_INVALID_HID; /* file access property list ID */ H5F_t *f = NULL; /* File pointer */ char filename[1024]; - unsigned u; /* Local index variable */ - uint8_t rbuf[1024]; /* Buffer for reading */ - uint8_t buf[1024]; /* Buffer for holding the expected data */ - bool api_ctx_pushed = false; /* Whether API context pushed */ + unsigned u; /* Local index variable */ + uint8_t rbuf[1024]; /* Buffer for reading */ + uint8_t buf[1024]; /* Buffer for holding the expected data */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ /* Testing setup */ h5_test_init(); @@ -75,7 +76,7 @@ main(void) FAIL_STACK_ERROR; /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) FAIL_STACK_ERROR; api_ctx_pushed = true; diff --git a/test/btree2.c b/test/btree2.c index 41c25ccb9f3..03fed030b0e 100644 --- a/test/btree2.c +++ b/test/btree2.c @@ -9916,8 +9916,9 @@ main(void) unsigned nerrors = 0; /* Cumulative error count */ unsigned reopen; /* Whether to reopen B-tree during tests */ const char *driver_name; - bool api_ctx_pushed = false; /* Whether API context pushed */ - int localTestExpress; /* localized TestExpress */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + int localTestExpress; /* localized TestExpress */ driver_name = h5_get_test_driver_name(); @@ -9937,7 +9938,7 @@ main(void) init_cparam(&cparam, &cparam2); /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) FAIL_STACK_ERROR; api_ctx_pushed = true; diff --git a/test/cache.c b/test/cache.c index 08c051a8535..f3599e8158d 100644 --- a/test/cache.c +++ b/test/cache.c @@ -247,14 +247,15 @@ static void takedown_cache(H5F_t *file_ptr, bool dump_stats, bool dump_detailed_ static unsigned smoke_check_1(int express_test, unsigned paged) { - bool show_progress = false; - int dirty_unprotects = false; - int dirty_destroys = false; - bool display_stats = false; - int32_t lag = 10; - int32_t max_index = (10 * 1024) - 1; - int mile_stone = 1; - H5F_t *file_ptr = NULL; + bool show_progress = false; + int dirty_unprotects = false; + int dirty_destroys = false; + bool display_stats = false; + int32_t lag = 10; + int32_t max_index = (10 * 1024) - 1; + int mile_stone = 1; + H5F_t *file_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("smoke check #1P -- all clean, ins, dest, ren, 4/2 MB cache"); @@ -302,6 +303,9 @@ smoke_check_1(int express_test, unsigned paged) if (show_progress) /* 3 */ fprintf(stdout, "%s() - %0d -- pass = %d\n", __func__, mile_stone++, (int)pass); + /* Push API context */ + H5CX_push(&api_ctx); + row_major_scan_forward(/* file_ptr */ file_ptr, /* max_index */ max_index, /* lag */ lag, @@ -422,8 +426,10 @@ smoke_check_1(int express_test, unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* smoke_check_1() */ /*------------------------------------------------------------------------- @@ -442,14 +448,15 @@ smoke_check_1(int express_test, unsigned paged) static unsigned smoke_check_2(int express_test, unsigned paged) { - bool show_progress = false; - int dirty_unprotects = true; - int dirty_destroys = true; - bool display_stats = false; - int32_t max_index = (10 * 1024) - 1; - int32_t lag = 10; - int mile_stone = 1; - H5F_t *file_ptr = NULL; + bool show_progress = false; + int dirty_unprotects = true; + int dirty_destroys = true; + bool display_stats = false; + int32_t max_index = (10 * 1024) - 1; + int32_t lag = 10; + int mile_stone = 1; + H5F_t *file_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("smoke check #2P -- ~1/2 dirty, ins, dest, ren, 4/2 MB cache"); @@ -497,6 +504,9 @@ smoke_check_2(int express_test, unsigned paged) if (show_progress) /* 3 */ fprintf(stdout, "%s() - %0d -- pass = %d\n", __func__, mile_stone++, (int)pass); + /* Push API context */ + H5CX_push(&api_ctx); + row_major_scan_forward(/* file_ptr */ file_ptr, /* max_index */ max_index, /* lag */ lag, @@ -617,8 +627,10 @@ smoke_check_2(int express_test, unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* smoke_check_2() */ /*------------------------------------------------------------------------- @@ -636,14 +648,15 @@ smoke_check_2(int express_test, unsigned paged) static unsigned smoke_check_3(int express_test, unsigned paged) { - bool show_progress = false; - int dirty_unprotects = false; - int dirty_destroys = false; - bool display_stats = false; - int32_t max_index = (10 * 1024) - 1; - int32_t lag = 10; - int mile_stone = 1; - H5F_t *file_ptr = NULL; + bool show_progress = false; + int dirty_unprotects = false; + int dirty_destroys = false; + bool display_stats = false; + int32_t max_index = (10 * 1024) - 1; + int32_t lag = 10; + int mile_stone = 1; + H5F_t *file_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("smoke check #3P -- all clean, ins, dest, ren, 2/1 KB cache"); @@ -691,6 +704,9 @@ smoke_check_3(int express_test, unsigned paged) if (show_progress) /* 3 */ fprintf(stdout, "%s() - %0d -- pass = %d\n", __func__, mile_stone++, (int)pass); + /* Push API context */ + H5CX_push(&api_ctx); + row_major_scan_forward(/* file_ptr */ file_ptr, /* max_index */ max_index, /* lag */ lag, @@ -811,8 +827,10 @@ smoke_check_3(int express_test, unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* smoke_check_3() */ /*------------------------------------------------------------------------- @@ -831,14 +849,15 @@ smoke_check_3(int express_test, unsigned paged) static unsigned smoke_check_4(int express_test, unsigned paged) { - bool show_progress = false; - int dirty_unprotects = true; - int dirty_destroys = true; - bool display_stats = false; - int32_t max_index = (10 * 1024) - 1; - int32_t lag = 10; - int mile_stone = 1; - H5F_t *file_ptr = NULL; + bool show_progress = false; + int dirty_unprotects = true; + int dirty_destroys = true; + bool display_stats = false; + int32_t max_index = (10 * 1024) - 1; + int32_t lag = 10; + int mile_stone = 1; + H5F_t *file_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("smoke check #4P -- ~1/2 dirty, ins, dest, ren, 2/1 KB cache"); @@ -886,6 +905,9 @@ smoke_check_4(int express_test, unsigned paged) if (show_progress) /* 3 */ fprintf(stdout, "%s() - %0d -- pass = %d\n", __func__, mile_stone++, (int)pass); + /* Push API context */ + H5CX_push(&api_ctx); + row_major_scan_forward(/* file_ptr */ file_ptr, /* max_index */ max_index, /* lag */ lag, @@ -1006,8 +1028,10 @@ smoke_check_4(int express_test, unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* smoke_check_4() */ /*------------------------------------------------------------------------- @@ -1074,6 +1098,7 @@ smoke_check_5(int express_test, unsigned paged) /* bool apply_empty_reserve = */ true, /* double empty_reserve = */ 0.5}; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("smoke check #5P -- all clean, ins, prot, unprot, AR cache 1"); @@ -1119,6 +1144,9 @@ smoke_check_5(int express_test, unsigned paged) file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); cache_ptr = file_ptr->shared->cache; + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { result = H5C_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl); @@ -1230,8 +1258,10 @@ smoke_check_5(int express_test, unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* smoke_check_5() */ /*------------------------------------------------------------------------- @@ -1298,6 +1328,7 @@ smoke_check_6(int express_test, unsigned paged) /* bool apply_empty_reserve = */ true, /* double empty_reserve = */ 0.05}; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("smoke check #6P -- ~1/2 dirty, ins, prot, unprot, AR cache 1"); @@ -1343,6 +1374,9 @@ smoke_check_6(int express_test, unsigned paged) file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); cache_ptr = file_ptr->shared->cache; + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { result = H5C_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl); @@ -1454,8 +1488,10 @@ smoke_check_6(int express_test, unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* smoke_check_6() */ /*------------------------------------------------------------------------- @@ -1523,6 +1559,7 @@ smoke_check_7(int express_test, unsigned paged) /* bool apply_empty_reserve = */ true, /* double empty_reserve = */ 0.1}; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("smoke check #7P -- all clean, ins, prot, unprot, AR cache 2"); @@ -1568,6 +1605,9 @@ smoke_check_7(int express_test, unsigned paged) file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); cache_ptr = file_ptr->shared->cache; + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { result = H5C_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl); @@ -1679,8 +1719,10 @@ smoke_check_7(int express_test, unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* smoke_check_7() */ /*------------------------------------------------------------------------- @@ -1748,6 +1790,7 @@ smoke_check_8(int express_test, unsigned paged) /* bool apply_empty_reserve = */ true, /* double empty_reserve = */ 0.1}; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("smoke check #8P -- ~1/2 dirty, ins, prot, unprot, AR cache 2"); @@ -1793,6 +1836,9 @@ smoke_check_8(int express_test, unsigned paged) file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); cache_ptr = file_ptr->shared->cache; + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { result = H5C_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl); @@ -1904,8 +1950,10 @@ smoke_check_8(int express_test, unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* smoke_check_8() */ /*------------------------------------------------------------------------- @@ -1927,17 +1975,18 @@ smoke_check_8(int express_test, unsigned paged) static unsigned smoke_check_9(int express_test, unsigned paged) { - herr_t result; - bool show_progress = false; - int dirty_unprotects = false; - int dirty_destroys = false; - bool display_stats = false; - bool display_detailed_stats = false; - int32_t max_index = (10 * 1024) - 1; - int32_t lag = 10; - int mile_stone = 1; - H5F_t *file_ptr = NULL; - H5C_t *cache_ptr = NULL; + herr_t result; + bool show_progress = false; + int dirty_unprotects = false; + int dirty_destroys = false; + bool display_stats = false; + bool display_detailed_stats = false; + int32_t max_index = (10 * 1024) - 1; + int32_t lag = 10; + int mile_stone = 1; + H5F_t *file_ptr = NULL; + H5C_t *cache_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("smoke check #9P -- all clean, ins, dest, ren, 4/2 MB, corked"); @@ -1983,11 +2032,13 @@ smoke_check_9(int express_test, unsigned paged) file_ptr = setup_cache((size_t)(4 * 1024 * 1024), (size_t)(2 * 1024 * 1024), paged); cache_ptr = file_ptr->shared->cache; - /* disable evictions */ - if (show_progress) /* 3 */ fprintf(stdout, "%s() - %0d -- pass = %d\n", __func__, mile_stone++, (int)pass); + /* Push API context */ + H5CX_push(&api_ctx); + + /* disable evictions */ if (pass) { result = H5C_set_evictions_enabled(cache_ptr, false); @@ -2209,8 +2260,10 @@ smoke_check_9(int express_test, unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* smoke_check_9() */ /*------------------------------------------------------------------------- @@ -2232,17 +2285,18 @@ smoke_check_9(int express_test, unsigned paged) static unsigned smoke_check_10(int express_test, unsigned paged) { - herr_t result; - bool show_progress = false; - int dirty_unprotects = true; - int dirty_destroys = true; - bool display_stats = false; - bool display_detailed_stats = false; - int32_t max_index = (10 * 1024) - 1; - int32_t lag = 10; - int mile_stone = 1; - H5F_t *file_ptr = NULL; - H5C_t *cache_ptr = NULL; + herr_t result; + bool show_progress = false; + int dirty_unprotects = true; + int dirty_destroys = true; + bool display_stats = false; + bool display_detailed_stats = false; + int32_t max_index = (10 * 1024) - 1; + int32_t lag = 10; + int mile_stone = 1; + H5F_t *file_ptr = NULL; + H5C_t *cache_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("smoke check #10P -- ~1/2 dirty, ins, dest, ren, 4/2 MB, corked"); @@ -2288,6 +2342,9 @@ smoke_check_10(int express_test, unsigned paged) file_ptr = setup_cache((size_t)(4 * 1024 * 1024), (size_t)(2 * 1024 * 1024), paged); cache_ptr = file_ptr->shared->cache; + /* Push API context */ + H5CX_push(&api_ctx); + if (show_progress) /* 3 */ fprintf(stdout, "%s() - %0d -- pass = %d -- evictions enabled\n", __func__, mile_stone++, (int)pass); @@ -2509,8 +2566,10 @@ smoke_check_10(int express_test, unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* smoke_check_10() */ /*------------------------------------------------------------------------- @@ -2537,12 +2596,13 @@ write_permitted_check(int #if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS - bool show_progress = false; - bool display_stats = false; - int32_t max_index = (10 * 1024) - 1; - int32_t lag = 10; - int mile_stone = 1; - H5F_t *file_ptr = NULL; + bool show_progress = false; + bool display_stats = false; + int32_t max_index = (10 * 1024) - 1; + int32_t lag = 10; + int mile_stone = 1; + H5F_t *file_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ #endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */ @@ -2588,6 +2648,9 @@ write_permitted_check(int if (show_progress) /* 3 */ fprintf(stdout, "%s() - %0d -- pass = %d\n", __func__, mile_stone++, (int)pass); + /* Push API context */ + H5CX_push(&api_ctx); + row_major_scan_forward(/* file_ptr */ file_ptr, /* max_index */ max_index, /* lag */ lag, @@ -2706,6 +2769,9 @@ write_permitted_check(int fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } + /* Pop API context */ + H5CX_pop(false); + #else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */ SKIPPED(); @@ -2715,7 +2781,6 @@ write_permitted_check(int #endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */ return (unsigned)!pass; - } /* write_permitted_check() */ /*------------------------------------------------------------------------- @@ -2750,6 +2815,7 @@ check_insert_entry(unsigned paged) test_entry_t *base_addr; test_entry_t *entry_ptr; struct H5C_cache_entry_t *search_ptr; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("H5C_insert_entry() functionality (paged aggregation)"); @@ -2776,6 +2842,9 @@ check_insert_entry(unsigned paged) cache_ptr = file_ptr->shared->cache; } + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { insert_entry(file_ptr, entry_type, 0, H5C__NO_FLAGS_SET); @@ -2968,8 +3037,10 @@ check_insert_entry(unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_insert_entry() */ /*------------------------------------------------------------------------- @@ -2986,7 +3057,8 @@ check_insert_entry(unsigned paged) static unsigned check_flush_cache(unsigned paged) { - H5F_t *file_ptr = NULL; + H5F_t *file_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("H5C_flush_cache() functionality (paged aggregation)"); @@ -3007,6 +3079,9 @@ check_flush_cache(unsigned paged) file_ptr = setup_cache((size_t)(2 * 1024 * 1024), (size_t)(1 * 1024 * 1024), paged); } + /* Push API context */ + H5CX_push(&api_ctx); + /* first test behaviour on an empty cache. Can't do much sanity * checking in this case, so simply check the return values. */ @@ -3052,8 +3127,10 @@ check_flush_cache(unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_flush_cache() */ /*------------------------------------------------------------------------- @@ -7574,7 +7651,7 @@ check_flush_cache__flush_op_eviction_test(H5F_t *file_ptr) { struct expected_entry_status *expected = NULL; H5C_t *cache_ptr = file_ptr->shared->cache; - int i; + long i; const int num_variable_entries = 10; const int num_monster_entries = 31; int num_large_entries = 14; @@ -7874,13 +7951,13 @@ check_flush_cache__flush_op_eviction_test(H5F_t *file_ptr) /* Now fill up the cache with other, unrelated entries */ for (i = 0; i < 31; i++) { - protect_entry(file_ptr, MONSTER_ENTRY_TYPE, i); - unprotect_entry(file_ptr, MONSTER_ENTRY_TYPE, i, H5C__DIRTIED_FLAG); + protect_entry(file_ptr, MONSTER_ENTRY_TYPE, (int)i); + unprotect_entry(file_ptr, MONSTER_ENTRY_TYPE, (int)i, H5C__DIRTIED_FLAG); } for (i = 0; i < 1; i++) { - protect_entry(file_ptr, LARGE_ENTRY_TYPE, i); - unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, i, H5C__DIRTIED_FLAG); + protect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i); + unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i, H5C__DIRTIED_FLAG); } /* The cache should now be exactly full */ @@ -8115,13 +8192,13 @@ check_flush_cache__flush_op_eviction_test(H5F_t *file_ptr) * as they are pinned and thus not in the LRU list to begin with. */ for (i = 0; i < 31; i++) { - protect_entry(file_ptr, MONSTER_ENTRY_TYPE, i); - unprotect_entry(file_ptr, MONSTER_ENTRY_TYPE, i, H5C__DIRTIED_FLAG); + protect_entry(file_ptr, MONSTER_ENTRY_TYPE, (int)i); + unprotect_entry(file_ptr, MONSTER_ENTRY_TYPE, (int)i, H5C__DIRTIED_FLAG); } for (i = 0; i < 5; i++) { - protect_entry(file_ptr, LARGE_ENTRY_TYPE, i); - unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, i, H5C__DIRTIED_FLAG); + protect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i); + unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i, H5C__DIRTIED_FLAG); } /* verify cache size */ @@ -8188,8 +8265,8 @@ check_flush_cache__flush_op_eviction_test(H5F_t *file_ptr) num_large_entries = 8; for (i = 5; i < 8; i++) { - protect_entry(file_ptr, LARGE_ENTRY_TYPE, i); - unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, i, H5C__DIRTIED_FLAG); + protect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i); + unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i, H5C__DIRTIED_FLAG); } /* verify cache size */ @@ -8248,8 +8325,8 @@ check_flush_cache__flush_op_eviction_test(H5F_t *file_ptr) num_large_entries = 9; for (i = 8; i < 9; i++) { - protect_entry(file_ptr, LARGE_ENTRY_TYPE, i); - unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, i, H5C__DIRTIED_FLAG); + protect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i); + unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i, H5C__DIRTIED_FLAG); } /* verify cache size */ @@ -8310,8 +8387,8 @@ check_flush_cache__flush_op_eviction_test(H5F_t *file_ptr) num_large_entries = 10; for (i = 9; i < 10; i++) { - protect_entry(file_ptr, LARGE_ENTRY_TYPE, i); - unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, i, H5C__DIRTIED_FLAG); + protect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i); + unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i, H5C__DIRTIED_FLAG); } /* verify cache size */ @@ -8340,13 +8417,13 @@ check_flush_cache__flush_op_eviction_test(H5F_t *file_ptr) * now in the LRU list. */ for (i = 0; i < 31; i++) { - protect_entry(file_ptr, MONSTER_ENTRY_TYPE, i); - unprotect_entry(file_ptr, MONSTER_ENTRY_TYPE, i, H5C__DIRTIED_FLAG); + protect_entry(file_ptr, MONSTER_ENTRY_TYPE, (int)i); + unprotect_entry(file_ptr, MONSTER_ENTRY_TYPE, (int)i, H5C__DIRTIED_FLAG); } for (i = 0; i < 10; i++) { - protect_entry(file_ptr, LARGE_ENTRY_TYPE, i); - unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, i, H5C__DIRTIED_FLAG); + protect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i); + unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i, H5C__DIRTIED_FLAG); } /* verify cache size */ @@ -8496,8 +8573,8 @@ check_flush_cache__flush_op_eviction_test(H5F_t *file_ptr) } for (i = 10; i < 12; i++) { - protect_entry(file_ptr, LARGE_ENTRY_TYPE, i); - unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, i, H5C__DIRTIED_FLAG); + protect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i); + unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i, H5C__DIRTIED_FLAG); } /* verify cache size */ @@ -8548,23 +8625,23 @@ check_flush_cache__flush_op_eviction_test(H5F_t *file_ptr) entry_ptr->destroyed = false; for (i = 1; i < num_monster_entries; i++) { - protect_entry(file_ptr, MONSTER_ENTRY_TYPE, i); - unprotect_entry(file_ptr, MONSTER_ENTRY_TYPE, i, H5C__DIRTIED_FLAG); + protect_entry(file_ptr, MONSTER_ENTRY_TYPE, (int)i); + unprotect_entry(file_ptr, MONSTER_ENTRY_TYPE, (int)i, H5C__DIRTIED_FLAG); } for (i = 0; i < num_large_entries; i++) { - protect_entry(file_ptr, LARGE_ENTRY_TYPE, i); - unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, i, H5C__DIRTIED_FLAG); + protect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i); + unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i, H5C__DIRTIED_FLAG); } for (i = 0; i < num_monster_entries; i++) { - protect_entry(file_ptr, MONSTER_ENTRY_TYPE, i); - unprotect_entry(file_ptr, MONSTER_ENTRY_TYPE, i, H5C__DIRTIED_FLAG); + protect_entry(file_ptr, MONSTER_ENTRY_TYPE, (int)i); + unprotect_entry(file_ptr, MONSTER_ENTRY_TYPE, (int)i, H5C__DIRTIED_FLAG); } for (i = 0; i < num_large_entries; i++) { - protect_entry(file_ptr, LARGE_ENTRY_TYPE, i); - unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, i, H5C__DIRTIED_FLAG); + protect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i); + unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i, H5C__DIRTIED_FLAG); } /* update the expected array to mark all these entries dirty again. */ @@ -8669,8 +8746,8 @@ check_flush_cache__flush_op_eviction_test(H5F_t *file_ptr) } for (i = 12; i < 14; i++) { - protect_entry(file_ptr, LARGE_ENTRY_TYPE, i); - unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, i, H5C__DIRTIED_FLAG); + protect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i); + unprotect_entry(file_ptr, LARGE_ENTRY_TYPE, (int)i, H5C__DIRTIED_FLAG); } /* verify cache size */ @@ -9500,6 +9577,7 @@ check_get_entry_status(unsigned paged) H5F_t *file_ptr = NULL; test_entry_t *base_addr = NULL; test_entry_t *entry_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("H5C_get_entry_status() functionality (paged aggregation)"); @@ -9526,6 +9604,9 @@ check_get_entry_status(unsigned paged) } } + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { /* entry not in cache -- only in_cache should be touched by @@ -9688,8 +9769,10 @@ check_get_entry_status(unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_get_entry_status() */ /*------------------------------------------------------------------------- @@ -9715,6 +9798,7 @@ check_expunge_entry(unsigned paged) H5F_t *file_ptr = NULL; test_entry_t *base_addr; test_entry_t *entry_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("H5C_expunge_entry() functionality (paged aggregation)"); @@ -9733,6 +9817,9 @@ check_expunge_entry(unsigned paged) entry_ptr = &(base_addr[0]); } + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { /* entry not in cache -- only in_cache should be touched by @@ -9963,8 +10050,10 @@ check_expunge_entry(unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_expunge_entry() */ /*------------------------------------------------------------------------- @@ -9985,6 +10074,7 @@ check_multiple_read_protect(unsigned paged) H5C_t *cache_ptr = NULL; #endif /* H5C_COLLECT_CACHE_STATS */ test_entry_t *entry_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("multiple read only protects on a single entry (paged aggr)"); @@ -10033,6 +10123,9 @@ check_multiple_read_protect(unsigned paged) } } + /* Push API context */ + H5CX_push(&api_ctx); + #if H5C_COLLECT_CACHE_STATS if ((cache_ptr->write_protects[0] != 0) || (cache_ptr->read_protects[0] != 0) || (cache_ptr->max_read_protects[0] != 0)) { @@ -10347,8 +10440,10 @@ check_multiple_read_protect(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_multiple_read_protect() */ /*------------------------------------------------------------------------- @@ -10386,6 +10481,7 @@ check_move_entry(unsigned paged) /* bool is_pinned = */ true, /* bool is_protected = */ true}, }; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("H5C_move_entry() functionality (paged aggregation)"); @@ -10426,6 +10522,9 @@ check_move_entry(unsigned paged) file_ptr = setup_cache((size_t)(2 * 1024 * 1024), (size_t)(1 * 1024 * 1024), paged); } + /* Push API context */ + H5CX_push(&api_ctx); + u = 0; while (pass && (u < NELMTS(test_specs))) { check_move_entry__run_test(file_ptr, u, &(test_specs[u])); @@ -10443,6 +10542,9 @@ check_move_entry(unsigned paged) if (!pass) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_move_entry() */ @@ -10613,6 +10715,7 @@ check_pin_protected_entry(unsigned paged) H5F_t *file_ptr = NULL; test_entry_t *base_addr; test_entry_t *entry_ptr; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("H5C_pin_protected_entry() functionality (paged aggregation)"); @@ -10639,6 +10742,9 @@ check_pin_protected_entry(unsigned paged) } } + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { protect_entry(file_ptr, 0, 0); @@ -10688,8 +10794,10 @@ check_pin_protected_entry(unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_pin_protected_entry() */ /*------------------------------------------------------------------------- @@ -10718,6 +10826,7 @@ check_resize_entry(unsigned paged) H5C_t *cache_ptr = NULL; test_entry_t *base_addr; test_entry_t *entry_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("entry resize functionality (paged aggregation)"); @@ -10777,6 +10886,9 @@ check_resize_entry(unsigned paged) } } + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { if ((cache_ptr->index_len != 0) || (cache_ptr->index_size != 0) || (cache_ptr->slist_len != 0) || @@ -11547,8 +11659,10 @@ check_resize_entry(unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_resize_entry() */ /*------------------------------------------------------------------------- @@ -11576,6 +11690,7 @@ check_evictions_enabled(unsigned paged) H5C_t *cache_ptr = NULL; test_entry_t *base_addr = NULL; test_entry_t *entry_ptr; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("evictions enabled/disabled functionality (paged aggregation)"); @@ -11641,6 +11756,9 @@ check_evictions_enabled(unsigned paged) } } + /* Push API context */ + H5CX_push(&api_ctx); + if (show_progress) /* 2 */ fprintf(stdout, "%s() - %0d -- pass = %d\n", __func__, mile_stone++, (int)pass); @@ -12188,8 +12306,10 @@ check_evictions_enabled(unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_evictions_enabled() */ /*------------------------------------------------------------------------- @@ -12206,8 +12326,9 @@ check_evictions_enabled(unsigned paged) static unsigned check_flush_protected_err(unsigned paged) { - H5F_t *file_ptr = NULL; - H5C_t *cache_ptr = NULL; + H5F_t *file_ptr = NULL; + H5C_t *cache_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("flush cache with protected entry error (paged aggregation)"); @@ -12221,49 +12342,47 @@ check_flush_protected_err(unsigned paged) * succeed. */ - if (pass) { - - reset_entries(); - - file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); - - if (pass) { + reset_entries(); + file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); + if (pass) + cache_ptr = file_ptr->shared->cache; - cache_ptr = file_ptr->shared->cache; - } + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) protect_entry(file_ptr, 0, 0); - /* enable slist prior to flush */ - if ((pass) && (H5C_set_slist_enabled(cache_ptr, true, true) < 0)) { + /* enable slist prior to flush */ + if ((pass) && (H5C_set_slist_enabled(cache_ptr, true, true) < 0)) { - pass = false; - failure_mssg = "unable to enable slist prior to flush.\n"; - } + pass = false; + failure_mssg = "unable to enable slist prior to flush.\n"; + } - if ((pass) && (H5C_flush_cache(file_ptr, H5C__NO_FLAGS_SET) >= 0)) { + if ((pass) && (H5C_flush_cache(file_ptr, H5C__NO_FLAGS_SET) >= 0)) { - pass = false; - failure_mssg = "flush succeeded on cache with protected entry.\n"; - } + pass = false; + failure_mssg = "flush succeeded on cache with protected entry.\n"; + } - /* disable the slist after the flush */ - if ((pass) && (H5C_set_slist_enabled(cache_ptr, false, false) < 0)) { + /* disable the slist after the flush */ + if ((pass) && (H5C_set_slist_enabled(cache_ptr, false, false) < 0)) { - pass = false; - failure_mssg = "unable to disable slist after flush.\n"; - } + pass = false; + failure_mssg = "unable to disable slist after flush.\n"; + } + if (pass) unprotect_entry(file_ptr, 0, 0, H5C__DIRTIED_FLAG); - if (pass) { - - H5C_FLUSH_CACHE(file_ptr, H5C__NO_FLAGS_SET, "flush failed after unprotect.\n") - } + if (pass) { - takedown_cache(file_ptr, false, false); + H5C_FLUSH_CACHE(file_ptr, H5C__NO_FLAGS_SET, "flush failed after unprotect.\n") } + takedown_cache(file_ptr, false, false); + if (pass) { PASSED(); } @@ -12276,8 +12395,10 @@ check_flush_protected_err(unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_flush_protected_err() */ /*------------------------------------------------------------------------- @@ -12294,7 +12415,8 @@ check_flush_protected_err(unsigned paged) static unsigned check_destroy_pinned_err(unsigned paged) { - H5F_t *file_ptr = NULL; + H5F_t *file_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("destroy cache with permanently pinned entry error (pgd aggr)"); @@ -12312,7 +12434,12 @@ check_destroy_pinned_err(unsigned paged) reset_entries(); file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); + } + + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { protect_entry(file_ptr, 0, 0); unprotect_entry(file_ptr, 0, 0, H5C__PIN_ENTRY_FLAG); @@ -12358,8 +12485,10 @@ check_destroy_pinned_err(unsigned paged) if (!pass) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_destroy_pinned_err() */ /*------------------------------------------------------------------------- @@ -12376,7 +12505,8 @@ check_destroy_pinned_err(unsigned paged) static unsigned check_destroy_protected_err(unsigned paged) { - H5F_t *file_ptr = NULL; + H5F_t *file_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("destroy cache with protected entry error (paged aggregation)"); @@ -12395,7 +12525,12 @@ check_destroy_protected_err(unsigned paged) reset_entries(); file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); + } + + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { /* Note: normally this call would go just before the series of * flushes prior to file close -- in particular, all entries * should be unprotected when this call is made. @@ -12449,8 +12584,10 @@ check_destroy_protected_err(unsigned paged) if (!pass) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_destroy_protected_err() */ /*------------------------------------------------------------------------- @@ -12471,6 +12608,7 @@ check_duplicate_insert_err(unsigned paged) H5F_t *file_ptr = NULL; test_entry_t *base_addr; test_entry_t *entry_ptr; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("duplicate entry insertion error (paged aggregation)"); @@ -12489,7 +12627,12 @@ check_duplicate_insert_err(unsigned paged) reset_entries(); file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); + } + /* Push API context */ + H5CX_push(&api_ctx); + + if (pass) { protect_entry(file_ptr, 0, 0); if (pass) { @@ -12526,8 +12669,10 @@ check_duplicate_insert_err(unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_duplicate_insert_err() */ /*------------------------------------------------------------------------- @@ -12547,6 +12692,7 @@ check_double_pin_err(unsigned paged) herr_t result; H5F_t *file_ptr = NULL; test_entry_t *entry_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("pin a pinned entry error (paged aggregation)"); @@ -12566,7 +12712,12 @@ check_double_pin_err(unsigned paged) reset_entries(); file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); + } + + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { protect_entry(file_ptr, 0, 0); unprotect_entry(file_ptr, 0, 0, H5C__PIN_ENTRY_FLAG); @@ -12608,8 +12759,10 @@ check_double_pin_err(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_double_pin_err() */ /*------------------------------------------------------------------------- @@ -12629,6 +12782,7 @@ check_double_unpin_err(unsigned paged) herr_t result; H5F_t *file_ptr = NULL; test_entry_t *entry_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("unpin an unpinned entry error (paged aggregation)"); @@ -12650,7 +12804,12 @@ check_double_unpin_err(unsigned paged) reset_entries(); file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); + } + + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { protect_entry(file_ptr, 0, 0); entry_ptr = &((entries[0])[0]); @@ -12699,8 +12858,10 @@ check_double_unpin_err(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_double_unpin_err() */ /*------------------------------------------------------------------------- @@ -12720,6 +12881,7 @@ check_pin_entry_errs(unsigned paged) herr_t result; H5F_t *file_ptr = NULL; test_entry_t *entry_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("pin entry related errors (paged aggregation)"); @@ -12745,7 +12907,12 @@ check_pin_entry_errs(unsigned paged) reset_entries(); file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); + } + + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { protect_entry(file_ptr, 0, 0); unprotect_entry(file_ptr, 0, 0, H5C__NO_FLAGS_SET); @@ -12804,8 +12971,10 @@ check_pin_entry_errs(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_pin_entry_errs() */ /*------------------------------------------------------------------------- @@ -12825,6 +12994,7 @@ check_double_protect_err(unsigned paged) H5F_t *file_ptr = NULL; test_entry_t *entry_ptr = NULL; H5C_cache_entry_t *cache_entry_ptr; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("protect a protected entry error (paged aggregation)"); @@ -12843,7 +13013,12 @@ check_double_protect_err(unsigned paged) reset_entries(); file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); + } + /* Push API context */ + H5CX_push(&api_ctx); + + if (pass) { protect_entry(file_ptr, 0, 0); entry_ptr = &((entries[0])[0]); @@ -12883,8 +13058,10 @@ check_double_protect_err(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_double_protect_err() */ /*------------------------------------------------------------------------- @@ -12904,6 +13081,7 @@ check_double_unprotect_err(unsigned paged) herr_t result; H5F_t *file_ptr = NULL; test_entry_t *entry_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("unprotect an unprotected entry error (paged aggregation)"); @@ -12922,7 +13100,12 @@ check_double_unprotect_err(unsigned paged) reset_entries(); file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); + } + + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { protect_entry(file_ptr, 0, 0); unprotect_entry(file_ptr, 0, 0, H5C__NO_FLAGS_SET); @@ -12958,8 +13141,10 @@ check_double_unprotect_err(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_double_unprotect_err() */ /*------------------------------------------------------------------------- @@ -12982,6 +13167,7 @@ check_mark_entry_dirty_errs(unsigned paged) herr_t result; H5F_t *file_ptr = NULL; test_entry_t *entry_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("mark entry dirty related errors (paged aggregation)"); @@ -13001,7 +13187,12 @@ check_mark_entry_dirty_errs(unsigned paged) reset_entries(); file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); + } + + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { protect_entry(file_ptr, 0, 0); unprotect_entry(file_ptr, 0, 0, H5C__NO_FLAGS_SET); @@ -13037,8 +13228,10 @@ check_mark_entry_dirty_errs(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_mark_entry_dirty_errs() */ /*------------------------------------------------------------------------- @@ -13058,6 +13251,7 @@ check_expunge_entry_errs(unsigned paged) herr_t result; H5F_t *file_ptr = NULL; test_entry_t *entry_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("expunge entry related errors (paged aggregation)"); @@ -13083,7 +13277,12 @@ check_expunge_entry_errs(unsigned paged) reset_entries(); file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); + } + /* Push API context */ + H5CX_push(&api_ctx); + + if (pass) { entry_ptr = &((entries[0])[0]); protect_entry(file_ptr, 0, 0); @@ -13147,8 +13346,10 @@ check_expunge_entry_errs(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_expunge_entry_errs() */ /*------------------------------------------------------------------------- @@ -13171,6 +13372,7 @@ check_move_entry_errs(unsigned paged) test_entry_t *entry_0_0_ptr = NULL; test_entry_t *entry_0_1_ptr = NULL; test_entry_t *entry_1_0_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("move entry related errors (paged aggregation)"); @@ -13189,7 +13391,12 @@ check_move_entry_errs(unsigned paged) file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); cache_ptr = file_ptr->shared->cache; + } + /* Push API context */ + H5CX_push(&api_ctx); + + if (pass) { insert_entry(file_ptr, 0, 0, H5C__NO_FLAGS_SET); insert_entry(file_ptr, 0, 1, H5C__NO_FLAGS_SET); insert_entry(file_ptr, 1, 0, H5C__NO_FLAGS_SET); @@ -13220,6 +13427,9 @@ check_move_entry_errs(unsigned paged) if (pass) takedown_cache(file_ptr, false, false); + /* Pop API context */ + H5CX_pop(false); + /* Allocate a cache, protect an entry R/O, and then call * H5C_move_entry() to move it -- this should fail. * @@ -13232,7 +13442,12 @@ check_move_entry_errs(unsigned paged) file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); cache_ptr = file_ptr->shared->cache; + } + + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { insert_entry(file_ptr, 0, 0, H5C__NO_FLAGS_SET); protect_entry_ro(file_ptr, 0, 0); @@ -13261,6 +13476,9 @@ check_move_entry_errs(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } /* end else */ + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_move_entry_errs() */ @@ -13281,6 +13499,7 @@ check_resize_entry_errs(unsigned paged) herr_t result; H5F_t *file_ptr = NULL; test_entry_t *entry_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("resize entry related errors (paged aggregation)"); @@ -13305,7 +13524,12 @@ check_resize_entry_errs(unsigned paged) reset_entries(); file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); + } + + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { entry_ptr = &((entries[0])[0]); protect_entry(file_ptr, 0, 0); @@ -13358,8 +13582,10 @@ check_resize_entry_errs(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_resize_entry_errs() */ /*------------------------------------------------------------------------- @@ -13379,6 +13605,7 @@ check_unprotect_ro_dirty_err(unsigned paged) herr_t result; H5F_t *file_ptr = NULL; test_entry_t *entry_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("unprotect a read only entry dirty error (paged aggregation)"); @@ -13397,7 +13624,12 @@ check_unprotect_ro_dirty_err(unsigned paged) reset_entries(); file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); + } + /* Push API context */ + H5CX_push(&api_ctx); + + if (pass) { protect_entry_ro(file_ptr, 0, 0); entry_ptr = &((entries[0])[0]); @@ -13424,6 +13656,9 @@ check_unprotect_ro_dirty_err(unsigned paged) takedown_cache(file_ptr, false, false); } + /* Pop API context */ + H5CX_pop(false); + /* allocate a another cache, protect an entry read only twice, and * then unprotect it with the dirtied flag set. This should fail. * Unprotect it with no flags set twice and then destroy the cache. @@ -13435,7 +13670,12 @@ check_unprotect_ro_dirty_err(unsigned paged) reset_entries(); file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); + } + + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { protect_entry_ro(file_ptr, 0, 0); protect_entry_ro(file_ptr, 0, 0); @@ -13476,8 +13716,10 @@ check_unprotect_ro_dirty_err(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_unprotect_ro_dirty_err() */ /*------------------------------------------------------------------------- @@ -13497,6 +13739,7 @@ check_protect_ro_rw_err(unsigned paged) H5F_t *file_ptr = NULL; test_entry_t *entry_ptr = NULL; void *thing_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("protect a read only entry rw error (paged aggregation)"); @@ -13516,7 +13759,12 @@ check_protect_ro_rw_err(unsigned paged) reset_entries(); file_ptr = setup_cache((size_t)(2 * 1024), (size_t)(1 * 1024), paged); + } + + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { protect_entry_ro(file_ptr, 0, 0); entry_ptr = &((entries[0])[0]); @@ -13556,8 +13804,10 @@ check_protect_ro_rw_err(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_protect_ro_rw_err() */ /*------------------------------------------------------------------------- @@ -13580,6 +13830,7 @@ check_protect_retries(unsigned paged) H5C_cache_entry_t *cache_entry_ptr = NULL; int32_t type; int32_t idx; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("protect an entry to verify retries (paged aggregation)"); @@ -13600,6 +13851,9 @@ check_protect_retries(unsigned paged) file_ptr->shared->retries_nbins = 1; } + /* Push API context */ + H5CX_push(&api_ctx); + /* Test only for this type which has a speculative load */ type = VARIABLE_ENTRY_TYPE; idx = 0; @@ -13683,8 +13937,10 @@ check_protect_retries(unsigned paged) fprintf(stdout, "%s: failure_msg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_protect_retries() */ /*------------------------------------------------------------------------- @@ -13701,10 +13957,11 @@ check_protect_retries(unsigned paged) static unsigned check_check_evictions_enabled_err(unsigned paged) { - herr_t result; - bool evictions_enabled; - H5F_t *file_ptr = NULL; - H5C_t *cache_ptr = NULL; + herr_t result; + bool evictions_enabled; + H5F_t *file_ptr = NULL; + H5C_t *cache_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("get/set evictions enabled errors (paged aggregation)"); @@ -13734,6 +13991,9 @@ check_check_evictions_enabled_err(unsigned paged) cache_ptr = file_ptr->shared->cache; } + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { result = H5C_get_evictions_enabled(NULL, &evictions_enabled); @@ -13816,8 +14076,10 @@ check_check_evictions_enabled_err(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_evictions_enabled_err() */ /*------------------------------------------------------------------------- @@ -13896,6 +14158,7 @@ check_auto_cache_resize(bool cork_ageout, unsigned paged) /* bool apply_empty_reserve = */ true, /* double empty_reserve = */ 0.05}; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("automatic cache resizing (paged aggregation)"); @@ -13919,6 +14182,9 @@ check_auto_cache_resize(bool cork_ageout, unsigned paged) cache_ptr = file_ptr->shared->cache; } + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { result = H5C_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl); if (result != SUCCEED) { @@ -17678,6 +17944,9 @@ check_auto_cache_resize(bool cork_ageout, unsigned paged) if (!pass) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_auto_cache_resize() */ @@ -17742,6 +18011,7 @@ check_auto_cache_resize_disable(unsigned paged) /* bool apply_empty_reserve = */ true, /* double empty_reserve = */ 0.05}; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("automatic cache resize disable (paged aggregation)"); @@ -17775,6 +18045,9 @@ check_auto_cache_resize_disable(unsigned paged) } } + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { result = H5C_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl); @@ -20270,8 +20543,10 @@ check_auto_cache_resize_disable(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_auto_cache_resize_disable() */ /*------------------------------------------------------------------------- @@ -20336,6 +20611,7 @@ check_auto_cache_resize_epoch_markers(unsigned paged) /* bool apply_empty_reserve = */ true, /* double empty_reserve = */ 0.05}; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("automatic cache resize epoch marker management (paged aggr)"); @@ -20355,6 +20631,9 @@ check_auto_cache_resize_epoch_markers(unsigned paged) cache_ptr = file_ptr->shared->cache; } + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { result = H5C_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl); @@ -20952,8 +21231,10 @@ check_auto_cache_resize_epoch_markers(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_auto_cache_resize_epoch_markers() */ /*------------------------------------------------------------------------- @@ -21017,6 +21298,7 @@ check_auto_cache_resize_input_errs(unsigned paged) H5C_auto_size_ctl_t invalid_auto_size_ctl; H5C_auto_size_ctl_t test_auto_size_ctl; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("automatic cache resize input errors (paged aggregation)"); @@ -21039,6 +21321,9 @@ check_auto_cache_resize_input_errs(unsigned paged) cache_ptr = file_ptr->shared->cache; } + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { result = H5C_set_cache_auto_resize_config(cache_ptr, &ref_auto_size_ctl); @@ -23163,8 +23448,10 @@ check_auto_cache_resize_input_errs(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_auto_cache_resize_input_errs() */ /*------------------------------------------------------------------------- @@ -23235,6 +23522,7 @@ check_auto_cache_resize_aux_fcns(unsigned paged) /* bool apply_empty_reserve = */ true, /* double empty_reserve = */ 0.5}; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("automatic cache resize auxiliary functions (paged aggregation)"); @@ -23254,6 +23542,9 @@ check_auto_cache_resize_aux_fcns(unsigned paged) cache_ptr = file_ptr->shared->cache; } + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { result = H5C_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl); @@ -23649,8 +23940,10 @@ check_auto_cache_resize_aux_fcns(unsigned paged) fprintf(stdout, "%s: failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_auto_cache_resize_aux_fcns() */ /*------------------------------------------------------------------------- @@ -23687,6 +23980,7 @@ check_metadata_blizzard_absence(bool fill_via_insertion, unsigned paged) int32_t checkpoint = 0; int32_t entry_idx = 0; int32_t i; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ /* Expected deserialized status of entries depends on how they get into * the cache. Insertions = not deserialized, protect/unprotect = deserialized. @@ -23766,6 +24060,9 @@ check_metadata_blizzard_absence(bool fill_via_insertion, unsigned paged) cache_ptr = file_ptr->shared->cache; } + /* Push API context */ + H5CX_push(&api_ctx); + if (show_progress) /* 1 */ fprintf(stdout, "%s: check point %d -- pass %d\n", __func__, checkpoint++, pass); @@ -24378,8 +24675,10 @@ check_metadata_blizzard_absence(bool fill_via_insertion, unsigned paged) H5_FAILED(); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_metadata_blizzard_absence() */ /*------------------------------------------------------------------------- @@ -24413,6 +24712,7 @@ check_flush_deps(unsigned paged) { PICO_ENTRY_TYPE, 4, PICO_ENTRY_SIZE, false, true, false, false, false, false, false, false, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, 0, 0, 0, -1, false} }; /* clang-format on */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("flush dependencies (paged aggregation)"); @@ -24433,6 +24733,9 @@ check_flush_deps(unsigned paged) if (!pass) CACHE_ERROR("setup_cache failed") + /* Push API context */ + H5CX_push(&api_ctx); + /* Insert entries to work with into the cache */ for (u = 0; u < 5; u++) { insert_entry(file_ptr, entry_type, (int32_t)u, H5C__NO_FLAGS_SET); @@ -26299,6 +26602,9 @@ check_flush_deps(unsigned paged) fprintf(stdout, "%s.\n", failure_mssg); } /* end else */ + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_flush_deps() */ @@ -26315,9 +26621,10 @@ check_flush_deps(unsigned paged) static unsigned check_flush_deps_err(unsigned paged) { - H5F_t *file_ptr = NULL; /* File for this test */ - int entry_type = PICO_ENTRY_TYPE; /* Use very small entry size (size of entries doesn't matter) */ - unsigned test_count; /* Test iteration variable */ + H5F_t *file_ptr = NULL; /* File for this test */ + int entry_type = PICO_ENTRY_TYPE; /* Use very small entry size (size of entries doesn't matter) */ + unsigned test_count; /* Test iteration variable */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("flush dependency errors (paged aggregation)"); @@ -26339,6 +26646,9 @@ check_flush_deps_err(unsigned paged) if (!pass) CACHE_ERROR("setup_cache failed") + /* Push API context */ + H5CX_push(&api_ctx); + /* Insert entries to work with into the cache */ for (u = 0; u < 10; u++) { insert_entry(file_ptr, entry_type, (int32_t)u, H5C__NO_FLAGS_SET); @@ -26549,11 +26859,17 @@ check_flush_deps_err(unsigned paged) if (!pass) CACHE_ERROR("takedown_cache failed") file_ptr = NULL; + + /* Pop API context */ + H5CX_pop(false); } /* end for */ done: - if (file_ptr) + if (file_ptr) { takedown_cache(file_ptr, false, false); + /* Pop API context */ + H5CX_pop(false); + } if (pass) PASSED(); @@ -26596,6 +26912,7 @@ check_flush_deps_order(unsigned paged) { PICO_ENTRY_TYPE, 4, PICO_ENTRY_SIZE, false, true, false, false, false, false, false, false, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, 0, 0, 0, -1, false} }; /* clang-format on */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("flush dependencies flush order (paged aggregation)"); @@ -26615,6 +26932,9 @@ check_flush_deps_order(unsigned paged) if (!pass) CACHE_ERROR("setup_cache failed") + /* Push API context */ + H5CX_push(&api_ctx); + /* Insert entries to work with into the cache */ for (u = 0; u < 5; u++) { insert_entry(file_ptr, entry_type, (int32_t)u, H5C__NO_FLAGS_SET); @@ -29289,6 +29609,9 @@ check_flush_deps_order(unsigned paged) fprintf(stdout, "%s.\n", failure_mssg); } /* end else */ + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_flush_deps_order() */ @@ -29323,6 +29646,7 @@ check_notify_cb(unsigned paged) { NOTIFY_ENTRY_TYPE, 4, NOTIFY_ENTRY_SIZE, false, true, false, false, false, false, false, false, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, 0, 0, 0, -1, false} }; /* clang-format on */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("'notify' callback (paged)"); @@ -29345,6 +29669,9 @@ check_notify_cb(unsigned paged) if (!pass) CACHE_ERROR("setup_cache failed") + /* Push API context */ + H5CX_push(&api_ctx); + /* Insert entries to work with into the cache */ for (u = 0; u < 5; u++) { insert_entry(file_ptr, entry_type, (int32_t)u, H5C__NO_FLAGS_SET); @@ -29502,6 +29829,9 @@ check_notify_cb(unsigned paged) fprintf(stdout, "%s.\n", failure_mssg); } /* end else */ + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_notify_cb() */ @@ -29530,6 +29860,7 @@ check_metadata_cork(bool fill_via_insertion, unsigned paged) int32_t checkpoint = 0; int32_t entry_idx = 0; int32_t i; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ /* Expected deserialized status of entries depends on how they get into * the cache. Insertions = not deserialized, protect/unprotect = deserialized. @@ -29601,6 +29932,9 @@ check_metadata_cork(bool fill_via_insertion, unsigned paged) cache_ptr = file_ptr->shared->cache; } + /* Push API context */ + H5CX_push(&api_ctx); + /* Cork the cache entry type */ cork_entry_type(file_ptr, entry_type); @@ -30089,8 +30423,10 @@ check_metadata_cork(bool fill_via_insertion, unsigned paged) H5_FAILED(); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_metadata_cork() */ /*------------------------------------------------------------------------- @@ -30119,7 +30455,8 @@ check_metadata_cork(bool fill_via_insertion, unsigned paged) static unsigned check_entry_deletions_during_scans(unsigned paged) { - H5F_t *file_ptr = NULL; + H5F_t *file_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (paged) TESTING("entry deletion during list scan detection and adaption (par)"); @@ -30140,6 +30477,9 @@ check_entry_deletions_during_scans(unsigned paged) file_ptr = setup_cache((size_t)(2 * 1024 * 1024), (size_t)(1 * 1024 * 1024), paged); } + /* Push API context */ + H5CX_push(&api_ctx); + /* run the tests. This set of tests is somewhat eclectic, as * we are trying to test all locations where the deletion of * an entry from the cache as a side effect of the fluch of @@ -30180,8 +30520,10 @@ check_entry_deletions_during_scans(unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } - return (unsigned)!pass; + /* Pop API context */ + H5CX_pop(false); + return (unsigned)!pass; } /* check_entry_deletions_during_scans() */ /*------------------------------------------------------------------------- @@ -31537,8 +31879,8 @@ check_stats(unsigned paged) { #if H5C_COLLECT_CACHE_STATS - - H5F_t *file_ptr = NULL; + H5F_t *file_ptr = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ #endif /* H5C_COLLECT_CACHE_STATS */ @@ -31555,6 +31897,9 @@ check_stats(unsigned paged) file_ptr = setup_cache((size_t)(2 * 1024 * 1024), (size_t)(1 * 1024 * 1024), paged); + /* Push API context */ + H5CX_push(&api_ctx); + if (pass) { check_stats__smoke_check_1(file_ptr); @@ -31577,6 +31922,9 @@ check_stats(unsigned paged) fprintf(stdout, "%s(): failure_mssg = \"%s\".\n", __func__, failure_mssg); } + /* Pop API context */ + H5CX_pop(false); + #else /* H5C_COLLECT_CACHE_STATS */ SKIPPED(); @@ -31586,7 +31934,6 @@ check_stats(unsigned paged) #endif /* H5C_COLLECT_CACHE_STATS */ return (unsigned)!pass; - } /* check_stats() */ /*------------------------------------------------------------------------- @@ -32022,17 +32369,18 @@ check_write_permitted(const H5F_t H5_ATTR_UNUSED *f, bool *write_permitted_ptr) H5F_t * setup_cache(size_t max_cache_size, size_t min_clean_size, unsigned paged) { - char filename[512]; - bool show_progress = false; - bool verbose = true; - int mile_stone = 1; - hid_t fid = H5I_INVALID_HID; - H5F_t *file_ptr = NULL; - H5C_t *cache_ptr = NULL; - H5F_t *ret_val = NULL; - haddr_t actual_base_addr; - hid_t fapl_id = H5P_DEFAULT; - hid_t fcpl_id = H5P_DEFAULT; + char filename[512]; + bool show_progress = false; + bool verbose = true; + int mile_stone = 1; + hid_t fid = H5I_INVALID_HID; + H5F_t *file_ptr = NULL; + H5C_t *cache_ptr = NULL; + H5F_t *ret_val = NULL; + haddr_t actual_base_addr; + hid_t fapl_id = H5P_DEFAULT; + hid_t fcpl_id = H5P_DEFAULT; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (show_progress) /* 1 */ fprintf(stdout, "%s() - %0d -- pass = %d\n", __func__, mile_stone++, (int)pass); @@ -32123,7 +32471,7 @@ setup_cache(size_t max_cache_size, size_t min_clean_size, unsigned paged) } /* end if */ /* Push API context */ - H5CX_push(); + H5CX_push(&api_ctx); if (show_progress) /* 4 */ fprintf(stdout, "%s() - %0d -- pass = %d\n", __func__, mile_stone++, (int)pass); @@ -32348,7 +32696,6 @@ takedown_cache(H5F_t *file_ptr, bool dump_stats, bool dump_detailed_stats) } } } - } /* takedown_cache() */ /*------------------------------------------------------------------------- diff --git a/test/cache_common.h b/test/cache_common.h index 61a79b73289..a55ebd8ad22 100644 --- a/test/cache_common.h +++ b/test/cache_common.h @@ -21,6 +21,7 @@ #define H5F_FRIEND /*suppress error about including H5Fpkg */ /* Include library header files */ +#include "H5private.h" #include "H5ACprivate.h" #include "H5MFprivate.h" #include "H5Cpkg.h" diff --git a/test/cache_tagging.c b/test/cache_tagging.c index b6a6396da5e..78bbbee4afe 100644 --- a/test/cache_tagging.c +++ b/test/cache_tagging.c @@ -16,12 +16,12 @@ #define H5F_FRIEND /*suppress error about including H5Fpkg */ #define H5F_TESTING -#include "H5Fpkg.h" #include "h5test.h" #include "cache_common.h" #include "H5CXprivate.h" /* API Contexts */ +#include "H5Fpkg.h" #include "H5HLprivate.h" #include "H5VLnative_private.h" /* Native VOL connector */ @@ -4353,13 +4353,14 @@ check_invalid_tag_application(void) { #ifdef H5C_DO_TAGGING_SANITY_CHECKS /* Variables */ - H5F_t *f = NULL; - hid_t fid = H5I_INVALID_HID; - haddr_t addr; - H5HL_t *lheap = NULL; - hid_t fapl = H5I_INVALID_HID; /* File access prop list */ - bool api_ctx_pushed = false; /* Whether API context pushed */ -#endif /* H5C_DO_TAGGING_SANITY_CHECKS */ + H5F_t *f = NULL; + hid_t fid = H5I_INVALID_HID; + haddr_t addr; + H5HL_t *lheap = NULL; + hid_t fapl = H5I_INVALID_HID; /* File access prop list */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ +#endif /* H5C_DO_TAGGING_SANITY_CHECKS */ /* Testing Macro */ TESTING("failure on invalid tag application"); @@ -4377,7 +4378,7 @@ check_invalid_tag_application(void) TEST_ERROR; /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) TEST_ERROR; api_ctx_pushed = true; diff --git a/test/chunk_info.c b/test/chunk_info.c index 3da2d9d258e..335542c000a 100644 --- a/test/chunk_info.c +++ b/test/chunk_info.c @@ -36,9 +36,9 @@ */ #define H5D_FRIEND #define H5D_TESTING /* to use H5D__ functions */ -#include "H5Dpkg.h" #include "h5test.h" +#include "H5Dpkg.h" #ifdef H5_HAVE_FILTER_DEFLATE #if defined(H5_HAVE_ZLIB_H) && !defined(H5_ZLIB_HEADER) #define H5_ZLIB_HEADER "zlib.h" diff --git a/test/cmpd_dset.c b/test/cmpd_dset.c index 5596c955da5..ec253c5e602 100644 --- a/test/cmpd_dset.c +++ b/test/cmpd_dset.c @@ -13,12 +13,12 @@ /* See H5private.h for how to include headers */ #undef NDEBUG -#define H5T_FRIEND /*suppress error about including H5Tpkg */ -#include "H5Tpkg.h" /*to turn off hardware conversions*/ -#include "H5Tconv_compound.h" -#include "H5Iprivate.h" +#define H5T_FRIEND /*suppress error about including H5Tpkg */ #include "h5test.h" +#include "H5Iprivate.h" +#include "H5Tpkg.h" /*to turn off hardware conversions*/ +#include "H5Tconv_compound.h" static const char *FILENAME[] = {"cmpd_dset", "src_subset", "dst_subset", "select_cmpd_dset", NULL}; diff --git a/test/dsets.c b/test/dsets.c index 4ff2fe625cd..07e653aa2bd 100644 --- a/test/dsets.c +++ b/test/dsets.c @@ -2845,6 +2845,7 @@ test_missing_filter(hid_t file) size_t i, j; /* Local index variables */ herr_t ret; /* Generic return value */ const char *testfile = H5_get_srcdir_filename(FILE_DEFLATE_NAME); /* Corrected test file name */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ bool api_ctx_pushed = false; /* Whether API context pushed */ TESTING("dataset access with missing filter"); @@ -2859,7 +2860,7 @@ test_missing_filter(hid_t file) } /* end if */ /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) FAIL_STACK_ERROR; api_ctx_pushed = true; diff --git a/test/earray.c b/test/earray.c index b7592f26f79..cd97413c225 100644 --- a/test/earray.c +++ b/test/earray.c @@ -2297,6 +2297,7 @@ main(void) earray_iter_type_t curr_iter; /* Current iteration type being worked on */ hid_t fapl = H5I_INVALID_HID; /* File access property list for data files */ unsigned nerrors = 0; /* Cumulative error count */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ bool api_ctx_pushed = false; /* Whether API context pushed */ /* Reset library */ @@ -2307,7 +2308,7 @@ main(void) h5_fixname(FILENAME[0], fapl, filename_g, sizeof(filename_g)); /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) FAIL_STACK_ERROR; api_ctx_pushed = true; diff --git a/test/efc.c b/test/efc.c index 2d8c62682c2..7b6c3447315 100644 --- a/test/efc.c +++ b/test/efc.c @@ -2635,11 +2635,12 @@ test_graph_cycle(void) int main(void) { - unsigned nerrors = 0; /* track errors */ - H5P_genplist_t *plist; /* Property list pointer for FAPL */ - H5VL_connector_prop_t connector_prop; /* Property for VOL connector ID & info */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - int i; /* iterator */ + unsigned nerrors = 0; /* track errors */ + H5P_genplist_t *plist; /* Property list pointer for FAPL */ + H5VL_connector_prop_t connector_prop; /* Property for VOL connector ID & info */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + int i; /* iterator */ /* Test Setup */ puts("Testing the external file cache"); @@ -2662,7 +2663,7 @@ main(void) h5_fixname(FILENAME[5], fapl_id, filename[5], PATH_MAX); /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) FAIL_STACK_ERROR; api_ctx_pushed = true; diff --git a/test/farray.c b/test/farray.c index 06ff7e524c0..5751ffca251 100644 --- a/test/farray.c +++ b/test/farray.c @@ -1628,6 +1628,7 @@ main(void) farray_iter_type_t curr_iter; /* Current iteration type being worked on */ hid_t fapl = H5I_INVALID_HID; /* File access property list for data files */ unsigned nerrors = 0; /* Cumulative error count */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ bool api_ctx_pushed = false; /* Whether API context pushed */ /* Reset library */ @@ -1638,7 +1639,7 @@ main(void) h5_fixname(FILENAME[0], fapl, filename_g, sizeof(filename_g)); /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) FAIL_STACK_ERROR; api_ctx_pushed = true; diff --git a/test/fheap.c b/test/fheap.c index 9f02d9f48e3..bdca2c7db2c 100644 --- a/test/fheap.c +++ b/test/fheap.c @@ -15958,8 +15958,9 @@ main(void) unsigned nerrors = 0; /* Cumulative error count */ unsigned num_pb_fs = 1; /* The number of settings to test for page buffering and file space handling */ const char *driver_name; /* Environment variable */ - bool contig_addr_vfd; /* Whether VFD used has a contiguous address space */ - bool api_ctx_pushed = false; /* Whether API context pushed */ + bool contig_addr_vfd; /* Whether VFD used has a contiguous address space */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ int test_express; /* Don't run this test using certain file drivers */ @@ -15999,7 +16000,7 @@ main(void) init_large_cparam(&large_cparam); /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) FAIL_STACK_ERROR; api_ctx_pushed = true; diff --git a/test/freespace.c b/test/freespace.c index 278d811cc22..ff8f8cddd88 100644 --- a/test/freespace.c +++ b/test/freespace.c @@ -2874,9 +2874,10 @@ test_fs_sect_iterate(hid_t fapl) int main(void) { - hid_t fapl = H5I_INVALID_HID; /* File access property list for data files */ - unsigned nerrors = 0; /* Cumulative error count */ - bool api_ctx_pushed = false; /* Whether API context pushed */ + hid_t fapl = H5I_INVALID_HID; /* File access property list for data files */ + unsigned nerrors = 0; /* Cumulative error count */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ h5_test_init(); @@ -2886,7 +2887,7 @@ main(void) } /* end if */ /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) FAIL_STACK_ERROR; api_ctx_pushed = true; diff --git a/test/gheap.c b/test/gheap.c index 9cd94ebb046..46035e04d25 100644 --- a/test/gheap.c +++ b/test/gheap.c @@ -557,16 +557,17 @@ test_ooo_indices(hid_t fapl) int main(void) { - int nerrors = 0; - hid_t fapl_id = H5I_INVALID_HID; - bool api_ctx_pushed = false; /* Whether API context pushed */ + int nerrors = 0; + hid_t fapl_id = H5I_INVALID_HID; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ h5_test_init(); if ((fapl_id = h5_fileaccess()) < 0) goto error; /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) FAIL_STACK_ERROR; api_ctx_pushed = true; diff --git a/test/lheap.c b/test/lheap.c index 7cdbc09c5f7..b8e613c218b 100644 --- a/test/lheap.c +++ b/test/lheap.c @@ -41,17 +41,18 @@ static const char *FILENAME[] = {"lheap", NULL}; int main(void) { - hid_t fapl = H5P_DEFAULT; /* file access properties */ - hid_t file = H5I_INVALID_HID; /* hdf5 file */ - H5F_t *f = NULL; /* hdf5 file pointer */ - char filename[1024]; /* file name */ - haddr_t heap_addr; /* local heap address */ - H5HL_t *heap = NULL; /* local heap */ - size_t obj[NOBJS]; /* offsets within the heap */ - int i, j; /* miscellaneous counters */ - char buf[1024]; /* the value to store */ - const char *s; /* value to read */ - bool api_ctx_pushed = false; /* Whether API context pushed */ + hid_t fapl = H5P_DEFAULT; /* file access properties */ + hid_t file = H5I_INVALID_HID; /* hdf5 file */ + H5F_t *f = NULL; /* hdf5 file pointer */ + char filename[1024]; /* file name */ + haddr_t heap_addr; /* local heap address */ + H5HL_t *heap = NULL; /* local heap */ + size_t obj[NOBJS]; /* offsets within the heap */ + int i, j; /* miscellaneous counters */ + char buf[1024]; /* the value to store */ + const char *s; /* value to read */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ bool driver_is_default_compatible; /* Reset library */ @@ -59,7 +60,7 @@ main(void) fapl = h5_fileaccess(); /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) FAIL_STACK_ERROR; api_ctx_pushed = true; diff --git a/test/mf.c b/test/mf.c index b4c5845e66f..74dca0a4873 100644 --- a/test/mf.c +++ b/test/mf.c @@ -9126,12 +9126,13 @@ test_page_alignment(const char *driver_name, hid_t fapl) int main(void) { - hid_t fapl = H5I_INVALID_HID; /* File access property list for data files */ - hid_t new_fapl = H5I_INVALID_HID; /* File access property list for alignment & aggr setting */ - unsigned nerrors = 0; /* Cumulative error count */ - test_type_t curr_test; /* Current test being worked on */ - const char *driver_name; /* File Driver value from environment */ - bool api_ctx_pushed = false; /* Whether API context pushed */ + hid_t fapl = H5I_INVALID_HID; /* File access property list for data files */ + hid_t new_fapl = H5I_INVALID_HID; /* File access property list for alignment & aggr setting */ + unsigned nerrors = 0; /* Cumulative error count */ + test_type_t curr_test; /* Current test being worked on */ + const char *driver_name; /* File Driver value from environment */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ /* Get the VFD to use */ driver_name = h5_get_test_driver_name(); @@ -9141,7 +9142,7 @@ main(void) fapl = h5_fileaccess(); /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) FAIL_STACK_ERROR; api_ctx_pushed = true; diff --git a/test/ntypes.c b/test/ntypes.c index 671b406c9ba..3fcd40ffb4b 100644 --- a/test/ntypes.c +++ b/test/ntypes.c @@ -335,9 +335,9 @@ test_compound_dtype2(hid_t file) TESTING("nested compound datatype"); /* Allocate space for the points & check arrays */ - if (NULL == (points = (s1 *)malloc(sizeof(s1) * DIM0 * DIM1))) + if (NULL == (points = malloc(sizeof(s1) * DIM0 * DIM1))) TEST_ERROR; - if (NULL == (check = (s1 *)calloc(sizeof(s1), DIM0 * DIM1))) + if (NULL == (check = calloc(DIM0 * DIM1, sizeof(s1)))) TEST_ERROR; /* Initialize the dataset */ @@ -535,7 +535,7 @@ test_compound_dtype2(hid_t file) * Cray */ if (NULL == (tmp = malloc(DIM0 * DIM1 * H5Tget_size(native_type)))) TEST_ERROR; - if (NULL == (bkg = calloc(sizeof(s1), DIM0 * DIM1))) + if (NULL == (bkg = calloc(DIM0 * DIM1, sizeof(s1)))) TEST_ERROR; if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp) < 0) @@ -648,9 +648,9 @@ test_compound_dtype(hid_t file) TESTING("compound datatype"); /* Allocate space for the points & check arrays */ - if (NULL == (points = (s1 *)malloc(sizeof(s1) * DIM0 * DIM1))) + if (NULL == (points = malloc(sizeof(s1) * DIM0 * DIM1))) TEST_ERROR; - if (NULL == (check = (s1 *)calloc(sizeof(s1), DIM0 * DIM1))) + if (NULL == (check = calloc(DIM0 * DIM1, sizeof(s1)))) TEST_ERROR; /* Initialize the dataset */ @@ -754,7 +754,7 @@ test_compound_dtype(hid_t file) * Cray */ if (NULL == (tmp = malloc(DIM0 * DIM1 * H5Tget_size(native_type)))) TEST_ERROR; - if (NULL == (bkg = calloc(sizeof(s1), DIM0 * DIM1))) + if (NULL == (bkg = calloc(DIM0 * DIM1, sizeof(s1)))) TEST_ERROR; if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp) < 0) @@ -856,9 +856,9 @@ test_compound_dtype3(hid_t file) TESTING("compound datatype with array as field"); /* Allocate space for the points & check arrays */ - if (NULL == (points = (s1 *)malloc(sizeof(s1) * DIM0 * DIM1))) + if (NULL == (points = malloc(sizeof(s1) * DIM0 * DIM1))) TEST_ERROR; - if (NULL == (check = (s1 *)calloc(sizeof(s1), DIM0 * DIM1))) + if (NULL == (check = calloc(DIM0 * DIM1, sizeof(s1)))) TEST_ERROR; /* Initialize the dataset */ @@ -982,7 +982,7 @@ test_compound_dtype3(hid_t file) * Cray */ if (NULL == (tmp = malloc(DIM0 * DIM1 * H5Tget_size(native_type)))) TEST_ERROR; - if (NULL == (bkg = calloc(sizeof(s1), DIM0 * DIM1))) + if (NULL == (bkg = calloc(DIM0 * DIM1, sizeof(s1)))) TEST_ERROR; if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp) < 0) @@ -1091,9 +1091,9 @@ test_compound_opaque(hid_t file) TESTING("compound datatype with opaque field"); /* Allocate space for the points & check arrays */ - if (NULL == (points = (s1 *)malloc(sizeof(s1) * DIM0 * DIM1))) + if (NULL == (points = malloc(sizeof(s1) * DIM0 * DIM1))) TEST_ERROR; - if (NULL == (check = (s1 *)calloc(sizeof(s1), DIM0 * DIM1))) + if (NULL == (check = calloc(DIM0 * DIM1, sizeof(s1)))) TEST_ERROR; /* Initialize the dataset */ @@ -1208,7 +1208,7 @@ test_compound_opaque(hid_t file) * Cray */ if (NULL == (tmp = malloc(DIM0 * DIM1 * H5Tget_size(native_type)))) TEST_ERROR; - if (NULL == (bkg = calloc(sizeof(s1), DIM0 * DIM1))) + if (NULL == (bkg = calloc(DIM0 * DIM1, sizeof(s1)))) TEST_ERROR; if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp) < 0) @@ -1469,9 +1469,9 @@ test_array_dtype(hid_t file) TESTING("array of compound datatype"); /* Allocate space for the points & check arrays */ - if (NULL == (points = (s1 *)malloc(sizeof(s1) * DIM0 * DIM1 * 5))) + if (NULL == (points = malloc(sizeof(s1) * DIM0 * DIM1 * 5))) TEST_ERROR; - if (NULL == (check = (s1 *)calloc(sizeof(s1), DIM0 * DIM1 * 5))) + if (NULL == (check = calloc(DIM0 * DIM1 * 5, sizeof(s1)))) TEST_ERROR; /* Initialize the dataset */ @@ -2428,9 +2428,9 @@ test_refer_dtype2(hid_t file) TESTING("dataset region reference"); /* Allocate write & read buffers */ - if (NULL == (dwbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2))) + if (NULL == (dwbuf = malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2))) TEST_ERROR; - if (NULL == (drbuf = (uint8_t *)calloc(sizeof(uint8_t), SPACE2_DIM1 * SPACE2_DIM2))) + if (NULL == (drbuf = calloc(SPACE2_DIM1 * SPACE2_DIM2, sizeof(uint8_t)))) TEST_ERROR; /* Create dataspace for datasets */ diff --git a/test/ohdr.c b/test/ohdr.c index fe36b45095f..6df628748f8 100644 --- a/test/ohdr.c +++ b/test/ohdr.c @@ -1834,9 +1834,10 @@ main(void) H5O_loc_t oh_loc; /* Object header locations */ H5F_libver_t low, high; /* File format bounds */ time_t time_new, ro; - int i; /* Local index variable */ - bool api_ctx_pushed = false; /* Whether API context pushed */ - herr_t ret; /* Generic return value */ + int i; /* Local index variable */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ + herr_t ret; /* Generic return value */ /* Get the VFD to use */ driver_name = h5_get_test_driver_name(); @@ -1850,7 +1851,7 @@ main(void) h5_fixname(FILENAME[0], fapl, filename, sizeof filename); /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) FAIL_STACK_ERROR; api_ctx_pushed = true; diff --git a/test/page_buffer.c b/test/page_buffer.c index 06176e7f42b..6e9c17df8d4 100644 --- a/test/page_buffer.c +++ b/test/page_buffer.c @@ -2051,6 +2051,7 @@ main(void) hid_t fapl = H5I_INVALID_HID; /* File access property list for data files */ unsigned nerrors = 0; /* Cumulative error count */ const char *driver_name = NULL; /* File Driver value from environment */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ bool api_ctx_pushed = false; /* Whether API context pushed */ h5_test_init(); @@ -2075,7 +2076,7 @@ main(void) } /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) FAIL_STACK_ERROR; api_ctx_pushed = true; diff --git a/test/titerate.c b/test/titerate.c index e3d4ad72e6e..0450500bd38 100644 --- a/test/titerate.c +++ b/test/titerate.c @@ -698,7 +698,7 @@ test_iter_group_large(hid_t fapl) } s1_t; /* Allocate & initialize array */ - names = (iter_info *)calloc(sizeof(iter_info), (ITER_NGROUPS + 2)); + names = (iter_info *)calloc((ITER_NGROUPS + 2), sizeof(iter_info)); CHECK_PTR(names, "calloc"); /* Output message about test being performed */ diff --git a/test/trefer.c b/test/trefer.c index a1a8f7a3a38..ac35ea5978f 100644 --- a/test/trefer.c +++ b/test/trefer.c @@ -124,10 +124,10 @@ test_reference_params(void) MESSAGE(5, ("Testing Reference Parameters\n")); /* Allocate write & read buffers */ - wbuf = (H5R_ref_t *)calloc(sizeof(H5R_ref_t), SPACE1_DIM1); - rbuf = (H5R_ref_t *)calloc(sizeof(H5R_ref_t), SPACE1_DIM1); - tbuf = (H5R_ref_t *)calloc(sizeof(H5R_ref_t), SPACE1_DIM1); - obuf = calloc(sizeof(unsigned), SPACE1_DIM1); + wbuf = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + rbuf = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + tbuf = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + obuf = calloc(SPACE1_DIM1, sizeof(unsigned)); for (i = 0; i < SPACE1_DIM1; i++) obuf[i] = i * 3; @@ -468,10 +468,10 @@ test_reference_obj(void) MESSAGE(5, ("Testing Object Reference Functions\n")); /* Allocate write & read buffers */ - wbuf = calloc(sizeof(H5R_ref_t), SPACE1_DIM1); - rbuf = calloc(sizeof(H5R_ref_t), SPACE1_DIM1); - ibuf = calloc(sizeof(unsigned), SPACE1_DIM1); - obuf = calloc(sizeof(unsigned), SPACE1_DIM1); + wbuf = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + rbuf = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + ibuf = calloc(SPACE1_DIM1, sizeof(unsigned)); + obuf = calloc(SPACE1_DIM1, sizeof(unsigned)); for (i = 0; i < SPACE1_DIM1; i++) obuf[i] = i * 3; @@ -571,7 +571,7 @@ test_reference_obj(void) VERIFY(obj_type, H5O_TYPE_NAMED_DATATYPE, "H5Rget_obj_type3"); /* Check copying a reference */ - wbuf_cp = calloc(sizeof(H5R_ref_t), 1); + wbuf_cp = calloc(1, sizeof(H5R_ref_t)); ret = H5Rcopy(&wbuf[0], &wbuf_cp[0]); CHECK(ret, FAIL, "H5Rcopy"); @@ -838,9 +838,9 @@ test_reference_vlen_obj(void) MESSAGE(5, ("Testing Object Reference Functions within VLEN type\n")); /* Allocate write & read buffers */ - wbuf = calloc(sizeof(H5R_ref_t), SPACE1_DIM1); - ibuf = calloc(sizeof(unsigned), SPACE1_DIM1); - obuf = calloc(sizeof(unsigned), SPACE1_DIM1); + wbuf = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + ibuf = calloc(SPACE1_DIM1, sizeof(unsigned)); + obuf = calloc(SPACE1_DIM1, sizeof(unsigned)); for (i = 0; i < SPACE1_DIM1; i++) obuf[i] = i * 3; @@ -1102,8 +1102,8 @@ test_reference_cmpnd_obj(void) MESSAGE(5, ("Testing Object Reference Functions within compound type\n")); /* Allocate write & read buffers */ - ibuf = calloc(sizeof(unsigned), SPACE1_DIM1); - obuf = calloc(sizeof(unsigned), SPACE1_DIM1); + ibuf = calloc(SPACE1_DIM1, sizeof(unsigned)); + obuf = calloc(SPACE1_DIM1, sizeof(unsigned)); for (i = 0; i < SPACE1_DIM1; i++) obuf[i] = i * 3; @@ -1411,10 +1411,10 @@ test_reference_region(H5F_libver_t libver_low, H5F_libver_t libver_high) MESSAGE(5, ("Testing Dataset Region Reference Functions\n")); /* Allocate write & read buffers */ - wbuf = calloc(sizeof(H5R_ref_t), SPACE1_DIM1); - rbuf = calloc(sizeof(H5R_ref_t), SPACE1_DIM1); - dwbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)(SPACE2_DIM1 * SPACE2_DIM2)); - drbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)(SPACE2_DIM1 * SPACE2_DIM2)); + wbuf = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + rbuf = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + dwbuf = (uint8_t *)calloc((size_t)(SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); + drbuf = (uint8_t *)calloc((size_t)(SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); for (tu8 = dwbuf, i = 0; i < (SPACE2_DIM1 * SPACE2_DIM2); i++) *tu8++ = (uint8_t)(i * 3); @@ -1867,10 +1867,10 @@ test_reference_region_1D(H5F_libver_t libver_low, H5F_libver_t libver_high) MESSAGE(5, ("Testing 1-D Dataset Region Reference Functions\n")); /* Allocate write & read buffers */ - wbuf = calloc(sizeof(H5R_ref_t), (size_t)SPACE1_DIM1); - rbuf = calloc(sizeof(H5R_ref_t), (size_t)SPACE1_DIM1); - dwbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)SPACE3_DIM1); - drbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)SPACE3_DIM1); + wbuf = calloc((size_t)SPACE1_DIM1, sizeof(H5R_ref_t)); + rbuf = calloc((size_t)SPACE1_DIM1, sizeof(H5R_ref_t)); + dwbuf = (uint8_t *)calloc((size_t)SPACE3_DIM1, sizeof(uint8_t)); + drbuf = (uint8_t *)calloc((size_t)SPACE3_DIM1, sizeof(uint8_t)); for (tu8 = dwbuf, i = 0; i < SPACE3_DIM1; i++) *tu8++ = (uint8_t)(i * 3); @@ -3125,10 +3125,10 @@ test_reference_compat_conv(void) } /* Allocate write & read buffers */ - wbuf_obj = (hobj_ref_t *)calloc(sizeof(hobj_ref_t), SPACE1_DIM1); - rbuf_obj = calloc(sizeof(H5R_ref_t), SPACE1_DIM1); - wbuf_reg = calloc(sizeof(hdset_reg_ref_t), SPACE1_DIM1); - rbuf_reg = calloc(sizeof(H5R_ref_t), SPACE1_DIM1); + wbuf_obj = calloc(SPACE1_DIM1, sizeof(hobj_ref_t)); + rbuf_obj = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + wbuf_reg = calloc(SPACE1_DIM1, sizeof(hdset_reg_ref_t)); + rbuf_reg = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); /* Create dataspace for datasets */ sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL); @@ -3434,17 +3434,17 @@ test_reference_perf(void) MESSAGE(5, ("Testing Object Reference Performance\n")); /* Allocate write & read buffers */ - wbuf = calloc(sizeof(H5R_ref_t), SPACE1_DIM1); - obuf = calloc(sizeof(unsigned), SPACE1_DIM1); - ibuf = calloc(sizeof(unsigned), SPACE1_DIM1); - wbuf_deprec = (hobj_ref_t *)calloc(sizeof(hobj_ref_t), SPACE1_DIM1); - rbuf = (H5R_ref_t *)calloc(sizeof(H5R_ref_t), SPACE1_DIM1); - rbuf_deprec = (hobj_ref_t *)calloc(sizeof(hobj_ref_t), SPACE1_DIM1); - tbuf = (H5R_ref_t *)calloc(sizeof(H5R_ref_t), SPACE1_DIM1); - wbuf_reg = (H5R_ref_t *)calloc(sizeof(H5R_ref_t), SPACE1_DIM1); - rbuf_reg = (H5R_ref_t *)calloc(sizeof(H5R_ref_t), SPACE1_DIM1); - wbuf_reg_deprec = (hdset_reg_ref_t *)calloc(sizeof(hdset_reg_ref_t), SPACE1_DIM1); - rbuf_reg_deprec = (hdset_reg_ref_t *)calloc(sizeof(hdset_reg_ref_t), SPACE1_DIM1); + wbuf = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + obuf = calloc(SPACE1_DIM1, sizeof(unsigned)); + ibuf = calloc(SPACE1_DIM1, sizeof(unsigned)); + wbuf_deprec = calloc(SPACE1_DIM1, sizeof(hobj_ref_t)); + rbuf = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + rbuf_deprec = calloc(SPACE1_DIM1, sizeof(hobj_ref_t)); + tbuf = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + wbuf_reg = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + rbuf_reg = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + wbuf_reg_deprec = calloc(SPACE1_DIM1, sizeof(hdset_reg_ref_t)); + rbuf_reg_deprec = calloc(SPACE1_DIM1, sizeof(hdset_reg_ref_t)); for (i = 0; i < SPACE1_DIM1; i++) obuf[i] = i * 3; diff --git a/test/trefer_deprec.c b/test/trefer_deprec.c index 81da6bc3e18..3f932f53b93 100644 --- a/test/trefer_deprec.c +++ b/test/trefer_deprec.c @@ -623,10 +623,10 @@ test_reference_region(H5F_libver_t libver_low, H5F_libver_t libver_high) MESSAGE(5, ("Testing Dataset Region Reference Functions\n")); /* Allocate write & read buffers */ - wbuf = (hdset_reg_ref_t *)calloc(sizeof(hdset_reg_ref_t), (size_t)SPACE1_DIM1); - rbuf = (hdset_reg_ref_t *)malloc(sizeof(hdset_reg_ref_t) * SPACE1_DIM1); - dwbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); - drbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)(SPACE2_DIM1 * SPACE2_DIM2)); + wbuf = calloc((size_t)SPACE1_DIM1, sizeof(hdset_reg_ref_t)); + rbuf = malloc(sizeof(hdset_reg_ref_t) * SPACE1_DIM1); + dwbuf = malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); + drbuf = calloc((size_t)(SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); /* Create file access property list */ fapl = H5Pcreate(H5P_FILE_ACCESS); @@ -1064,10 +1064,10 @@ test_reference_region_1D(H5F_libver_t libver_low, H5F_libver_t libver_high) MESSAGE(5, ("Testing 1-D Dataset Region Reference Functions\n")); /* Allocate write & read buffers */ - wbuf = (hdset_reg_ref_t *)calloc(sizeof(hdset_reg_ref_t), (size_t)SPACE1_DIM1); - rbuf = (hdset_reg_ref_t *)malloc(sizeof(hdset_reg_ref_t) * SPACE1_DIM1); - dwbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE3_DIM1); - drbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)SPACE3_DIM1); + wbuf = calloc((size_t)SPACE1_DIM1, sizeof(hdset_reg_ref_t)); + rbuf = malloc(sizeof(hdset_reg_ref_t) * SPACE1_DIM1); + dwbuf = malloc(sizeof(uint8_t) * SPACE3_DIM1); + drbuf = calloc((size_t)SPACE3_DIM1, sizeof(uint8_t)); /* Create the file access property list */ fapl = H5Pcreate(H5P_FILE_ACCESS); @@ -1636,10 +1636,10 @@ test_reference_compat(void) MESSAGE(5, ("Testing Deprecated Object Reference Functions\n")); /* Allocate write & read buffers */ - wbuf_obj = (hobj_ref_t *)calloc(sizeof(hobj_ref_t), SPACE1_DIM1); - rbuf_obj = (hobj_ref_t *)malloc(sizeof(hobj_ref_t) * SPACE1_DIM1); - wbuf_reg = (hdset_reg_ref_t *)calloc(sizeof(hdset_reg_ref_t), SPACE1_DIM1); - rbuf_reg = (hdset_reg_ref_t *)malloc(sizeof(hdset_reg_ref_t) * SPACE1_DIM1); + wbuf_obj = calloc(SPACE1_DIM1, sizeof(hobj_ref_t)); + rbuf_obj = malloc(sizeof(hobj_ref_t) * SPACE1_DIM1); + wbuf_reg = calloc(SPACE1_DIM1, sizeof(hdset_reg_ref_t)); + rbuf_reg = malloc(sizeof(hdset_reg_ref_t) * SPACE1_DIM1); /* Create file */ fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); diff --git a/test/tselect.c b/test/tselect.c index 1ce06551738..6f9bc6f1426 100644 --- a/test/tselect.c +++ b/test/tselect.c @@ -249,7 +249,7 @@ test_select_hyper(hid_t xfer_plist) /* Allocate write & read buffers */ wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)(SPACE3_DIM1 * SPACE3_DIM2)); + rbuf = (uint8_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -503,7 +503,7 @@ test_select_point(hid_t xfer_plist) /* Allocate write & read buffers */ wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)(SPACE3_DIM1 * SPACE3_DIM2)); + rbuf = (uint8_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -865,7 +865,7 @@ test_select_all(hid_t xfer_plist) /* Allocate write & read buffers */ wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE4_DIM1 * SPACE4_DIM2 * SPACE4_DIM3); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)(SPACE4_DIM1 * SPACE4_DIM2 * SPACE4_DIM3)); + rbuf = (uint8_t *)calloc((size_t)(SPACE4_DIM1 * SPACE4_DIM2 * SPACE4_DIM3), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -952,7 +952,7 @@ test_select_all_hyper(hid_t xfer_plist) /* Allocate write & read buffers */ wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)(SPACE3_DIM1 * SPACE3_DIM2)); + rbuf = (uint8_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -1106,7 +1106,7 @@ test_select_combo(void) /* Allocate write & read buffers */ wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)(SPACE3_DIM1 * SPACE3_DIM2)); + rbuf = (uint8_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -1301,7 +1301,7 @@ test_select_hyper_stride(hid_t xfer_plist) /* Allocate write & read buffers */ wbuf = (uint16_t *)malloc(sizeof(uint16_t) * SPACE2_DIM1 * SPACE2_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint16_t *)calloc(sizeof(uint16_t), (size_t)(SPACE3_DIM1 * SPACE3_DIM2)); + rbuf = (uint16_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint16_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -1447,7 +1447,7 @@ test_select_hyper_contig(hid_t dset_type, hid_t xfer_plist) /* Allocate write & read buffers */ wbuf = (uint16_t *)malloc(sizeof(uint16_t) * SPACE2_DIM1 * SPACE2_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint16_t *)calloc(sizeof(uint16_t), (size_t)(SPACE2_DIM1 * SPACE2_DIM2)); + rbuf = (uint16_t *)calloc((size_t)(SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint16_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -1588,7 +1588,7 @@ test_select_hyper_contig2(hid_t dset_type, hid_t xfer_plist) wbuf = (uint16_t *)malloc(sizeof(uint16_t) * SPACE8_DIM1 * SPACE8_DIM2 * SPACE8_DIM3 * SPACE8_DIM4); CHECK_PTR(wbuf, "malloc"); rbuf = - (uint16_t *)calloc(sizeof(uint16_t), (size_t)(SPACE8_DIM1 * SPACE8_DIM2 * SPACE8_DIM3 * SPACE8_DIM4)); + (uint16_t *)calloc((size_t)(SPACE8_DIM1 * SPACE8_DIM2 * SPACE8_DIM3 * SPACE8_DIM4), sizeof(uint16_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -1734,7 +1734,7 @@ test_select_hyper_contig3(hid_t dset_type, hid_t xfer_plist) wbuf = (uint16_t *)malloc(sizeof(uint16_t) * SPACE8_DIM1 * SPACE8_DIM2 * SPACE8_DIM3 * SPACE8_DIM4); CHECK_PTR(wbuf, "malloc"); rbuf = - (uint16_t *)calloc(sizeof(uint16_t), (size_t)(SPACE8_DIM1 * SPACE8_DIM2 * SPACE8_DIM3 * SPACE8_DIM4)); + (uint16_t *)calloc((size_t)(SPACE8_DIM1 * SPACE8_DIM2 * SPACE8_DIM3 * SPACE8_DIM4), sizeof(uint16_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -2003,9 +2003,9 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf, co block_ptr = &(block[SS_DR_MAX_RANK - large_rank]); /* Allocate buffers */ - small_cube_buf_1 = (uint16_t *)calloc(sizeof(uint16_t), small_cube_size); + small_cube_buf_1 = (uint16_t *)calloc(small_cube_size, sizeof(uint16_t)); CHECK_PTR(small_cube_buf_1, "calloc"); - large_cube_buf_1 = (uint16_t *)calloc(sizeof(uint16_t), large_cube_size); + large_cube_buf_1 = (uint16_t *)calloc(large_cube_size, sizeof(uint16_t)); CHECK_PTR(large_cube_buf_1, "calloc"); /* Create a dataset transfer property list */ @@ -2539,7 +2539,7 @@ test_select_hyper_contig_dr(hid_t dset_type, hid_t xfer_plist) *cube_ptr++ = (uint16_t)s; /* Allocate cube buffer for zeroing values on disk */ - zero_buf = (uint16_t *)calloc(sizeof(uint16_t), max_cube_size); + zero_buf = (uint16_t *)calloc(max_cube_size, sizeof(uint16_t)); CHECK_PTR(zero_buf, "calloc"); for (large_rank = 1; large_rank <= max_rank; large_rank++) { @@ -2988,9 +2988,9 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_ assert(large_cube_size < (size_t)(64 * 1024)); /* Allocate & initialize buffers */ - small_cube_buf_1 = (uint16_t *)calloc(sizeof(uint16_t), small_cube_size); + small_cube_buf_1 = (uint16_t *)calloc(small_cube_size, sizeof(uint16_t)); CHECK_PTR(small_cube_buf_1, "calloc"); - large_cube_buf_1 = (uint16_t *)calloc(sizeof(uint16_t), large_cube_size); + large_cube_buf_1 = (uint16_t *)calloc(large_cube_size, sizeof(uint16_t)); CHECK_PTR(large_cube_buf_1, "calloc"); /* Create a dataset transfer property list */ @@ -3615,7 +3615,7 @@ test_select_hyper_checker_board_dr(hid_t dset_type, hid_t xfer_plist) *cube_ptr++ = (uint16_t)s; /* Allocate cube buffer for zeroing values on disk */ - zero_buf = (uint16_t *)calloc(sizeof(uint16_t), max_cube_size); + zero_buf = (uint16_t *)calloc(max_cube_size, sizeof(uint16_t)); CHECK_PTR(zero_buf, "calloc"); for (large_rank = 1; large_rank <= max_rank; large_rank++) { @@ -3681,9 +3681,9 @@ test_select_hyper_copy(void) /* Allocate write & read buffers */ wbuf = (uint16_t *)malloc(sizeof(uint16_t) * SPACE2_DIM1 * SPACE2_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint16_t *)calloc(sizeof(uint16_t), (size_t)(SPACE3_DIM1 * SPACE3_DIM2)); + rbuf = (uint16_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint16_t)); CHECK_PTR(rbuf, "calloc"); - rbuf2 = (uint16_t *)calloc(sizeof(uint16_t), (size_t)(SPACE3_DIM1 * SPACE3_DIM2)); + rbuf2 = (uint16_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint16_t)); CHECK_PTR(rbuf2, "calloc"); /* Initialize write buffer */ @@ -3852,9 +3852,9 @@ test_select_point_copy(void) /* Allocate write & read buffers */ wbuf = (uint16_t *)malloc(sizeof(uint16_t) * SPACE2_DIM1 * SPACE2_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint16_t *)calloc(sizeof(uint16_t), (size_t)(SPACE3_DIM1 * SPACE3_DIM2)); + rbuf = (uint16_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint16_t)); CHECK_PTR(rbuf, "calloc"); - rbuf2 = (uint16_t *)calloc(sizeof(uint16_t), (size_t)(SPACE3_DIM1 * SPACE3_DIM2)); + rbuf2 = (uint16_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint16_t)); CHECK_PTR(rbuf2, "calloc"); /* Initialize write buffer */ @@ -4070,7 +4070,7 @@ test_select_hyper_offset(void) /* Allocate write & read buffers */ wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)(SPACE3_DIM1 * SPACE3_DIM2)); + rbuf = (uint8_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -4278,7 +4278,7 @@ test_select_hyper_offset2(void) /* Allocate write & read buffers */ wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE7_DIM1 * SPACE7_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)(SPACE7_DIM1 * SPACE7_DIM2)); + rbuf = (uint8_t *)calloc((size_t)(SPACE7_DIM1 * SPACE7_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -4408,7 +4408,7 @@ test_select_point_offset(void) /* Allocate write & read buffers */ wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)(SPACE3_DIM1 * SPACE3_DIM2)); + rbuf = (uint8_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -4635,7 +4635,7 @@ test_select_hyper_union(void) /* Allocate write & read buffers */ wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)(SPACE3_DIM1 * SPACE3_DIM2)); + rbuf = (uint8_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -5413,7 +5413,7 @@ test_select_hyper_union_3d(void) /* Allocate write & read buffers */ wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE4_DIM1 * SPACE4_DIM2 * SPACE4_DIM3); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(sizeof(uint8_t), SPACE3_DIM1 * SPACE3_DIM2); + rbuf = (uint8_t *)calloc(SPACE3_DIM1 * SPACE3_DIM2, sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -5737,7 +5737,7 @@ test_select_hyper_and_2d(void) /* Allocate write & read buffers */ wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)(SPACE2_DIM1 * SPACE2_DIM2)); + rbuf = (uint8_t *)calloc((size_t)(SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -5876,7 +5876,7 @@ test_select_hyper_xor_2d(void) /* Allocate write & read buffers */ wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)(SPACE2_DIM1 * SPACE2_DIM2)); + rbuf = (uint8_t *)calloc((size_t)(SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -6017,7 +6017,7 @@ test_select_hyper_notb_2d(void) /* Allocate write & read buffers */ wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)(SPACE2_DIM1 * SPACE2_DIM2)); + rbuf = (uint8_t *)calloc((size_t)(SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -6156,7 +6156,7 @@ test_select_hyper_nota_2d(void) /* Allocate write & read buffers */ wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(sizeof(uint8_t), (size_t)(SPACE2_DIM1 * SPACE2_DIM2)); + rbuf = (uint8_t *)calloc((size_t)(SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -6326,8 +6326,8 @@ test_select_hyper_union_random_5d(hid_t read_plist) /* Allocate write & read buffers */ wbuf = (int *)malloc(sizeof(int) * SPACE5_DIM1 * SPACE5_DIM2 * SPACE5_DIM3 * SPACE5_DIM4 * SPACE5_DIM5); CHECK_PTR(wbuf, "malloc"); - rbuf = (int *)calloc(sizeof(int), - (size_t)(SPACE5_DIM1 * SPACE5_DIM2 * SPACE5_DIM3 * SPACE5_DIM4 * SPACE5_DIM5)); + rbuf = (int *)calloc((size_t)(SPACE5_DIM1 * SPACE5_DIM2 * SPACE5_DIM3 * SPACE5_DIM4 * SPACE5_DIM5), + sizeof(int)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -7997,7 +7997,7 @@ test_select_none(void) /* Allocate write & read buffers */ wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE7_DIM1 * SPACE7_DIM2); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(sizeof(uint8_t), SPACE7_DIM1 * SPACE7_DIM2); + rbuf = (uint8_t *)calloc(SPACE7_DIM1 * SPACE7_DIM2, sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -13581,7 +13581,7 @@ test_select_hyper_chunk_offset(void) /* Allocate buffers */ wbuf = (int *)malloc(sizeof(int) * SPACE10_DIM1); CHECK_PTR(wbuf, "malloc"); - rbuf = (int *)calloc(sizeof(int), SPACE10_DIM1); + rbuf = (int *)calloc(SPACE10_DIM1, sizeof(int)); CHECK_PTR(rbuf, "calloc"); /* Initialize the write buffer */ diff --git a/test/unregister.c b/test/unregister.c index 528adf9ddf7..871343ae4dd 100644 --- a/test/unregister.c +++ b/test/unregister.c @@ -275,16 +275,17 @@ test_unregister_filters(hid_t fapl_id) int main(void) { - hid_t fapl_id = H5I_INVALID_HID; - int nerrors = 0; - bool api_ctx_pushed = false; /* Whether API context pushed */ + hid_t fapl_id = H5I_INVALID_HID; + int nerrors = 0; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ /* Testing setup */ h5_test_init(); fapl_id = h5_fileaccess(); /* Push API context */ - if (H5CX_push() < 0) + if (H5CX_push(&api_ctx) < 0) FAIL_STACK_ERROR; api_ctx_pushed = true; diff --git a/test/vol.c b/test/vol.c index a6d1d6caf83..368e6f44f38 100644 --- a/test/vol.c +++ b/test/vol.c @@ -1681,7 +1681,8 @@ exercise_reg_opt_oper(hid_t fake_vol_id, hid_t reg_opt_vol_id, H5VL_subclass_t s int fake_obj, fake_arg; int op_val = -1, op_val2 = -1; int find_op_val; - herr_t ret = SUCCEED; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + herr_t ret = SUCCEED; /* Test registering optional operation */ snprintf(op_name, sizeof(op_name), "%s-op1", subcls_name); @@ -1724,7 +1725,7 @@ exercise_reg_opt_oper(hid_t fake_vol_id, hid_t reg_opt_vol_id, H5VL_subclass_t s /* Push a new API context on the stack */ /* (Necessary for the named datatype construction routines) */ if (H5VL_SUBCLS_DATATYPE == subcls) - H5CX_push(); + H5CX_push(&api_ctx); /* Create fake object on fake VOL connector */ if (H5I_INVALID_HID == (obj_id = H5VL__register_using_vol_id_test(id_type, &fake_obj, fake_vol_id))) @@ -1779,8 +1780,9 @@ exercise_reg_opt_oper(hid_t fake_vol_id, hid_t reg_opt_vol_id, H5VL_subclass_t s /* Push a new API context on the stack */ /* (Necessary for the named datatype construction routines) */ + memset(&api_ctx, 0, sizeof(api_ctx)); if (H5VL_SUBCLS_DATATYPE == subcls) - H5CX_push(); + H5CX_push(&api_ctx); /* Create fake object on reg_opt VOL connector */ if (H5I_INVALID_HID == (obj_id = H5VL__register_using_vol_id_test(id_type, &fake_obj, reg_opt_vol_id))) diff --git a/testpar/t_cache.c b/testpar/t_cache.c index 7b546e04ebc..633bf2010ff 100644 --- a/testpar/t_cache.c +++ b/testpar/t_cache.c @@ -3591,6 +3591,7 @@ setup_cache_for_test(hid_t *fid_ptr, H5F_t **file_ptr_ptr, H5C_t **cache_ptr_ptr H5F_t *file_ptr = NULL; H5C_t *cache_ptr = NULL; haddr_t actual_base_addr; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ assert(fid_ptr != NULL); assert(file_ptr_ptr != NULL); @@ -3599,7 +3600,7 @@ setup_cache_for_test(hid_t *fid_ptr, H5F_t **file_ptr_ptr, H5C_t **cache_ptr_ptr fid = H5Fcreate(filenames[0], H5F_ACC_TRUNC, H5P_DEFAULT, fapl); /* Push API context */ - H5CX_push(); + H5CX_push(&api_ctx); if (fid < 0) { nerrors++; @@ -4043,7 +4044,6 @@ take_down_cache(hid_t fid, H5C_t *cache_ptr) } return (success); - } /* take_down_cache() */ /***************************************************************************** @@ -4945,6 +4945,7 @@ smoke_check_1(int metadata_write_strategy) } else /* run the clients */ { + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (!setup_cache_for_test(&fid, &file_ptr, &cache_ptr, metadata_write_strategy)) { nerrors++; @@ -4955,6 +4956,9 @@ smoke_check_1(int metadata_write_strategy) } } + /* Push API context */ + H5CX_push(&api_ctx); + for (i = 0; i < (virt_num_data_entries / 2); i++) { insert_entry(cache_ptr, file_ptr, i, H5AC__NO_FLAGS_SET); } @@ -5021,6 +5025,9 @@ smoke_check_1(int metadata_write_strategy) } } } + + /* Pop API context */ + H5CX_pop(false); } max_nerrors = get_max_nerrors(); @@ -5041,7 +5048,6 @@ smoke_check_1(int metadata_write_strategy) success = ((success) && (max_nerrors == 0)); return (success); - } /* smoke_check_1() */ /***************************************************************************** @@ -5107,6 +5113,7 @@ smoke_check_2(int metadata_write_strategy) } else /* run the clients */ { + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (!setup_cache_for_test(&fid, &file_ptr, &cache_ptr, metadata_write_strategy)) { nerrors++; @@ -5117,6 +5124,9 @@ smoke_check_2(int metadata_write_strategy) } } + /* Push API context */ + H5CX_push(&api_ctx); + for (i = 0; i < (virt_num_data_entries / 2); i++) { insert_entry(cache_ptr, file_ptr, i, H5AC__NO_FLAGS_SET); @@ -5217,6 +5227,9 @@ smoke_check_2(int metadata_write_strategy) } } } + + /* Pop API context */ + H5CX_pop(false); } max_nerrors = get_max_nerrors(); @@ -5237,7 +5250,6 @@ smoke_check_2(int metadata_write_strategy) success = ((success) && (max_nerrors == 0)); return (success); - } /* smoke_check_2() */ /***************************************************************************** @@ -5310,6 +5322,7 @@ smoke_check_3(int metadata_write_strategy) } else /* run the clients */ { + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (!setup_cache_for_test(&fid, &file_ptr, &cache_ptr, metadata_write_strategy)) { nerrors++; @@ -5320,6 +5333,9 @@ smoke_check_3(int metadata_write_strategy) } } + /* Push API context */ + H5CX_push(&api_ctx); + min_count = 100 / ((file_mpi_rank + 1) * (file_mpi_rank + 1)); max_count = min_count + 50; @@ -5500,6 +5516,9 @@ smoke_check_3(int metadata_write_strategy) } } } + + /* Pop API context */ + H5CX_pop(false); } max_nerrors = get_max_nerrors(); @@ -5520,7 +5539,6 @@ smoke_check_3(int metadata_write_strategy) success = ((success) && (max_nerrors == 0)); return (success); - } /* smoke_check_3() */ /***************************************************************************** @@ -5593,6 +5611,7 @@ smoke_check_4(int metadata_write_strategy) } else /* run the clients */ { + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (!setup_cache_for_test(&fid, &file_ptr, &cache_ptr, metadata_write_strategy)) { nerrors++; @@ -5603,6 +5622,9 @@ smoke_check_4(int metadata_write_strategy) } } + /* Push API context */ + H5CX_push(&api_ctx); + min_count = 100 * (file_mpi_rank % 4); max_count = min_count + 50; @@ -5782,6 +5804,9 @@ smoke_check_4(int metadata_write_strategy) } } } + + /* Pop API context */ + H5CX_pop(false); } max_nerrors = get_max_nerrors(); @@ -5802,7 +5827,6 @@ smoke_check_4(int metadata_write_strategy) success = ((success) && (max_nerrors == 0)); return (success); - } /* smoke_check_4() */ /***************************************************************************** @@ -5866,6 +5890,7 @@ smoke_check_5(int metadata_write_strategy) } else /* run the clients */ { + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (!setup_cache_for_test(&fid, &file_ptr, &cache_ptr, metadata_write_strategy)) { @@ -5877,6 +5902,9 @@ smoke_check_5(int metadata_write_strategy) } } + /* Push API context */ + H5CX_push(&api_ctx); + for (i = 0; i < (virt_num_data_entries / 2); i++) { insert_entry(cache_ptr, file_ptr, i, H5AC__NO_FLAGS_SET); } @@ -5972,6 +6000,9 @@ smoke_check_5(int metadata_write_strategy) } } } + + /* Pop API context */ + H5CX_pop(false); } max_nerrors = get_max_nerrors(); @@ -5992,7 +6023,6 @@ smoke_check_5(int metadata_write_strategy) success = ((success) && (max_nerrors == 0)); return (success); - } /* smoke_check_5() */ /***************************************************************************** @@ -6148,6 +6178,7 @@ trace_file_check(int metadata_write_strategy) } else { /* run the clients */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ if (!setup_cache_for_test(&fid, &file_ptr, &cache_ptr, metadata_write_strategy)) { @@ -6158,6 +6189,9 @@ trace_file_check(int metadata_write_strategy) fprintf(stdout, "%d:%s: setup_cache_for_test() failed.\n", world_mpi_rank, __func__); } + /* Push API context */ + H5CX_push(&api_ctx); + if (nerrors == 0) { config.version = H5AC__CURR_CACHE_CONFIG_VERSION; @@ -6370,6 +6404,9 @@ trace_file_check(int metadata_write_strategy) trace_file_ptr = NULL; HDremove(trace_file_name); } + + /* Pop API context */ + H5CX_pop(false); } /* end giant else that runs clients */ max_nerrors = get_max_nerrors(); @@ -6388,7 +6425,6 @@ trace_file_check(int metadata_write_strategy) success = ((success) && (max_nerrors == 0)); return (success); - } /* trace_file_check() */ /***************************************************************************** @@ -6453,7 +6489,8 @@ smoke_check_6(int metadata_write_strategy) } else /* run the clients */ { - int temp; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + int temp; if (!setup_cache_for_test(&fid, &file_ptr, &cache_ptr, metadata_write_strategy)) { @@ -6465,6 +6502,9 @@ smoke_check_6(int metadata_write_strategy) } } + /* Push API context */ + H5CX_push(&api_ctx); + temp = virt_num_data_entries; virt_num_data_entries = NUM_DATA_ENTRIES; @@ -6621,6 +6661,9 @@ smoke_check_6(int metadata_write_strategy) } } virt_num_data_entries = temp; + + /* Pop API context */ + H5CX_pop(false); } max_nerrors = get_max_nerrors(); @@ -6641,7 +6684,6 @@ smoke_check_6(int metadata_write_strategy) success = ((success) && (max_nerrors == 0)); return (success); - } /* smoke_check_6() */ /***************************************************************************** diff --git a/testpar/t_file.c b/testpar/t_file.c index 77fd69782d9..51b244e99d8 100644 --- a/testpar/t_file.c +++ b/testpar/t_file.c @@ -141,12 +141,13 @@ test_page_buffer_access(const void *params) hid_t fcpl, fapl; herr_t ret; /* generic return value */ #ifdef PB_OUT - size_t page_count = 0; - int i, num_elements = 200; - haddr_t raw_addr, meta_addr; - int *data; - H5F_t *f = NULL; - bool api_ctx_pushed = false; /* Whether API context pushed */ + size_t page_count = 0; + int i, num_elements = 200; + haddr_t raw_addr, meta_addr; + int *data; + H5F_t *f = NULL; + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ #endif MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); @@ -229,7 +230,7 @@ test_page_buffer_access(const void *params) VRFY((file_id >= 0), ""); /* Push API context */ - ret = H5CX_push(); + ret = H5CX_push(&api_ctx); VRFY((ret == 0), "H5CX_push()"); api_ctx_pushed = true; @@ -339,7 +340,7 @@ test_page_buffer_access(const void *params) VRFY((file_id >= 0), ""); /* Push API context */ - ret = H5CX_push(); + ret = H5CX_push(&api_ctx); VRFY((ret == 0), "H5CX_push()"); api_ctx_pushed = true; @@ -483,7 +484,8 @@ create_file(const char *filename, hid_t fcpl, hid_t fapl, int metadata_write_str H5F_t *f = NULL; H5C_t *cache_ptr = NULL; H5AC_cache_config_t config; - bool api_ctx_pushed = false; /* Whether API context pushed */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ herr_t ret; file_id = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl); @@ -493,7 +495,7 @@ create_file(const char *filename, hid_t fcpl, hid_t fapl, int metadata_write_str VRFY((ret == 0), ""); /* Push API context */ - ret = H5CX_push(); + ret = H5CX_push(&api_ctx); VRFY((ret == 0), "H5CX_push()"); api_ctx_pushed = true; @@ -639,7 +641,8 @@ open_file(const char *filename, hid_t fapl, int metadata_write_strategy, hsize_t H5F_t *f = NULL; H5C_t *cache_ptr = NULL; H5AC_cache_config_t config; - bool api_ctx_pushed = false; /* Whether API context pushed */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ herr_t ret; config.version = H5AC__CURR_CACHE_CONFIG_VERSION; @@ -656,7 +659,7 @@ open_file(const char *filename, hid_t fapl, int metadata_write_strategy, hsize_t VRFY((file_id >= 0), ""); /* Push API context */ - ret = H5CX_push(); + ret = H5CX_push(&api_ctx); VRFY((ret == 0), "H5CX_push()"); api_ctx_pushed = true; diff --git a/testpar/t_shapesame.c b/testpar/t_shapesame.c index be1d2758ed1..56b460d7895 100644 --- a/testpar/t_shapesame.c +++ b/testpar/t_shapesame.c @@ -21,10 +21,10 @@ /* Define this macro to indicate that the testing APIs should be available */ #define H5S_TESTING -#include "H5Spkg.h" /* Dataspaces */ - #include "testpar.h" +#include "H5Spkg.h" /* Dataspaces */ + /* Include testing framework functionality */ #include "testframe.h" diff --git a/tools/src/misc/h5debug.c b/tools/src/misc/h5debug.c index b4051fd6212..b8d8aaf3f6a 100644 --- a/tools/src/misc/h5debug.c +++ b/tools/src/misc/h5debug.c @@ -233,7 +233,8 @@ main(int argc, char *argv[]) size_t u; H5E_auto2_t func = NULL; void *edata = NULL; - bool api_ctx_pushed = false; /* Whether API context pushed */ + H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ + bool api_ctx_pushed = false; /* Whether API context pushed */ herr_t status = SUCCEED; int exit_value = 0; @@ -275,7 +276,7 @@ main(int argc, char *argv[]) } /* end if */ /* Push API context */ - if (H5CX_push() < 0) { + if (H5CX_push(&api_ctx) < 0) { fprintf(stderr, "cannot set API context\n"); exit_value = 1; goto done; From 710e46dff5b7c5216bded6600bb38f1a9a1efe2f Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Thu, 24 Oct 2024 12:47:35 -0700 Subject: [PATCH 038/179] Update the README (#5003) * Drop 1.14 badges * Update the 2.0.0 features list * Change the version to 2.0.0 (under development) --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ab51d912acc..f7b5c631422 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -HDF5 version 1.17.0 currently under development +HDF5 version 2.0.0 currently under development ![HDF5 Logo](doxygen/img/HDF5.png) @@ -10,8 +10,6 @@ HDF5 version 1.17.0 currently under development [![CVE regression](https://img.shields.io/github/actions/workflow/status/HDFGroup/hdf5/cve.yml?branch=develop&label=CVE)](https://github.com/HDFGroup/hdf5/actions/workflows/cve.yml?query=branch%3Adevelop) [![HDF5 VOL connectors build status](https://img.shields.io/github/actions/workflow/status/HDFGroup/hdf5/vol.yml?branch=develop&label=HDF5-VOL)](https://github.com/HDFGroup/hdf5/actions/workflows/vol.yml?query=branch%3Adevelop) [![HDF5 VFD build status](https://img.shields.io/github/actions/workflow/status/HDFGroup/hdf5/vfd.yml?branch=develop&label=HDF5-VFD)](https://github.com/HDFGroup/hdf5/actions/workflows/vfd.yml?query=branch%3Adevelop) -[![1.14 cmake build status](https://img.shields.io/github/actions/workflow/status/HDFGroup/hdf5/cmake.yml?branch=hdf5_1_14&label=HDF5%201.14%20CMake%20CI)](https://github.com/HDFGroup/hdf5/actions/workflows/cmake.yml?query=branch%3Ahdf5_1_14) -[![1.14 autotools build status](https://img.shields.io/github/actions/workflow/status/HDFGroup/hdf5/autotools.yml?branch=hdf5_1_14&label=HDF5%201.14%20Autotools%20CI)](https://github.com/HDFGroup/hdf5/actions/workflows/autotools.yml?query=branch%3Ahdf5_1_14) [![BSD](https://img.shields.io/badge/License-BSD-blue.svg)](https://github.com/HDFGroup/hdf5/blob/develop/LICENSE) [HPC configure/build/test results](https://my.cdash.org/index.php?project=HDF5) @@ -90,7 +88,7 @@ are tentative. | Release | New Features | | ------- | ------------ | -| 2.0.0 | Drop Autotools support, complex number support, updated library defaults (cache sizes, etc.), semantic versioning | +| 2.0.0 | Drop Autotools support, drop the C++ API, drop the HDF5 <--> GIF tools, add complex number support, update library defaults (cache sizes, etc.), use semantic versioning | | FUTURE | Multi-threaded HDF5, crashproofing / metadata journaling, Full (VFD) SWMR, encryption, digital signatures, sparse datasets, improved storage for variable-length datatypes, better Unicode support (especially on Windows) | NOTE: In the March 2025 release we will begin using semantic versioning (https://semver.org/) and the previously announced 1.16.0 version will instead be numbered 2.0.0. From 01957b6cb108208c09c3c0380199d8edc7aa59b0 Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Thu, 24 Oct 2024 15:26:57 -0500 Subject: [PATCH 039/179] Certain versions of VS produce rounding errors in tfloatsattr (#5000) --- tools/test/h5dump/CMakeTests.cmake | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tools/test/h5dump/CMakeTests.cmake b/tools/test/h5dump/CMakeTests.cmake index 41fd15389a9..d06eceb3e81 100644 --- a/tools/test/h5dump/CMakeTests.cmake +++ b/tools/test/h5dump/CMakeTests.cmake @@ -399,10 +399,9 @@ # -------------------------------------------------------------------- HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/expected/tbin1.ddl" "${PROJECT_BINARY_DIR}/testfiles/std/tbin1LE.ddl" "h5dump_std_files") - if (WIN32 AND CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION VERSION_LESS 10.0.18362.0) + # Certain versions of Visual Studio produce rounding differences compared with the reference data of the tfloatsattr test + if (WIN32 AND (CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION VERSION_LESS 10.0.18362.0 OR CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION VERSION_GREATER_EQUAL 19.41.34123.0)) configure_file(${PROJECT_SOURCE_DIR}/exportfiles/tbinregR.exp ${PROJECT_BINARY_DIR}/testfiles/std/tbinregR.exp NEWLINE_STYLE CRLF) - #file (READ ${PROJECT_SOURCE_DIR}/exportfiles/tbinregR.exp TEST_STREAM) - #file (WRITE ${PROJECT_BINARY_DIR}/testfiles/std/tbinregR.exp "${TEST_STREAM}") HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/expected/tfloatsattrs.wddl" "${PROJECT_BINARY_DIR}/testfiles/std/tfloatsattrs.ddl" "h5dump_std_files") else () HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/exportfiles/tbinregR.exp" "${PROJECT_BINARY_DIR}/testfiles/std/tbinregR.exp" "h5dump_std_files") From 4a4ad1c1377bcebc23e7c66114dcf1faa0031bd8 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Thu, 24 Oct 2024 15:06:50 -0700 Subject: [PATCH 040/179] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f7b5c631422..646d14acc36 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -HDF5 version 2.0.0 currently under development +HDF5 version 1.17.0 currently under development ![HDF5 Logo](doxygen/img/HDF5.png) From 0439876eebcf1b01b65605a7092ed3e13f4f96a2 Mon Sep 17 00:00:00 2001 From: Larry Knox Date: Fri, 25 Oct 2024 00:31:15 -0500 Subject: [PATCH 041/179] Switch default for HDF5_GENERATE_HEADERS (CMake) to OFF. (#5005) --- release_docs/INSTALL_CMake.txt | 2 +- release_docs/RELEASE_PROCESS.md | 5 ++++- src/CMakeLists.txt | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/release_docs/INSTALL_CMake.txt b/release_docs/INSTALL_CMake.txt index 437565de60b..a43827818a4 100644 --- a/release_docs/INSTALL_CMake.txt +++ b/release_docs/INSTALL_CMake.txt @@ -874,7 +874,7 @@ HDF5_ENABLE_PREADWRITE "Use pread/pwrite in sec2/log/core VFDs in place HDF5_ENABLE_TRACE "Enable API tracing capability" OFF HDF5_ENABLE_USING_MEMCHECKER "Indicate that a memory checker is used" OFF HDF5_ENABLE_MAP_API "Build the map API" OFF -HDF5_GENERATE_HEADERS "Rebuild Generated Files" ON +HDF5_GENERATE_HEADERS "Rebuild Generated Files" OFF HDF5_BUILD_GENERATORS "Build Test Generators" OFF HDF5_JAVA_PACK_JRE "Package a JRE installer directory" OFF diff --git a/release_docs/RELEASE_PROCESS.md b/release_docs/RELEASE_PROCESS.md index 60ace68d21f..8f54d9b9be2 100644 --- a/release_docs/RELEASE_PROCESS.md +++ b/release_docs/RELEASE_PROCESS.md @@ -94,7 +94,9 @@ For more information on the HDF5 versioning and backward and forward compatibili - `$ bin/h5vers -s X.Y.Z-{SR+1};` - `$ git commit -m "Updated release preparation branch version number to X.Y.Z-{SR+1}"` - `$ git push` -7. Update default configuration mode +7. ** OBSOLETE CURRENTLY ** + Most will disappear when autotools support is removed, and none of these are currently necessary + Update default configuration mode - `$ git checkout hdf5_X_Y_Z;` and `$ bin/switch_maint_mode -disable ./configure.ac` to disable `AM_MAINTAINER_MODE`. - Need to set option `HDF5_GENERATE_HEADERS` to `OFF`, currently in line 996 of [src/CMakeLists.txt][u11]. - Change the **release preparation branch**'s (i.e. hdf5_X_Y_Z) default configuration mode from development to production in [configure.ac][u12]. @@ -103,6 +105,7 @@ For more information on the HDF5 versioning and backward and forward compatibili - Under `if test "X-$BUILD_MODE" = X- ; then` change `BUILD_MODE=debug` to `BUILD_MODE=production`. - Run `sh ./autogen.sh` to regenerate the UNIX build system files and commit the changes. (use `git status --ignored` to see the changes and `git add -f` to add all files. First delete any new files not to be committed, notably `src/H5public.h~` and `autom4te.cache/`.) - `$ git push with commit message listing change steps for creating release branch` + ** END OBSOLETE CURRENTLY ** 8. E-mail hdf5lib@hdfgroup.org to indicate that the code freeze on the release support branch (i.e. hdf5_X_Y) has been lifted and development on the next maintenance release can resume. The code freeze will remain in place on the release preparation branch (i.e. hdf5_X_Y_Z) indefinitely. ### 7. Perform Release Testing (Test Automation Team | Release Manager | Project Leads) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d2cafa37df2..644539bfc00 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1026,7 +1026,7 @@ set (H5_PUBLIC_GENERATED_HEADERS ${HDF5_SRC_DIR}/H5overflow.h ) -option (HDF5_GENERATE_HEADERS "Rebuild Generated Files" ON) +option (HDF5_GENERATE_HEADERS "Rebuild Generated Files" OFF) if (HDF5_GENERATE_HEADERS) set_source_files_properties(${H5_GENERATED_HEADERS} PROPERTIES GENERATED TRUE) if (H5_PERL_FOUND) From 6122828198f896849fe12c988bd374502731a5b0 Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Fri, 25 Oct 2024 10:03:35 -0500 Subject: [PATCH 042/179] Split out compiler flags into specific compiler files (#4974) * Split CMake HDFCompileFlags into specific compiler files * Separate out CXX Flags * Add Fortran compiler specific files * Merge in #4816 changes and close #4816 * fix hanging endif --------- Co-authored-by: Larry Knox --- .github/workflows/cmake-analysis.yml | 8 +- .github/workflows/cmake-script.yml | 14 +- CMakeLists.txt | 4 +- config/cmake/HDFCXXCompilerFlags.cmake | 362 --------------------- config/cmake/HDFClangCXXFlags.cmake | 52 +++ config/cmake/HDFClangFlags.cmake | 73 +++++ config/cmake/HDFCompilerCXXFlags.cmake | 162 +++++++++ config/cmake/HDFCompilerFlags.cmake | 292 +++-------------- config/cmake/HDFCompilerFortranFlags.cmake | 86 +++++ config/cmake/HDFFortranCompilerFlags.cmake | 158 --------- config/cmake/HDFGnuCXXFlags.cmake | 192 +++++++++++ config/cmake/HDFGnuFlags.cmake | 195 +++++++++++ config/cmake/HDFGnuFortranFlags.cmake | 90 +++++ config/cmake/HDFIntelCXXFlags.cmake | 93 ++++++ config/cmake/HDFIntelFlags.cmake | 106 ++++++ config/cmake/HDFIntelFortranFlags.cmake | 65 ++++ config/cmake/HDFMsvcCXXFlags.cmake | 26 ++ config/cmake/HDFMsvcFlags.cmake | 25 ++ config/cmake/HDFNvhpcCXXFlags.cmake | 33 ++ config/cmake/HDFNvhpcFlags.cmake | 28 ++ config/cmake/HDFNvhpcFortranFlags.cmake | 38 +++ release_docs/RELEASE.txt | 18 + src/H5build_settings.cmake.c.in | 6 +- src/libhdf5.settings.cmake.in | 6 +- 24 files changed, 1345 insertions(+), 787 deletions(-) delete mode 100644 config/cmake/HDFCXXCompilerFlags.cmake create mode 100644 config/cmake/HDFClangCXXFlags.cmake create mode 100644 config/cmake/HDFClangFlags.cmake create mode 100644 config/cmake/HDFCompilerCXXFlags.cmake create mode 100644 config/cmake/HDFCompilerFortranFlags.cmake delete mode 100644 config/cmake/HDFFortranCompilerFlags.cmake create mode 100644 config/cmake/HDFGnuCXXFlags.cmake create mode 100644 config/cmake/HDFGnuFlags.cmake create mode 100644 config/cmake/HDFGnuFortranFlags.cmake create mode 100644 config/cmake/HDFIntelCXXFlags.cmake create mode 100644 config/cmake/HDFIntelFlags.cmake create mode 100644 config/cmake/HDFIntelFortranFlags.cmake create mode 100644 config/cmake/HDFMsvcCXXFlags.cmake create mode 100644 config/cmake/HDFMsvcFlags.cmake create mode 100644 config/cmake/HDFNvhpcCXXFlags.cmake create mode 100644 config/cmake/HDFNvhpcFlags.cmake create mode 100644 config/cmake/HDFNvhpcFortranFlags.cmake diff --git a/.github/workflows/cmake-analysis.yml b/.github/workflows/cmake-analysis.yml index 36dea0dc39e..a978205b303 100644 --- a/.github/workflows/cmake-analysis.yml +++ b/.github/workflows/cmake-analysis.yml @@ -106,7 +106,7 @@ jobs: - name: Run ctest (Linux_coverage) run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH_COV,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}_COV,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug -VV -O hdf5.log shell: bash continue-on-error: true @@ -206,7 +206,7 @@ jobs: - name: Run ctest (Linux_Leak) run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-LEAK,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-LEAK,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug -VV -O hdf5.log shell: bash continue-on-error: true @@ -306,7 +306,7 @@ jobs: - name: Run ctest (Linux_Address) run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-ADDR,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-ADDR,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug -VV -O hdf5.log shell: bash continue-on-error: true @@ -406,7 +406,7 @@ jobs: - name: Run ctest (Linux_UndefinedBehavior) run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-UNDEF,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-UNDEF,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Debug -VV -O hdf5.log shell: bash continue-on-error: true diff --git a/.github/workflows/cmake-script.yml b/.github/workflows/cmake-script.yml index f30504f10da..617eb4b0236 100644 --- a/.github/workflows/cmake-script.yml +++ b/.github/workflows/cmake-script.yml @@ -111,7 +111,7 @@ jobs: - name: Run ctest script (Windows) run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=VS202264,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }},LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=VS202264,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log shell: bash continue-on-error: true @@ -200,7 +200,7 @@ jobs: - name: Run ctest (Linux) run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-GCC,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-GCC,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log shell: bash continue-on-error: true @@ -302,7 +302,7 @@ jobs: id: run-ctest run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-Clang,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-Clang,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log shell: bash continue-on-error: true @@ -387,7 +387,7 @@ jobs: - name: Run ctest (Linux S3) run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-S3,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-S3,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log shell: bash continue-on-error: true @@ -493,7 +493,7 @@ jobs: CXX: ${{ steps.setup-fortran.outputs.cc }} run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-Intel,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=VS202264,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-Intel,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=VS202264,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log shell: pwsh continue-on-error: true @@ -588,7 +588,7 @@ jobs: CXX: ${{ steps.setup-fortran.outputs.cxx }} run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-Intel,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-Intel,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log shell: bash continue-on-error: true @@ -682,7 +682,7 @@ jobs: - name: Run ctest (Linux_clang) run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-Clang,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-Clang,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log shell: bash continue-on-error: true diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a60d9c0c5c..863b8561a67 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1133,7 +1133,7 @@ if (EXISTS "${HDF5_SOURCE_DIR}/fortran" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/for option (HDF5_BUILD_FORTRAN "Build FORTRAN support" OFF) if (HDF5_BUILD_FORTRAN) message (VERBOSE "Fortran compiler ID is ${CMAKE_Fortran_COMPILER_ID}") - include (${HDF_RESOURCES_DIR}/HDFFortranCompilerFlags.cmake) + include (${HDF_RESOURCES_DIR}/HDFCompilerFortranFlags.cmake) include (${HDF_RESOURCES_DIR}/HDF5UseFortran.cmake) set (LINK_Fortran_LIBS ${LINK_LIBS}) @@ -1193,7 +1193,7 @@ if (EXISTS "${HDF5_SOURCE_DIR}/c++" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/c++") endif () endif () - include (${HDF_RESOURCES_DIR}/HDFCXXCompilerFlags.cmake) + include (${HDF_RESOURCES_DIR}/HDFCompilerCXXFlags.cmake) add_subdirectory (c++) if (HDF5_BUILD_HL_LIB) diff --git a/config/cmake/HDFCXXCompilerFlags.cmake b/config/cmake/HDFCXXCompilerFlags.cmake deleted file mode 100644 index b6c14efd931..00000000000 --- a/config/cmake/HDFCXXCompilerFlags.cmake +++ /dev/null @@ -1,362 +0,0 @@ -# -# Copyright by The HDF Group. -# All rights reserved. -# -# This file is part of HDF5. The full HDF5 copyright notice, including -# terms governing use, modification, and redistribution, is contained in -# the LICENSE file, which can be found at the root of the source code -# distribution tree, or in https://www.hdfgroup.org/licenses. -# If you do not have access to either file, you may request a copy from -# help@hdfgroup.org. -# -ENABLE_LANGUAGE (CXX) - -set (CMAKE_CXX_STANDARD 11) -set (CMAKE_CXX_STANDARD_REQUIRED TRUE) - -set (CMAKE_CXX_EXTENSIONS OFF) - -set (CMAKE_CXX_FLAGS "${CMAKE_CXX_SANITIZER_FLAGS} ${CMAKE_CXX_FLAGS}") -message (VERBOSE "Warnings Configuration: CXX default: ${CMAKE_CXX_FLAGS}") -#----------------------------------------------------------------------------- -# Compiler specific flags : Shouldn't there be compiler tests for these -#----------------------------------------------------------------------------- -if (WIN32 AND (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" OR CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM")) - set (_INTEL_WINDOWS 1) -endif () - -if (WIN32 AND CMAKE_CXX_COMPILER_ID MATCHES "[Cc]lang" AND "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC") - set (_CLANG_MSVC_WINDOWS 1) -endif() - -# MSVC 14.28 enables C5105, but the Windows SDK 10.0.18362.0 triggers it. -if ((_CLANG_MSVC_WINDOWS OR CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") AND CMAKE_CXX_COMPILER_LOADED) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") - if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.28) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd5105") - endif () -endif () - -if (CMAKE_CXX_COMPILER_ID STREQUAL SunPro AND CMAKE_CXX_COMPILER_LOADED) - if (NOT DEFINED CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION) - if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.13) - if (NOT CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD EQUAL 98) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++03") - endif () - else () - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -library=stlport4") - endif () - endif () -endif () - -if (CMAKE_CXX_COMPILER_ID STREQUAL "NVHPC" AND CMAKE_CXX_COMPILER_LOADED) - if (NOT DEFINED CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION) - if (NOT CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD EQUAL 11) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C11_STANDARD_COMPILE_OPTION}") - endif () - endif () - if (NOT ${HDF_CFG_NAME} MATCHES "Debug" AND NOT ${HDF_CFG_NAME} MATCHES "Developer") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Minform=warn") - if (NOT ${HDF_CFG_NAME} MATCHES "RelWithDebInfo") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s") - endif () - else () - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Mbounds -gopt -g") - endif () -endif () - -if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_LOADED) - set (CMAKE_CXX_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_CXX_FLAGS}") - if (${HDF_CFG_NAME} MATCHES "Debug" OR ${HDF_CFG_NAME} MATCHES "Developer") - if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Og -ftrapv -fno-common") - endif () - else () - if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstdarg-opt") - endif () - if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0) - if (HDF5_ENABLE_BUILD_DIAGS) - message (STATUS "... default color and URL extended diagnostic messages enabled") - else () - message (STATUS "... disable color and URL extended diagnostic messages") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-urls=never -fno-diagnostics-color") - endif () - endif () - endif () -endif () - -#----------------------------------------------------------------------------- -# Option to allow the user to disable compiler warnings -#----------------------------------------------------------------------------- -if (HDF5_DISABLE_COMPILER_WARNINGS) - message (STATUS "....Compiler warnings are suppressed") - # MSVC uses /w to suppress warnings. It also complains if another - # warning level is given, so remove it. - if (MSVC) - set (HDF5_WARNINGS_BLOCKED 1) - if (CMAKE_CXX_COMPILER_LOADED) - string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W0") - endif () - endif () - if (WIN32) - add_definitions (-D_CRT_SECURE_NO_WARNINGS) - endif () - - # Most compilers use -w to suppress warnings. - if (NOT HDF5_WARNINGS_BLOCKED) - if (CMAKE_CXX_COMPILER_LOADED) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w") - endif () - endif () -endif () - -#----------------------------------------------------------------------------- -# HDF5 library compile options - to be made available to all targets -#----------------------------------------------------------------------------- - -if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS") - list (APPEND HDF5_CMAKE_CXX_FLAGS "-erroff=%none -DBSD_COMP") -else () - # General flags - # - # Note that some of the flags listed here really should be developer - # flags (listed in a separate variable, below) but we put them here - # because they are not raised by the current code and we'd like to - # know if they do start showing up. - # - # NOTE: Don't add -Wpadded here since we can't/won't fix the (many) - # warnings that are emitted. If you need it, add it at configure time. - if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - if (_INTEL_WINDOWS) - ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-general") - else () - ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/general") - endif() - if (NOT _INTEL_WINDOWS) - if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0) - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/15") - endif() - if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18.0) - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/18") - endif() - endif() - elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_LOADED - AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) - # add the general CXX flags for g++ compiler versions 4.8 and above. - ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-general") - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-error-general") - endif () - elseif (CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM") - if (_INTEL_WINDOWS) - ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-general") - else () - ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/general") - endif() - elseif (CMAKE_CXX_COMPILER_ID MATCHES "[Cc]lang") - ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/general") - elseif (CMAKE_CXX_COMPILER_ID STREQUAL "PGI") - list (APPEND HDF5_CMAKE_CXX_FLAGS "-Minform=inform") - endif () - message (VERBOSE "CMAKE_CXX_FLAGS_GENERAL=${HDF5_CMAKE_CXX_FLAGS}") -endif () - -#----------------------------------------------------------------------------- -# Option to allow the user to enable developer warnings -# Developer warnings (suggestions from gcc, not code problems) -#----------------------------------------------------------------------------- -if (HDF5_ENABLE_DEV_WARNINGS) - message (STATUS "....HDF5 developer group warnings are enabled") - if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - if (_INTEL_WINDOWS) - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-developer-general") - else () - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/developer-general") - endif() - elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - # Use the C warnings as CXX warnings are the same - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-general") - elseif (CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM") - if (_INTEL_WINDOWS) - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-developer-general") - else () - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/developer-general") - endif() - elseif (CMAKE_CXX_COMPILER_ID MATCHES "[Cc]lang") - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/developer-general") - endif () -else () - if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - # Use the C warnings as CXX warnings are the same - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-general") - elseif (CMAKE_CXX_COMPILER_ID MATCHES "[Cc]lang") - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/no-developer-general") - endif () -endif () - -if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - # Technically, variable-length arrays are part of the C99 standard, but - # we should approach them a bit cautiously... Only needed for gcc 4.X - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0 AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) - # Use the C warnings as CXX warnings are the same - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/4.8-4.last") - endif () - - # Append more extra warning flags that only gcc 4.8+ knows about - if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8) - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-4.8") - if (HDF5_ENABLE_DEV_WARNINGS) - # Use the C warnings as CXX warnings are the same - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-developer-4.8") - else () - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-cxx-developer-4.8") - endif () - endif () - - # Append more extra warning flags that only gcc 4.9+ knows about - if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9) - # Use the C warnings as CXX warnings are the same - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-4.9") - endif () - - # Append more extra warning flags that only gcc 5.1+ knows about - if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) - # autotools always add the C flags with the CXX flags - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-5") - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-error-5") - endif () - - # Append more extra warning flags that only gcc 6.x+ knows about - if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.0) - # Use the C warnings as CXX warnings are the same - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/6") - endif () - - # Append more extra warning flags that only gcc 7.x+ knows about - if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0) - # Use the C warnings as CXX warnings are the same - ADD_H5_FLAGS (H5_CXxFLAGS2 "${HDF5_SOURCE_DIR}/config/gnu-warnings/7") - if (HDF5_ENABLE_DEV_WARNINGS) - # Use the C warnings as CXX warnings are the same - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-7") - #else () - # ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-7") - endif () - endif () - - # Append more extra warning flags that only gcc 8.x+ knows about - if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0) - # Use the C warnings as CXX warnings are the same - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/8") - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/error-8") - if (HDF5_ENABLE_DEV_WARNINGS) - # Use the C warnings as CXX warnings are the same - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-8") - else () - # autotools always add the C flags with the CXX flags - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-8") - endif () - endif () - - # Append more extra warning flags that only gcc 9.x+ knows about - if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0) - # Use the C warnings as CXX warnings are the same - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-9") - endif () - - # Append more extra warning flags that only gcc 9.3+ knows about - if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.3) - # do not use C warnings, gnu-warnings 9.3, no cxx warnings - # ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/9.3") - endif () - - # Append more extra warning flags that only gcc 10.x+ knows about - if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0) - if (HDF5_ENABLE_DEV_WARNINGS) - # Use the C warnings as CXX warnings are the same - ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-10") - #else () - # ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-10") - endif () - endif () -endif () - -#----------------------------------------------------------------------------- -# Option to allow the user to enable all warnings -#----------------------------------------------------------------------------- -if (HDF5_ENABLE_ALL_WARNINGS) - message (STATUS "....All Warnings are enabled") - if (MSVC) - if (HDF5_ENABLE_DEV_WARNINGS) - if (CMAKE_CXX_COMPILER_LOADED) - string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - list (APPEND HDF5_CMAKE_CXX_FLAGS "/Wall" "/wd4668") - endif () - else () - if (CMAKE_CXX_COMPILER_LOADED) - string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - list (APPEND HDF5_CMAKE_CXX_FLAGS "/W3" "/wd4100" "/wd4706" "/wd4127") - endif () - endif () - else () - if (CMAKE_CXX_COMPILER_LOADED) - list (APPEND HDF5_CMAKE_CXX_FLAGS ${H5_CXXFLAGS}) - endif () - endif () -endif () - -#----------------------------------------------------------------------------- -# This is in here to help some of the GCC based IDES like Eclipse -# and code blocks parse the compiler errors and warnings better. -#----------------------------------------------------------------------------- -if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_LOADED) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmessage-length=0") -endif () - -#----------------------------------------------------------------------------- -# Option for --enable-symbols -# This option will force/override the default setting for all configurations -#----------------------------------------------------------------------------- -if (HDF5_ENABLE_SYMBOLS MATCHES "YES") - if (CMAKE_CXX_COMPILER_LOADED) - if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT _INTEL_WINDOWS) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") - elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" AND NOT _INTEL_WINDOWS) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") - elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") - endif () - endif () -elseif (HDF5_ENABLE_SYMBOLS MATCHES "NO") - if (CMAKE_CXX_COMPILER_LOADED) - if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT _INTEL_WINDOWS) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-s") - elseif (CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM" AND NOT _INTEL_WINDOWS) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-s") - elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s") - endif () - endif () -endif () - -#----------------------------------------------------------------------------- -# Option for --enable-profiling -# This option will force/override the default setting for all configurations -#----------------------------------------------------------------------------- -if (HDF5_ENABLE_PROFILING) - if (CMAKE_CXX_COMPILER_LOADED) - list (APPEND HDF5_CMAKE_CXX_FLAGS "${PROFILE_CXXFLAGS}") - endif () -endif () - -#----------------------------------------------------------------------------- -# Option for --enable-optimization -# This option will force/override the default setting for all configurations -#----------------------------------------------------------------------------- -if (HDF5_ENABLE_OPTIMIZATION) - if (CMAKE_CXX_COMPILER_LOADED) - list (APPEND HDF5_CMAKE_CXX_FLAGS "${OPTIMIZE_CXXFLAGS}") - endif () -endif () diff --git a/config/cmake/HDFClangCXXFlags.cmake b/config/cmake/HDFClangCXXFlags.cmake new file mode 100644 index 00000000000..90b2f07a33f --- /dev/null +++ b/config/cmake/HDFClangCXXFlags.cmake @@ -0,0 +1,52 @@ +# +# Copyright by The HDF Group. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://www.hdfgroup.org/licenses. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. +# + +############################################################################### +# This file included from HDFCompilerFlags.cmake with +# if (CMAKE_CXX_COMPILER_ID MATCHES "[Cc]lang") +############################################################################### + +#----------------------------------------------------------------------------- +# Compiler specific flags +#----------------------------------------------------------------------------- +if (WIN32 AND "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC") + set (_CLANG_MSVC_WINDOWS 1) +endif() + +#----------------------------------------------------------------------------- +# HDF5 library compile options - to be made available to all targets +#----------------------------------------------------------------------------- + +if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS") + # General flags + # + # Note that some of the flags listed here really should be developer + # flags (listed in a separate variable, below) but we put them here + # because they are not raised by the current code and we'd like to + # know if they do start showing up. + # + # NOTE: Don't add -Wpadded here since we can't/won't fix the (many) + # warnings that are emitted. If you need it, add it at configure time. + ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/general") + message (VERBOSE "CMAKE_CXX_FLAGS_GENERAL=${HDF5_CMAKE_CXX_FLAGS}") +endif () + +#----------------------------------------------------------------------------- +# Option to allow the user to enable developer warnings +# Developer warnings (suggestions from gcc, not code problems) +#----------------------------------------------------------------------------- +if (HDF5_ENABLE_DEV_WARNINGS) + message (STATUS "....HDF5 CXX developer group warnings are enabled") + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/developer-general") +else () + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/no-developer-general") +endif () diff --git a/config/cmake/HDFClangFlags.cmake b/config/cmake/HDFClangFlags.cmake new file mode 100644 index 00000000000..8b931d965fa --- /dev/null +++ b/config/cmake/HDFClangFlags.cmake @@ -0,0 +1,73 @@ +# +# Copyright by The HDF Group. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://www.hdfgroup.org/licenses. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. +# + +############################################################################### +# This file included from HDFCompilerFlags.cmake with +# if (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") +############################################################################### + +#----------------------------------------------------------------------------- +# Compiler specific flags +#----------------------------------------------------------------------------- +if (WIN32 AND "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC") + set (_CLANG_MSVC_WINDOWS 1) + if("x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Xlinker -stack:20000000") + endif() +endif () + +# Disable deprecation warnings for standard C functions. +# really only needed for newer versions of VS, but should +# not hurt other versions, and this will work into the +# future +if (MSVC OR _CLANG_MSVC_WINDOWS) + add_definitions (-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) +endif () + +#----------------------------------------------------------------------------- +# HDF5 library compile options - to be made available to all targets +#----------------------------------------------------------------------------- + +if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS") + # General flags + # + # Note that some of the flags listed here really should be developer + # flags (listed in a separate variable, below) but we put them here + # because they are not raised by the current code and we'd like to + # know if they do start showing up. + # + # NOTE: Don't add -Wpadded here since we can't/won't fix the (many) + # warnings that are emitted. If you need it, add it at configure time. + ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/general") + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/error-general") + message (VERBOSE "CMAKE_C_FLAGS_GENERAL=${HDF5_CMAKE_C_FLAGS}") +endif () + +#----------------------------------------------------------------------------- +# Option to allow the user to enable developer warnings +# Developer warnings (suggestions from gcc, not code problems) +#----------------------------------------------------------------------------- +if (HDF5_ENABLE_DEV_WARNINGS) + message (STATUS "....HDF5 developer group warnings are enabled") + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/developer-general") + + # Turn on -Winline warnings now only for non-Debug and + # non-Developer builds. For at least GNU compilers this + # flag appears to conflict specifically with the -Og + # optimization flag and will produce warnings about functions + # not being considered for inlining + if (NOT ${HDF_CFG_NAME} MATCHES "Debug" AND NOT ${HDF_CFG_NAME} MATCHES "Developer") + list (APPEND H5_CFLAGS "-Winline") + endif () +else () + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/no-developer-general") +endif () diff --git a/config/cmake/HDFCompilerCXXFlags.cmake b/config/cmake/HDFCompilerCXXFlags.cmake new file mode 100644 index 00000000000..1a8ffed0ee7 --- /dev/null +++ b/config/cmake/HDFCompilerCXXFlags.cmake @@ -0,0 +1,162 @@ +# +# Copyright by The HDF Group. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://www.hdfgroup.org/licenses. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. +# +ENABLE_LANGUAGE (CXX) + +set (CMAKE_CXX_STANDARD 11) +set (CMAKE_CXX_STANDARD_REQUIRED TRUE) + +set (CMAKE_CXX_EXTENSIONS OFF) + +set (CMAKE_CXX_FLAGS "${CMAKE_CXX_SANITIZER_FLAGS} ${CMAKE_CXX_FLAGS}") +message (VERBOSE "Warnings Configuration: CXX default: ${CMAKE_CXX_FLAGS}") +#----------------------------------------------------------------------------- +# Compiler specific flags +#----------------------------------------------------------------------------- +# MSVC 14.28 enables C5105, but the Windows SDK 10.0.18362.0 triggers it. +if ((_CLANG_MSVC_WINDOWS OR CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") AND CMAKE_CXX_COMPILER_LOADED) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") + if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.28) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd5105") + endif () +endif () + +if (CMAKE_CXX_COMPILER_ID STREQUAL SunPro AND CMAKE_CXX_COMPILER_LOADED) + if (NOT DEFINED CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION) + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.13) + if (NOT CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD EQUAL 98) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++03") + endif () + else () + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -library=stlport4") + endif () + endif () +endif () + +#----------------------------------------------------------------------------- +# Option to allow the user to disable compiler warnings +#----------------------------------------------------------------------------- +if (CMAKE_CXX_COMPILER_LOADED) + if (HDF5_DISABLE_COMPILER_WARNINGS) + message (STATUS "....Compiler warnings are suppressed") + # MSVC uses /w to suppress warnings. It also complains if another + # warning level is given, so remove it. + if (MSVC) + set (HDF5_WARNINGS_BLOCKED 1) + string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W0") + endif () + if (WIN32) + add_definitions (-D_CRT_SECURE_NO_WARNINGS) + endif () + + # Most compilers use -w to suppress warnings. + if (NOT HDF5_WARNINGS_BLOCKED) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w") + endif () + endif () + + if (CMAKE_CXX_COMPILER_ID MATCHES "NVHPC" ) + include (${HDF_RESOURCES_DIR}/HDFNvhpcCXXFlags.cmake) + endif () + + if (CMAKE_CXX_COMPILER_ID MATCHES "GNU") + include (${HDF_RESOURCES_DIR}/HDFGnuCXXFlags.cmake) + endif () + + if (CMAKE_CXX_COMPILER_ID MATCHES "Intel") + include (${HDF_RESOURCES_DIR}/HDFIntelCXXFlags.cmake) + endif () + + if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + include (${HDF_RESOURCES_DIR}/HDFMsvcCXXFlags.cmake) + endif () + + #because this will match other compilers with clang in the name this should be checked last + if (CMAKE_CXX_COMPILER_ID MATCHES "[Cc]lang") + include (${HDF_RESOURCES_DIR}/HDFClangCXXFlags.cmake) + endif () + + #----------------------------------------------------------------------------- + # HDF5 library compile options - to be made available to all targets + #----------------------------------------------------------------------------- + + if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS") + list (APPEND HDF5_CMAKE_CXX_FLAGS "-erroff=%none -DBSD_COMP") + else () + # General flags + # + # Note that some of the flags listed here really should be developer + # flags (listed in a separate variable, below) but we put them here + # because they are not raised by the current code and we'd like to + # know if they do start showing up. + # + # NOTE: Don't add -Wpadded here since we can't/won't fix the (many) + # warnings that are emitted. If you need it, add it at configure time. + if (CMAKE_CXX_COMPILER_ID STREQUAL "PGI") + list (APPEND HDF5_CMAKE_CXX_FLAGS "-Minform=inform") + endif () + message (VERBOSE "CMAKE_CXX_FLAGS_GENERAL=${HDF5_CMAKE_CXX_FLAGS}") + endif () + + #----------------------------------------------------------------------------- + # Option to allow the user to enable all warnings + #----------------------------------------------------------------------------- + if (HDF5_ENABLE_ALL_WARNINGS) + message (STATUS "....All Warnings are enabled") + if (MSVC) + if (HDF5_ENABLE_DEV_WARNINGS) + string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + list (APPEND HDF5_CMAKE_CXX_FLAGS "/Wall" "/wd4668") + else () + string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + list (APPEND HDF5_CMAKE_CXX_FLAGS "/W3" "/wd4100" "/wd4706" "/wd4127") + endif () + else () + list (APPEND HDF5_CMAKE_CXX_FLAGS ${H5_CXXFLAGS}) + endif () + endif () + + #----------------------------------------------------------------------------- + # Option for --enable-profiling + # This option will force/override the default setting for all configurations + #----------------------------------------------------------------------------- + if (HDF5_ENABLE_PROFILING) + list (APPEND HDF5_CMAKE_CXX_FLAGS "${PROFILE_CXXFLAGS}") + endif () + + #----------------------------------------------------------------------------- + # Option for --enable-optimization + # This option will force/override the default setting for all configurations + #----------------------------------------------------------------------------- + if (HDF5_ENABLE_OPTIMIZATION) + list (APPEND HDF5_CMAKE_CXX_FLAGS "${OPTIMIZE_CXXFLAGS}") + endif () +endif () + +#----------------------------------------------------------------------------- +# The build mode flags are not added to CMAKE_CXX_FLAGS, so create a separate +# variable for them so they can be written out to libhdf5.settings and +# H5build_settings.c +#----------------------------------------------------------------------------- +if ("${HDF_CFG_NAME}" STREQUAL "Debug") + set (HDF5_BUILD_MODE_CXX_FLAGS "${CMAKE_CXX_FLAGS_DEBUG}") +elseif ("${HDF_CFG_NAME}" STREQUAL "Developer") + set (HDF5_BUILD_MODE_CXX_FLAGS "${CMAKE_CXX_FLAGS_DEVELOPER}") +elseif ("${HDF_CFG_NAME}" STREQUAL "Release") + set (HDF5_BUILD_MODE_CXX_FLAGS "${CMAKE_CXX_FLAGS_RELEASE}") +elseif ("${HDF_CFG_NAME}" STREQUAL "MinSizeRel") + set (HDF5_BUILD_MODE_CXX_FLAGS "${CMAKE_CXX_FLAGS_MINSIZEREL}") +elseif ("${HDF_CFG_NAME}" STREQUAL "RelWithDebInfo") + set (HDF5_BUILD_MODE_CXX_FLAGS "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") +else () + set (HDF5_BUILD_MODE_CXX_FLAGS "") +endif () diff --git a/config/cmake/HDFCompilerFlags.cmake b/config/cmake/HDFCompilerFlags.cmake index 78aa3c37027..d00fd8209de 100644 --- a/config/cmake/HDFCompilerFlags.cmake +++ b/config/cmake/HDFCompilerFlags.cmake @@ -16,77 +16,17 @@ set (CMAKE_C_FLAGS "${CMAKE_C11_STANDARD_COMPILE_OPTION} ${CMAKE_C_FLAGS}") set (CMAKE_C_FLAGS "${CMAKE_C_SANITIZER_FLAGS} ${CMAKE_C_FLAGS}") message (VERBOSE "Warnings Configuration: C default: ${CMAKE_C_FLAGS}") #----------------------------------------------------------------------------- -# Compiler specific flags : Shouldn't there be compiler tests for these +# Compiler specific flags #----------------------------------------------------------------------------- -if (WIN32 AND (CMAKE_C_COMPILER_ID STREQUAL "Intel" OR CMAKE_C_COMPILER_ID MATCHES "IntelLLVM")) - set (_INTEL_WINDOWS 1) -endif () - -if (WIN32 AND CMAKE_C_COMPILER_ID MATCHES "[Cc]lang" AND "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC") - set (_CLANG_MSVC_WINDOWS 1) -endif () - # Disable deprecation warnings for standard C functions. # really only needed for newer versions of VS, but should # not hurt other versions, and this will work into the # future -if (MSVC OR _INTEL_WINDOWS OR _CLANG_MSVC_WINDOWS) - add_definitions (-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) -endif () - if (MSVC) + add_definitions (-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stack:10000000") endif () -# MSVC 14.28 enables C5105, but the Windows SDK 10.0.18362.0 triggers it. -if (CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 19.28) - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -wd5105") -endif () - -if(_CLANG_MSVC_WINDOWS AND "x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Xlinker -stack:20000000") -endif() - -if (CMAKE_C_COMPILER_ID STREQUAL "NVHPC" ) - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Minform=warn") - if (NOT ${HDF_CFG_NAME} MATCHES "Debug" AND NOT ${HDF_CFG_NAME} MATCHES "Developer") - if (NOT ${HDF_CFG_NAME} MATCHES "RelWithDebInfo") - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s") - endif () - else () - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Mbounds -gopt") - endif () -endif () - -if (CMAKE_C_COMPILER_ID STREQUAL "GNU") - set (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}") - if (${HDF_CFG_NAME} MATCHES "Debug" OR ${HDF_CFG_NAME} MATCHES "Developer") - if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0) - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Og -ftrapv -fno-common") - endif () - else () - if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0 AND - NOT CMAKE_C_CLANG_TIDY) - # `clang-tidy` does not understand -fstdarg-opt - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstdarg-opt") - endif () - if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0) - #----------------------------------------------------------------------------- - # Option to allow the user to enable build extended diagnostics - # - # This should NOT be on by default as it can cause process issues. - #----------------------------------------------------------------------------- - option (HDF5_ENABLE_BUILD_DIAGS "Enable color and URL extended diagnostic messages" OFF) - mark_as_advanced (HDF5_ENABLE_BUILD_DIAGS) - if (HDF5_ENABLE_BUILD_DIAGS) - message (STATUS "... default color and URL extended diagnostic messages enabled") - else () - message (STATUS "... disable color and URL extended diagnostic messages") - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-urls=never -fno-diagnostics-color") - endif () - endif () - endif () -endif () #----------------------------------------------------------------------------- # Option to allow the user to disable compiler warnings @@ -116,6 +56,27 @@ if (HDF5_DISABLE_COMPILER_WARNINGS) endif () endif () +if (CMAKE_C_COMPILER_ID MATCHES "NVHPC" ) + include (${HDF_RESOURCES_DIR}/HDFNvhpcFlags.cmake) +endif () + +if (CMAKE_C_COMPILER_ID MATCHES "GNU") + include (${HDF_RESOURCES_DIR}/HDFGnuFlags.cmake) +endif () + +if (CMAKE_C_COMPILER_ID MATCHES "Intel") + include (${HDF_RESOURCES_DIR}/HDFIntelFlags.cmake) +endif () + +if (CMAKE_C_COMPILER_ID MATCHES "MSVC") + include (${HDF_RESOURCES_DIR}/HDFMsvcFlags.cmake) +endif () + +#because this will match other compilers with clang in the name this should be checked last +if (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") + include (${HDF_RESOURCES_DIR}/HDFClangFlags.cmake) +endif () + #----------------------------------------------------------------------------- # HDF5 library compile options - to be made available to all targets #----------------------------------------------------------------------------- @@ -144,43 +105,7 @@ else () # # NOTE: Don't add -Wpadded here since we can't/won't fix the (many) # warnings that are emitted. If you need it, add it at configure time. - if (CMAKE_C_COMPILER_ID STREQUAL "Intel") - if (_INTEL_WINDOWS) - ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-general") - else () - ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/general") - endif() - if (NOT _INTEL_WINDOWS) - if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/15") - endif () - # this is just a failsafe - list (APPEND H5_CFLAGS "-finline-functions") - if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 18.0) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/18") - endif () - endif () - elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU") - # Add general CFlags for GCC versions 4.8 and above - if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) - ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/general") - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/error-general") - endif () - # gcc automatically inlines based on the optimization level - # this is just a failsafe - list (APPEND H5_CFLAGS "-finline-functions") - elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM") - if (_INTEL_WINDOWS) - ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-general") - else () - # this is just a failsafe - list (APPEND H5_CFLAGS "-finline-functions") - ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/general") - endif () - elseif (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") - ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/general") - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/error-general") - elseif (CMAKE_C_COMPILER_ID STREQUAL "PGI") + if (CMAKE_C_COMPILER_ID STREQUAL "PGI") list (APPEND HDF5_CMAKE_C_FLAGS "-Minform=inform") endif () message (VERBOSE "CMAKE_C_FLAGS_GENERAL=${HDF5_CMAKE_C_FLAGS}") @@ -195,134 +120,6 @@ if (${HDF_CFG_NAME} MATCHES "Developer") # Developer build modes should always have these types of warnings enabled set (HDF5_ENABLE_DEV_WARNINGS ON CACHE BOOL "Enable HDF5 developer group warnings" FORCE) endif () -if (HDF5_ENABLE_DEV_WARNINGS) - message (STATUS "....HDF5 developer group warnings are enabled") - if (CMAKE_C_COMPILER_ID STREQUAL "Intel") - if (_INTEL_WINDOWS) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-developer-general") - else () - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/developer-general") - endif () - elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-general") - elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM") - if (_INTEL_WINDOWS) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-developer-general") - else () - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/developer-general") - endif () - elseif (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/developer-general") - endif () - - # Turn on -Winline warnings now only for non-Debug and - # non-Developer builds. For at least GNU compilers this - # flag appears to conflict specifically with the -Og - # optimization flag and will produce warnings about functions - # not being considered for inlining - if (NOT ${HDF_CFG_NAME} MATCHES "Debug" AND NOT ${HDF_CFG_NAME} MATCHES "Developer") - if (CMAKE_C_COMPILER_ID STREQUAL "GNU") - list (APPEND H5_CFLAGS "-Winline") - elseif (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND NOT _INTEL_WINDOWS) - list (APPEND H5_CFLAGS "-Winline") - elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" AND NOT _INTEL_WINDOWS) - list (APPEND H5_CFLAGS "-Winline") - elseif (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") - list (APPEND H5_CFLAGS "-Winline") - endif () - endif () -else () - if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-general") - elseif (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/clang-warnings/no-developer-general") - endif () -endif () - -if (CMAKE_C_COMPILER_ID STREQUAL "GNU") - # Technically, variable-length arrays are part of the C99 standard, but - # we should approach them a bit cautiously... Only needed for gcc 4.X - if (CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0 AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/4.8-4.last") - endif () - - # Append more extra warning flags that only gcc 4.8+ knows about - if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.8) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/4.8") - if (HDF5_ENABLE_DEV_WARNINGS) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-4.8") - else () - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-4.8") - endif () - endif () - - # Append more extra warning flags that only gcc 4.9+ knows about - if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/4.9") - endif () - - # Append more extra warning flags that only gcc 5.x+ knows about - if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/5") - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/error-5") - endif () - - # Append more extra warning flags that only gcc 6.x+ knows about - if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.0) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/6") - endif () - - # Append more extra warning flags that only gcc 7.x+ knows about - if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 7.0) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/7") - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/error-7") - if (HDF5_ENABLE_DEV_WARNINGS) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-7") - #else () - # ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-7") - endif () - endif () - - # Append more extra warning flags that only gcc 8.x+ knows about - if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 8.0) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/8") - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/error-8") - if (HDF5_ENABLE_DEV_WARNINGS) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-8") - else () - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-8") - endif () - endif () - - # Append more extra warning flags that only gcc 9.x+ knows about - if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 9.0) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/9") - endif () - - # Append more extra warning flags that only gcc 9.3+ knows about - if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 9.3) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/9.3") - endif () - - # Append more extra warning flags that only gcc 10.x+ knows about - if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0) - if (HDF5_ENABLE_DEV_WARNINGS) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-10") - #else () - # ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-10") - endif () - endif () - - # Append more extra warning flags that only gcc 12.x+ knows about - # or which should only be enabled for gcc 12.x+ - if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 12.0) - if (HDF5_ENABLE_DEV_WARNINGS) - ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-12") - #else () - # ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-12") - endif () - endif () -endif () #----------------------------------------------------------------------------- # Option to allow the user to enable debug output @@ -363,14 +160,6 @@ if (HDF5_ENABLE_ALL_WARNINGS) endif () endif () -#----------------------------------------------------------------------------- -# This is in here to help some of the GCC based IDES like Eclipse -# and code blocks parse the compiler errors and warnings better. -#----------------------------------------------------------------------------- -if (CMAKE_C_COMPILER_ID STREQUAL "GNU") - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0") -endif () - #----------------------------------------------------------------------------- # Option for --enable-asserts # By default, CMake adds NDEBUG to CMAKE_${lang}_FLAGS for Release build types @@ -393,19 +182,6 @@ MARK_AS_ADVANCED (HDF5_ENABLE_ASSERTS) #option (HDF5_ENABLE_SYMBOLS "Add debug symbols to the library independent of the build mode and optimization level." OFF) set (HDF5_ENABLE_SYMBOLS "OFF" CACHE STRING "Add debug symbols to the library independent of the build mode and optimization level (OFF NO YES)") set_property (CACHE HDF5_ENABLE_SYMBOLS PROPERTY STRINGS OFF NO YES) -if (HDF5_ENABLE_SYMBOLS MATCHES "YES") - if (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND NOT _INTEL_WINDOWS) - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g") - elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU") - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -fno-omit-frame-pointer") - endif () -elseif (HDF5_ENABLE_SYMBOLS MATCHES "NO") - if (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND NOT _INTEL_WINDOWS) - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-s") - elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU") - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s") - endif () -endif () MARK_AS_ADVANCED (HDF5_ENABLE_SYMBOLS) #----------------------------------------------------------------------------- @@ -427,3 +203,23 @@ if (HDF5_ENABLE_OPTIMIZATION) list (APPEND HDF5_CMAKE_C_FLAGS "${OPTIMIZE_CFLAGS}") endif () MARK_AS_ADVANCED (HDF5_ENABLE_OPTIMIZATION) + +#----------------------------------------------------------------------------- +# The build mode flags are not added to CMAKE_C_FLAGS, so create a separate +# variable for them so they can be written out to libhdf5.settings and +# H5build_settings.c +#----------------------------------------------------------------------------- +if ("${HDF_CFG_NAME}" STREQUAL "Debug") + set (HDF5_BUILD_MODE_C_FLAGS "${CMAKE_C_FLAGS_DEBUG}") +elseif ("${HDF_CFG_NAME}" STREQUAL "Developer") + set (HDF5_BUILD_MODE_C_FLAGS "${CMAKE_C_FLAGS_DEVELOPER}") +elseif ("${HDF_CFG_NAME}" STREQUAL "Release") + set (HDF5_BUILD_MODE_C_FLAGS "${CMAKE_C_FLAGS_RELEASE}") +elseif ("${HDF_CFG_NAME}" STREQUAL "MinSizeRel") + set (HDF5_BUILD_MODE_C_FLAGS "${CMAKE_C_FLAGS_MINSIZEREL}") +elseif ("${HDF_CFG_NAME}" STREQUAL "RelWithDebInfo") + set (HDF5_BUILD_MODE_C_FLAGS "${CMAKE_C_FLAGS_RELWITHDEBINFO}") +else () + set (HDF5_BUILD_MODE_C_FLAGS "") +endif () + diff --git a/config/cmake/HDFCompilerFortranFlags.cmake b/config/cmake/HDFCompilerFortranFlags.cmake new file mode 100644 index 00000000000..17d7af3ede5 --- /dev/null +++ b/config/cmake/HDFCompilerFortranFlags.cmake @@ -0,0 +1,86 @@ +# +# Copyright by The HDF Group. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://www.hdfgroup.org/licenses. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. +# + +message (VERBOSE "Warnings Configuration: default Fortran: ${CMAKE_Fortran_FLAGS}") + +#----------------------------------------------------------------------------- +# Option to allow the user to disable compiler warnings +#----------------------------------------------------------------------------- +if (HDF5_DISABLE_COMPILER_WARNINGS) + message (STATUS "....Compiler warnings are suppressed") + # MSVC uses /w to suppress warnings. It also complains if another + # warning level is given, so remove it. + if (MSVC) + set (HDF5_WARNINGS_BLOCKED 1) + endif () + if (WIN32) + add_definitions (-D_CRT_SECURE_NO_WARNINGS) + endif () + # Borland uses -w- to suppress warnings. + if (BORLAND) + set (HDF5_WARNINGS_BLOCKED 1) + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -w-") + endif () + + # Most compilers use -w to suppress warnings. + if (NOT HDF5_WARNINGS_BLOCKED) + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -w") + endif () +endif () + +if (CMAKE_Fortran_COMPILER_ID MATCHES "NVHPC" ) + include (${HDF_RESOURCES_DIR}/HDFNvhpcFortranFlags.cmake) +endif () + +if (CMAKE_Fortran_COMPILER_ID MATCHES "GNU") + include (${HDF_RESOURCES_DIR}/HDFGnuFortranFlags.cmake) +endif () + +if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") + include (${HDF_RESOURCES_DIR}/HDFIntelFortranFlags.cmake) +endif () + +#----------------------------------------------------------------------------- +# HDF5 library compile options - to be made available to all targets +#----------------------------------------------------------------------------- +if (CMAKE_Fortran_COMPILER_ID STREQUAL "NAG") + message (STATUS "... Select IEEE floating-point mode full") + list (APPEND HDF5_CMAKE_Fortran_FLAGS "-ieee=full") +endif () + +if (NOT MSVC AND NOT MINGW) + # General flags + if (CMAKE_Fortran_COMPILER_ID STREQUAL "PGI") + list (APPEND HDF5_CMAKE_Fortran_FLAGS "-Mfreeform" "-Mdclchk" "-Mstandard" "-Mallocatable=03") + endif () + message (VERBOSE "HDF5_CMAKE_Fortran_FLAGS=${HDF5_CMAKE_Fortran_FLAGS}") +endif () + +#----------------------------------------------------------------------------- +# The build mode flags are not added to CMAKE_Fortran_FLAGS, so create a separate +# variable for them so they can be written out to libhdf5.settings and +# H5build_settings.c +#----------------------------------------------------------------------------- +if ("${HDF_CFG_NAME}" STREQUAL "Debug") + set (HDF5_BUILD_MODE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS_DEBUG}") +elseif ("${HDF_CFG_NAME}" STREQUAL "Developer") + set (HDF5_BUILD_MODE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS_DEVELOPER}") +elseif ("${HDF_CFG_NAME}" STREQUAL "Release") + set (HDF5_BUILD_MODE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS_RELEASE}") +elseif ("${HDF_CFG_NAME}" STREQUAL "MinSizeRel") + set (HDF5_BUILD_MODE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS_MINSIZEREL}") +elseif ("${HDF_CFG_NAME}" STREQUAL "RelWithDebInfo") + set (HDF5_BUILD_MODE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS_RELWITHDEBINFO}") +else () + set (HDF5_BUILD_MODE_Fortran_FLAGS "") +endif () + diff --git a/config/cmake/HDFFortranCompilerFlags.cmake b/config/cmake/HDFFortranCompilerFlags.cmake deleted file mode 100644 index f238c7e82cc..00000000000 --- a/config/cmake/HDFFortranCompilerFlags.cmake +++ /dev/null @@ -1,158 +0,0 @@ -# -# Copyright by The HDF Group. -# All rights reserved. -# -# This file is part of HDF5. The full HDF5 copyright notice, including -# terms governing use, modification, and redistribution, is contained in -# the LICENSE file, which can be found at the root of the source code -# distribution tree, or in https://www.hdfgroup.org/licenses. -# If you do not have access to either file, you may request a copy from -# help@hdfgroup.org. -# - -message (VERBOSE "Warnings Configuration: default Fortran: ${CMAKE_Fortran_FLAGS}") - -#----------------------------------------------------------------------------- -# Option to allow the user to disable compiler warnings -#----------------------------------------------------------------------------- -if (HDF5_DISABLE_COMPILER_WARNINGS) - message (STATUS "....Compiler warnings are suppressed") - # MSVC uses /w to suppress warnings. It also complains if another - # warning level is given, so remove it. - if (MSVC) - set (HDF5_WARNINGS_BLOCKED 1) - if (CMAKE_Fortran_COMPILER_ID STREQUAL "Intel") - set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /warn:none") - elseif (CMAKE_Fortran_COMPILER_ID MATCHES "IntelLLVM") - set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /warn:none") - endif () - endif () - if (WIN32) - add_definitions (-D_CRT_SECURE_NO_WARNINGS) - endif () - # Borland uses -w- to suppress warnings. - if (BORLAND) - set (HDF5_WARNINGS_BLOCKED 1) - set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -w-") - endif () - - # Most compilers use -w to suppress warnings. - if (NOT HDF5_WARNINGS_BLOCKED) - set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -w") - endif () -endif () - -#----------------------------------------------------------------------------- -# HDF5 library compile options - to be made available to all targets -#----------------------------------------------------------------------------- -if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 10.0) - if (HDF5_ENABLE_BUILD_DIAGS) - message (STATUS "... default color and URL extended diagnostic messages enabled") - else () - message (STATUS "... disable color and URL extended diagnostic messages") - set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fdiagnostics-urls=never -fno-diagnostics-color") - endif () -endif () - -if (CMAKE_Fortran_COMPILER_ID STREQUAL "NAG") - message (STATUS "... Select IEEE floating-point mode full") - list (APPEND HDF5_CMAKE_Fortran_FLAGS "-ieee=full") -endif () -if (CMAKE_Fortran_COMPILER_ID STREQUAL "NVHPC") - if (NOT ${HDF_CFG_NAME} MATCHES "Debug" AND NOT ${HDF_CFG_NAME} MATCHES "Developer") - set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mnoframe") - if (NOT ${HDF_CFG_NAME} MATCHES "RelWithDebInfo") - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -s") - endif () - else () - set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mbounds -Mchkptr -Mdclchk -g") - endif () -endif () - -if (NOT MSVC AND NOT MINGW) - # General flags - if (CMAKE_Fortran_COMPILER_ID STREQUAL "Intel") - if (_INTEL_WINDOWS) - ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-ifort-general") - else () - ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/ifort-general") - endif() - list (APPEND HDF5_CMAKE_Fortran_FLAGS "-free") - elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") - ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-general") - if (HDF5_ENABLE_DEV_WARNINGS) - ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-developer-general") - else () - ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-no-developer-general") - endif () - list (APPEND HDF5_CMAKE_Fortran_FLAGS "-ffree-form" "-fimplicit-none") - if (CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 8.0 AND NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 4.6) - list (APPEND HDF5_CMAKE_Fortran_FLAGS "-std=f2008ts") - else () - list (APPEND HDF5_CMAKE_Fortran_FLAGS "-std=f2008") - endif () - elseif (CMAKE_Fortran_COMPILER_ID MATCHES "IntelLLVM") - if (_INTEL_WINDOWS) - ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-ifort-general") - else () - ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/ifort-general") - endif() - list (APPEND HDF5_CMAKE_Fortran_FLAGS "-free") - elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "PGI") - list (APPEND HDF5_CMAKE_Fortran_FLAGS "-Mfreeform" "-Mdclchk" "-Mstandard" "-Mallocatable=03") - endif () - message (VERBOSE "HDF5_CMAKE_Fortran_FLAGS=${HDF5_CMAKE_Fortran_FLAGS}") - - if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") - # Append more extra warning flags that only gcc 4.8+ knows about - if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 4.8) - ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-4.8") - if (HDF5_ENABLE_DEV_WARNINGS) - ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-developer-4.8") - else () - ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-no-developer-4.8") - endif () - endif () - - # Append more extra warning flags that only gcc 4.9+ knows about - #if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 4.9) - # ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-4.9") - #endif () - - # Append more extra warning flags that only gcc 5.x+ knows about - if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 5.0) - if (HDF5_ENABLE_DEV_WARNINGS) - ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-developer-5") - endif () - endif () - - # Append more extra warning flags that only gcc 6.x+ knows about - if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 6.0) - ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-6") - endif () - - # Append more extra warning flags that only gcc 7.x+ knows about - #if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 7.0) - # ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-7") - #endif () - - # Append more extra warning flags that only gcc 8.x+ knows about - if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 8.0) - ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-8") - endif () - - # Append more extra warning flags that only gcc 9.x+ knows about - #if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 9.0) - # ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-9") - #endif () - endif () -else () - if (CMAKE_Fortran_COMPILER_ID STREQUAL "Intel") - ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-ifort-general") - list (APPEND HDF5_CMAKE_Fortran_FLAGS "/stand:f03" "/free") - elseif (CMAKE_Fortran_COMPILER_ID MATCHES "IntelLLVM") - ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-ifort-general") - list (APPEND HDF5_CMAKE_Fortran_FLAGS "/stand:f03" "/free") - endif () -endif () - diff --git a/config/cmake/HDFGnuCXXFlags.cmake b/config/cmake/HDFGnuCXXFlags.cmake new file mode 100644 index 00000000000..99aec322229 --- /dev/null +++ b/config/cmake/HDFGnuCXXFlags.cmake @@ -0,0 +1,192 @@ +# +# Copyright by The HDF Group. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://www.hdfgroup.org/licenses. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. +# + +############################################################################### +# This file included from HDFCompilerFlags.cmake with +# if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") +############################################################################### +#----------------------------------------------------------------------------- +# Compiler specific flags +#----------------------------------------------------------------------------- + + set (CMAKE_CXX_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_CXX_FLAGS}") + if (${HDF_CFG_NAME} MATCHES "Debug" OR ${HDF_CFG_NAME} MATCHES "Developer") + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Og -ftrapv -fno-common") + endif () + else () + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstdarg-opt") + endif () + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0) + if (HDF5_ENABLE_BUILD_DIAGS) + message (STATUS "... default color and URL extended diagnostic messages enabled") + else () + message (STATUS "... disable color and URL extended diagnostic messages") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-urls=never -fno-diagnostics-color") + endif () + endif () + endif () + +#----------------------------------------------------------------------------- +# HDF5 library compile options - to be made available to all targets +#----------------------------------------------------------------------------- + +if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS") + # General flags + # + # Note that some of the flags listed here really should be developer + # flags (listed in a separate variable, below) but we put them here + # because they are not raised by the current code and we'd like to + # know if they do start showing up. + # + # NOTE: Don't add -Wpadded here since we can't/won't fix the (many) + # warnings that are emitted. If you need it, add it at configure time. + if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) + # add the general CXX flags for g++ compiler versions 4.8 and above. + ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-general") + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-error-general") + endif () + message (VERBOSE "CMAKE_CXX_FLAGS_GENERAL=${HDF5_CMAKE_CXX_FLAGS}") +endif () + +#----------------------------------------------------------------------------- +# Option to allow the user to enable developer warnings +# Developer warnings (suggestions from gcc, not code problems) +#----------------------------------------------------------------------------- +if (HDF5_ENABLE_DEV_WARNINGS) + message (STATUS "....HDF5 CXX developer group warnings are enabled") + # Use the C warnings as CXX warnings are the same + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-general") +else () + # Use the C warnings as CXX warnings are the same + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-general") +endif () + + # Technically, variable-length arrays are part of the C99 standard, but + # we should approach them a bit cautiously... Only needed for gcc 4.X + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0 AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) + # Use the C warnings as CXX warnings are the same + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/4.8-4.last") + endif () + + # Append more extra warning flags that only gcc 4.8+ knows about + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8) + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-4.8") + if (HDF5_ENABLE_DEV_WARNINGS) + # Use the C warnings as CXX warnings are the same + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-developer-4.8") + else () + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-cxx-developer-4.8") + endif () + endif () + + # Append more extra warning flags that only gcc 4.9+ knows about + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9) + # Use the C warnings as CXX warnings are the same + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-4.9") + endif () + + # Append more extra warning flags that only gcc 5.1+ knows about + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) + # autotools always add the C flags with the CXX flags + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-5") + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-error-5") + endif () + + # Append more extra warning flags that only gcc 6.x+ knows about + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.0) + # Use the C warnings as CXX warnings are the same + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/6") + endif () + + # Append more extra warning flags that only gcc 7.x+ knows about + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0) + # Use the C warnings as CXX warnings are the same + ADD_H5_FLAGS (H5_CXxFLAGS2 "${HDF5_SOURCE_DIR}/config/gnu-warnings/7") + if (HDF5_ENABLE_DEV_WARNINGS) + # Use the C warnings as CXX warnings are the same + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-7") + #else () + # ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-7") + endif () + endif () + + # Append more extra warning flags that only gcc 8.x+ knows about + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0) + # Use the C warnings as CXX warnings are the same + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/8") + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/error-8") + if (HDF5_ENABLE_DEV_WARNINGS) + # Use the C warnings as CXX warnings are the same + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-8") + else () + # autotools always add the C flags with the CXX flags + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-8") + endif () + endif () + + # Append more extra warning flags that only gcc 9.x+ knows about + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0) + # Use the C warnings as CXX warnings are the same + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-9") + endif () + + # Append more extra warning flags that only gcc 9.3+ knows about + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.3) + # do not use C warnings, gnu-warnings 9.3, no cxx warnings + # ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/9.3") + endif () + + # Append more extra warning flags that only gcc 10.x+ knows about + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0) + if (HDF5_ENABLE_DEV_WARNINGS) + # Use the C warnings as CXX warnings are the same + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-10") + #else () + # ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-10") + endif () + endif () + +#----------------------------------------------------------------------------- +# Option to allow the user to enable all warnings +#----------------------------------------------------------------------------- +if (HDF5_ENABLE_ALL_WARNINGS) + message (STATUS "....All CXX Warnings are enabled") + if (MSVC) + if (HDF5_ENABLE_DEV_WARNINGS) + string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + list (APPEND HDF5_CMAKE_CXX_FLAGS "/Wall" "/wd4668") + else () + string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + list (APPEND HDF5_CMAKE_CXX_FLAGS "/W3" "/wd4100" "/wd4706" "/wd4127") + endif () + else () + list (APPEND HDF5_CMAKE_CXX_FLAGS ${H5_CXXFLAGS}) + endif () +endif () + +#----------------------------------------------------------------------------- +# This is in here to help some of the GCC based IDES like Eclipse +# and code blocks parse the compiler errors and warnings better. +#----------------------------------------------------------------------------- + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmessage-length=0") + +#----------------------------------------------------------------------------- +# Option for --enable-symbols +# This option will force/override the default setting for all configurations +#----------------------------------------------------------------------------- +if (HDF5_ENABLE_SYMBOLS MATCHES "YES") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") +elseif (HDF5_ENABLE_SYMBOLS MATCHES "NO") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s") +endif () diff --git a/config/cmake/HDFGnuFlags.cmake b/config/cmake/HDFGnuFlags.cmake new file mode 100644 index 00000000000..5367c5237d8 --- /dev/null +++ b/config/cmake/HDFGnuFlags.cmake @@ -0,0 +1,195 @@ +# +# Copyright by The HDF Group. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://www.hdfgroup.org/licenses. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. +# + +############################################################################### +# This file included from HDFCompilerFlags.cmake with +# if (CMAKE_C_COMPILER_ID STREQUAL "GNU") +############################################################################### +#----------------------------------------------------------------------------- +# Compiler specific flags +#----------------------------------------------------------------------------- + + set (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}") + if (${HDF_CFG_NAME} MATCHES "Debug" OR ${HDF_CFG_NAME} MATCHES "Developer") + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0) + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Og -ftrapv -fno-common") + endif () + else () + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0 AND + NOT CMAKE_C_CLANG_TIDY) + # `clang-tidy` does not understand -fstdarg-opt + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstdarg-opt") + endif () + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0) + #----------------------------------------------------------------------------- + # Option to allow the user to enable build extended diagnostics + # + # This should NOT be on by default as it can cause process issues. + #----------------------------------------------------------------------------- + option (HDF5_ENABLE_BUILD_DIAGS "Enable color and URL extended diagnostic messages" OFF) + mark_as_advanced (HDF5_ENABLE_BUILD_DIAGS) + if (HDF5_ENABLE_BUILD_DIAGS) + message (STATUS "... default color and URL extended diagnostic messages enabled") + else () + message (STATUS "... disable color and URL extended diagnostic messages") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-urls=never -fno-diagnostics-color") + endif () + endif () + endif () + +#----------------------------------------------------------------------------- +# HDF5 library compile options - to be made available to all targets +#----------------------------------------------------------------------------- + +if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS") + # General flags + # + # Note that some of the flags listed here really should be developer + # flags (listed in a separate variable, below) but we put them here + # because they are not raised by the current code and we'd like to + # know if they do start showing up. + # + # NOTE: Don't add -Wpadded here since we can't/won't fix the (many) + # warnings that are emitted. If you need it, add it at configure time. + # Add general CFlags for GCC versions 4.8 and above + if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) + ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/general") + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/error-general") + endif () + # gcc automatically inlines based on the optimization level + # this is just a failsafe + list (APPEND H5_CFLAGS "-finline-functions") + message (VERBOSE "CMAKE_C_FLAGS_GENERAL=${HDF5_CMAKE_C_FLAGS}") +endif () + +#----------------------------------------------------------------------------- +# Option to allow the user to enable developer warnings +# Developer warnings (suggestions from gcc, not code problems) +#----------------------------------------------------------------------------- +if (HDF5_ENABLE_DEV_WARNINGS) + message (STATUS "....HDF5 developer group warnings are enabled") + if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-general") + endif () + + # Turn on -Winline warnings now only for non-Debug and + # non-Developer builds. For at least GNU compilers this + # flag appears to conflict specifically with the -Og + # optimization flag and will produce warnings about functions + # not being considered for inlining + if (NOT ${HDF_CFG_NAME} MATCHES "Debug" AND NOT ${HDF_CFG_NAME} MATCHES "Developer") + list (APPEND H5_CFLAGS "-Winline") + endif () +else () + if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-general") + endif () +endif () + + # Technically, variable-length arrays are part of the C99 standard, but + # we should approach them a bit cautiously... Only needed for gcc 4.X + if (CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0 AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/4.8-4.last") + endif () + + # Append more extra warning flags that only gcc 4.8+ knows about + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.8) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/4.8") + if (HDF5_ENABLE_DEV_WARNINGS) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-4.8") + else () + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-4.8") + endif () + endif () + + # Append more extra warning flags that only gcc 4.9+ knows about + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/4.9") + endif () + + # Append more extra warning flags that only gcc 5.x+ knows about + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/5") + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/error-5") + endif () + + # Append more extra warning flags that only gcc 6.x+ knows about + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.0) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/6") + endif () + + # Append more extra warning flags that only gcc 7.x+ knows about + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 7.0) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/7") + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/error-7") + if (HDF5_ENABLE_DEV_WARNINGS) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-7") + #else () + # ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-7") + endif () + endif () + + # Append more extra warning flags that only gcc 8.x+ knows about + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 8.0) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/8") + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/error-8") + if (HDF5_ENABLE_DEV_WARNINGS) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-8") + else () + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-8") + endif () + endif () + + # Append more extra warning flags that only gcc 9.x+ knows about + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 9.0) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/9") + endif () + + # Append more extra warning flags that only gcc 9.3+ knows about + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 9.3) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/9.3") + endif () + + # Append more extra warning flags that only gcc 10.x+ knows about + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0) + if (HDF5_ENABLE_DEV_WARNINGS) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-10") + #else () + # ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-10") + endif () + endif () + + # Append more extra warning flags that only gcc 12.x+ knows about + # or which should only be enabled for gcc 12.x+ + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 12.0) + if (HDF5_ENABLE_DEV_WARNINGS) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/developer-12") + #else () + # ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/no-developer-12") + endif () + endif () + +#----------------------------------------------------------------------------- +# This is in here to help some of the GCC based IDES like Eclipse +# and code blocks parse the compiler errors and warnings better. +#----------------------------------------------------------------------------- + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0") + +#----------------------------------------------------------------------------- +# Option for --enable-symbols +# This option will force/override the default setting for all configurations +#----------------------------------------------------------------------------- +if (HDF5_ENABLE_SYMBOLS MATCHES "YES") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -fno-omit-frame-pointer") +elseif (HDF5_ENABLE_SYMBOLS MATCHES "NO") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s") +endif () diff --git a/config/cmake/HDFGnuFortranFlags.cmake b/config/cmake/HDFGnuFortranFlags.cmake new file mode 100644 index 00000000000..a114ceb0e08 --- /dev/null +++ b/config/cmake/HDFGnuFortranFlags.cmake @@ -0,0 +1,90 @@ +# +# Copyright by The HDF Group. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://www.hdfgroup.org/licenses. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. +# + +############################################################################### +# This file included from HDFCompilerFortranFlags.cmake with +# if (CMAKE_Fortran_COMPILER_ID MATCHES "GNU" ) +############################################################################### + +message (VERBOSE "Warnings Configuration: default Fortran: ${CMAKE_Fortran_FLAGS}") + +#----------------------------------------------------------------------------- +# HDF5 library compile options - to be made available to all targets +#----------------------------------------------------------------------------- +if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 10.0) + if (HDF5_ENABLE_BUILD_DIAGS) + message (STATUS "... default color and URL extended diagnostic messages enabled") + else () + message (STATUS "... disable color and URL extended diagnostic messages") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fdiagnostics-urls=never -fno-diagnostics-color") + endif () +endif () + +if (NOT MSVC AND NOT MINGW) + # General flags + ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-general") + if (HDF5_ENABLE_DEV_WARNINGS) + ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-developer-general") + else () + ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-no-developer-general") + endif () + list (APPEND HDF5_CMAKE_Fortran_FLAGS "-ffree-form" "-fimplicit-none") + if (CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 8.0 AND NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 4.6) + list (APPEND HDF5_CMAKE_Fortran_FLAGS "-std=f2008ts") + else () + list (APPEND HDF5_CMAKE_Fortran_FLAGS "-std=f2008") + endif () + message (VERBOSE "HDF5_CMAKE_Fortran_FLAGS=${HDF5_CMAKE_Fortran_FLAGS}") + + # Append more extra warning flags that only gcc 4.8+ knows about + if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 4.8) + ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-4.8") + if (HDF5_ENABLE_DEV_WARNINGS) + ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-developer-4.8") + else () + ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-no-developer-4.8") + endif () + endif () + + # Append more extra warning flags that only gcc 4.9+ knows about + #if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 4.9) + # ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-4.9") + #endif () + + # Append more extra warning flags that only gcc 5.x+ knows about + if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 5.0) + if (HDF5_ENABLE_DEV_WARNINGS) + ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-developer-5") + endif () + endif () + + # Append more extra warning flags that only gcc 6.x+ knows about + if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 6.0) + ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-6") + endif () + + # Append more extra warning flags that only gcc 7.x+ knows about + #if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 7.0) + # ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-7") + #endif () + + # Append more extra warning flags that only gcc 8.x+ knows about + if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 8.0) + ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-8") + endif () + + # Append more extra warning flags that only gcc 9.x+ knows about + #if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 9.0) + # ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/gfort-9") + #endif () +endif () + diff --git a/config/cmake/HDFIntelCXXFlags.cmake b/config/cmake/HDFIntelCXXFlags.cmake new file mode 100644 index 00000000000..02220b51d46 --- /dev/null +++ b/config/cmake/HDFIntelCXXFlags.cmake @@ -0,0 +1,93 @@ +# +# Copyright by The HDF Group. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://www.hdfgroup.org/licenses. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. +# + +############################################################################### +# This file included from HDFCompilerFlags.cmake with +# if (CMAKE_CXX_COMPILER_ID MATCHES "Intel") +############################################################################### + +#----------------------------------------------------------------------------- +# Compiler specific flags +#----------------------------------------------------------------------------- +if (WIN32) + set (_INTEL_WINDOWS 1) +endif () + +#----------------------------------------------------------------------------- +# HDF5 library compile options - to be made available to all targets +#----------------------------------------------------------------------------- +if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS") + # General flags + # + # Note that some of the flags listed here really should be developer + # flags (listed in a separate variable, below) but we put them here + # because they are not raised by the current code and we'd like to + # know if they do start showing up. + # + # NOTE: Don't add -Wpadded here since we can't/won't fix the (many) + # warnings that are emitted. If you need it, add it at configure time. + if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + if (_INTEL_WINDOWS) + ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-general") + else () + ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/general") + endif() + if (NOT _INTEL_WINDOWS) + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0) + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/15") + endif () + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18.0) + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/18") + endif () + endif () + elseif (CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM") + if (_INTEL_WINDOWS) + ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-general") + else () + ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/general") + endif () + endif () + message (VERBOSE "CMAKE_CXX_FLAGS_GENERAL=${HDF5_CMAKE_CXX_FLAGS}") +endif () + +#----------------------------------------------------------------------------- +# Option to allow the user to enable developer warnings +# Developer warnings (suggestions from gcc, not code problems) +#----------------------------------------------------------------------------- +if (HDF5_ENABLE_DEV_WARNINGS) + message (STATUS "....HDF5 CXX developer group warnings are enabled") + if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + if (_INTEL_WINDOWS) + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-developer-general") + else () + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/developer-general") + endif () + elseif (CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM") + if (_INTEL_WINDOWS) + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-developer-general") + else () + ADD_H5_FLAGS (H5_CXXFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/developer-general") + endif () + endif () +endif () + +#----------------------------------------------------------------------------- +# Option for --enable-symbols +# This option will force/override the default setting for all configurations +#----------------------------------------------------------------------------- +if (NOT _INTEL_WINDOWS) + if (HDF5_ENABLE_SYMBOLS MATCHES "YES") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") + elseif (HDF5_ENABLE_SYMBOLS MATCHES "NO") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-s") + endif () +endif () diff --git a/config/cmake/HDFIntelFlags.cmake b/config/cmake/HDFIntelFlags.cmake new file mode 100644 index 00000000000..dbdbb616c15 --- /dev/null +++ b/config/cmake/HDFIntelFlags.cmake @@ -0,0 +1,106 @@ +# +# Copyright by The HDF Group. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://www.hdfgroup.org/licenses. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. +# + +############################################################################### +# This file included from HDFCompilerFlags.cmake with +# if (CMAKE_C_COMPILER_ID MATCHES "Intel") +############################################################################### + +#----------------------------------------------------------------------------- +# Compiler specific flags +#----------------------------------------------------------------------------- +if (WIN32) + set (_INTEL_WINDOWS 1) +endif () + +# Disable deprecation warnings for standard C functions. +# really only needed for newer versions of VS, but should +# not hurt other versions, and this will work into the +# future +if (MSVC OR _INTEL_WINDOWS) + add_definitions (-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) +endif () + +#----------------------------------------------------------------------------- +# HDF5 library compile options - to be made available to all targets +#----------------------------------------------------------------------------- +if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS") + # General flags + # + # Note that some of the flags listed here really should be developer + # flags (listed in a separate variable, below) but we put them here + # because they are not raised by the current code and we'd like to + # know if they do start showing up. + # + # NOTE: Don't add -Wpadded here since we can't/won't fix the (many) + # warnings that are emitted. If you need it, add it at configure time. + if (CMAKE_C_COMPILER_ID STREQUAL "Intel") + if (_INTEL_WINDOWS) + ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-general") + else () + ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/general") + endif() + if (NOT _INTEL_WINDOWS) + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/15") + endif () + # this is just a failsafe + list (APPEND H5_CFLAGS "-finline-functions") + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 18.0) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/18") + endif () + endif () + elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM") + if (_INTEL_WINDOWS) + ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-general") + else () + # this is just a failsafe + list (APPEND H5_CFLAGS "-finline-functions") + ADD_H5_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/general") + endif () + endif () + message (VERBOSE "CMAKE_C_FLAGS_GENERAL=${HDF5_CMAKE_C_FLAGS}") +endif () + +#----------------------------------------------------------------------------- +# Option to allow the user to enable developer warnings +# Developer warnings (suggestions from gcc, not code problems) +#----------------------------------------------------------------------------- +if (HDF5_ENABLE_DEV_WARNINGS) + message (STATUS "....HDF5 developer group warnings are enabled") + if (CMAKE_C_COMPILER_ID STREQUAL "Intel") + if (_INTEL_WINDOWS) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-developer-general") + else () + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/developer-general") + endif () + elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM") + if (_INTEL_WINDOWS) + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-developer-general") + else () + ADD_H5_FLAGS (H5_CFLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/developer-general") + endif () + endif () +endif () + +# Turn on -Winline warnings now only for non-Debug and +# non-Developer builds. For at least GNU compilers this +# flag appears to conflict specifically with the -Og +# optimization flag and will produce warnings about functions +# not being considered for inlining +if (NOT ${HDF_CFG_NAME} MATCHES "Debug" AND NOT ${HDF_CFG_NAME} MATCHES "Developer") + if (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND NOT _INTEL_WINDOWS) + list (APPEND H5_CFLAGS "-Winline") + elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" AND NOT _INTEL_WINDOWS) + list (APPEND H5_CFLAGS "-Winline") + endif () +endif () diff --git a/config/cmake/HDFIntelFortranFlags.cmake b/config/cmake/HDFIntelFortranFlags.cmake new file mode 100644 index 00000000000..8f55badf699 --- /dev/null +++ b/config/cmake/HDFIntelFortranFlags.cmake @@ -0,0 +1,65 @@ +# +# Copyright by The HDF Group. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://www.hdfgroup.org/licenses. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. +# + +############################################################################### +# This file included from HDFCompilerFortranFlags.cmake with +# if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel" ) +############################################################################### + +message (VERBOSE "Warnings Configuration: default Fortran: ${CMAKE_Fortran_FLAGS}") + +#----------------------------------------------------------------------------- +# Option to allow the user to disable compiler warnings +#----------------------------------------------------------------------------- +if (HDF5_DISABLE_COMPILER_WARNINGS) + # MSVC uses /w to suppress warnings. It also complains if another + # warning level is given, so remove it. + if (MSVC) + if (CMAKE_Fortran_COMPILER_ID STREQUAL "Intel") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /warn:none") + elseif (CMAKE_Fortran_COMPILER_ID MATCHES "IntelLLVM") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /warn:none") + endif () + endif () +endif () + +#----------------------------------------------------------------------------- +# HDF5 library compile options - to be made available to all targets +#----------------------------------------------------------------------------- +if (NOT MSVC AND NOT MINGW) + # General flags + if (CMAKE_Fortran_COMPILER_ID STREQUAL "Intel") + if (_INTEL_WINDOWS) + ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-ifort-general") + else () + ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/ifort-general") + endif() + list (APPEND HDF5_CMAKE_Fortran_FLAGS "-free") + elseif (CMAKE_Fortran_COMPILER_ID MATCHES "IntelLLVM") + if (_INTEL_WINDOWS) + ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-ifort-general") + else () + ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/ifort-general") + endif() + list (APPEND HDF5_CMAKE_Fortran_FLAGS "-free") + endif () + message (VERBOSE "HDF5_CMAKE_Fortran_FLAGS=${HDF5_CMAKE_Fortran_FLAGS}") +else () + if (CMAKE_Fortran_COMPILER_ID STREQUAL "Intel") + ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/classic/win-ifort-general") + list (APPEND HDF5_CMAKE_Fortran_FLAGS "/stand:f03" "/free") + elseif (CMAKE_Fortran_COMPILER_ID MATCHES "IntelLLVM") + ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/oneapi/win-ifort-general") + list (APPEND HDF5_CMAKE_Fortran_FLAGS "/stand:f03" "/free") + endif () +endif () + diff --git a/config/cmake/HDFMsvcCXXFlags.cmake b/config/cmake/HDFMsvcCXXFlags.cmake new file mode 100644 index 00000000000..4970622cc3d --- /dev/null +++ b/config/cmake/HDFMsvcCXXFlags.cmake @@ -0,0 +1,26 @@ +# +# Copyright by The HDF Group. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://www.hdfgroup.org/licenses. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. +# + +############################################################################### +# This file included from HDFCompilerFlags.cmake with +# if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") +############################################################################### + +#----------------------------------------------------------------------------- +# Compiler specific flags +#----------------------------------------------------------------------------- + +# MSVC 14.28 enables C5105, but the Windows SDK 10.0.18362.0 triggers it. + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") + if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.28) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd5105") + endif () diff --git a/config/cmake/HDFMsvcFlags.cmake b/config/cmake/HDFMsvcFlags.cmake new file mode 100644 index 00000000000..a0ca9290f93 --- /dev/null +++ b/config/cmake/HDFMsvcFlags.cmake @@ -0,0 +1,25 @@ +# +# Copyright by The HDF Group. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://www.hdfgroup.org/licenses. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. +# + +############################################################################### +# This file included from HDFCompilerFlags.cmake with +# if (CMAKE_C_COMPILER_ID MATCHES "MSVC") +############################################################################### + +#----------------------------------------------------------------------------- +# Compiler specific flags +#----------------------------------------------------------------------------- + +# MSVC 14.28 enables C5105, but the Windows SDK 10.0.18362.0 triggers it. +if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 19.28) + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -wd5105") +endif () diff --git a/config/cmake/HDFNvhpcCXXFlags.cmake b/config/cmake/HDFNvhpcCXXFlags.cmake new file mode 100644 index 00000000000..eab491bf01e --- /dev/null +++ b/config/cmake/HDFNvhpcCXXFlags.cmake @@ -0,0 +1,33 @@ +# +# Copyright by The HDF Group. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://www.hdfgroup.org/licenses. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. +# + +############################################################################### +# This file included from HDFCompilerFlags.cmake with +# if (CMAKE_CXX_COMPILER_ID MATCHES "NVHPC" ) +############################################################################### + +#----------------------------------------------------------------------------- +# Compiler specific flags +#----------------------------------------------------------------------------- +if (NOT DEFINED CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION) + if (NOT CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD EQUAL 11) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C11_STANDARD_COMPILE_OPTION}") + endif () +endif () +if (NOT ${HDF_CFG_NAME} MATCHES "Debug" AND NOT ${HDF_CFG_NAME} MATCHES "Developer") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Minform=warn") + if (NOT ${HDF_CFG_NAME} MATCHES "RelWithDebInfo") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s") + endif () +else () + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Mbounds -gopt -g") +endif () diff --git a/config/cmake/HDFNvhpcFlags.cmake b/config/cmake/HDFNvhpcFlags.cmake new file mode 100644 index 00000000000..77443942064 --- /dev/null +++ b/config/cmake/HDFNvhpcFlags.cmake @@ -0,0 +1,28 @@ +# +# Copyright by The HDF Group. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://www.hdfgroup.org/licenses. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. +# + +############################################################################### +# This file included from HDFCompilerFlags.cmake with +# if (CMAKE_C_COMPILER_ID MATCHES "NVHPC" ) +############################################################################### + +#----------------------------------------------------------------------------- +# Compiler specific flags +#----------------------------------------------------------------------------- +set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Minform=warn") +if (NOT ${HDF_CFG_NAME} MATCHES "Debug" AND NOT ${HDF_CFG_NAME} MATCHES "Developer") + if (NOT ${HDF_CFG_NAME} MATCHES "RelWithDebInfo") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s") + endif () +else () + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Mbounds -gopt") +endif () diff --git a/config/cmake/HDFNvhpcFortranFlags.cmake b/config/cmake/HDFNvhpcFortranFlags.cmake new file mode 100644 index 00000000000..a6ae6930262 --- /dev/null +++ b/config/cmake/HDFNvhpcFortranFlags.cmake @@ -0,0 +1,38 @@ +# +# Copyright by The HDF Group. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the COPYING file, which can be found at the root of the source code +# distribution tree, or in https://www.hdfgroup.org/licenses. +# If you do not have access to either file, you may request a copy from +# help@hdfgroup.org. +# + +############################################################################### +# This file included from HDFCompilerFortranFlags.cmake with +# if (CMAKE_Fortran_COMPILER_ID MATCHES "NVHPC" ) +############################################################################### + +message (VERBOSE "Warnings Configuration: default Fortran: ${CMAKE_Fortran_FLAGS}") + +#----------------------------------------------------------------------------- +# HDF5 library compile options - to be made available to all targets +#----------------------------------------------------------------------------- +if (CMAKE_Fortran_COMPILER_ID STREQUAL "NVHPC") + if (NOT ${HDF_CFG_NAME} MATCHES "Debug" AND NOT ${HDF_CFG_NAME} MATCHES "Developer") + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mnoframe") + if (NOT ${HDF_CFG_NAME} MATCHES "RelWithDebInfo") + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -s") + endif () + else () + set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mbounds -Mchkptr -Mdclchk -g") + endif () +endif () + +if (NOT MSVC AND NOT MINGW) + # General flags + message (VERBOSE "HDF5_CMAKE_Fortran_FLAGS=${HDF5_CMAKE_Fortran_FLAGS}") +endif () + diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index a92e2ed9be8..a83f2ea2cf0 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -47,6 +47,24 @@ New Features Configuration: ------------- + - Added CMake build mode flags to the libhdf5.settings file + + Flags from the CMake build mode (e.g., optimization) are not a part of + CMAKE__FLAGS and were not exported to the libhdf5.settings file. This + has been fixed and the C, Fortran, and C++ build mode flags are now exported to + the file. + + This also affects the text output of H5check_version() and the libhdf5.settings + string stored in the library (for those who use strings(1), etc. to get + build info from the binary). + + - CMake: Split compiler specific flags into separate files + + The compiler specific flags have been split into separate files to make + it easier to maintain and add new compiler flags. The flags for NVHPC, + Intel, GNU and Clang compilers are now in separate files included from + the current compiler flags files; HDFCompilerFlags.cmake. + - Added a configuration option for internal threading/concurrency support: CMake: HDF5_ENABLE_THREADS (ON/OFF) (Default: ON) diff --git a/src/H5build_settings.cmake.c.in b/src/H5build_settings.cmake.c.in index 6dac78d27b1..e9b24f3f8a2 100644 --- a/src/H5build_settings.cmake.c.in +++ b/src/H5build_settings.cmake.c.in @@ -56,7 +56,7 @@ const char H5build_settings[]= " CPPFLAGS: @CPPFLAGS@\n" " H5_CPPFLAGS: @H5_CPPFLAGS@\n" " AM_CPPFLAGS: @AM_CPPFLAGS@\n" - " C Flags: @CMAKE_C_FLAGS@\n" + " C Flags: @CMAKE_C_FLAGS@ @HDF5_BUILD_MODE_C_FLAGS@\n" " H5 C Flags: @HDF5_CMAKE_C_FLAGS@\n" " AM C Flags: @AM_CFLAGS@\n" " Shared C Library: @H5_ENABLE_SHARED_LIB@\n" @@ -65,7 +65,7 @@ const char H5build_settings[]= "\n" " Fortran: @HDF5_BUILD_FORTRAN@\n" " Fortran Compiler: @CMAKE_Fortran_COMPILER@ @CMAKE_Fortran_COMPILER_VERSION@\n" - " Fortran Flags: @CMAKE_Fortran_FLAGS@\n" + " Fortran Flags: @CMAKE_Fortran_FLAGS@ @HDF5_BUILD_MODE_Fortran_FLAGS@\n" " H5 Fortran Flags: @HDF5_CMAKE_Fortran_FLAGS@\n" " AM Fortran Flags: @AM_FCFLAGS@\n" " Shared Fortran Library: @H5_ENABLE_SHARED_LIB@\n" @@ -74,7 +74,7 @@ const char H5build_settings[]= "\n" " C++: @HDF5_BUILD_CPP_LIB@\n" " C++ Compiler: @CMAKE_CXX_COMPILER@ @CMAKE_CXX_COMPILER_VERSION@\n" - " C++ Flags: @CMAKE_CXX_FLAGS@\n" + " C++ Flags: @CMAKE_CXX_FLAGS@ @HDF5_BUILD_MODE_CXX_FLAGS@\n" " H5 C++ Flags: @HDF5_CMAKE_CXX_FLAGS@\n" " AM C++ Flags: @AM_CXXFLAGS@\n" " Shared C++ Library: @H5_ENABLE_SHARED_LIB@\n" diff --git a/src/libhdf5.settings.cmake.in b/src/libhdf5.settings.cmake.in index 2f9b5f5c960..5ed5be70160 100644 --- a/src/libhdf5.settings.cmake.in +++ b/src/libhdf5.settings.cmake.in @@ -38,7 +38,7 @@ Languages: CPPFLAGS: @CPPFLAGS@ H5_CPPFLAGS: @H5_CPPFLAGS@ AM_CPPFLAGS: @AM_CPPFLAGS@ - CFLAGS: @CMAKE_C_FLAGS@ + CFLAGS: @CMAKE_C_FLAGS@ @HDF5_BUILD_MODE_C_FLAGS@ H5_CFLAGS: @HDF5_CMAKE_C_FLAGS@ AM_CFLAGS: @AM_CFLAGS@ Shared C Library: @H5_ENABLE_SHARED_LIB@ @@ -46,7 +46,7 @@ Languages: Fortran: @HDF5_BUILD_FORTRAN@ Fortran Compiler: @CMAKE_Fortran_COMPILER@ @CMAKE_Fortran_COMPILER_VERSION@ - Fortran Flags: @CMAKE_Fortran_FLAGS@ + Fortran Flags: @CMAKE_Fortran_FLAGS@ @HDF5_BUILD_MODE_Fortran_FLAGS@ H5 Fortran Flags: @HDF5_CMAKE_Fortran_FLAGS@ AM Fortran Flags: @AM_FCFLAGS@ Shared Fortran Library: @H5_ENABLE_SHARED_LIB@ @@ -55,7 +55,7 @@ Languages: C++: @HDF5_BUILD_CPP_LIB@ C++ Compiler: @CMAKE_CXX_COMPILER@ @CMAKE_CXX_COMPILER_VERSION@ - C++ Flags: @CMAKE_CXX_FLAGS@ + C++ Flags: @CMAKE_CXX_FLAGS@ @HDF5_BUILD_MODE_CXX_FLAGS@ H5 C++ Flags: @HDF5_CMAKE_CXX_FLAGS@ AM C++ Flags: @AM_CXXFLAGS@ Shared C++ Library: @H5_ENABLE_SHARED_LIB@ From c93b3c40e5b589d681fce2690630240fc7a0d3d2 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:11:05 -0700 Subject: [PATCH 043/179] Get the Autotools version number from H5public.h (#5009) The version number in the Autotools is scraped from README.md in configure.ac, which makes README.md count as 'code', which is a problem since changes to markdown files are ignored in CI. This change scrapes the version number from H5public.h instead of README.md. --- README.md | 2 +- configure.ac | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 646d14acc36..f7b5c631422 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -HDF5 version 1.17.0 currently under development +HDF5 version 2.0.0 currently under development ![HDF5 Logo](doxygen/img/HDF5.png) diff --git a/configure.ac b/configure.ac index 32ed53f4b6e..277a481d69e 100644 --- a/configure.ac +++ b/configure.ac @@ -4024,8 +4024,9 @@ fi ## and installed with the libraries (used to generate libhdf5.settings). ## -## HDF5 version from the first line of the README.md file. -H5_VERSION="`cut -d' ' -f3 $srcdir/README.md | head -1`" +## HDF5 version from H5public.h (3rd field of #define H5_VERS_STR "1.17.0" +## w/ sed to remove quotes). +H5_VERSION=`grep 'H5_VERS_STR' $srcdir/src/H5public.h | sed s/\"//g | cut -d' ' -f3` AC_SUBST([H5_VERSION]) ## Configuration date From d88466b03e2c60fc43efb939b145a947c6d53b7b Mon Sep 17 00:00:00 2001 From: "H. Joe Lee" Date: Fri, 25 Oct 2024 11:29:50 -0500 Subject: [PATCH 044/179] Fix h5py CI failure (#5007) --- .github/workflows/h5py.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/h5py.yml b/.github/workflows/h5py.yml index c6c6aa7505b..f8da6c4f7e2 100644 --- a/.github/workflows/h5py.yml +++ b/.github/workflows/h5py.yml @@ -21,7 +21,7 @@ jobs: - name: Run a multi-line script run: | - sed -i 's/hdf5@1.10.4:1.14/hdf5@1.10.4:/g' \ + sed -i 's/hdf5@1.10.6:1.14/hdf5@1.10.6:/g' \ ./spack/var/spack/repos/builtin/packages/py-h5py/package.py . ./spack/share/spack/setup-env.sh ./spack/bin/spack spec py-h5py@master+mpi ^hdf5@develop-1.17 From ee61dd51ac3b3eda721dc91eab03685f4b4d029c Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:33:57 -0500 Subject: [PATCH 045/179] Move cygwin workflow to cdash reports in daily-build (#5004) --- .github/workflows/cmake.yml | 6 -- .github/workflows/cygwin-cmake.yml | 108 +++++++++++++++++++++-------- .github/workflows/daily-build.yml | 9 +++ 3 files changed, 90 insertions(+), 33 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 0867f5757c3..d57978d5fcc 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -105,12 +105,6 @@ jobs: with: build_mode: "Release" - call-release-cmake-cygwin: - name: "CMake Cygwin Workflows" - uses: ./.github/workflows/cygwin-cmake.yml - with: - build_mode: "Release" - call-release-cmake-xpr: name: "CMake TestExpress Workflows" uses: ./.github/workflows/testxpr-cmake.yml diff --git a/.github/workflows/cygwin-cmake.yml b/.github/workflows/cygwin-cmake.yml index 57674acbbe0..31f0fb83dd2 100644 --- a/.github/workflows/cygwin-cmake.yml +++ b/.github/workflows/cygwin-cmake.yml @@ -4,10 +4,20 @@ name: hdf5 dev CMake cygwin on: workflow_call: inputs: - build_mode: - description: "release vs. debug build" + snap_name: + description: 'The name in the source tarballs' + type: string + required: false + default: hdfsrc + file_base: + description: "The common base name of the source tarballs" required: true type: string + use_environ: + description: 'Environment to locate files' + type: string + required: true + default: snapshots permissions: contents: read @@ -30,36 +40,80 @@ jobs: with: packages: cmake gcc-fortran make ninja zlib-devel flex bison perl - - name: CMake Configure + - name: Set file base name (Cygwin) + id: set-file-base + run: | + FILE_NAME_BASE=$(echo "${{ inputs.file_base }}") + echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT + if [[ '${{ inputs.use_environ }}' == 'release' ]] + then + SOURCE_NAME_BASE=$(echo "${{ inputs.snap_name }}") + else + SOURCE_NAME_BASE=$(echo "hdfsrc") + fi + echo "SOURCE_BASE=$SOURCE_NAME_BASE" >> $GITHUB_OUTPUT shell: C:\cygwin\bin\bash.exe -eo pipefail -o igncr '{0}' + + # Get files created by release script + - name: Get zip-tarball (Cygwin) + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + with: + name: zip-tarball + path: ${{ github.workspace }} + + - name: List files for the space (Cygwin) run: | - export PATH=/usr/bin:$PATH - mkdir build - cd build - cmake -C ../config/cmake/cacheinit.cmake \ - -G Ninja \ - --log-level=VERBOSE \ - -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ - -DBUILD_SHARED_LIBS:BOOL=OFF \ - -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF \ - -DHDF5_BUILD_CPP_LIB:BOOL=OFF \ - -DLIBAEC_USE_LOCALCONTENT=OFF \ - -DZLIB_USE_LOCALCONTENT=OFF \ - -DHDF5_BUILD_FORTRAN:BOOL=ON \ - -DHDF5_BUILD_JAVA:BOOL=OFF \ - .. + ls -l ${{ github.workspace }} + ls ${{ runner.workspace }} - - name: CMake Build + - name: Uncompress source (Cygwin) + working-directory: ${{ github.workspace }} + run: 7z x ${{ steps.set-file-base.outputs.FILE_BASE }}.zip shell: C:\cygwin\bin\bash.exe -eo pipefail -o igncr '{0}' + + - name: Copy script files for the space (Cygwin) run: | - export PATH=/usr/bin:$PATH - cd build - cmake --build . --parallel 3 --config ${{ inputs.build_mode }} + cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/CTestScript.cmake ${{ runner.workspace }}/hdf5 + cp ${{ github.workspace }}/${{ steps.set-file-base.outputs.SOURCE_BASE }}/config/cmake/scripts/HDF5config.cmake ${{ runner.workspace }}/hdf5 + + - name: List files for the hdf5 (Cygwin) + run: | + ls ${{ runner.workspace }}/hdf5 + + - name: Create options file (Cygwin) + uses: "DamianReeves/write-file-action@master" + with: + path: ${{ runner.workspace }}/hdf5/HDF5options.cmake + write-mode: overwrite + contents: | + set (CTEST_DROP_SITE_INIT "my.cdash.org") + # Change following line to submit to your CDash dashboard to a different CDash project + #set (CTEST_DROP_LOCATION_INIT "/submit.php?project=HDF5") + set (SITE_BUILDNAME_SUFFIX "${{ steps.set-file-base.outputs.FILE_BASE }}") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} --log-level=VERBOSE") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_GENERATE_HEADERS=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_JAVA:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_CPP_LIB:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_ENCODING:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_PLUGIN_SUPPORT:BOOL=ON") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DLIBAEC_USE_LOCALCONTENT:BOOL=OFF") + set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_USE_LOCALCONTENT:BOOL=OFF") - - name: CMake Run Tests + - name: Run ctest (Cygwin) shell: C:\cygwin\bin\bash.exe -eo pipefail -o igncr '{0}' run: | - export PATH=/usr/bin:$PATH - cd build - ctest . --parallel 2 -C ${{ inputs.build_mode }} -V -# ctest . --parallel 2 -C ${{ inputs.build_mode }} -V -R "FORTRAN|H5TEST" + export PATH=/usr/bin:$PATH + cd "${{ runner.workspace }}/hdf5" + ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-CYG,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log + continue-on-error: true + + # Save log files created by ctest script + - name: Save log (Cygwin) + uses: actions/upload-artifact@v4 + with: + name: gcc-cygwin-log + path: ${{ runner.workspace }}/hdf5/hdf5.log + if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` diff --git a/.github/workflows/daily-build.yml b/.github/workflows/daily-build.yml index 65150c5f3ec..4ca2d983dbe 100644 --- a/.github/workflows/daily-build.yml +++ b/.github/workflows/daily-build.yml @@ -59,6 +59,15 @@ jobs: use_tag: snapshot use_environ: snapshots + call-release-cmake-cygwin: + needs: [get-old-names, call-workflow-tarball] + name: "CMake Cygwin Workflows" + uses: ./.github/workflows/cygwin-cmake.yml + with: + file_base: ${{ needs.call-workflow-tarball.outputs.file_base }} + use_environ: snapshots + if: ${{ ((needs.call-workflow-tarball.outputs.has_changes == 'true') || (needs.get-old-names.outputs.run-ignore == 'ignore')) }} + call-workflow-c-script: needs: [get-old-names, call-workflow-tarball] uses: ./.github/workflows/cmake-script.yml From 8b2f40f2fffea2c2d05aeded047078dbbaf11fc7 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Fri, 25 Oct 2024 15:12:11 -0700 Subject: [PATCH 046/179] Remove duplicate sec2 VFD ID variable (#5013) --- src/H5FDwindows.h | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/H5FDwindows.h b/src/H5FDwindows.h index dccb73f80bc..9ab9b6a94f3 100644 --- a/src/H5FDwindows.h +++ b/src/H5FDwindows.h @@ -22,6 +22,7 @@ /* Public header files */ #include "H5FDpublic.h" /* File drivers */ +#include "H5FDsec2.h" /* sec2 driver */ /** ID for the windows VFD */ #define H5FD_WINDOWS (H5OPEN H5FD_SEC2_id_g) @@ -30,12 +31,6 @@ extern "C" { #endif /* __cplusplus */ -/** @private - * - * \brief ID for the windows (sec2) VFD - */ -H5_DLLVAR hid_t H5FD_SEC2_id_g; - /** * \ingroup FAPL * From b8a06b51f1f15532a757ef1d28b0019704f2520d Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Sat, 26 Oct 2024 05:11:22 -0700 Subject: [PATCH 047/179] Remove version number from h5repack test plugin (#5011) --- tools/test/h5repack/CMakeTests.cmake | 2 +- tools/test/h5repack/dynlib_vrpk.c | 131 +++++++++--------- ...h5repack_layout.h5-plugin_version_test.ddl | 35 ++--- ...plugin_version_test.h5repack_layout.h5.tst | 14 +- tools/test/h5repack/h5repack_plugin.sh.in | 3 +- 5 files changed, 90 insertions(+), 95 deletions(-) diff --git a/tools/test/h5repack/CMakeTests.cmake b/tools/test/h5repack/CMakeTests.cmake index e2c6aee1baa..47d72306808 100644 --- a/tools/test/h5repack/CMakeTests.cmake +++ b/tools/test/h5repack/CMakeTests.cmake @@ -1928,7 +1928,7 @@ ADD_H5_DMP_NO_OPT_TEST (tst_onion_objs "TEST" 0 tst_onion_objs.h5 --src-vfd-name ### P L U G I N T E S T S ############################################################################## if (BUILD_SHARED_LIBS) - ADD_H5_UD_TEST (plugin_version_test 0 h5repack_layout.h5 -v -f UD=260,0,4,9,${H5_VERS_MAJOR},${H5_VERS_MINOR},${H5_VERS_RELEASE}) + ADD_H5_UD_TEST (plugin_version_test 0 h5repack_layout.h5 -v -f UD=260,0,0) ADD_H5_UD_TEST (plugin_test 0 h5repack_layout.h5 -v -f UD=257,0,1,9) ADD_H5_UD_TEST (plugin_none 0 h5repack_layout.UD.h5 -v -f NONE) # check for no parameters diff --git a/tools/test/h5repack/dynlib_vrpk.c b/tools/test/h5repack/dynlib_vrpk.c index 91934222ea1..bd276b7d772 100644 --- a/tools/test/h5repack/dynlib_vrpk.c +++ b/tools/test/h5repack/dynlib_vrpk.c @@ -9,31 +9,34 @@ * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + /* - * Purpose: Tests the plugin module (H5PL) + * Purpose: Test group filter plugin for the filter_pluging.c test. */ #include #include -#include "H5PLextern.h" +#include -#define H5Z_FILTER_DYNLIB4 260 +#include "H5PLextern.h" -#define PUSH_ERR(func, minor, str) \ - H5Epush2(H5E_DEFAULT, __FILE__, func, __LINE__, H5E_ERR_CLS, H5E_PLUGIN, minor, str) +#define FILTER4_ID 260 +#define SUFFIX_LEN 8 +#define GROUP_SUFFIX ".h5group" -static size_t H5Z_filter_dynlib4(unsigned int flags, size_t cd_nelmts, const unsigned int *cd_values, - size_t nbytes, size_t *buf_size, void **buf); +static size_t append_to_group_name(unsigned int flags, size_t cd_nelmts, const unsigned int *cd_values, + size_t nbytes, size_t *buf_size, void **buf); -/* This message derives from H5Z */ -const H5Z_class2_t H5Z_DYNLIB4[1] = {{ - H5Z_CLASS_T_VERS, /* H5Z_class_t version */ - H5Z_FILTER_DYNLIB4, /* Filter id number */ - 1, 1, /* Encoding and decoding enabled */ - "dynlib4", /* Filter name for debugging */ - NULL, /* The "can apply" callback */ - NULL, /* The "set local" callback */ - H5Z_filter_dynlib4, /* The actual filter function */ +/* Filter class struct */ +const H5Z_class2_t FILTER_INFO[1] = {{ + H5Z_CLASS_T_VERS, /* H5Z_class_t version */ + FILTER4_ID, /* Filter ID number */ + 1, /* Encoding enabled */ + 1, /* Decoding enabled */ + "test filter plugin 4", /* Filter name for debugging */ + NULL, /* The "can apply" callback */ + NULL, /* The "set local" callback */ + append_to_group_name, /* The actual filter function */ }}; H5PL_type_t @@ -44,66 +47,66 @@ H5PLget_plugin_type(void) const void * H5PLget_plugin_info(void) { - return H5Z_DYNLIB4; + return FILTER_INFO; } /*------------------------------------------------------------------------- - * Function: H5Z_filter_dynlib4 + * Function: append_to_group_name * - * Purpose: A dynlib4 filter method that adds on and subtract from - * the original value with another value. It will be built - * as a shared library. plugin.c test will load and use - * this filter library. Designed to call a HDF function. + * Purpose: On write: + * Appends the suffix ".h5group" to the group name + * On read: + * Removes the ".h5group" suffix from the group name * - * Return: Success: Data chunk size - * - * Failure: 0 + * Return: Success: Data size in bytes + * Failure: 0 * *------------------------------------------------------------------------- */ static size_t -H5Z_filter_dynlib4(unsigned int flags, size_t cd_nelmts, const unsigned int *cd_values, size_t nbytes, - size_t *buf_size, void **buf) +append_to_group_name(unsigned int flags, size_t cd_nelmts, const unsigned int *cd_values, size_t nbytes, + size_t *buf_size, void **buf) { - int *int_ptr = (int *)*buf; /* Pointer to the data values */ - size_t buf_left = *buf_size; /* Amount of data buffer left to process */ - int add_on = 0; - unsigned ver_info[3]; - - /* Check for the library version */ - if (H5get_libversion(&ver_info[0], &ver_info[1], &ver_info[2]) < 0) { - PUSH_ERR("dynlib4", H5E_CALLBACK, "H5get_libversion"); - return (0); - } + size_t new_name_size = 0; /* Return value */ + /* Check for the correct number of parameters */ - if (cd_nelmts == 0) - return (0); + if (cd_nelmts > 0) + return 0; + + /* Assignment to eliminate unused parameter warning. */ + (void)cd_values; + + if (flags & H5Z_FLAG_REVERSE) { + /* READ - Remove the suffix from the group name */ + new_name_size = *buf_size = nbytes - SUFFIX_LEN; + } + else { + /* WRITE - Append the suffix to the group name */ + void *outbuf = NULL; /* Pointer to new buffer */ + unsigned char *dst = NULL; /* Temporary pointer to destination buffer */ + + /* Get memory for the new, larger string buffer using the + * library's memory allocator. + */ + if (NULL == (dst = (unsigned char *)(outbuf = H5allocate_memory(nbytes + SUFFIX_LEN, 0)))) + return 0; + + /* Copy raw data */ + memcpy((void *)dst, (const void *)(*buf), nbytes); + + /* Append suffix to raw data for storage */ + dst += nbytes; + memcpy((void *)dst, (const void *)GROUP_SUFFIX, SUFFIX_LEN); - /* Check that permanent parameters are set correctly */ - if (cd_values[0] > 9) - return (0); + /* Free the passed-in buffer using the library's allocator */ + H5free_memory(*buf); - if (ver_info[0] != cd_values[1] || ver_info[1] != cd_values[2]) { - PUSH_ERR("dynlib4", H5E_CALLBACK, "H5get_libversion does not match"); - return (0); + /* Set return values */ + *buf_size = nbytes + SUFFIX_LEN; + *buf = outbuf; + outbuf = NULL; + new_name_size = *buf_size; } - add_on = (int)cd_values[0]; - - if (flags & H5Z_FLAG_REVERSE) { /*read*/ - /* Subtract the "add on" value to all the data values */ - while (buf_left > 0) { - *int_ptr++ -= add_on; - buf_left -= sizeof(int); - } /* end while */ - } /* end if */ - else { /*write*/ - /* Add the "add on" value to all the data values */ - while (buf_left > 0) { - *int_ptr++ += add_on; - buf_left -= sizeof(int); - } /* end while */ - } /* end else */ - - return nbytes; -} /* end H5Z_filter_dynlib4() */ + return new_name_size; +} /* append_to_group_name() */ diff --git a/tools/test/h5repack/expected/h5repack_layout.h5-plugin_version_test.ddl b/tools/test/h5repack/expected/h5repack_layout.h5-plugin_version_test.ddl index fe10a5588df..1ec465b1177 100644 --- a/tools/test/h5repack/expected/h5repack_layout.h5-plugin_version_test.ddl +++ b/tools/test/h5repack/expected/h5repack_layout.h5-plugin_version_test.ddl @@ -5,13 +5,12 @@ GROUP "/" { DATASPACE SIMPLE { ( 40, 20 ) / ( 40, 20 ) } STORAGE_LAYOUT { CHUNKED ( 40, 20 ) - SIZE 3200 (1.000:1 COMPRESSION) + SIZE 3208 (0.998:1 COMPRESSION) } FILTERS { USER_DEFINED_FILTER { FILTER_ID 260 - COMMENT dynlib4 - PARAMS { 9 1 17 0 } + COMMENT test filter plugin 4 } } FILLVALUE { @@ -27,13 +26,12 @@ GROUP "/" { DATASPACE SIMPLE { ( 40, 20 ) / ( 40, 20 ) } STORAGE_LAYOUT { CHUNKED ( 40, 20 ) - SIZE 3200 (1.000:1 COMPRESSION) + SIZE 3208 (0.998:1 COMPRESSION) } FILTERS { USER_DEFINED_FILTER { FILTER_ID 260 - COMMENT dynlib4 - PARAMS { 9 1 17 0 } + COMMENT test filter plugin 4 } } FILLVALUE { @@ -49,13 +47,12 @@ GROUP "/" { DATASPACE SIMPLE { ( 40, 20 ) / ( 40, 20 ) } STORAGE_LAYOUT { CHUNKED ( 40, 20 ) - SIZE 3200 (1.000:1 COMPRESSION) + SIZE 3208 (0.998:1 COMPRESSION) } FILTERS { USER_DEFINED_FILTER { FILTER_ID 260 - COMMENT dynlib4 - PARAMS { 9 1 17 0 } + COMMENT test filter plugin 4 } } FILLVALUE { @@ -71,13 +68,12 @@ GROUP "/" { DATASPACE SIMPLE { ( 40, 20 ) / ( 40, 20 ) } STORAGE_LAYOUT { CHUNKED ( 40, 20 ) - SIZE 3200 (1.000:1 COMPRESSION) + SIZE 3208 (0.998:1 COMPRESSION) } FILTERS { USER_DEFINED_FILTER { FILTER_ID 260 - COMMENT dynlib4 - PARAMS { 9 1 17 0 } + COMMENT test filter plugin 4 } } FILLVALUE { @@ -93,13 +89,12 @@ GROUP "/" { DATASPACE SIMPLE { ( 40, 20 ) / ( 40, 20 ) } STORAGE_LAYOUT { CHUNKED ( 20, 10 ) - SIZE 3200 (1.000:1 COMPRESSION) + SIZE 3232 (0.990:1 COMPRESSION) } FILTERS { USER_DEFINED_FILTER { FILTER_ID 260 - COMMENT dynlib4 - PARAMS { 9 1 17 0 } + COMMENT test filter plugin 4 } } FILLVALUE { @@ -115,13 +110,12 @@ GROUP "/" { DATASPACE SIMPLE { ( 40, 20 ) / ( 40, 20 ) } STORAGE_LAYOUT { CHUNKED ( 40, 20 ) - SIZE 3200 (1.000:1 COMPRESSION) + SIZE 3208 (0.998:1 COMPRESSION) } FILTERS { USER_DEFINED_FILTER { FILTER_ID 260 - COMMENT dynlib4 - PARAMS { 9 1 17 0 } + COMMENT test filter plugin 4 } } FILLVALUE { @@ -137,13 +131,12 @@ GROUP "/" { DATASPACE SIMPLE { ( 40, 20 ) / ( 40, 20 ) } STORAGE_LAYOUT { CHUNKED ( 40, 20 ) - SIZE 3200 (1.000:1 COMPRESSION) + SIZE 3208 (0.998:1 COMPRESSION) } FILTERS { USER_DEFINED_FILTER { FILTER_ID 260 - COMMENT dynlib4 - PARAMS { 9 1 17 0 } + COMMENT test filter plugin 4 } } FILLVALUE { diff --git a/tools/test/h5repack/expected/plugin_version_test.h5repack_layout.h5.tst b/tools/test/h5repack/expected/plugin_version_test.h5repack_layout.h5.tst index f5c47365a3f..4dda73dfe3a 100644 --- a/tools/test/h5repack/expected/plugin_version_test.h5repack_layout.h5.tst +++ b/tools/test/h5repack/expected/plugin_version_test.h5repack_layout.h5.tst @@ -6,10 +6,10 @@ Making new file ... Type Filter (Compression) Name ----------------------------------------- group / - dset UD (1.000:1) /dset1 - dset UD (1.000:1) /dset2 - dset UD (1.000:1) /dset3 - dset UD (1.000:1) /dset4 - dset UD (1.000:1) /dset_chunk - dset UD (1.000:1) /dset_compact - dset UD (1.000:1) /dset_contiguous + dset UD (0.998:1) /dset1 + dset UD (0.998:1) /dset2 + dset UD (0.998:1) /dset3 + dset UD (0.998:1) /dset4 + dset UD (0.990:1) /dset_chunk + dset UD (0.998:1) /dset_compact + dset UD (0.998:1) /dset_contiguous diff --git a/tools/test/h5repack/h5repack_plugin.sh.in b/tools/test/h5repack/h5repack_plugin.sh.in index e073796c538..98b888517f5 100644 --- a/tools/test/h5repack/h5repack_plugin.sh.in +++ b/tools/test/h5repack/h5repack_plugin.sh.in @@ -245,10 +245,9 @@ TOOLTEST_DUMP() ############################################################################## # prepare for test COPY_TESTFILES_TO_TESTDIR -version_str=`echo @H5_VERSION@ | awk -F"-" '{print $1}' | sed 's/\./,/g'` # Run the test -arg="h5repack_layout.h5 -v -f UD=260,0,4,9,$version_str" +arg="h5repack_layout.h5 -v -f UD=260,0,0" TOOLTEST_DUMP plugin_version_test $arg arg="h5repack_layout.h5 -v -f UD=257,0,1,9" From 5425a571e0a50c5b6b6c1024883439154fb4ede1 Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Sun, 27 Oct 2024 23:51:07 -0500 Subject: [PATCH 048/179] Convert develop to v2.0.0 (#5006) Switches previous 1.16/17/18 values to 2.0 --- .github/workflows/abi-report.yml | 8 +-- .github/workflows/cmake-bintest.yml | 2 +- .github/workflows/cmake-ctest.yml | 30 +++++----- .github/workflows/h5py.yml | 4 +- .github/workflows/main-cmake-spc.yml | 34 +++++------ .github/workflows/main-cmake.yml | 2 +- .github/workflows/release-files.yml | 40 ++++++------- .github/workflows/remove-files.yml | 10 ++-- CMakeLists.txt | 22 +++---- HDF5Examples/C/H5D/CMakeLists.txt | 18 +++--- HDF5Examples/C/H5FLT/CMakeLists.txt | 2 +- HDF5Examples/C/H5G/CMakeLists.txt | 18 +++--- HDF5Examples/C/H5PAR/CMakeLists.txt | 2 +- HDF5Examples/C/H5T/CMakeLists.txt | 16 ++--- HDF5Examples/C/H5VDS/CMakeLists.txt | 14 ++--- HDF5Examples/C/Perf/CMakeLists.txt | 2 +- HDF5Examples/C/TUTR/CMakeLists.txt | 2 +- HDF5Examples/CXX/H5D/CMakeLists.txt | 2 +- HDF5Examples/CXX/TUTR/CMakeLists.txt | 2 +- HDF5Examples/FORTRAN/H5D/CMakeLists.txt | 16 ++--- HDF5Examples/FORTRAN/H5G/CMakeLists.txt | 12 ++-- HDF5Examples/FORTRAN/H5PAR/CMakeLists.txt | 2 +- HDF5Examples/FORTRAN/H5T/CMakeLists.txt | 16 ++--- HDF5Examples/FORTRAN/TUTR/CMakeLists.txt | 4 +- .../config/cmake/HDFExampleMacros.cmake | 8 +-- bin/make_vers | 2 +- c++/src/H5DcreatProp.cpp | 4 +- c++/src/H5FaccProp.cpp | 12 ++-- config/cmake/H5pubconf.h.in | 7 +-- config/cmake/HDF5ExampleCache.cmake | 6 +- config/cmake/scripts/HDF5config.cmake | 6 +- configure.ac | 25 ++++---- fortran/src/H5_f.c | 3 +- fortran/src/H5_ff.F90 | 5 +- fortran/src/H5f90global.F90 | 6 +- fortran/test/tH5P_F03.F90 | 13 +--- java/src/hdf/hdf5lib/H5.java | 4 +- java/src/hdf/hdf5lib/HDF5Constants.java | 8 +-- java/src/jni/h5Constants.c | 9 +-- java/test/TestH5.java | 9 +-- ..._0-1_16_0.txt => HISTORY-1_14_0-2_0_0.txt} | 0 release_docs/INSTALL_Autotools.txt | 34 +++++------ release_docs/INSTALL_CMake.txt | 60 +++++++++---------- release_docs/INSTALL_Cygwin.txt | 8 +-- release_docs/NEWSLETTER.txt | 2 +- release_docs/RELEASE.txt | 8 +-- release_docs/RELEASE_PROCESS.md | 2 +- release_docs/USING_CMake_Examples.txt | 2 +- release_docs/USING_HDF5_CMake.txt | 14 ++--- release_docs/USING_HDF5_VS.txt | 4 +- src/H5Aint.c | 3 +- src/H5Dlayout.c | 3 +- src/H5Fpublic.h | 5 +- src/H5Fsuper.c | 3 +- src/H5Ofill.c | 3 +- src/H5Ofsinfo.c | 3 +- src/H5Oint.c | 3 +- src/H5Opline.c | 3 +- src/H5Ppublic.h | 27 ++------- src/H5S.c | 3 +- src/H5Shyper.c | 3 +- src/H5Spoint.c | 3 +- src/H5T.c | 3 +- src/H5public.h | 8 +-- src/H5trace.c | 8 +-- test/chunk_info.c | 10 +++- test/dtypes.c | 2 +- test/h5test.c | 3 +- test/tfile.c | 3 +- tools/src/h5repack/h5repack.h | 5 +- tools/src/h5repack/h5repack_main.c | 5 +- .../test/h5repack/expected/h5repack-help.txt | 5 +- 72 files changed, 288 insertions(+), 367 deletions(-) rename release_docs/{HISTORY-1_14_0-1_16_0.txt => HISTORY-1_14_0-2_0_0.txt} (100%) diff --git a/.github/workflows/abi-report.yml b/.github/workflows/abi-report.yml index 5faa1f297b2..2fa63d1bd0d 100644 --- a/.github/workflows/abi-report.yml +++ b/.github/workflows/abi-report.yml @@ -51,7 +51,7 @@ jobs: - name: Get published binary (Linux) uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: - name: tgz-ubuntu-2204_gcc-binary + name: tgz-ubuntu-2404_gcc-binary path: ${{ github.workspace }} - name: List files for the space (Linux) @@ -59,7 +59,7 @@ jobs: ls -l ${{ github.workspace }} - name: Uncompress gh binary (Linux) - run: tar -zxvf ${{ github.workspace }}/${{ inputs.file_base }}-ubuntu-2204_gcc.tar.gz + run: tar -zxvf ${{ github.workspace }}/${{ inputs.file_base }}-ubuntu-2404_gcc.tar.gz - name: Uncompress hdf5 binary (Linux) run: | @@ -84,8 +84,8 @@ jobs: run: | mkdir "${{ github.workspace }}/hdf5R" cd "${{ github.workspace }}/hdf5R" - wget -q https://github.com/HDFGroup/hdf5/releases/download/hdf5_${{ inputs.file_ref }}/hdf5-${{ steps.convert-hdf5lib-refname.outputs.HDF5R_DOTS }}-ubuntu-2204_gcc.tar.gz - tar zxf hdf5-${{ steps.convert-hdf5lib-refname.outputs.HDF5R_DOTS }}-ubuntu-2204_gcc.tar.gz + wget -q https://github.com/HDFGroup/hdf5/releases/download/hdf5_${{ inputs.file_ref }}/hdf5-${{ steps.convert-hdf5lib-refname.outputs.HDF5R_DOTS }}-ubuntu-2404_gcc.tar.gz + tar zxf hdf5-${{ steps.convert-hdf5lib-refname.outputs.HDF5R_DOTS }}-ubuntu-2404_gcc.tar.gz - name: List files for the space (Linux) run: | diff --git a/.github/workflows/cmake-bintest.yml b/.github/workflows/cmake-bintest.yml index 3952cf80fa8..df681b4af9c 100644 --- a/.github/workflows/cmake-bintest.yml +++ b/.github/workflows/cmake-bintest.yml @@ -109,7 +109,7 @@ jobs: - name: Get published binary (Linux) uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: - name: tgz-ubuntu-2204_gcc-${{ inputs.build_mode }}-binary + name: tgz-ubuntu-2404_gcc-${{ inputs.build_mode }}-binary path: ${{ github.workspace }} - name: Uncompress hdf5 binary (Linux) diff --git a/.github/workflows/cmake-ctest.yml b/.github/workflows/cmake-ctest.yml index 77e490269fc..7d0add0fc57 100644 --- a/.github/workflows/cmake-ctest.yml +++ b/.github/workflows/cmake-ctest.yml @@ -266,21 +266,21 @@ jobs: cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-GNUC/README.md ${{ runner.workspace }}/build/hdf5 cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-GNUC/*.tar.gz ${{ runner.workspace }}/build/hdf5 cd "${{ runner.workspace }}/build" - tar -zcvf ${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.tar.gz hdf5 + tar -zcvf ${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.tar.gz hdf5 shell: bash - name: Publish deb binary (Linux) id: publish-ctest-deb-binary run: | mkdir "${{ runner.workspace }}/builddeb" - cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-GNUC/*.deb ${{ runner.workspace }}/builddeb/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.deb + cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-GNUC/*.deb ${{ runner.workspace }}/builddeb/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.deb shell: bash - name: Publish rpm binary (Linux) id: publish-ctest-rpm-binary run: | mkdir "${{ runner.workspace }}/buildrpm" - cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-GNUC/*.rpm ${{ runner.workspace }}/buildrpm/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.rpm + cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-GNUC/*.rpm ${{ runner.workspace }}/buildrpm/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.rpm shell: bash - name: List files in the space (Linux) @@ -292,22 +292,22 @@ jobs: - name: Save published binary (Linux) uses: actions/upload-artifact@v4 with: - name: tgz-ubuntu-2204_gcc-binary - path: ${{ runner.workspace }}/build/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.tar.gz + name: tgz-ubuntu-2404_gcc-binary + path: ${{ runner.workspace }}/build/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.tar.gz if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - name: Save published binary deb (Linux) uses: actions/upload-artifact@v4 with: - name: deb-ubuntu-2204_gcc-binary - path: ${{ runner.workspace }}/builddeb/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.deb + name: deb-ubuntu-2404_gcc-binary + path: ${{ runner.workspace }}/builddeb/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.deb if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` - name: Save published binary rpm (Linux) uses: actions/upload-artifact@v4 with: - name: rpm-ubuntu-2204_gcc-binary - path: ${{ runner.workspace }}/buildrpm/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.rpm + name: rpm-ubuntu-2404_gcc-binary + path: ${{ runner.workspace }}/buildrpm/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.rpm if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` # Save doxygen files created by ctest script @@ -589,7 +589,7 @@ jobs: cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-GNUC-S3/README.md ${{ runner.workspace }}/build/hdf5 cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-GNUC-S3/*.tar.gz ${{ runner.workspace }}/build/hdf5 cd "${{ runner.workspace }}/build" - tar -zcvf ${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc_s3.tar.gz hdf5 + tar -zcvf ${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc_s3.tar.gz hdf5 shell: bash - name: List files in the space (Linux S3) @@ -601,8 +601,8 @@ jobs: - name: Save published binary (Linux S3) uses: actions/upload-artifact@v4 with: - name: tgz-ubuntu-2204_gcc_s3-binary - path: ${{ runner.workspace }}/build/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc_s3.tar.gz + name: tgz-ubuntu-2404_gcc_s3-binary + path: ${{ runner.workspace }}/build/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc_s3.tar.gz if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` ####### intel builds @@ -812,7 +812,7 @@ jobs: cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-Intel/README.md ${{ runner.workspace }}/build/hdf5 cp ${{ runner.workspace }}/hdf5/build/${{ inputs.preset_name }}-Intel/*.tar.gz ${{ runner.workspace }}/build/hdf5 cd "${{ runner.workspace }}/build" - tar -zcvf ${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2204_intel.tar.gz hdf5 + tar -zcvf ${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_intel.tar.gz hdf5 shell: bash - name: List files in the space (Linux_intel) @@ -824,6 +824,6 @@ jobs: - name: Save published binary (Linux_intel) uses: actions/upload-artifact@v4 with: - name: tgz-ubuntu-2204_intel-binary - path: ${{ runner.workspace }}/build/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2204_intel.tar.gz + name: tgz-ubuntu-2404_intel-binary + path: ${{ runner.workspace }}/build/${{ steps.set-file-base.outputs.FILE_BASE }}-ubuntu-2404_intel.tar.gz if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` diff --git a/.github/workflows/h5py.yml b/.github/workflows/h5py.yml index f8da6c4f7e2..dd9d2fb2084 100644 --- a/.github/workflows/h5py.yml +++ b/.github/workflows/h5py.yml @@ -24,8 +24,8 @@ jobs: sed -i 's/hdf5@1.10.6:1.14/hdf5@1.10.6:/g' \ ./spack/var/spack/repos/builtin/packages/py-h5py/package.py . ./spack/share/spack/setup-env.sh - ./spack/bin/spack spec py-h5py@master+mpi ^hdf5@develop-1.17 - ./spack/bin/spack install py-h5py@master+mpi ^hdf5@develop-1.17 + ./spack/bin/spack spec py-h5py@master+mpi ^hdf5@develop-2.0 + ./spack/bin/spack install py-h5py@master+mpi ^hdf5@develop-2.0 ./spack/bin/spack install py-pytest ./spack/bin/spack install py-ipython ./spack/bin/spack install py-pytest-mpi diff --git a/.github/workflows/main-cmake-spc.yml b/.github/workflows/main-cmake-spc.yml index a814cf1a09d..416bac4e8a6 100644 --- a/.github/workflows/main-cmake-spc.yml +++ b/.github/workflows/main-cmake-spc.yml @@ -293,20 +293,20 @@ jobs: run: ctest . --parallel 2 -C Debug -V working-directory: ${{ runner.workspace }}/build - build_v1_16: - name: "gcc DBG v1.16 default API" + build_v2_0: + name: "gcc DBG v2.0.0 default API" runs-on: ubuntu-latest steps: # SETUP - name: Install Linux Dependencies 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 gcc-12 g++-12 gfortran-12 - echo "CC=gcc-12" >> $GITHUB_ENV - echo "CXX=g++-12" >> $GITHUB_ENV - echo "FC=gfortran-12" >> $GITHUB_ENV + 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 gcc-12 g++-12 gfortran-12 + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + echo "FC=gfortran-12" >> $GITHUB_ENV # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources @@ -333,7 +333,7 @@ jobs: -DHDF5_ENABLE_DIRECT_VFD:BOOL=ON \ -DHDF5_ENABLE_ROS3_VFD:BOOL=ON \ -DH5_NO_DEPRECATED_SYMBOLS:BOOL=OFF \ - -DHDF5_DEFAULT_API_VERSION:STRING=v116 \ + -DHDF5_DEFAULT_API_VERSION:STRING=v200 \ $GITHUB_WORKSPACE shell: bash @@ -354,13 +354,13 @@ jobs: # SETUP - name: Install Linux Dependencies 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 gcc-12 g++-12 gfortran-12 - echo "CC=gcc-12" >> $GITHUB_ENV - echo "CXX=g++-12" >> $GITHUB_ENV - echo "FC=gfortran-12" >> $GITHUB_ENV + 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 gcc-12 g++-12 gfortran-12 + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + echo "FC=gfortran-12" >> $GITHUB_ENV # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources diff --git a/.github/workflows/main-cmake.yml b/.github/workflows/main-cmake.yml index d633bb77ebb..6c192cdcfc9 100644 --- a/.github/workflows/main-cmake.yml +++ b/.github/workflows/main-cmake.yml @@ -259,7 +259,7 @@ jobs: - name: Save published binary (linux) uses: actions/upload-artifact@v4 with: - name: tgz-ubuntu-2204_gcc-${{ inputs.build_mode }}-binary + name: tgz-ubuntu-2404_gcc-${{ inputs.build_mode }}-binary path: ${{ runner.workspace }}/build/HDF5-*-Linux.tar.gz if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` if: ${{ (matrix.os == 'ubuntu-latest') && (inputs.thread_safety != 'TS') && ( inputs.build_mode != 'Debug') }} diff --git a/.github/workflows/release-files.yml b/.github/workflows/release-files.yml index af5f98ba6c6..09b7022b3e7 100644 --- a/.github/workflows/release-files.yml +++ b/.github/workflows/release-files.yml @@ -121,25 +121,25 @@ jobs: - name: Get published binary (Linux) uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: - name: tgz-ubuntu-2204_gcc-binary + name: tgz-ubuntu-2404_gcc-binary path: ${{ github.workspace }} - name: Get published deb binary (Linux) uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: - name: deb-ubuntu-2204_gcc-binary + name: deb-ubuntu-2404_gcc-binary path: ${{ github.workspace }} - name: Get published rpm binary (Linux) uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: - name: rpm-ubuntu-2204_gcc-binary + name: rpm-ubuntu-2404_gcc-binary path: ${{ github.workspace }} - name: Get published binary (Linux S3) uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: - name: tgz-ubuntu-2204_gcc_s3-binary + name: tgz-ubuntu-2404_gcc_s3-binary path: ${{ github.workspace }} - name: Get published binary (Windows_intel) @@ -157,7 +157,7 @@ jobs: - name: Get published binary (Linux_intel) uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: - name: tgz-ubuntu-2204_intel-binary + name: tgz-ubuntu-2404_intel-binary path: ${{ github.workspace }} - name: Get published abi reports (Linux) @@ -187,13 +187,13 @@ jobs: sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}.zip >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-macos14_clang.tar.gz >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-macos14_clang.dmg >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt - sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.tar.gz >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt - sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.deb >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt - sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.rpm >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt - sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc_s3.tar.gz >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt + sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.tar.gz >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt + sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.deb >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt + sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.rpm >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt + sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc_s3.tar.gz >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_cl.zip >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_cl.msi >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt - sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_intel.tar.gz >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt + sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_intel.tar.gz >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_intel.zip >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_intel.msi >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}.html.abi.reports.tar.gz >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt @@ -233,13 +233,13 @@ jobs: ${{ steps.get-file-base.outputs.FILE_BASE }}.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-macos14_clang.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-macos14_clang.dmg - ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.tar.gz - ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.deb - ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.rpm - ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc_s3.tar.gz + ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.tar.gz + ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.deb + ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.rpm + ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc_s3.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_cl.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_cl.msi - ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_intel.tar.gz + ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_intel.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_intel.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_intel.msi ${{ steps.get-file-base.outputs.FILE_BASE }}.html.abi.reports.tar.gz @@ -262,13 +262,13 @@ jobs: hdf5.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-macos14_clang.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-macos14_clang.dmg - ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.tar.gz - ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.deb - ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.rpm - ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc_s3.tar.gz + ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.tar.gz + ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.deb + ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.rpm + ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc_s3.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_cl.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_cl.msi - ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_intel.tar.gz + ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_intel.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_intel.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_intel.msi ${{ steps.get-file-base.outputs.FILE_BASE }}.html.abi.reports.tar.gz diff --git a/.github/workflows/remove-files.yml b/.github/workflows/remove-files.yml index 418065c8e00..8567c00c485 100644 --- a/.github/workflows/remove-files.yml +++ b/.github/workflows/remove-files.yml @@ -52,12 +52,12 @@ jobs: ${{ steps.get-file-base.outputs.FILE_BASE }}.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-macos14_clang.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-macos14_clang.dmg - ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.tar.gz - ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.deb - ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc.rpm - ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_gcc_s3.tar.gz + ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.tar.gz + ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.deb + ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc.rpm + ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_gcc_s3.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_cl.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_cl.msi - ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2204_intel.tar.gz + ${{ steps.get-file-base.outputs.FILE_BASE }}-ubuntu-2404_intel.tar.gz ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_intel.zip ${{ steps.get-file-base.outputs.FILE_BASE }}-win-vs2022_intel.msi diff --git a/CMakeLists.txt b/CMakeLists.txt index 863b8561a67..9cb7132abb3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -858,8 +858,8 @@ if (HDF5_ENABLE_SUBFILING_VFD) endif() -set (HDF5_DEFAULT_API_VERSION "v118" CACHE STRING "Enable v1.16 API (v16, v18, v110, v112, v114, v116, v118)") -set_property (CACHE HDF5_DEFAULT_API_VERSION PROPERTY STRINGS v16 v18 v110 v112 v114 v116 v118) +set (HDF5_DEFAULT_API_VERSION "v200" CACHE STRING "Enable v2.0 API (v16, v18, v110, v112, v114, v200)") +set_property (CACHE HDF5_DEFAULT_API_VERSION PROPERTY STRINGS v16 v18 v110 v112 v114 v200) #----------------------------------------------------------------------------- # Option to use 1.6.x API #----------------------------------------------------------------------------- @@ -901,22 +901,14 @@ if (HDF5_DEFAULT_API_VERSION MATCHES "v114") endif () #----------------------------------------------------------------------------- -# Option to use 1.16.x API -#----------------------------------------------------------------------------- -set (H5_USE_116_API_DEFAULT 0) -if (HDF5_DEFAULT_API_VERSION MATCHES "v116") - set (H5_USE_116_API_DEFAULT 1) -endif () - -#----------------------------------------------------------------------------- -# Option to use 1.18.x API +# Option to use 2.x.y API #----------------------------------------------------------------------------- +set (H5_USE_200_API_DEFAULT 0) if (NOT HDF5_DEFAULT_API_VERSION) - set (HDF5_DEFAULT_API_VERSION "v118") + set (HDF5_DEFAULT_API_VERSION "v200") endif () -set (H5_USE_118_API_DEFAULT 0) -if (HDF5_DEFAULT_API_VERSION MATCHES "v118") - set (H5_USE_118_API_DEFAULT 1) +if (DEFAULT_API_VERSION MATCHES "v200") + set (H5_USE_200_API_DEFAULT 1) endif () #----------------------------------------------------------------------------- diff --git a/HDF5Examples/C/H5D/CMakeLists.txt b/HDF5Examples/C/H5D/CMakeLists.txt index d88aa4551b1..4ebeb086c38 100644 --- a/HDF5Examples/C/H5D/CMakeLists.txt +++ b/HDF5Examples/C/H5D/CMakeLists.txt @@ -19,7 +19,7 @@ foreach (example_name ${common_examples}) "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_${example_name} PUBLIC ${MPI_C_INCLUDE_DIRS}) @@ -45,7 +45,7 @@ if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.8") "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_${example_name} PUBLIC ${MPI_C_INCLUDE_DIRS}) @@ -72,7 +72,7 @@ endif () # "$<$:-DH5_USE_110_API>" # "$<$:-DH5_USE_112_API>" # "$<$:-DH5_USE_114_API>" -# "$<$:-DH5_USE_116_API>" +# "$<$:-DH5_USE_200_API>" # ) # if (H5_HAVE_PARALLEL) # target_include_directories (${EXAMPLE_VARNAME}_${example_name} PUBLIC ${MPI_C_INCLUDE_DIRS}) @@ -112,14 +112,14 @@ endif () # endif () # endforeach () #endif () -#if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.16") -# foreach (example_name ${1_16_examples}) +#if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "2.0") +# foreach (example_name ${2_0_examples}) # if (H5EX_BUILD_TESTING) # add_custom_command ( # TARGET ${EXAMPLE_VARNAME}_${example_name} # POST_BUILD # COMMAND ${CMAKE_COMMAND} -# ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/116/${example_name}.tst ${PROJECT_BINARY_DIR}/${example_name}.tst +# ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/200/${example_name}.tst ${PROJECT_BINARY_DIR}/${example_name}.tst # ) # endif () # endforeach () @@ -192,12 +192,12 @@ if (HDF5_BUILD_TOOLS) # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/114/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl # ) #endif () - #if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.16") + #if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "2.0") # add_custom_command ( # TARGET ${EXAMPLE_VARNAME}_${example_name} # POST_BUILD # COMMAND ${CMAKE_COMMAND} - # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/116/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl + # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/200/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl # ) #endif () endif () @@ -209,7 +209,7 @@ if (HDF5_BUILD_TOOLS) # endforeach () # foreach (example_name ${1_14_examples}) # endforeach () -# foreach (example_name ${1_16_examples}) +# foreach (example_name ${2_0_examples}) # endforeach () endif () diff --git a/HDF5Examples/C/H5FLT/CMakeLists.txt b/HDF5Examples/C/H5FLT/CMakeLists.txt index 3bebf30025e..2cd5ea0077c 100644 --- a/HDF5Examples/C/H5FLT/CMakeLists.txt +++ b/HDF5Examples/C/H5FLT/CMakeLists.txt @@ -165,7 +165,7 @@ foreach (example ${dyn_examples}) "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_${example} PUBLIC ${MPI_C_INCLUDE_DIRS}) diff --git a/HDF5Examples/C/H5G/CMakeLists.txt b/HDF5Examples/C/H5G/CMakeLists.txt index 14a16861a34..c9a734f9d01 100644 --- a/HDF5Examples/C/H5G/CMakeLists.txt +++ b/HDF5Examples/C/H5G/CMakeLists.txt @@ -19,7 +19,7 @@ foreach (example_name ${common_examples}) "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_${example_name} PUBLIC ${MPI_C_INCLUDE_DIRS}) @@ -47,7 +47,7 @@ if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.8" AND NOT ${EXAMPLE_VARNAME}_US "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_${example_name} PUBLIC ${MPI_C_INCLUDE_DIRS}) @@ -74,7 +74,7 @@ endif () # "$<$:-DH5_USE_110_API>" # "$<$:-DH5_USE_112_API>" # "$<$:-DH5_USE_114_API>" -# "$<$:-DH5_USE_116_API>" +# "$<$:-DH5_USE_200_API>" # ) # if (H5_HAVE_PARALLEL) # target_include_directories (${EXAMPLE_VARNAME}_${example_name} PUBLIC ${MPI_C_INCLUDE_DIRS}) @@ -114,14 +114,14 @@ endif () # endif () # endforeach () #endif () -#if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.16") -# foreach (example_name ${1_16_examples}) +#if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "2.0") +# foreach (example_name ${2_0_examples}) # if (H5EX_BUILD_TESTING) # add_custom_command ( # TARGET ${EXAMPLE_VARNAME}_${example_name} # POST_BUILD # COMMAND ${CMAKE_COMMAND} -# ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/116/${example_name}.tst ${PROJECT_BINARY_DIR}/${example_name}.tst +# ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/200/${example_name}.tst ${PROJECT_BINARY_DIR}/${example_name}.tst # ) # endif () # endforeach () @@ -187,12 +187,12 @@ if (HDF5_BUILD_TOOLS) # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/114/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl # ) #endif () - #if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.16") + #if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "2.0") # add_custom_command ( # TARGET ${EXAMPLE_VARNAME}_${example_name} # POST_BUILD # COMMAND ${CMAKE_COMMAND} - # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/116/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl + # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/200/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl # ) #endif () # endforeach () @@ -203,7 +203,7 @@ if (HDF5_BUILD_TOOLS) # endforeach () # foreach (example_name ${1_14_examples}) # endforeach () -# foreach (example_name ${1_16_examples}) +# foreach (example_name ${2_0_examples}) # endforeach () endif () diff --git a/HDF5Examples/C/H5PAR/CMakeLists.txt b/HDF5Examples/C/H5PAR/CMakeLists.txt index 662cd70d295..8cd296d7f08 100644 --- a/HDF5Examples/C/H5PAR/CMakeLists.txt +++ b/HDF5Examples/C/H5PAR/CMakeLists.txt @@ -15,7 +15,7 @@ foreach (example_name ${examples}) "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) target_include_directories (${EXAMPLE_VARNAME}_${example_name} PUBLIC ${MPI_C_INCLUDE_DIRS}) target_link_libraries (${EXAMPLE_VARNAME}_${example_name} ${H5EX_HDF5_LINK_LIBS}) diff --git a/HDF5Examples/C/H5T/CMakeLists.txt b/HDF5Examples/C/H5T/CMakeLists.txt index b95958fb9b5..8292909a94f 100644 --- a/HDF5Examples/C/H5T/CMakeLists.txt +++ b/HDF5Examples/C/H5T/CMakeLists.txt @@ -19,7 +19,7 @@ foreach (example_name ${common_examples}) "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_${example_name} PUBLIC ${MPI_C_INCLUDE_DIRS}) @@ -45,7 +45,7 @@ endforeach () # "$<$:-DH5_USE_110_API>" # "$<$:-DH5_USE_112_API>" # "$<$:-DH5_USE_114_API>" -# "$<$:-DH5_USE_116_API>" +# "$<$:-DH5_USE_200_API>" # ) # if (H5_HAVE_PARALLEL) # target_include_directories (${EXAMPLE_VARNAME}_${example_name} PUBLIC ${MPI_C_INCLUDE_DIRS}) @@ -97,14 +97,14 @@ endforeach () # endif () # endforeach () #endif () -#if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.16") -# foreach (example_name ${1_16_examples}) +#if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "2.0") +# foreach (example_name ${2_0_examples}) # if (H5EX_BUILD_TESTING) # add_custom_command ( # TARGET ${EXAMPLE_VARNAME}_${example_name} # POST_BUILD # COMMAND ${CMAKE_COMMAND} -# ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/116/${example_name}.tst ${PROJECT_BINARY_DIR}/${example_name}.tst +# ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/200/${example_name}.tst ${PROJECT_BINARY_DIR}/${example_name}.tst # ) # endif () # endforeach () @@ -321,12 +321,12 @@ if (HDF5_BUILD_TOOLS) # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/114/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl # ) #endif () - #if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.16") + #if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "2.0") # add_custom_command ( # TARGET ${EXAMPLE_VARNAME}_${example_name} # POST_BUILD # COMMAND ${CMAKE_COMMAND} - # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/116/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl + # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/200/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl # ) #endif () # endforeach () @@ -336,7 +336,7 @@ if (HDF5_BUILD_TOOLS) # endforeach () # foreach (example_name ${1_14_examples}) # endforeach () -# foreach (example_name ${1_16_examples}) +# foreach (example_name ${2_0_examples}) # endforeach () endif () diff --git a/HDF5Examples/C/H5VDS/CMakeLists.txt b/HDF5Examples/C/H5VDS/CMakeLists.txt index 3ad3cb9ad89..bc27acfd9d9 100644 --- a/HDF5Examples/C/H5VDS/CMakeLists.txt +++ b/HDF5Examples/C/H5VDS/CMakeLists.txt @@ -19,7 +19,7 @@ if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.10") "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_${example_name} PUBLIC ${MPI_C_INCLUDE_DIRS}) @@ -60,14 +60,14 @@ endif () # endif () # endforeach () #endif () -#if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.16") -# foreach (example_name ${1_16_examples}) +#if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "2.0") +# foreach (example_name ${2_0_examples}) # if (H5EX_BUILD_TESTING) # add_custom_command ( # TARGET ${EXAMPLE_VARNAME}_${example_name} # POST_BUILD # COMMAND ${CMAKE_COMMAND} -# ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/116/${example_name}.tst ${PROJECT_BINARY_DIR}/${example_name}.tst +# ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/200/${example_name}.tst ${PROJECT_BINARY_DIR}/${example_name}.tst # ) # endif () # endforeach () @@ -102,12 +102,12 @@ if (HDF5_BUILD_TOOLS) # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/114/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl # ) #endif () - #if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.16") + #if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "2.0") # add_custom_command ( # TARGET ${EXAMPLE_VARNAME}_${example_name} # POST_BUILD # COMMAND ${CMAKE_COMMAND} - # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/116/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl + # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/200/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl # ) #endif () endforeach () @@ -116,7 +116,7 @@ if (HDF5_BUILD_TOOLS) # endforeach () # foreach (example_name ${1_14_examples}) # endforeach () -# foreach (example_name ${1_16_examples}) +# foreach (example_name ${2_0_examples}) # endforeach () endif () diff --git a/HDF5Examples/C/Perf/CMakeLists.txt b/HDF5Examples/C/Perf/CMakeLists.txt index bf66de3f6de..f4153d08722 100644 --- a/HDF5Examples/C/Perf/CMakeLists.txt +++ b/HDF5Examples/C/Perf/CMakeLists.txt @@ -16,7 +16,7 @@ foreach (example ${examples}) "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_${example_name} PUBLIC ${MPI_C_INCLUDE_DIRS}) diff --git a/HDF5Examples/C/TUTR/CMakeLists.txt b/HDF5Examples/C/TUTR/CMakeLists.txt index 10da2bf1797..74c0aee99f8 100644 --- a/HDF5Examples/C/TUTR/CMakeLists.txt +++ b/HDF5Examples/C/TUTR/CMakeLists.txt @@ -15,7 +15,7 @@ foreach (example_name ${examples}) "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_tutr_${example_name} PUBLIC ${MPI_C_INCLUDE_DIRS}) diff --git a/HDF5Examples/CXX/H5D/CMakeLists.txt b/HDF5Examples/CXX/H5D/CMakeLists.txt index 9799599500b..e2c23b3387a 100644 --- a/HDF5Examples/CXX/H5D/CMakeLists.txt +++ b/HDF5Examples/CXX/H5D/CMakeLists.txt @@ -16,7 +16,7 @@ if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.8") "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_cpp_ex_${example_name} PUBLIC ${MPI_C_INCLUDE_DIRS}) diff --git a/HDF5Examples/CXX/TUTR/CMakeLists.txt b/HDF5Examples/CXX/TUTR/CMakeLists.txt index 6310b163960..a8400295ea4 100644 --- a/HDF5Examples/CXX/TUTR/CMakeLists.txt +++ b/HDF5Examples/CXX/TUTR/CMakeLists.txt @@ -16,7 +16,7 @@ if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.8") "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_cpp_ex_${example_name} PUBLIC ${MPI_C_INCLUDE_DIRS}) diff --git a/HDF5Examples/FORTRAN/H5D/CMakeLists.txt b/HDF5Examples/FORTRAN/H5D/CMakeLists.txt index e7c59b420e2..b8d3166d19b 100644 --- a/HDF5Examples/FORTRAN/H5D/CMakeLists.txt +++ b/HDF5Examples/FORTRAN/H5D/CMakeLists.txt @@ -28,7 +28,7 @@ foreach (example_name ${common_examples}) "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_f90_${example_name} PUBLIC ${MPI_Fortran_INCLUDE_DIRS}) @@ -73,7 +73,7 @@ if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.10") "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_f90_${example_name} PUBLIC ${MPI_Fortran_INCLUDE_DIRS}) @@ -116,14 +116,14 @@ endif () # endif () # endforeach () #endif () -#if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.16") -# foreach (example_name ${1_16_examples}) +#if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "2.0") +# foreach (example_name ${2_0_examples}) # if (H5EX_BUILD_TESTING) # add_custom_command ( # TARGET ${EXAMPLE_VARNAME}_f90_${example_name} # POST_BUILD # COMMAND ${CMAKE_COMMAND} -# ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/116/${example_name}.tst ${PROJECT_BINARY_DIR}/${example_name}.tst +# ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/200/${example_name}.tst ${PROJECT_BINARY_DIR}/${example_name}.tst # ) # endif () # endforeach () @@ -216,12 +216,12 @@ if (HDF5_BUILD_TOOLS) # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/114/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl # ) #endif () - #if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.16") + #if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "2.0") # add_custom_command ( # TARGET ${EXAMPLE_VARNAME}_f90_${example_name} # POST_BUILD # COMMAND ${CMAKE_COMMAND} - # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/116/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl + # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/200/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl # ) #endif () endif () @@ -231,7 +231,7 @@ if (HDF5_BUILD_TOOLS) # endforeach () # foreach (example_name ${1_14_examples}) # endforeach () -# foreach (example_name ${1_16_examples}) +# foreach (example_name ${2_0_examples}) # endforeach () endif () endif () diff --git a/HDF5Examples/FORTRAN/H5G/CMakeLists.txt b/HDF5Examples/FORTRAN/H5G/CMakeLists.txt index 6a58c5258ab..ec93540201b 100644 --- a/HDF5Examples/FORTRAN/H5G/CMakeLists.txt +++ b/HDF5Examples/FORTRAN/H5G/CMakeLists.txt @@ -28,7 +28,7 @@ foreach (example_name ${common_examples}) "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_f90_${example_name} PUBLIC ${MPI_Fortran_INCLUDE_DIRS}) @@ -57,7 +57,7 @@ endforeach () # "$<$:-DH5_USE_110_API>" # "$<$:-DH5_USE_112_API>" # "$<$:-DH5_USE_114_API>" -# "$<$:-DH5_USE_116_API>" +# "$<$:-DH5_USE_200_API>" # ) # if (H5_HAVE_PARALLEL) # target_include_directories (${EXAMPLE_VARNAME}_f90_${example_name} PUBLIC ${MPI_C_INCLUDE_DIRS}) @@ -110,14 +110,14 @@ endforeach () # endif () # endforeach () #endif () -#if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.16") -# foreach (example_name ${1_16_examples}) +#if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "2.0") +# foreach (example_name ${2_0_examples}) # if (H5EX_BUILD_TESTING) # add_custom_command ( # TARGET ${EXAMPLE_VARNAME}_f90_${example_name} # POST_BUILD # COMMAND ${CMAKE_COMMAND} -# ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/116/${example_name}.tst ${PROJECT_BINARY_DIR}/${example_name}.tst +# ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/200/${example_name}.tst ${PROJECT_BINARY_DIR}/${example_name}.tst # ) # endif () # endforeach () @@ -165,7 +165,7 @@ endif () # endforeach () # foreach (example_name ${1_14_examples}) # endforeach () -# foreach (example_name ${1_16_examples}) +# foreach (example_name ${2_0_examples}) # endforeach () #endif () diff --git a/HDF5Examples/FORTRAN/H5PAR/CMakeLists.txt b/HDF5Examples/FORTRAN/H5PAR/CMakeLists.txt index e1d147d434c..f0af9764a31 100644 --- a/HDF5Examples/FORTRAN/H5PAR/CMakeLists.txt +++ b/HDF5Examples/FORTRAN/H5PAR/CMakeLists.txt @@ -28,7 +28,7 @@ foreach (example_name ${examples}) "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) target_include_directories (${EXAMPLE_VARNAME}_f90_${example_name} PUBLIC ${MPI_Fortran_INCLUDE_DIRS}) target_link_libraries (${EXAMPLE_VARNAME}_f90_${example_name} ${H5EX_LINK_Fortran_LIBS}) diff --git a/HDF5Examples/FORTRAN/H5T/CMakeLists.txt b/HDF5Examples/FORTRAN/H5T/CMakeLists.txt index 14fd8528664..da887a27a43 100644 --- a/HDF5Examples/FORTRAN/H5T/CMakeLists.txt +++ b/HDF5Examples/FORTRAN/H5T/CMakeLists.txt @@ -23,7 +23,7 @@ include (Fortran_sourcefiles.cmake) "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_f90_${example_name} PUBLIC ${MPI_Fortran_INCLUDE_DIRS}) @@ -50,7 +50,7 @@ foreach (example_name ${common_examples}) "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_f90_${example_name} PUBLIC ${MPI_Fortran_INCLUDE_DIRS}) @@ -103,14 +103,14 @@ endforeach () # endif () # endforeach () #endif () -#if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.16") -# foreach (example_name ${1_16_examples}) +#if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "2.0") +# foreach (example_name ${2_0_examples}) # if (H5EX_BUILD_TESTING) # add_custom_command ( # TARGET ${EXAMPLE_VARNAME}_f90_${example_name} # POST_BUILD # COMMAND ${CMAKE_COMMAND} -# ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/116/${example_name}.tst ${PROJECT_BINARY_DIR}/${example_name}.tst +# ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/200/${example_name}.tst ${PROJECT_BINARY_DIR}/${example_name}.tst # ) # endif () # endforeach () @@ -280,12 +280,12 @@ if (HDF5_BUILD_TOOLS) # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/114/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl # ) #endif () - #if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "1.16") + #if (HDF5_VERSION_MAJOR VERSION_GREATER_EQUAL "2.0") # add_custom_command ( # TARGET ${EXAMPLE_VARNAME}_f90_${example_name} # POST_BUILD # COMMAND ${CMAKE_COMMAND} - # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/116/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl + # ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/tfiles/200/${example_name}.ddl ${PROJECT_BINARY_DIR}/${example_name}.ddl # ) #endif () # endforeach () @@ -293,7 +293,7 @@ if (HDF5_BUILD_TOOLS) # endforeach () # foreach (example_name ${1_14_examples}) # endforeach () -# foreach (example_name ${1_16_examples}) +# foreach (example_name ${2_0_examples}) # endforeach () endif () diff --git a/HDF5Examples/FORTRAN/TUTR/CMakeLists.txt b/HDF5Examples/FORTRAN/TUTR/CMakeLists.txt index 7c5b2189838..7e6d815a7a8 100644 --- a/HDF5Examples/FORTRAN/TUTR/CMakeLists.txt +++ b/HDF5Examples/FORTRAN/TUTR/CMakeLists.txt @@ -23,7 +23,7 @@ include (Fortran_sourcefiles.cmake) "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_f90_tutr_${example_name} PUBLIC ${MPI_Fortran_INCLUDE_DIRS}) @@ -42,7 +42,7 @@ foreach (example_name ${common_examples}) "$<$:-DH5_USE_110_API>" "$<$:-DH5_USE_112_API>" "$<$:-DH5_USE_114_API>" - "$<$:-DH5_USE_116_API>" + "$<$:-DH5_USE_200_API>" ) if (H5_HAVE_PARALLEL) target_include_directories (${EXAMPLE_VARNAME}_f90_tutr_${example_name} PUBLIC ${MPI_Fortran_INCLUDE_DIRS}) diff --git a/HDF5Examples/config/cmake/HDFExampleMacros.cmake b/HDF5Examples/config/cmake/HDFExampleMacros.cmake index b4a5b36b1de..a1dd08b521f 100644 --- a/HDF5Examples/config/cmake/HDFExampleMacros.cmake +++ b/HDF5Examples/config/cmake/HDFExampleMacros.cmake @@ -356,10 +356,10 @@ macro (APIVersion version xyapi) endif () #----------------------------------------------------------------------------- - # Option to use 1.16.x API + # Option to use 2.0.x API #----------------------------------------------------------------------------- - option (${EXAMPLE_VARNAME}_USE_116_API "Use the HDF5 1.16.x API" OFF) - if (${EXAMPLE_VARNAME}_USE_116_API AND ${xyapi} GREATER 116) - set (${xyapi} "116") + option (${EXAMPLE_VARNAME}_USE_200_API "Use the HDF5 2.x.y API" OFF) + if (${EXAMPLE_VARNAME}_USE_200_API AND ${xyapi} GREATER 200) + set (${xyapi} "200") endif () endmacro () diff --git a/bin/make_vers b/bin/make_vers index fe1cc08cf57..ba335cae27e 100755 --- a/bin/make_vers +++ b/bin/make_vers @@ -8,7 +8,7 @@ use warnings; # is added (like support for 1.4, etc), the min_sup_idx parameter will # need to be decremented.) -# Max. library "index" (0 = v1.0, 1 = 1.2, 2 = 1.4, 3 = 1.6, 4 = 1.8, 5 = 1.10, 6 = 1.12, 7 = 1.14, 8 = 1.16, etc) +# Max. library "index" (0 = v1.0, 1 = 1.2, 2 = 1.4, 3 = 1.6, 4 = 1.8, 5 = 1.10, 6 = 1.12, 7 = 1.14, 8 = 2.0, etc) $max_idx = 8; # Min. supported previous library version "index" (0 = v1.0, 1 = 1.2, etc) diff --git a/c++/src/H5DcreatProp.cpp b/c++/src/H5DcreatProp.cpp index 54ccea00bcb..250413c6d73 100644 --- a/c++/src/H5DcreatProp.cpp +++ b/c++/src/H5DcreatProp.cpp @@ -649,7 +649,7 @@ DSetCreatPropList::setFletcher32() const /// which is a 32-bit signed long value on Windows, which limited /// the valid offset that can be set to 2 GiB. /// -///\version 1.16.0 \p offset parameter type changed to HDoff_t from off_t. +///\version 2.0.0 \p offset parameter type changed to HDoff_t from off_t. //-------------------------------------------------------------------------- void DSetCreatPropList::setExternal(const char *name, HDoff_t offset, hsize_t size) const @@ -702,7 +702,7 @@ DSetCreatPropList::getExternalCount() const /// which is a 32-bit signed long value on Windows, which limited /// the valid offset that can be returned to 2 GiB. /// -///\version 1.16.0 \p offset parameter type changed to HDoff_t from off_t. +///\version 2.0.0 \p offset parameter type changed to HDoff_t from off_t. //-------------------------------------------------------------------------- void DSetCreatPropList::getExternal(unsigned idx, size_t name_size, char *name, HDoff_t &offset, diff --git a/c++/src/H5FaccProp.cpp b/c++/src/H5FaccProp.cpp index 82a8d550f02..6949309e6b7 100644 --- a/c++/src/H5FaccProp.cpp +++ b/c++/src/H5FaccProp.cpp @@ -713,8 +713,7 @@ FileAccPropList::getFileLocking(hbool_t &use_file_locking, hbool_t &ignore_when_ /// \li \c H5F_LIBVER_110 /// \li \c H5F_LIBVER_112 /// \li \c H5F_LIBVER_114 -/// \li \c H5F_LIBVER_116 -/// \li \c H5F_LIBVER_118 +/// \li \c H5F_LIBVER_200 /// \li \c H5F_LIBVER_LATEST /// /// Valid values of \a libver_high are as follows: @@ -722,8 +721,7 @@ FileAccPropList::getFileLocking(hbool_t &use_file_locking, hbool_t &ignore_when_ /// \li \c H5F_LIBVER_110 /// \li \c H5F_LIBVER_112 /// \li \c H5F_LIBVER_114 -/// \li \c H5F_LIBVER_116 -/// \li \c H5F_LIBVER_118 +/// \li \c H5F_LIBVER_200 /// \li \c H5F_LIBVER_LATEST (Default) /// /// For more detail, please refer to the H5Pset_libver_bounds API in @@ -755,8 +753,7 @@ FileAccPropList::setLibverBounds(H5F_libver_t libver_low, H5F_libver_t libver_hi /// \li \c H5F_LIBVER_110 /// \li \c H5F_LIBVER_112 /// \li \c H5F_LIBVER_114 -/// \li \c H5F_LIBVER_116 -/// \li \c H5F_LIBVER_118 +/// \li \c H5F_LIBVER_200 /// \li \c H5F_LIBVER_LATEST /// /// and \a libver_high: @@ -764,8 +761,7 @@ FileAccPropList::setLibverBounds(H5F_libver_t libver_low, H5F_libver_t libver_hi /// \li \c H5F_LIBVER_110 /// \li \c H5F_LIBVER_112 /// \li \c H5F_LIBVER_114 -/// \li \c H5F_LIBVER_116 -/// \li \c H5F_LIBVER_118 +/// \li \c H5F_LIBVER_200 /// \li \c H5F_LIBVER_LATEST //-------------------------------------------------------------------------- void diff --git a/config/cmake/H5pubconf.h.in b/config/cmake/H5pubconf.h.in index 822875285cf..36ab096f546 100644 --- a/config/cmake/H5pubconf.h.in +++ b/config/cmake/H5pubconf.h.in @@ -607,11 +607,8 @@ /* Define using v1.14 public API symbols by default */ #cmakedefine H5_USE_114_API_DEFAULT @H5_USE_114_API_DEFAULT@ -/* Define using v1.16 public API symbols by default */ -#cmakedefine H5_USE_116_API_DEFAULT @H5_USE_116_API_DEFAULT@ - -/* Define using v1.18 public API symbols by default */ -#cmakedefine H5_USE_118_API_DEFAULT @H5_USE_118_API_DEFAULT@ +/* Define using v2.0 public API symbols by default */ +#cmakedefine H5_USE_200_API_DEFAULT @H5_USE_200_API_DEFAULT@ /* Define if the library will use file locking */ #cmakedefine H5_USE_FILE_LOCKING @H5_USE_FILE_LOCKING@ diff --git a/config/cmake/HDF5ExampleCache.cmake b/config/cmake/HDF5ExampleCache.cmake index 2b2559e79cd..13b9d2e3a18 100644 --- a/config/cmake/HDF5ExampleCache.cmake +++ b/config/cmake/HDF5ExampleCache.cmake @@ -36,10 +36,8 @@ elseif (HDF5_DEFAULT_API_VERSION MATCHES "v112") set (H5_USE_112_API ON) elseif (HDF5_DEFAULT_API_VERSION MATCHES "v114") set (H5_USE_114_API ON) -elseif (HDF5_DEFAULT_API_VERSION MATCHES "v116") - set (H5_USE_116_API ON) -elseif (HDF5_DEFAULT_API_VERSION MATCHES "v118") - set (H5_USE_118_API ON) +elseif (HDF5_DEFAULT_API_VERSION MATCHES "v200") + set (H5_USE_200_API ON) endif () message (STATUS "HDF5 H5_LIBVER_DIR: ${H5_LIBVER_DIR} HDF5_API_VERSION: ${HDF5_DEFAULT_API_VERSION}") diff --git a/config/cmake/scripts/HDF5config.cmake b/config/cmake/scripts/HDF5config.cmake index 874207a30a8..3da5f0ecd5e 100644 --- a/config/cmake/scripts/HDF5config.cmake +++ b/config/cmake/scripts/HDF5config.cmake @@ -38,15 +38,15 @@ cmake_minimum_required (VERSION 3.18) # CTEST_SOURCE_NAME - source folder ############################################################################## -set (CTEST_SOURCE_VERSION "1.17.0") +set (CTEST_SOURCE_VERSION "2.0.0") set (CTEST_SOURCE_VERSEXT "") ############################################################################## # handle input parameters to script. #BUILD_GENERATOR - which CMake generator to use, required -#INSTALLDIR - HDF5-1.17.x root folder +#INSTALLDIR - HDF5-2.0.x root folder #CTEST_CONFIGURATION_TYPE - Release, Debug, RelWithDebInfo -#CTEST_SOURCE_NAME - name of source folder; HDF5-1.17.x +#CTEST_SOURCE_NAME - name of source folder; HDF5-2.0.x #MODEL - CDash group name #HPC - run alternate configurations for HPC machines; sbatch, bsub, raybsub, qsub #MPI - enable MPI diff --git a/configure.ac b/configure.ac index 277a481d69e..0ddb77000c3 100644 --- a/configure.ac +++ b/configure.ac @@ -22,7 +22,7 @@ AC_PREREQ([2.71]) ## NOTE: Do not forget to change the version number here when we do a ## release!!! ## -AC_INIT([HDF5], [1.17.0], [help@hdfgroup.org]) +AC_INIT([HDF5], [2.0.0], [help@hdfgroup.org]) AC_CONFIG_SRCDIR([src/H5.c]) AC_CONFIG_HEADERS([src/H5config.h]) @@ -4213,10 +4213,10 @@ esac AC_SUBST([DEFAULT_API_VERSION]) AC_MSG_CHECKING([which version of public symbols to use by default]) AC_ARG_WITH([default-api-version], - [AS_HELP_STRING([--with-default-api-version=(default|v16|v18|v110|v112|v114|v116|v118)], + [AS_HELP_STRING([--with-default-api-version=(default|v16|v18|v110|v112|v114|v200)], [Specify default release version of public symbols - [default=v118]])],, - [withval=v118]) + [default=v200]])],, + [withval=v200]) ## Allowing "default" allows the GitHub CI to check that we didn't forget ## to change the defaults when creating a new major version @@ -4245,16 +4245,11 @@ elif test "X$withval" = "Xv114"; then DEFAULT_API_VERSION=v114 AC_DEFINE([USE_114_API_DEFAULT], [1], [Define using v1.14 public API symbols by default]) -elif test "X$withval" = "Xv116"; then - AC_MSG_RESULT([v116]) - DEFAULT_API_VERSION=v116 - AC_DEFINE([USE_116_API_DEFAULT], [1], - [Define using v1.16 public API symbols by default]) -elif test "X$withval" = "Xv118" -o "X$withval" = "Xdefault"; then - AC_MSG_RESULT([v118]) - DEFAULT_API_VERSION=v118 - AC_DEFINE([USE_118_API_DEFAULT], [1], - [Define using v1.18 public API symbols by default]) +elif test "X$withval" = "Xv200" -o "X$withval" = "Xdefault"; then + AC_MSG_RESULT([v200]) + DEFAULT_API_VERSION=v200 + AC_DEFINE([USE_200_API_DEFAULT], [1], + [Define using v2.0 public API symbols by default]) else AC_MSG_ERROR([invalid version of public symbols given]) fi @@ -4264,7 +4259,7 @@ fi ## if the user insists on doing this via the --enable-unsupported configure ## flag, we'll let them. if test "X${ALLOW_UNSUPPORTED}" != "Xyes"; then - if test "X${DEFAULT_API_VERSION}" != "Xv118" -a "X${DEPRECATED_SYMBOLS}" = "Xno" ; then + if test "X${DEFAULT_API_VERSION}" != "Xv200" -a "X${DEPRECATED_SYMBOLS}" = "Xno" ; then AC_MSG_ERROR([Removing old public API symbols not allowed when using them as default public API symbols. Use --enable-unsupported to override this error.]) fi fi diff --git a/fortran/src/H5_f.c b/fortran/src/H5_f.c index b560184618a..37706118a3e 100644 --- a/fortran/src/H5_f.c +++ b/fortran/src/H5_f.c @@ -539,8 +539,7 @@ h5init_flags_c(int_f *h5d_flags, size_t_f *h5d_size_flags, int_f *h5e_flags, hid h5f_flags[27] = (int_f)H5F_LIBVER_V110; h5f_flags[28] = (int_f)H5F_LIBVER_V112; h5f_flags[29] = (int_f)H5F_LIBVER_V114; - h5f_flags[30] = (int_f)H5F_LIBVER_V116; - h5f_flags[31] = (int_f)H5F_LIBVER_V118; + h5f_flags[30] = (int_f)H5F_LIBVER_V200; /* * H5FD flags diff --git a/fortran/src/H5_ff.F90 b/fortran/src/H5_ff.F90 index 847d649e6fe..79c3cbcd3d9 100644 --- a/fortran/src/H5_ff.F90 +++ b/fortran/src/H5_ff.F90 @@ -56,7 +56,7 @@ MODULE H5LIB ! ! H5F flags declaration ! - INTEGER, PARAMETER :: H5F_FLAGS_LEN = 32 + INTEGER, PARAMETER :: H5F_FLAGS_LEN = 31 INTEGER, DIMENSION(1:H5F_FLAGS_LEN) :: H5F_flags ! ! H5generic flags declaration @@ -379,8 +379,7 @@ END FUNCTION h5init1_flags_c H5F_LIBVER_V110_F = H5F_flags(28) H5F_LIBVER_V112_F = H5F_flags(29) H5F_LIBVER_V114_F = H5F_flags(30) - H5F_LIBVER_V116_F = H5F_flags(31) - H5F_LIBVER_V118_F = H5F_flags(32) + H5F_LIBVER_V200_F = H5F_flags(31) ! ! H5generic flags ! diff --git a/fortran/src/H5f90global.F90 b/fortran/src/H5f90global.F90 index 223f8dddf72..9c973126290 100644 --- a/fortran/src/H5f90global.F90 +++ b/fortran/src/H5f90global.F90 @@ -236,8 +236,7 @@ MODULE H5GLOBAL !DEC$ATTRIBUTES DLLEXPORT :: H5F_LIBVER_V110_F !DEC$ATTRIBUTES DLLEXPORT :: H5F_LIBVER_V112_F !DEC$ATTRIBUTES DLLEXPORT :: H5F_LIBVER_V114_F - !DEC$ATTRIBUTES DLLEXPORT :: H5F_LIBVER_V116_F - !DEC$ATTRIBUTES DLLEXPORT :: H5F_LIBVER_V118_F + !DEC$ATTRIBUTES DLLEXPORT :: H5F_LIBVER_V200_F !DEC$ATTRIBUTES DLLEXPORT :: H5F_FSPACE_STRATEGY_FSM_AGGR_F !DEC$ATTRIBUTES DLLEXPORT :: H5F_FSPACE_STRATEGY_PAGE_F !DEC$ATTRIBUTES DLLEXPORT :: H5F_FSPACE_STRATEGY_AGGR_F @@ -271,8 +270,7 @@ MODULE H5GLOBAL INTEGER :: H5F_LIBVER_V110_F !< H5F_LIBVER_V110 INTEGER :: H5F_LIBVER_V112_F !< H5F_LIBVER_V112 INTEGER :: H5F_LIBVER_V114_F !< H5F_LIBVER_V114 - INTEGER :: H5F_LIBVER_V116_F !< H5F_LIBVER_V116 - INTEGER :: H5F_LIBVER_V118_F !< H5F_LIBVER_V118 + INTEGER :: H5F_LIBVER_V200_F !< H5F_LIBVER_V200 INTEGER :: H5F_FSPACE_STRATEGY_FSM_AGGR_F !< H5F_FSPACE_STRATEGY_FSM_AGGR INTEGER :: H5F_FSPACE_STRATEGY_PAGE_F !< H5F_FSPACE_STRATEGY_PAGE INTEGER :: H5F_FSPACE_STRATEGY_AGGR_F !< H5F_FSPACE_STRATEGY_AGGR diff --git a/fortran/test/tH5P_F03.F90 b/fortran/test/tH5P_F03.F90 index 6611187c8ce..8dd76eb2958 100644 --- a/fortran/test/tH5P_F03.F90 +++ b/fortran/test/tH5P_F03.F90 @@ -228,19 +228,12 @@ SUBROUTINE test_create(total_error) CALL VERIFY("***ERROR: Returned wrong low libver_bounds", low, H5F_LIBVER_V114_F, total_error) CALL VERIFY("***ERROR: Returned wrong high libver_bounds", high, H5F_LIBVER_V114_F, total_error) - CALL h5pset_libver_bounds_f(fapl, H5F_LIBVER_V116_F, H5F_LIBVER_V116_F, error) + CALL h5pset_libver_bounds_f(fapl, H5F_LIBVER_V200_F, H5F_LIBVER_V200_F, error) CALL check("h5pset_libver_bounds_f",error, total_error) CALL h5pget_libver_bounds_f(fapl, low, high, error) CALL check("h5pget_libver_bounds_f",error, total_error) - CALL VERIFY("***ERROR: Returned wrong low libver_bounds", low, H5F_LIBVER_V116_F, total_error) - CALL VERIFY("***ERROR: Returned wrong high libver_bounds", high, H5F_LIBVER_V116_F, total_error) - - CALL h5pset_libver_bounds_f(fapl, H5F_LIBVER_V118_F, H5F_LIBVER_V118_F, error) - CALL check("h5pset_libver_bounds_f",error, total_error) - CALL h5pget_libver_bounds_f(fapl, low, high, error) - CALL check("h5pget_libver_bounds_f",error, total_error) - CALL VERIFY("***ERROR: Returned wrong low libver_bounds", low, H5F_LIBVER_V118_F, total_error) - CALL VERIFY("***ERROR: Returned wrong high libver_bounds", high, H5F_LIBVER_V118_F, total_error) + CALL VERIFY("***ERROR: Returned wrong low libver_bounds", low, H5F_LIBVER_V200_F, total_error) + CALL VERIFY("***ERROR: Returned wrong high libver_bounds", high, H5F_LIBVER_V200_F, total_error) CALL H5Pset_libver_bounds_f(fapl, H5F_LIBVER_LATEST_F, H5F_LIBVER_LATEST_F, error) CALL check("H5Pset_libver_bounds_f",error, total_error) diff --git a/java/src/hdf/hdf5lib/H5.java b/java/src/hdf/hdf5lib/H5.java index c2b1c3c009f..53350eb7a87 100644 --- a/java/src/hdf/hdf5lib/H5.java +++ b/java/src/hdf/hdf5lib/H5.java @@ -231,7 +231,7 @@ * which prints out the HDF5 error stack, as described in the HDF5 C API @ref H5Eprint(). This * may be used by Java exception handlers to print out the HDF5 error stack.
* - * @version HDF5 1.17.0
+ * @version HDF5 2.0.0
* See also: * @ref HDFARRAY hdf.hdf5lib.HDFArray
* @ref HDF5CONST hdf.hdf5lib.HDF5Constants
@@ -273,7 +273,7 @@ public class H5 implements java.io.Serializable { * * Make sure to update the versions number when a different library is used. */ - public final static int LIB_VERSION[] = {1, 17, 0}; + public final static int LIB_VERSION[] = {2, 0, 0}; /** * @ingroup JH5 diff --git a/java/src/hdf/hdf5lib/HDF5Constants.java b/java/src/hdf/hdf5lib/HDF5Constants.java index 564e2a617d1..acc6d7d7b18 100644 --- a/java/src/hdf/hdf5lib/HDF5Constants.java +++ b/java/src/hdf/hdf5lib/HDF5Constants.java @@ -573,9 +573,7 @@ public class HDF5Constants { /** */ public static final int H5F_LIBVER_V114 = H5F_LIBVER_V114(); /** */ - public static final int H5F_LIBVER_V116 = H5F_LIBVER_V116(); - /** */ - public static final int H5F_LIBVER_V118 = H5F_LIBVER_V118(); + public static final int H5F_LIBVER_V200 = H5F_LIBVER_V200(); /** */ public static final int H5F_LIBVER_NBOUNDS = H5F_LIBVER_NBOUNDS(); /** */ @@ -2060,9 +2058,7 @@ public class HDF5Constants { private static native final int H5F_LIBVER_V114(); - private static native final int H5F_LIBVER_V116(); - - private static native final int H5F_LIBVER_V118(); + private static native final int H5F_LIBVER_V200(); private static native final int H5F_LIBVER_NBOUNDS(); diff --git a/java/src/jni/h5Constants.c b/java/src/jni/h5Constants.c index 8a39513695b..984ed937967 100644 --- a/java/src/jni/h5Constants.c +++ b/java/src/jni/h5Constants.c @@ -1304,14 +1304,9 @@ Java_hdf_hdf5lib_HDF5Constants_H5F_1LIBVER_1V114(JNIEnv *env, jclass cls) return H5F_LIBVER_V114; } JNIEXPORT jint JNICALL -Java_hdf_hdf5lib_HDF5Constants_H5F_1LIBVER_1V116(JNIEnv *env, jclass cls) +Java_hdf_hdf5lib_HDF5Constants_H5F_1LIBVER_1V200(JNIEnv *env, jclass cls) { - return H5F_LIBVER_V116; -} -JNIEXPORT jint JNICALL -Java_hdf_hdf5lib_HDF5Constants_H5F_1LIBVER_1V118(JNIEnv *env, jclass cls) -{ - return H5F_LIBVER_V118; + return H5F_LIBVER_V200; } JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1LIBVER_1NBOUNDS(JNIEnv *env, jclass cls) diff --git a/java/test/TestH5.java b/java/test/TestH5.java index b9252569132..eed2f0efe5d 100644 --- a/java/test/TestH5.java +++ b/java/test/TestH5.java @@ -313,7 +313,7 @@ public void testH5set_free_list_limits() @Test public void testH5get_libversion() { - int libversion[] = {1, 17, 0}; + int libversion[] = {2, 0, 0}; try { H5.H5get_libversion(libversion); @@ -322,11 +322,8 @@ public void testH5get_libversion() fail("H5.H5get_libversion: " + err); } - for (int i = 0; i < 2; i++) + for (int i = 0; i < 3; i++) assertEquals(H5.LIB_VERSION[i], libversion[i]); - - for (int i = 0; i < 2; i++) - assertFalse(libversion[i] == 0); } /** @@ -354,7 +351,7 @@ public void testH5get_libversion_null_param() @Test public void testH5check_version() { - int majnum = 1, minnum = 17, relnum = 0; + int majnum = 2, minnum = 0, relnum = 0; try { H5.H5check_version(majnum, minnum, relnum); diff --git a/release_docs/HISTORY-1_14_0-1_16_0.txt b/release_docs/HISTORY-1_14_0-2_0_0.txt similarity index 100% rename from release_docs/HISTORY-1_14_0-1_16_0.txt rename to release_docs/HISTORY-1_14_0-2_0_0.txt diff --git a/release_docs/INSTALL_Autotools.txt b/release_docs/INSTALL_Autotools.txt index 5a5f1fec31e..07c3b7f0182 100644 --- a/release_docs/INSTALL_Autotools.txt +++ b/release_docs/INSTALL_Autotools.txt @@ -27,10 +27,10 @@ Obtaining HDF5 source code 2. Obtain HDF5 source from Github development branch: https://github.com/HDFGroup/hdf5 last release: https://github.com/HDFGroup/hdf5/releases/latest - hdf5-1_17_"X".tar.gz or hdf5-1_17_"X".zip + hdf5-2_"X"_"Y".tar.gz or hdf5-2_"X"_"Y".zip and put it in "myhdfstuff". - Uncompress the file. There should be a hdf5-1.17."X" folder. + Uncompress the file. There should be a hdf5-2."X"."Y" folder. ======================================================================== @@ -47,16 +47,16 @@ Before You Start: 2. Optional: Install the Szip version 2.1 library (you may use Szip 2.0 binaries). - 3. Extract the source from the hdf5-X.Y.Z.tar file and change - directory to hdf5-X.Y.Z. + 3. Extract the source from the hdf5-2.X.Y.tar file and change + directory to hdf5-2.X.Y. 4. Quick installation For those who don't like to read ;-) the following steps can be used to configure, build, test, and install the HDF5 library, header files, - and support programs. For example, to install HDF5 version X.Y.Z at + and support programs. For example, to install HDF5 version 2.X.Y at location /usr/local/hdf5, use the following steps. - $ cd hdf5-X.Y.Z + $ cd hdf5-2.X.Y $ ./configure --prefix=/usr/local/hdf5 $ make $ make check # run test suite. @@ -81,23 +81,23 @@ III. Full installation instructions for source distributions 1. Unpacking the distribution The HDF5 source code is distributed in a variety of formats which can be unpacked with the following commands, each of which creates an - 'hdf5-X.Y.Z' directory, where X.Y.Z is the HDF5 version numbers. + 'hdf5-2.X.Y' directory, where 2.X.Y is the HDF5 version numbers. 1.1. Non-compressed tar archive (*.tar) - $ tar xf hdf5-X.Y.Z.tar + $ tar xf hdf5-2.X.Y.tar 1.2. Gzip'd tar archive (*.tar.gz) - $ gunzip < hdf5-X.Y.Z.tar.gz | tar xf - + $ gunzip < hdf5-2.X.Y.tar.gz | tar xf - Or - $ tar zxf hdf5-X.Y.Z.tar.gz + $ tar zxf hdf5-2.X.Y.tar.gz 1.3. Bzip'd tar archive (*.tar.bz2) - $ bunzip2 < hdf5-X.Y.Z.tar.bz2 | tar xf - + $ bunzip2 < hdf5-2.X.Y.tar.bz2 | tar xf - Or - $ tar jxf hdf5-X.Y.Z.tar.bz2 + $ tar jxf hdf5-2.X.Y.tar.bz2 2. Source versus build directories On most systems the build can occur in a directory other than the @@ -108,7 +108,7 @@ III. Full installation instructions for source distributions details are below). For example, $ mkdir built-fortran $ cd build-fortran - $ ../hdf5-X.Y.Z/configure --enable-fortran ... + $ ../hdf5-2.X.Y/configure --enable-fortran ... 3. Configuring @@ -345,10 +345,8 @@ III. Full installation instructions for source distributions 3.11. Backward compatibility - The 1.17 version of the HDF5 library can be configured to operate - identically to the v1.16 library with the - --with-default-api-version=v116 - configure flag, or identically to the v1.14 library with the + The 2.0.0 version of the HDF5 library can be configured to operate + identically to the v1.14 library with the --with-default-api-version=v114 configure flag, or identically to the v1.12 library with the --with-default-api-version=v112 @@ -359,7 +357,7 @@ III. Full installation instructions for source distributions configure flag, or identically to the v1.6 library with the --with-default-api-version=v16 configure flag. This allows existing code to be compiled with the - v1.17 library without requiring immediate changes to the application + v2.0 library without requiring immediate changes to the application source code. For additional configuration options and other details, see "API Compatibility Macros": diff --git a/release_docs/INSTALL_CMake.txt b/release_docs/INSTALL_CMake.txt index a43827818a4..9d904ba2293 100644 --- a/release_docs/INSTALL_CMake.txt +++ b/release_docs/INSTALL_CMake.txt @@ -29,15 +29,15 @@ Obtaining HDF5 source code 2. Obtain HDF5 source from Github development branch: https://github.com/HDFGroup/hdf5 last release: https://github.com/HDFGroup/hdf5/releases/latest - hdf5-1_15_"X".tar.gz or hdf5-1_15_"X".zip + hdf5-2_"X"_"Y".tar.gz or hdf5-2_"X"_"Y".zip and put it in "myhdfstuff". - Uncompress the file. There should be a hdf5-1.17."X" folder. + Uncompress the file. There should be a hdf5-2."X"."Y" folder. CMake version 1. We suggest you obtain the latest CMake from the Kitware web site. - The HDF5 1.17."X" product requires a minimum CMake version 3.18, - where "X" is the current HDF5 release version. If you are using + The HDF5 2."X"."Y" product requires a minimum CMake version 3.18, + where "X"."Y" is the current HDF5 release version. If you are using VS2022, the minimum version is 3.21. Note: @@ -85,7 +85,7 @@ To build HDF5 with the SZIP and ZLIB external libraries you will need to: 2. Download/copy the individual files mentioned above to "myhdfstuff". Do not uncompress the tar.gz files. - 3. Change to the source directory "hdf5-1.17.x". + 3. Change to the source directory "hdf5-2.x.y". CTestScript.cmake file should not be modified. 4. Edit the platform configuration file, HDF5options.cmake, if you want to change @@ -113,7 +113,7 @@ To build HDF5 with the SZIP and ZLIB external libraries you will need to: The command above will configure, build, test, and create an install package in the myhdfstuff folder. It will have the format: - HDF5-1.17.NN-. + HDF5-2.X.Y-. On Unix, will be "Linux". A similar .sh file will also be created. On Windows, will be "win64" or "win32". If you have an @@ -134,13 +134,13 @@ To build HDF5 with the SZIP and ZLIB external libraries you will need to: 6. To install, "X" is the current release version On Windows (with WiX installed), execute: - HDF5-1.17."X"-win32.msi or HDF5-1.17."X"-win64.msi + HDF5-2."X"."Y"-win32.msi or HDF5-2."X"."Y"-win64.msi By default this program will install the hdf5 library into the "C:\Program Files" directory and will create the following directory structure: HDF_Group --HDF5 - ----1.17."X" + ----2."X"."Y" ------bin ------include ------lib @@ -149,29 +149,29 @@ To build HDF5 with the SZIP and ZLIB external libraries you will need to: On Linux, change to the install destination directory (create it if doesn't exist) and execute: - /myhdfstuff/HDF5-1.17."X"-Linux.sh + /myhdfstuff/HDF5-2."X"."Y"-Linux.sh After accepting the license, the script will prompt: By default the HDF5 will be installed in: - "/HDF5-1.17."X"-Linux" - Do you want to include the subdirectory HDF5-1.17."X"-Linux? + "/HDF5-2."X"."Y"-Linux" + Do you want to include the subdirectory HDF5-2."X"."Y"-Linux? Saying no will install in: "" [Yn]: Note that the script will create the following directory structure relative to the install point: HDF_Group --HDF5 - ----1.17."X" + ----2."X"."Y" ------bin ------include ------lib --------plugins ------share - On Mac you will find HDF5-1.17."X"-Darwin.dmg in the myhdfstuff folder. Click + On Mac you will find HDF5-2."X"."Y"-Darwin.dmg in the myhdfstuff folder. Click on the dmg file to proceed with installation. After accepting the license, there will be a folder with the following structure: HDF_Group --HDF5 - ----1.17."X" + ----2."X"."Y" ------bin ------include ------lib @@ -179,12 +179,12 @@ To build HDF5 with the SZIP and ZLIB external libraries you will need to: ------share By default the installation will create the bin, include, lib and cmake - folders in the /HDF_Group/HDF5/1.17."X" + folders in the /HDF_Group/HDF5/2."X"."Y" The depends on the build platform; Windows will set the default to: - C:/Program Files/HDF_Group/HDF5/1.17."X" + C:/Program Files/HDF_Group/HDF5/2."X"."Y" Linux will set the default to: - "myhdfstuff/HDF_Group/HDF5/1.17."X" + "myhdfstuff/HDF_Group/HDF5/2."X"."Y" The default can be changed by adding ",INSTALLDIR=" to the "ctest -S HDF5config.cmake..." command. For example on linux: ctest -S HDF5config.cmake,INSTALLDIR=/usr/local/myhdf5,BUILD_GENERATOR=Unix -C Release -VV -O hdf5.log @@ -211,13 +211,13 @@ Notes: This short set of instructions is written for users who want to 5. Configure the C library, tools and tests with one of the following commands: On Windows 32 bit - cmake -G "Visual Studio 16 2019" -A Win32 -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ..\hdf5-1.17."X" + cmake -G "Visual Studio 16 2019" -A Win32 -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ..\hdf5-2."X"."Y" On Windows 64 bit - cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ..\hdf5-1.17."X" + cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ..\hdf5-2."X"."Y" On Linux and Mac - cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ../hdf5-1.17."X" + cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ../hdf5-2."X"."Y" where "X" is the current release version. @@ -232,13 +232,13 @@ Notes: This short set of instructions is written for users who want to 9. To install On Windows (with WiX installed), execute: - HDF5-1.17."X"-win32.msi or HDF5-1.17."X"-win64.msi + HDF5-2."X"."Y"-win32.msi or HDF5-2."X"."Y"-win64.msi By default this program will install the hdf5 library into the "C:\Program Files" directory and will create the following directory structure: HDF_Group --HDF5 - ----1.17."X" + ----2."X"."Y" ------bin ------include ------lib @@ -247,29 +247,29 @@ Notes: This short set of instructions is written for users who want to On Linux, change to the install destination directory (create if doesn't exist) and execute: - /myhdfstuff/build/HDF5-1.17."X"-Linux.sh + /myhdfstuff/build/HDF5-2."X"."Y"-Linux.sh After accepting the license, the script will prompt: By default the HDF5 will be installed in: - "/HDF5-1.17."X"-Linux" - Do you want to include the subdirectory HDF5-1.17."X"-Linux? + "/HDF5-2."X"."Y"-Linux" + Do you want to include the subdirectory HDF5-2."X"."Y"-Linux? Saying no will install in: "" [Yn]: Note that the script will create the following directory structure relative to the install point: HDF_Group --HDF5 - ----1.17."X" + ----2."X"."Y" ------bin ------include ------lib --------plugins ------share - On Mac you will find HDF5-1.17."X"-Darwin.dmg in the build folder. Click + On Mac you will find HDF5-2."X"."Y"-Darwin.dmg in the build folder. Click on the dmg file to proceed with installation. After accepting the license, there will be a folder with the following structure: HDF_Group --HDF5 - ----1.17."X" + ----2."X"."Y" ------bin ------include ------lib @@ -282,7 +282,7 @@ IV. Further considerations ======================================================================== 1. We suggest you obtain the latest CMake for windows from the Kitware - web site. The HDF5 1.17."X" product requires a minimum CMake version 3.18. + web site. The HDF5 2."X"."Y" product requires a minimum CMake version 3.18. If you are using VS2022, the CMake minimum version is 3.21. 2. If you plan to use Zlib or Szip: @@ -888,7 +888,7 @@ HDF5_STRICT_FORMAT_CHECKS "Whether to perform strict file format checks" HDF5_WANT_DATA_ACCURACY "IF data accuracy is guaranteed during data conversions" ON HDF5_WANT_DCONV_EXCEPTION "exception handling functions is checked during data conversions" ON -HDF5_DEFAULT_API_VERSION "Enable default API (v16, v18, v110, v112, v114, v116, v118)" "v118" +HDF5_DEFAULT_API_VERSION "Enable default API (v16, v18, v110, v112, v114, v200)" "v200" HDF5_USE_FOLDERS "Enable folder grouping of projects in IDEs." ON HDF5_MSVC_NAMING_CONVENTION "Use MSVC Naming conventions for Shared Libraries" OFF HDF5_MINGW_STATIC_GCC_LIBS "Statically link libgcc/libstdc++" OFF diff --git a/release_docs/INSTALL_Cygwin.txt b/release_docs/INSTALL_Cygwin.txt index 0c61f95ce48..208a2d836eb 100644 --- a/release_docs/INSTALL_Cygwin.txt +++ b/release_docs/INSTALL_Cygwin.txt @@ -94,19 +94,19 @@ Build, Test and Install HDF5 on Cygwin The HDF5 source code is distributed in a variety of formats which can be unpacked with the following commands, each of which creates - an `hdf5-1.17.x' directory. + an `hdf5-2.0.x' directory. 2.1 Non-compressed tar archive (*.tar) - $ tar xf hdf5-1.17.x.tar + $ tar xf hdf5-2.0.x.tar 2.2 Gzip'd tar archive (*.tar.gz) - $ gunzip < hdf5-1.17.x.tar.gz | tar xf - + $ gunzip < hdf5-2.0.x.tar.gz | tar xf - 2.3 Bzip'd tar archive (*.tar.bz2) - $ bunzip2 < hdf5-1.17.x.tar.bz2 | tar xf - + $ bunzip2 < hdf5-2.0.x.tar.bz2 | tar xf - 2. Setup Environment diff --git a/release_docs/NEWSLETTER.txt b/release_docs/NEWSLETTER.txt index 9e06758f16d..ede8f8c5428 100644 --- a/release_docs/NEWSLETTER.txt +++ b/release_docs/NEWSLETTER.txt @@ -1,4 +1,4 @@ -HDF5 version 1.17.0 currently under development +HDF5 version 2.0.0 currently under development Features included for the next major release: ---------------------------------------------------------------------------- diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index a83f2ea2cf0..897adaf039f 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -1,4 +1,4 @@ -HDF5 version 1.17.0 currently under development +HDF5 version 2.0.0 currently under development ================================================================================ @@ -21,7 +21,7 @@ The official HDF5 releases can be obtained from: https://support.hdfgroup.org/downloads/index.html -Changes from Release to Release and New Features in the HDF5-1.16.x release series +Changes from Release to Release and New Features in the HDF5-2.x.y release series can be found at: https://support.hdfgroup.org/releases/hdf5/documentation/release_specific_info.md @@ -36,7 +36,7 @@ CONTENTS - New Features - Support for new platforms and languages -- Bug Fixes since HDF5-1.16.0 +- Bug Fixes since HDF5-2.0.0 - Platforms Tested - Known Problems - CMake vs. Autotools installations @@ -228,7 +228,7 @@ Support for new platforms, languages and compilers ================================================== - -Bug Fixes since HDF5-1.16.0 release +Bug Fixes since HDF5-2.0.0 release =================================== Library ------- diff --git a/release_docs/RELEASE_PROCESS.md b/release_docs/RELEASE_PROCESS.md index 8f54d9b9be2..a57a1dbe904 100644 --- a/release_docs/RELEASE_PROCESS.md +++ b/release_docs/RELEASE_PROCESS.md @@ -216,5 +216,5 @@ For more information on the HDF5 versioning and backward and forward compatibili [u11]: https://github.com/HDFGroup/hdf5/blob/develop/src/CMakeLists.txt [u12]: https://github.com/HDFGroup/hdf5/blob/develop/configure.ac [u13]: https://hdfgroup.github.io/hdf5/develop/api-compat-macros.html -[u14]: https://github.com/HDFGroup/hdf5/releases/tag/snapshot-1.16 +[u14]: https://github.com/HDFGroup/hdf5/releases/tag/snapshot-2.0.0 [u15]: https://github.com/HDFGroup/hdf5/releases/tag/snapshot diff --git a/release_docs/USING_CMake_Examples.txt b/release_docs/USING_CMake_Examples.txt index 956f9ec16d7..bace5f1e83c 100644 --- a/release_docs/USING_CMake_Examples.txt +++ b/release_docs/USING_CMake_Examples.txt @@ -21,7 +21,7 @@ I. Preconditions ======================================================================== 1. We suggest you obtain the latest CMake for your platform from the Kitware - web site. The HDF5 1.17.x product requires a minimum CMake version + web site. The HDF5 2.0.x product requires a minimum CMake version of 3.18. If you are using VS2022, the minimum CMake version is 3.21. 2. You have installed the HDF5 library built with CMake, by executing diff --git a/release_docs/USING_HDF5_CMake.txt b/release_docs/USING_HDF5_CMake.txt index 8ff240ded25..12fdabdd5f0 100644 --- a/release_docs/USING_HDF5_CMake.txt +++ b/release_docs/USING_HDF5_CMake.txt @@ -38,7 +38,7 @@ I. Preconditions ======================================================================== 1. We suggest you obtain the latest CMake for your platform from the Kitware - web site. The HDF5 1.17.x product requires a minimum CMake version + web site. The HDF5 2.0.x product requires a minimum CMake version of 3.18. If you are using VS2022, the minimum CMake version is 3.21. 2. You have installed the HDF5 library built with CMake, by executing @@ -50,24 +50,24 @@ I. Preconditions or environment variable, set(ENV{HDF5_ROOT} "") to the installed location of HDF5. On Windows: - HDF5_ROOT=C:/Program Files/HDF_Group/HDF5/1.17.x/ + HDF5_ROOT=C:/Program Files/HDF_Group/HDF5/2.0.x/ On unix: - HDF5_ROOT=/HDF_Group/HDF5/1.17.x/ + HDF5_ROOT=/HDF_Group/HDF5/2.0.x/ If you are using shared libraries, you may need to add to the path environment variable. Set the path environment variable to the installed location of the library files for HDF5. On Windows (*.dll): - PATH=%PATH%;C:/Program Files/HDF_Group/HDF5/1.17.x/bin + PATH=%PATH%;C:/Program Files/HDF_Group/HDF5/2.0.x/bin On unix (*.so): - LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/HDF_Group/HDF5/1.17.x/lib + LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/HDF_Group/HDF5/2.0.x/lib If you are using filter plugin libraries, you will need to set the HDF5_PLUGIN_PATH environment variable. On Windows: - HDF5_PLUGIN_PATH=C:/Program Files/HDF_Group/HDF5/1.17.x/lib/plugin + HDF5_PLUGIN_PATH=C:/Program Files/HDF_Group/HDF5/2.0.x/lib/plugin On unix: - HDF5_PLUGIN_PATH=/HDF_Group/HDF5/1.17.x/lib/plugin + HDF5_PLUGIN_PATH=/HDF_Group/HDF5/2.0.x/lib/plugin (Note there are no quote characters used on Windows and all platforms use forward slashes) diff --git a/release_docs/USING_HDF5_VS.txt b/release_docs/USING_HDF5_VS.txt index f13cdfadc2a..dc19272406b 100644 --- a/release_docs/USING_HDF5_VS.txt +++ b/release_docs/USING_HDF5_VS.txt @@ -62,11 +62,11 @@ Using Visual Studio 2008 with HDF5 Libraries built with Visual Studio 2008 and select "x64". 2.2 Find the box "Show directories for", choose "Include files", add the - header path (i.e. c:\Program Files\HDF_Group\HDF5\1.17.x\include) + header path (i.e. c:\Program Files\HDF_Group\HDF5\2.0.x\include) to the included directories. 2.3 Find the box "Show directories for", choose "Library files", add the - library path (i.e. c:\Program Files\HDF_Group\HDF5\1.17.x\lib) + library path (i.e. c:\Program Files\HDF_Group\HDF5\2.0.x\lib) to the library directories. 2.4 If using Fortran libraries, you will also need to setup the path diff --git a/src/H5Aint.c b/src/H5Aint.c index d0e0bcff9af..91bcfb12f89 100644 --- a/src/H5Aint.c +++ b/src/H5Aint.c @@ -98,8 +98,7 @@ const unsigned H5O_attr_ver_bounds[] = { H5O_ATTR_VERSION_3, /* H5F_LIBVER_V110 */ H5O_ATTR_VERSION_3, /* H5F_LIBVER_V112 */ H5O_ATTR_VERSION_3, /* H5F_LIBVER_V114 */ - H5O_ATTR_VERSION_3, /* H5F_LIBVER_V116 */ - H5O_ATTR_VERSION_3, /* H5F_LIBVER_V118 */ + H5O_ATTR_VERSION_3, /* H5F_LIBVER_V200 */ H5O_ATTR_VERSION_LATEST /* H5F_LIBVER_LATEST */ }; diff --git a/src/H5Dlayout.c b/src/H5Dlayout.c index 04d55aa7fa3..0e50d110308 100644 --- a/src/H5Dlayout.c +++ b/src/H5Dlayout.c @@ -48,8 +48,7 @@ const unsigned H5O_layout_ver_bounds[] = { H5O_LAYOUT_VERSION_4, /* H5F_LIBVER_V110 */ H5O_LAYOUT_VERSION_4, /* H5F_LIBVER_V112 */ H5O_LAYOUT_VERSION_4, /* H5F_LIBVER_V114 */ - H5O_LAYOUT_VERSION_4, /* H5F_LIBVER_V116 */ - H5O_LAYOUT_VERSION_4, /* H5F_LIBVER_V118 */ + H5O_LAYOUT_VERSION_4, /* H5F_LIBVER_V200 */ H5O_LAYOUT_VERSION_LATEST /* H5F_LIBVER_LATEST */ }; diff --git a/src/H5Fpublic.h b/src/H5Fpublic.h index c9b8b9e7731..9a8a375c005 100644 --- a/src/H5Fpublic.h +++ b/src/H5Fpublic.h @@ -168,12 +168,11 @@ typedef enum H5F_libver_t { H5F_LIBVER_V110 = 2, /**< Use the latest v110 format for storing objects */ H5F_LIBVER_V112 = 3, /**< Use the latest v112 format for storing objects */ H5F_LIBVER_V114 = 4, /**< Use the latest v114 format for storing objects */ - H5F_LIBVER_V116 = 5, /**< Use the latest v116 format for storing objects */ - H5F_LIBVER_V118 = 6, /**< Use the latest v118 format for storing objects */ + H5F_LIBVER_V200 = 5, /**< Use the latest v200 format for storing objects */ H5F_LIBVER_NBOUNDS /**< Sentinel */ } H5F_libver_t; -#define H5F_LIBVER_LATEST H5F_LIBVER_V118 +#define H5F_LIBVER_LATEST H5F_LIBVER_V200 /** * File space handling strategy diff --git a/src/H5Fsuper.c b/src/H5Fsuper.c index 24660035c16..1a84c455f83 100644 --- a/src/H5Fsuper.c +++ b/src/H5Fsuper.c @@ -71,8 +71,7 @@ static const unsigned HDF5_superblock_ver_bounds[] = { HDF5_SUPERBLOCK_VERSION_3, /* H5F_LIBVER_V110 */ HDF5_SUPERBLOCK_VERSION_3, /* H5F_LIBVER_V112 */ HDF5_SUPERBLOCK_VERSION_3, /* H5F_LIBVER_V114 */ - HDF5_SUPERBLOCK_VERSION_3, /* H5F_LIBVER_V116 */ - HDF5_SUPERBLOCK_VERSION_3, /* H5F_LIBVER_V118 */ + HDF5_SUPERBLOCK_VERSION_3, /* H5F_LIBVER_V200 */ HDF5_SUPERBLOCK_VERSION_LATEST /* H5F_LIBVER_LATEST */ }; diff --git a/src/H5Ofill.c b/src/H5Ofill.c index becb16c8e41..7f111bfbf66 100644 --- a/src/H5Ofill.c +++ b/src/H5Ofill.c @@ -153,8 +153,7 @@ const unsigned H5O_fill_ver_bounds[] = { H5O_FILL_VERSION_3, /* H5F_LIBVER_V110 */ H5O_FILL_VERSION_3, /* H5F_LIBVER_V112 */ H5O_FILL_VERSION_3, /* H5F_LIBVER_V114 */ - H5O_FILL_VERSION_3, /* H5F_LIBVER_V116 */ - H5O_FILL_VERSION_3, /* H5F_LIBVER_V118 */ + H5O_FILL_VERSION_3, /* H5F_LIBVER_V200 */ H5O_FILL_VERSION_LATEST /* H5F_LIBVER_LATEST */ }; diff --git a/src/H5Ofsinfo.c b/src/H5Ofsinfo.c index e5e16758cea..2860f4f5809 100644 --- a/src/H5Ofsinfo.c +++ b/src/H5Ofsinfo.c @@ -69,8 +69,7 @@ static const unsigned H5O_fsinfo_ver_bounds[] = { H5O_FSINFO_VERSION_1, /* H5F_LIBVER_V110 */ H5O_FSINFO_VERSION_1, /* H5F_LIBVER_V112 */ H5O_FSINFO_VERSION_1, /* H5F_LIBVER_V114 */ - H5O_FSINFO_VERSION_1, /* H5F_LIBVER_V116 */ - H5O_FSINFO_VERSION_1, /* H5F_LIBVER_V118 */ + H5O_FSINFO_VERSION_1, /* H5F_LIBVER_V200 */ H5O_FSINFO_VERSION_LATEST /* H5F_LIBVER_LATEST */ }; #define N_FSINFO_VERSION_BOUNDS H5F_LIBVER_NBOUNDS diff --git a/src/H5Oint.c b/src/H5Oint.c index 070ff9b3162..151b814226b 100644 --- a/src/H5Oint.c +++ b/src/H5Oint.c @@ -130,8 +130,7 @@ const unsigned H5O_obj_ver_bounds[] = { H5O_VERSION_2, /* H5F_LIBVER_V110 */ H5O_VERSION_2, /* H5F_LIBVER_V112 */ H5O_VERSION_2, /* H5F_LIBVER_V114 */ - H5O_VERSION_2, /* H5F_LIBVER_V116 */ - H5O_VERSION_2, /* H5F_LIBVER_V118 */ + H5O_VERSION_2, /* H5F_LIBVER_V200 */ H5O_VERSION_LATEST /* H5F_LIBVER_LATEST */ }; diff --git a/src/H5Opline.c b/src/H5Opline.c index aa8a25292e3..d0b5322dd97 100644 --- a/src/H5Opline.c +++ b/src/H5Opline.c @@ -88,8 +88,7 @@ const unsigned H5O_pline_ver_bounds[] = { H5O_PLINE_VERSION_2, /* H5F_LIBVER_V110 */ H5O_PLINE_VERSION_2, /* H5F_LIBVER_V112 */ H5O_PLINE_VERSION_2, /* H5F_LIBVER_V114 */ - H5O_PLINE_VERSION_2, /* H5F_LIBVER_V116 */ - H5O_PLINE_VERSION_2, /* H5F_LIBVER_V118 */ + H5O_PLINE_VERSION_2, /* H5F_LIBVER_V200 */ H5O_PLINE_VERSION_LATEST /* H5F_LIBVER_LATEST */ }; diff --git a/src/H5Ppublic.h b/src/H5Ppublic.h index 4a7e3d0229b..bdb172bf8dc 100644 --- a/src/H5Ppublic.h +++ b/src/H5Ppublic.h @@ -5053,26 +5053,11 @@ H5_DLL herr_t H5Pset_gc_references(hid_t fapl_id, unsigned gc_ref); * objects created with this setting. * *
- * * - * - * - * - *
\p low=#H5F_LIBVER_V116
+ *
\p low=#H5F_LIBVER_V200
* \p high=
* \li The library will create objects with the latest format - * versions available to library release 1.16.x. - * \li The library will allow objects to be created with the latest - * format versions available to library release specified - * in the \p high value. - * \li API calls that create objects or features that are available - * to versions of the library greater than version specified in - * \p high will fail. - * \li Earlier versions of the library may not be able to access - * objects created with this setting.
\p low=#H5F_LIBVER_V118
- * \p high=
- * \li The library will create objects with the latest format - * versions available to library release 1.18.x. + * versions available to library release 2.0.x. * \li The library will allow objects to be created with the latest * format versions available to library release specified * in the \p high value. @@ -5142,10 +5127,10 @@ H5_DLL herr_t H5Pset_gc_references(hid_t fapl_id, unsigned gc_ref); *
* * \note *H5F_LIBVER_LATEST*:
- * Since 1.16.x is also #H5F_LIBVER_LATEST, there is no upper + * Since 2.0.x is also #H5F_LIBVER_LATEST, there is no upper * limit on the format versions to use. That is, if a * newer format version is required to support a feature - * in 1.16.x series, this setting will allow the object to be + * in 2.0.x series, this setting will allow the object to be * created. * * \version 1.10.2 #H5F_LIBVER_V18 added to the enumerated defines in @@ -6059,7 +6044,7 @@ H5_DLL herr_t H5Pget_dset_no_attrs_hint(hid_t dcpl_id, hbool_t *minimize); * which is a 32-bit signed long value on Windows, which limited * the valid offset that can be returned to 2 GiB. * - * \version 1.16.0 \p offset parameter type changed to HDoff_t from off_t. + * \version 2.0.0 \p offset parameter type changed to HDoff_t from off_t. * \version 1.6.4 \p idx parameter type changed to unsigned. * \since 1.0.0 * @@ -6556,7 +6541,7 @@ H5_DLL herr_t H5Pset_dset_no_attrs_hint(hid_t dcpl_id, hbool_t minimize); * which is a 32-bit signed long value on Windows, which limited * the valid offset that can be set to 2 GiB. * - * \version 1.16.0 \p offset parameter type changed to HDoff_t from off_t. + * \version 2.0.0 \p offset parameter type changed to HDoff_t from off_t. * \since 1.0.0 * */ diff --git a/src/H5S.c b/src/H5S.c index 69c4224c6ed..ec07f74a73e 100644 --- a/src/H5S.c +++ b/src/H5S.c @@ -64,8 +64,7 @@ const unsigned H5O_sdspace_ver_bounds[] = { H5O_SDSPACE_VERSION_2, /* H5F_LIBVER_V110 */ H5O_SDSPACE_VERSION_2, /* H5F_LIBVER_V112 */ H5O_SDSPACE_VERSION_2, /* H5F_LIBVER_V114 */ - H5O_SDSPACE_VERSION_2, /* H5F_LIBVER_V116 */ - H5O_SDSPACE_VERSION_2, /* H5F_LIBVER_V118 */ + H5O_SDSPACE_VERSION_2, /* H5F_LIBVER_V200 */ H5O_SDSPACE_VERSION_LATEST /* H5F_LIBVER_LATEST */ }; diff --git a/src/H5Shyper.c b/src/H5Shyper.c index 560e2bf1c85..60b6bb96a07 100644 --- a/src/H5Shyper.c +++ b/src/H5Shyper.c @@ -241,8 +241,7 @@ static const unsigned H5O_sds_hyper_ver_bounds[] = { H5S_HYPER_VERSION_2, /* H5F_LIBVER_V110 */ H5S_HYPER_VERSION_3, /* H5F_LIBVER_V112 */ H5S_HYPER_VERSION_3, /* H5F_LIBVER_V114 */ - H5S_HYPER_VERSION_3, /* H5F_LIBVER_V116 */ - H5S_HYPER_VERSION_3, /* H5F_LIBVER_V118 */ + H5S_HYPER_VERSION_3, /* H5F_LIBVER_V200 */ H5S_HYPER_VERSION_3 /* H5F_LIBVER_LATEST */ }; diff --git a/src/H5Spoint.c b/src/H5Spoint.c index 339e36593c9..c8c226bee5a 100644 --- a/src/H5Spoint.c +++ b/src/H5Spoint.c @@ -126,8 +126,7 @@ static const unsigned H5O_sds_point_ver_bounds[] = { H5S_POINT_VERSION_1, /* H5F_LIBVER_V110 */ H5S_POINT_VERSION_2, /* H5F_LIBVER_V112 */ H5S_POINT_VERSION_2, /* H5F_LIBVER_V114 */ - H5S_POINT_VERSION_2, /* H5F_LIBVER_V116 */ - H5S_POINT_VERSION_2, /* H5F_LIBVER_V118 */ + H5S_POINT_VERSION_2, /* H5F_LIBVER_V200 */ H5S_POINT_VERSION_2 /* H5F_LIBVER_LATEST */ }; diff --git a/src/H5T.c b/src/H5T.c index dc8c59c963d..d9ef9ea4587 100644 --- a/src/H5T.c +++ b/src/H5T.c @@ -612,8 +612,7 @@ const unsigned H5O_dtype_ver_bounds[] = { H5O_DTYPE_VERSION_3, /* H5F_LIBVER_V110 */ H5O_DTYPE_VERSION_4, /* H5F_LIBVER_V112 */ H5O_DTYPE_VERSION_4, /* H5F_LIBVER_V114 */ - H5O_DTYPE_VERSION_4, /* H5F_LIBVER_V116 */ - H5O_DTYPE_VERSION_4, /* H5F_LIBVER_V118 */ + H5O_DTYPE_VERSION_4, /* H5F_LIBVER_V200 */ H5O_DTYPE_VERSION_LATEST /* H5F_LIBVER_LATEST */ }; diff --git a/src/H5public.h b/src/H5public.h index d25d2946e48..62e0db9764b 100644 --- a/src/H5public.h +++ b/src/H5public.h @@ -75,11 +75,11 @@ /** * For major interface/format changes */ -#define H5_VERS_MAJOR 1 +#define H5_VERS_MAJOR 2 /** * For minor interface/format changes */ -#define H5_VERS_MINOR 17 +#define H5_VERS_MINOR 0 /** * For tweaks, bug-fixes, or development */ @@ -91,11 +91,11 @@ /** * Short version string */ -#define H5_VERS_STR "1.17.0" +#define H5_VERS_STR "2.0.0" /** * Full version string */ -#define H5_VERS_INFO "HDF5 library version: 1.17.0" +#define H5_VERS_INFO "HDF5 library version: 2.0.0" #define H5check() H5check_version(H5_VERS_MAJOR, H5_VERS_MINOR, H5_VERS_RELEASE) diff --git a/src/H5trace.c b/src/H5trace.c index 6a6917142f5..88dd0fd4791 100644 --- a/src/H5trace.c +++ b/src/H5trace.c @@ -1452,12 +1452,8 @@ H5_trace_args(H5RS_str_t *rs, const char *type, va_list ap) H5RS_acat(rs, "H5F_LIBVER_V114"); break; - case H5F_LIBVER_V116: - H5RS_acat(rs, "H5F_LIBVER_V116"); - break; - - case H5F_LIBVER_V118: - HDcompile_assert(H5F_LIBVER_LATEST == H5F_LIBVER_V118); + case H5F_LIBVER_V200: + HDcompile_assert(H5F_LIBVER_LATEST == H5F_LIBVER_V200); H5RS_acat(rs, "H5F_LIBVER_LATEST"); break; diff --git a/test/chunk_info.c b/test/chunk_info.c index 335542c000a..6fd3b9ba09e 100644 --- a/test/chunk_info.c +++ b/test/chunk_info.c @@ -49,9 +49,13 @@ #endif /* Test file names, using H5F_libver_t as indices */ -static const char *FILENAME[] = { - "tchunk_info_earliest", "tchunk_info_v18", "tchunk_info_v110", "tchunk_info_v112", - "tchunk_info_v114", "tchunk_info_v116", "tchunk_info_v118", NULL}; +static const char *FILENAME[] = {"tchunk_info_earliest", + "tchunk_info_v18", + "tchunk_info_v110", + "tchunk_info_v112", + "tchunk_info_v114", + "tchunk_info_v200", + NULL}; /* File to be used in test_failed_attempts */ #define FILTERMASK_FILE "tflt_msk" diff --git a/test/dtypes.c b/test/dtypes.c index 9b1436bd10e..237e70c814f 100644 --- a/test/dtypes.c +++ b/test/dtypes.c @@ -10126,7 +10126,7 @@ test_versionbounds(void) hsize_t arr_dim[] = {ARRAY_LEN}; /* Length of the array */ int low, high; /* Indices for iterating over versions */ H5F_libver_t versions[] = {H5F_LIBVER_EARLIEST, H5F_LIBVER_V18, H5F_LIBVER_V110, - H5F_LIBVER_V112, H5F_LIBVER_V114, H5F_LIBVER_V116}; + H5F_LIBVER_V112, H5F_LIBVER_V114, H5F_LIBVER_V200}; int versions_count = 6; /* Number of version bounds in the array */ unsigned highest_version; /* Highest version in nested datatypes */ color_t enum_val; /* Enum type index */ diff --git a/test/h5test.c b/test/h5test.c index 27c71aee46e..719e33f8d92 100644 --- a/test/h5test.c +++ b/test/h5test.c @@ -106,8 +106,7 @@ const char *LIBVER_NAMES[] = {"earliest", /* H5F_LIBVER_EARLIEST = 0 */ "v110", /* H5F_LIBVER_V110 = 2 */ "v112", /* H5F_LIBVER_V112 = 3 */ "v114", /* H5F_LIBVER_V114 = 4 */ - "v116", /* H5F_LIBVER_V116 = 5 */ - "v118", /* H5F_LIBVER_V118 = 6 */ + "v200", /* H5F_LIBVER_V200 = 5 */ "latest", /* H5F_LIBVER_LATEST */ NULL}; diff --git a/test/tfile.c b/test/tfile.c index f7147806001..fa93f4e1244 100644 --- a/test/tfile.c +++ b/test/tfile.c @@ -6189,8 +6189,7 @@ test_libver_bounds_super_create(hid_t fapl, hid_t fcpl, htri_t is_swmr, htri_t n case H5F_LIBVER_V110: case H5F_LIBVER_V112: case H5F_LIBVER_V114: - case H5F_LIBVER_V116: - case H5F_LIBVER_V118: + case H5F_LIBVER_V200: ok = (f->shared->sblock->super_vers == HDF5_SUPERBLOCK_VERSION_3); VERIFY(ok, true, "HDF5_superblock_ver_bounds"); break; diff --git a/tools/src/h5repack/h5repack.h b/tools/src/h5repack/h5repack.h index b7c24cb8be2..e77e0a35e6b 100644 --- a/tools/src/h5repack/h5repack.h +++ b/tools/src/h5repack/h5repack.h @@ -118,9 +118,8 @@ * \li 2 This is #H5F_LIBVER_V110 in #H5F_libver_t struct * \li 3 This is #H5F_LIBVER_V112 in #H5F_libver_t struct * \li 4 This is #H5F_LIBVER_V114 in #H5F_libver_t struct - * \li 5 This is #H5F_LIBVER_V116 in #H5F_libver_t struct - * \li 6 This is #H5F_LIBVER_V118 in #H5F_libver_t struct - * \li #H5F_LIBVER_LATEST is aliased to #H5F_LIBVER_V118 for this release + * \li 5 This is #H5F_LIBVER_V200 in #H5F_libver_t struct + * \li #H5F_LIBVER_LATEST is aliased to #H5F_LIBVER_V200 for this release * * \subsubsection subsubsec_cltools_h5repack_options_fs File Strategy Settings * FS_STRATEGY is a string indicating the file space strategy used: diff --git a/tools/src/h5repack/h5repack_main.c b/tools/src/h5repack/h5repack_main.c index 9eaa049d41f..0809d97856e 100644 --- a/tools/src/h5repack/h5repack_main.c +++ b/tools/src/h5repack/h5repack_main.c @@ -228,10 +228,9 @@ usage(const char *prog) PRINTVALSTREAM(rawoutstream, " 2: This is H5F_LIBVER_V110 in H5F_libver_t struct\n"); PRINTVALSTREAM(rawoutstream, " 3: This is H5F_LIBVER_V112 in H5F_libver_t struct\n"); PRINTVALSTREAM(rawoutstream, " 4: This is H5F_LIBVER_V114 in H5F_libver_t struct\n"); - PRINTVALSTREAM(rawoutstream, " 5: This is H5F_LIBVER_V116 in H5F_libver_t struct\n"); - PRINTVALSTREAM(rawoutstream, " 6: This is H5F_LIBVER_V118 in H5F_libver_t struct\n"); + PRINTVALSTREAM(rawoutstream, " 5: This is H5F_LIBVER_V200 in H5F_libver_t struct\n"); PRINTVALSTREAM(rawoutstream, - " (H5F_LIBVER_LATEST is aliased to H5F_LIBVER_V118 for this release\n"); + " (H5F_LIBVER_LATEST is aliased to H5F_LIBVER_V200 for this release\n"); PRINTVALSTREAM(rawoutstream, "\n"); PRINTVALSTREAM(rawoutstream, " FS_STRATEGY is a string indicating the file space strategy used:\n"); PRINTVALSTREAM(rawoutstream, " FSM_AGGR:\n"); diff --git a/tools/test/h5repack/expected/h5repack-help.txt b/tools/test/h5repack/expected/h5repack-help.txt index 718215260eb..1db3966d483 100644 --- a/tools/test/h5repack/expected/h5repack-help.txt +++ b/tools/test/h5repack/expected/h5repack-help.txt @@ -92,9 +92,8 @@ usage: h5repack [OPTIONS] file1 file2 2: This is H5F_LIBVER_V110 in H5F_libver_t struct 3: This is H5F_LIBVER_V112 in H5F_libver_t struct 4: This is H5F_LIBVER_V114 in H5F_libver_t struct - 5: This is H5F_LIBVER_V116 in H5F_libver_t struct - 6: This is H5F_LIBVER_V118 in H5F_libver_t struct - (H5F_LIBVER_LATEST is aliased to H5F_LIBVER_V118 for this release + 5: This is H5F_LIBVER_V200 in H5F_libver_t struct + (H5F_LIBVER_LATEST is aliased to H5F_LIBVER_V200 for this release FS_STRATEGY is a string indicating the file space strategy used: FSM_AGGR: From 369099d84337dc583d2861022fb897c484f09c0c Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Mon, 28 Oct 2024 05:54:16 -0700 Subject: [PATCH 049/179] Fix minor Windows warnings (#5021) * Cast away a signed/unsigned issue in H5HFhuge.c * Use our platform-independent POSIX types in external_common.c and h5test.c * Replace a memset() call with a (const) array initializer in h5test.c * Fix an unused done: target in h5diff --- src/H5HFhuge.c | 2 +- test/external_common.c | 13 ++++++++----- test/h5test.c | 15 +++++++++------ tools/lib/h5diff.c | 2 ++ 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/H5HFhuge.c b/src/H5HFhuge.c index 33a6748cb6f..b7216363394 100644 --- a/src/H5HFhuge.c +++ b/src/H5HFhuge.c @@ -192,7 +192,7 @@ H5HF__huge_init(H5HF_hdr_t *hdr) hdr->huge_ids_direct = false; } /* end if */ else { - if ((hdr->sizeof_addr + hdr->sizeof_size) <= (hdr->id_len - 1)) { + if ((unsigned)(hdr->sizeof_addr + hdr->sizeof_size) <= (unsigned)(hdr->id_len - 1)) { /* Indicate that v2 B-tree doesn't have to be used to locate object */ hdr->huge_ids_direct = true; diff --git a/test/external_common.c b/test/external_common.c index 52a14c7e8a4..e94d34d0e30 100644 --- a/test/external_common.c +++ b/test/external_common.c @@ -31,13 +31,17 @@ reset_raw_data_files(bool is_env) { int fd = 0; /* external file descriptor */ size_t i, j; /* iterators */ - hssize_t n; /* bytes of I/O */ char filename[1024]; /* file name */ int data[PART_SIZE]; /* raw data buffer */ uint8_t *garbage = NULL; /* buffer of garbage data */ size_t garbage_count; /* size of garbage buffer */ size_t garbage_bytes; /* # of garbage bytes written to file */ + h5_posix_io_ret_t n; /* bytes of I/O - use our platform-independent POSIX + * I/O return type to avoid warnings on platforms + * where the return type isn't ssize_t (e.g., Windows) + */ + /* Set up garbage buffer */ garbage_count = N_EXT_FILES * GARBAGE_PER_FILE; if (NULL == (garbage = (uint8_t *)calloc(garbage_count, sizeof(uint8_t)))) @@ -69,7 +73,7 @@ reset_raw_data_files(bool is_env) /* Fill array with data */ for (j = 0; j < PART_SIZE; j++) { data[j] = (int)(i * 25 + j); - } /* end for */ + } /* Write raw data to the file. */ n = HDwrite(fd, data, sizeof(data)); @@ -78,8 +82,7 @@ reset_raw_data_files(bool is_env) /* Close this file */ HDclose(fd); - - } /* end for */ + } /* The *w files are only pre-filled with the garbage data and are * used to verify that write operations work correctly. The individual @@ -105,8 +108,8 @@ reset_raw_data_files(bool is_env) /* Close this file */ HDclose(fd); + } - } /* end for */ free(garbage); return SUCCEED; diff --git a/test/h5test.c b/test/h5test.c index 719e33f8d92..cf89f7afc2f 100644 --- a/test/h5test.c +++ b/test/h5test.c @@ -788,7 +788,7 @@ h5_get_vfd_fapl(hid_t fapl) /* Multi-file driver, general case of the split driver */ H5FD_mem_t memb_map[H5FD_MEM_NTYPES]; hid_t memb_fapl[H5FD_MEM_NTYPES]; - const char *memb_name[H5FD_MEM_NTYPES]; + const char *memb_name[H5FD_MEM_NTYPES] = {0}; char *sv[H5FD_MEM_NTYPES]; haddr_t memb_addr[H5FD_MEM_NTYPES]; H5FD_mem_t mt; @@ -796,7 +796,6 @@ h5_get_vfd_fapl(hid_t fapl) memset(memb_map, 0, sizeof(memb_map)); memset(memb_fapl, 0, sizeof(memb_fapl)); - memset(memb_name, 0, sizeof(memb_name)); memset(memb_addr, 0, sizeof(memb_addr)); assert(strlen(multi_letters) == H5FD_MEM_NTYPES); @@ -807,7 +806,7 @@ h5_get_vfd_fapl(hid_t fapl) snprintf(sv[mt], multi_memname_maxlen, "%%s-%c.h5", multi_letters[mt]); memb_name[mt] = sv[mt]; memb_addr[mt] = (haddr_t)MAX(mt - 1, 0) * (HADDR_MAX / 10); - } /* end for */ + } if (H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name, memb_addr, false) < 0) goto error; @@ -1627,10 +1626,14 @@ int h5_make_local_copy(const char *origfilename, const char *local_copy_name) { int fd_old = (-1), fd_new = (-1); /* File descriptors for copying data */ - ssize_t nread; /* Number of bytes read in */ void *buf = NULL; /* Buffer for copying data */ const char *filename = H5_get_srcdir_filename(origfilename); /* Get the test file name to copy */ + h5_posix_io_ret_t nread; /* bytes of I/O - use our platform-independent POSIX + * I/O return type to avoid warnings on platforms + * where the return type isn't ssize_t (e.g., Windows) + */ + if (!filename) goto error; @@ -1645,8 +1648,8 @@ h5_make_local_copy(const char *origfilename, const char *local_copy_name) goto error; /* Copy data */ - while ((nread = HDread(fd_old, buf, (size_t)READ_BUF_SIZE)) > 0) - if (HDwrite(fd_new, buf, (size_t)nread) < 0) + while ((nread = HDread(fd_old, buf, (h5_posix_io_t)READ_BUF_SIZE)) > 0) + if (HDwrite(fd_new, buf, (h5_posix_io_t)nread) < 0) goto error; /* Close files */ diff --git a/tools/lib/h5diff.c b/tools/lib/h5diff.c index 1e7e6e86ffb..7d4d3907931 100644 --- a/tools/lib/h5diff.c +++ b/tools/lib/h5diff.c @@ -1281,7 +1281,9 @@ diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1, hid_t file2_id, } #endif /* H5_HAVE_PARALLEL */ +#if defined(H5_HAVE_ASPRINTF) || defined(H5_HAVE_PARALLEL) done: +#endif free(obj1_fullpath); free(obj2_fullpath); From a38d87a631f8cb5dfdc9c40027de072c194c59fc Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Mon, 28 Oct 2024 05:54:39 -0700 Subject: [PATCH 050/179] Clean up comments in FUNC_ENTER macros (#5019) * Clean up comments in FUNC_ENTER macros --- src/H5private.h | 255 +++++++++++++++++++++++++++++------------------- 1 file changed, 155 insertions(+), 100 deletions(-) diff --git a/src/H5private.h b/src/H5private.h index 5347938bf48..534962dfba4 100644 --- a/src/H5private.h +++ b/src/H5private.h @@ -1011,45 +1011,6 @@ H5_DLL herr_t H5_trace_args(struct H5RS_str_t *rs, const char *type, va_list ap) *------------------------------------------------------------------------- */ -/* `S' is the name of a function which is being tested to check if it's - * an API function. - * - * BADNESS: - * - Underscore at positions 2 or 3 (0-indexed string). Handles - * H5_ and H5X_. - * - Underscore at position 4 if position 3 is uppercase or a digit. - * Handles H5XY_. - */ -#define H5_IS_API(S) \ - ('_' != ((const char *)S)[2] /* underscore at position 2 */ \ - && '_' != ((const char *)S)[3] /* underscore at position 3 */ \ - && !( /* NOT */ \ - ((const char *)S)[4] /* pos 4 exists */ \ - && (isupper((int)S[3]) || isdigit((int)S[3])) /* pos 3 dig | uc */ \ - && '_' == ((const char *)S)[4] /* pos 4 underscore */ \ - )) - -/* `S' is the name of a function which is being tested to check if it's */ -/* a public API function */ -#define H5_IS_PUB(S) \ - (((isdigit((int)S[1]) || isupper((int)S[1])) && islower((int)S[2])) || \ - ((isdigit((int)S[2]) || isupper((int)S[2])) && islower((int)S[3])) || \ - (!S[4] || ((isdigit((int)S[3]) || isupper((int)S[3])) && islower((int)S[4])))) - -/* `S' is the name of a function which is being tested to check if it's */ -/* a private library function */ -#define H5_IS_PRIV(S) \ - (((isdigit((int)S[1]) || isupper((int)S[1])) && '_' == S[2] && islower((int)S[3])) || \ - ((isdigit((int)S[2]) || isupper((int)S[2])) && '_' == S[3] && islower((int)S[4])) || \ - ((isdigit((int)S[3]) || isupper((int)S[3])) && '_' == S[4] && islower((int)S[5]))) - -/* `S' is the name of a function which is being tested to check if it's */ -/* a package private function */ -#define H5_IS_PKG(S) \ - (((isdigit((int)S[1]) || isupper((int)S[1])) && '_' == S[2] && '_' == S[3] && islower((int)S[4])) || \ - ((isdigit((int)S[2]) || isupper((int)S[2])) && '_' == S[3] && '_' == S[4] && islower((int)S[5])) || \ - ((isdigit((int)S[3]) || isupper((int)S[3])) && '_' == S[4] && '_' == S[5] && islower((int)S[6]))) - /* global library version information string */ extern char H5_lib_vers_info_g[]; @@ -1060,6 +1021,7 @@ extern char H5_lib_vers_info_g[]; /* Thread cancellation is only possible w/pthreads */ #if defined(H5_HAVE_PTHREAD_H) + /* Local variable for saving cancellation state */ #define H5CANCEL_DECL int oldstate = 0; @@ -1138,6 +1100,69 @@ extern char H5_lib_vers_info_g[]; #include "H5CXprivate.h" /* API Contexts */ +/* ---------------------------------------------------------------------------- + * Macros to check function names for appropriate form. Called from the + * FUNC_ENTER macros, below. + * + * - public: H5X(Y)foo() + * + * - private: H5X(Y)_foo() + * + * - package/static: H5X(Y)__foo() + * + * NOTE: These will generate somewhat cryptic errors when APIs with incorrectly + * formed names are called at runtime. The H5_CHECK_FUNCTION_NAME() + * macro will emit a helpful error message if it detects badness. + * ---------------------------------------------------------------------------- + */ + +/* Macro to check if a function call is a public HDF5 API call + * + * `S' is the name of a function which is being tested to check if it's + * an API function. + * + * UNDERSCORE CHECKS: + * - Underscore at positions 2 or 3 (0-indexed string). Handles + * H5_ and H5X_. + * - Underscore at position 4 if position 3 is uppercase or a digit. + * Handles H5XY_. + */ +#define H5_IS_API(S) \ + ('_' != ((const char *)S)[2] /* underscore at position 2 */ \ + && '_' != ((const char *)S)[3] /* underscore at position 3 */ \ + && !( /* NOT */ \ + ((const char *)S)[4] /* pos 4 exists */ \ + && (isupper((int)S[3]) || isdigit((int)S[3])) /* pos 3 dig | uc */ \ + && '_' == ((const char *)S)[4] /* pos 4 underscore */ \ + )) + +/* Macro to check if a function call is a library private HDF5 API call + * + * These have the form H5X(Y)_foo() <--- single underscore + * + * `S' is the name of a function which is being tested to check if it's a private function + */ +#define H5_IS_PRIV(S) \ + (((isdigit((int)S[1]) || isupper((int)S[1])) && '_' == S[2] && islower((int)S[3])) || \ + ((isdigit((int)S[2]) || isupper((int)S[2])) && '_' == S[3] && islower((int)S[4])) || \ + ((isdigit((int)S[3]) || isupper((int)S[3])) && '_' == S[4] && islower((int)S[5]))) + +/* Macro to check if a function call is a package internal HDF5 API call + * + * These have the form H5X(Y)__foo() <--- two underscores + * + * `S' is the name of a function which is being tested to check if it's a package function + */ +#define H5_IS_PKG(S) \ + (((isdigit((int)S[1]) || isupper((int)S[1])) && '_' == S[2] && '_' == S[3] && islower((int)S[4])) || \ + ((isdigit((int)S[2]) || isupper((int)S[2])) && '_' == S[3] && '_' == S[4] && islower((int)S[5])) || \ + ((isdigit((int)S[3]) || isupper((int)S[3])) && '_' == S[4] && '_' == S[5] && islower((int)S[6]))) + +/* Macro to check that an API call is using a correctly formed name. + * + * The name checks only occur in debug builds to avoid performance degradation and only take + * place once per API call per library initialization. + */ #ifndef NDEBUG #define FUNC_ENTER_CHECK_NAME(asrt) \ { \ @@ -1146,16 +1171,21 @@ extern char H5_lib_vers_info_g[]; if (H5_UNLIKELY(!func_check)) { \ /* Check function naming status */ \ assert(asrt && \ - "Function naming conventions are incorrect - check H5_IS_API|PUB|PRIV|PKG macros in " \ - "H5private.h (this is usually due to an incorrect number of underscores)"); \ + "Function naming conventions are incorrect (see H5private.h)" \ + "(this is usually due to an incorrect number of underscores in the function name)"); \ \ /* Don't check again */ \ func_check = true; \ - } /* end if */ \ - } /* end scope */ -#else /* NDEBUG */ + } \ + } +#else #define FUNC_ENTER_CHECK_NAME(asrt) -#endif /* NDEBUG */ +#endif + +/* ---------------------------------------------------------------------------- + * Macros that set things up upon entering an HDF5 API call + * ---------------------------------------------------------------------------- + */ #define FUNC_ENTER_COMMON(asrt) \ bool err_occurred = false; \ @@ -1188,7 +1218,15 @@ extern char H5_lib_vers_info_g[]; else \ api_ctx_pushed = true; -/* Use this macro for all "normal" API functions */ +/* ---------------------------------------------------------------------------- + * HDF5 API call entry macros + * + * These are all of the form `FUNC_ENTER_*`. Every HDF5 API call will begin + * with one of these macros immediately after the variable declarations. + * ---------------------------------------------------------------------------- + */ + +/* Use this macro for all "normal" public API functions */ #define FUNC_ENTER_API(err) \ { \ { \ @@ -1203,8 +1241,8 @@ extern char H5_lib_vers_info_g[]; { /* - * Use this macro for API functions that shouldn't clear the error stack - * like H5Eprint and H5Ewalk. + * Use this macro for public API functions that shouldn't clear the error stack + * like H5Eprint and H5Ewalk. */ #define FUNC_ENTER_API_NOCLEAR(err) \ { \ @@ -1218,10 +1256,9 @@ extern char H5_lib_vers_info_g[]; { /* - * Use this macro for API functions that shouldn't perform _any_ initialization - * of the library or an interface, just perform tracing, etc. Examples - * are: H5is_library_threadsafe, H5VLretrieve_lib_state, etc. - * + * Use this macro for public API functions that shouldn't perform _any_ + * initialization of the library or an interface, just perform tracing, etc. + * Examples are: H5is_library_threadsafe, H5VLretrieve_lib_state, etc. */ #define FUNC_ENTER_API_NOINIT \ { \ @@ -1247,10 +1284,9 @@ extern char H5_lib_vers_info_g[]; { /* - * Use this macro for API functions that should only perform initialization - * of the library or an interface, but not push any state (API context, - * function name, etc.) examples are: H5open. - * + * Use this macro for public API functions that should only perform + * initialization of the library or an interface, but not push any state (API + * context, function name, etc.). Examples are: H5open. */ #define FUNC_ENTER_API_NOPUSH(err) \ { \ @@ -1263,11 +1299,10 @@ extern char H5_lib_vers_info_g[]; { /* - * Use this macro for API functions that shouldn't perform _any_ initialization - * of the library or an interface, or push themselves on the function - * stack, or perform tracing, etc. This macro _only_ sanity checks the - * API name itself. Examples are: H5TSmutex_acquire, - * + * Use this macro for public API functions that shouldn't perform _any_ + * initialization of the library or an interface, or push themselves on the + * function stack, or perform tracing, etc. This macro _only_ sanity checks + * the API name itself. Examples are: H5TSmutex_acquire */ #define FUNC_ENTER_API_NAMECHECK_ONLY \ { \ @@ -1326,11 +1361,10 @@ extern char H5_lib_vers_info_g[]; if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { /* - * Use this macro for non-API functions that shouldn't perform _any_ initialization - * of the library or an interface, or push themselves on the function - * stack, or perform tracing, etc. This macro _only_ sanity checks the - * API name itself. Examples are private routines in the H5TS package. - * + * Use this macro for non-API functions that shouldn't perform _any_ + * initialization of the library or an interface, or push themselves on the + * function stack, or perform tracing, etc. This macro _only_ sanity checks + * the API name itself. Examples are private routines in the H5TS package. */ #define FUNC_ENTER_NOAPI_NAMECHECK_ONLY \ { \ @@ -1338,7 +1372,8 @@ extern char H5_lib_vers_info_g[]; /* Use the following two macros as replacements for the FUNC_ENTER_NOAPI * and FUNC_ENTER_NOAPI_NOINIT macros when the function needs to set - * up a metadata tag. */ + * up a metadata tag. + */ #define FUNC_ENTER_NOAPI_TAG(tag, err) \ { \ haddr_t prev_tag = HADDR_UNDEF; \ @@ -1356,20 +1391,23 @@ extern char H5_lib_vers_info_g[]; H5AC_tag(tag, &prev_tag); \ if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { -/* Use this macro for all "normal" package-level functions */ +/* Use this macro for all "normal" package-level and static functions */ #define FUNC_ENTER_PACKAGE \ { \ FUNC_ENTER_COMMON(H5_IS_PKG(__func__)); \ if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { -/* Use this macro for package-level functions which propagate errors, but don't issue them */ +/* Use this macro for package-level and static functions which propagate + * errors, but don't issue them + */ #define FUNC_ENTER_PACKAGE_NOERR \ { \ FUNC_ENTER_COMMON_NOERR(H5_IS_PKG(__func__)); \ if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { /* Use the following macro as replacement for the FUNC_ENTER_PACKAGE - * macro when the function needs to set up a metadata tag. */ + * macro when the function needs to set up a metadata tag. + */ #define FUNC_ENTER_PACKAGE_TAG(tag) \ { \ haddr_t prev_tag = HADDR_UNDEF; \ @@ -1379,25 +1417,33 @@ extern char H5_lib_vers_info_g[]; if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { /* - * Use this macro for non-API functions that shouldn't perform _any_ initialization - * of the library or an interface, or push themselves on the function - * stack, or perform tracing, etc. This macro _only_ sanity checks the - * API name itself. Examples are static routines in the H5TS package. - * + * Use this macro for package-level or static functions that shouldn't perform + * _any_ initialization of the library or an interface, or push themselves on + * the function stack, or perform tracing, etc. This macro _only_ sanity + * checks the API name itself. Examples are static routines in the H5TS package. */ #define FUNC_ENTER_PACKAGE_NAMECHECK_ONLY \ { \ FUNC_ENTER_COMMON_NOERR(H5_IS_PKG(__func__)); -/*------------------------------------------------------------------------- - * Purpose: Register function exit for code profiling. This should be - * the last statement executed by a function. - *------------------------------------------------------------------------- +/* ---------------------------------------------------------------------------- + * HDF5 API call leave macros + * + * These are all of the form `FUNC_LEAVE_*` and need to match the FUNC_ENTER + * macro used when entering. The PACKAGE FUNC_ENTER macros use the NOAPI + * FUNC_LEAVE macros. + * + * The FUNC_LEAVE macro will be the last statement in an HDF5 API call. + * + * NOTE: All FUNC_LEAVE macros begin with a semicolon to prevent compiler + * warnings from having the done: target right before the scope-closing + * bracket. Labels at the end of compound statements is a C23 extension. + * ---------------------------------------------------------------------------- */ #define FUNC_LEAVE_API(ret_value) \ ; \ - } /*end scope from end of FUNC_ENTER*/ \ + } /* end scope from end of FUNC_ENTER */ \ if (H5_LIKELY(api_ctx_pushed)) { \ (void)H5CX_pop(true); \ api_ctx_pushed = false; \ @@ -1407,35 +1453,35 @@ extern char H5_lib_vers_info_g[]; H5_API_UNLOCK \ return (ret_value); \ } \ - } /*end scope from beginning of FUNC_ENTER*/ + } /* end scope from beginning of FUNC_ENTER */ /* Use this macro to match the FUNC_ENTER_API_NOINIT macro */ #define FUNC_LEAVE_API_NOINIT(ret_value) \ ; \ - } /*end scope from end of FUNC_ENTER*/ \ + } /* end scope from end of FUNC_ENTER */ \ if (H5_UNLIKELY(err_occurred)) \ (void)H5E_dump_api_stack(); \ H5_API_UNLOCK \ return (ret_value); \ } \ } \ - } /*end scope from beginning of FUNC_ENTER*/ + } /* end scope from beginning of FUNC_ENTER */ /* Use this macro to match the FUNC_ENTER_API_NOINIT_NOERR macro */ #define FUNC_LEAVE_API_NOERR(ret_value) \ ; \ - } /*end scope from end of FUNC_ENTER*/ \ + } /* end scope from end of FUNC_ENTER */ \ H5_API_UNLOCK \ return (ret_value); \ } \ } \ } \ - } /*end scope from beginning of FUNC_ENTER*/ + } /* end scope from beginning of FUNC_ENTER */ /* Use this macro to match the FUNC_ENTER_API_NOPUSH macro */ #define FUNC_LEAVE_API_NOPUSH(ret_value) \ ; \ - } /*end scope from end of FUNC_ENTER*/ \ + } /* end scope from end of FUNC_ENTER */ \ if (H5_UNLIKELY(err_occurred)) \ (void)H5E_dump_api_stack(); \ H5_API_UNLOCK \ @@ -1444,47 +1490,49 @@ extern char H5_lib_vers_info_g[]; } \ } \ } \ - } /*end scope from beginning of FUNC_ENTER*/ + } /* end scope from beginning of FUNC_ENTER */ /* Use this macro to match the FUNC_ENTER_API_NAMECHECK_ONLY macro */ #define FUNC_LEAVE_API_NAMECHECK_ONLY(ret_value) \ ; \ - } /*end scope from end of FUNC_ENTER*/ \ + } /* end scope from end of FUNC_ENTER */ \ return (ret_value); \ } \ } \ } \ } \ } \ - } /*end scope from beginning of FUNC_ENTER*/ + } /* end scope from beginning of FUNC_ENTER */ +/* Use this macro to match NOAPI and PACKAGE macros which return a value */ #define FUNC_LEAVE_NOAPI(ret_value) \ ; \ - } /*end scope from end of FUNC_ENTER*/ \ + } /* end scope from end of FUNC_ENTER */ \ return (ret_value); \ - } /*end scope from beginning of FUNC_ENTER*/ + } /* end scope from beginning of FUNC_ENTER */ +/* Use this macro to match NOAPI and PACKAGE macros which do not return a value */ #define FUNC_LEAVE_NOAPI_VOID \ ; \ - } /*end scope from end of FUNC_ENTER*/ \ + } /* end scope from end of FUNC_ENTER */ \ return; \ - } /*end scope from beginning of FUNC_ENTER*/ + } /* end scope from beginning of FUNC_ENTER */ /* Use these macros to match the FUNC_ENTER_NOAPI_NAMECHECK_ONLY macro */ #define FUNC_LEAVE_NOAPI_NAMECHECK_ONLY(ret_value) \ return (ret_value); \ - } /*end scope from beginning of FUNC_ENTER*/ + } /* end scope from beginning of FUNC_ENTER */ #define FUNC_LEAVE_NOAPI_VOID_NAMECHECK_ONLY \ return; \ - } /*end scope from beginning of FUNC_ENTER*/ + } /* end scope from beginning of FUNC_ENTER */ -/* Use this macro when exiting a function that set up a metadata tag */ +/* Use this macro when exiting a function that sets up a metadata tag */ #define FUNC_LEAVE_NOAPI_TAG(ret_value) \ ; \ - } /*end scope from end of FUNC_ENTER*/ \ + } /* end scope from end of FUNC_ENTER */ \ H5AC_tag(prev_tag, NULL); \ return (ret_value); \ - } /*end scope from beginning of FUNC_ENTER*/ + } /* end scope from beginning of FUNC_ENTER */ /* Macros to declare package initialization function, if a package initialization routine is defined */ #define H5_PKG_DECLARE_YES_FUNC(pkg) extern herr_t H5_PACKAGE_INIT_FUNC(pkg)(void); @@ -1499,13 +1547,20 @@ H5_PKG_DECLARE_VAR(H5_MY_PKG) H5_PKG_DECLARE_FUNC(H5_MY_PKG_INIT, H5_MY_PKG) #endif -/* Macro to begin/end tagging (when FUNC_ENTER_*TAG macros are insufficient). - * Make sure to use HGOTO_ERROR_TAG and HGOTO_DONE_TAG between these macros! */ +/* ---------------------------------------------------------------------------- + * Metadata cache tagging macros (when FUNC_ENTER_*TAG macros are insufficient) + * + * Make sure to use HGOTO_ERROR_TAG and HGOTO_DONE_TAG between these macros! + * ---------------------------------------------------------------------------- + */ + +/* Macro to begin tagging */ #define H5_BEGIN_TAG(tag) \ { \ haddr_t prv_tag = HADDR_UNDEF; \ H5AC_tag(tag, &prv_tag); +/* Macro to end tagging */ #define H5_END_TAG \ H5AC_tag(prv_tag, NULL); \ } From 786b03317a76f1d6536a38fb50e23e0aa0c7f5bb Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Mon, 28 Oct 2024 06:58:28 -0700 Subject: [PATCH 051/179] Fix remaining calloc param reversals (#5018) gcc 14 identifies likely places where the sizeof() call is used for the first parameter to calloc(). This PR fixes the remaining places in the library where this occurs and reworks a few other allocations to be more uniform. --- hl/src/H5TB.c | 2 +- test/hyperslab.c | 2 +- test/ntypes.c | 40 ++++++------ test/trefer.c | 68 ++++++++++----------- test/trefer_deprec.c | 24 ++++---- test/tselect.c | 97 +++++++++++++++--------------- tools/src/h5repack/h5repack_refs.c | 5 +- tools/test/h5dump/h5dumpgentest.c | 8 +-- tools/test/h5repack/h5repacktst.c | 4 +- 9 files changed, 123 insertions(+), 127 deletions(-) diff --git a/hl/src/H5TB.c b/hl/src/H5TB.c index 842e52b9e69..f94dc26cc5c 100644 --- a/hl/src/H5TB.c +++ b/hl/src/H5TB.c @@ -3185,7 +3185,7 @@ H5TB_create_type(hid_t loc_id, const char *dset_name, size_t type_size, const si if (H5TBget_table_info(loc_id, dset_name, &nfields, NULL) < 0) goto out; - if (NULL == (fnames = (char **)calloc(sizeof(char *), (size_t)nfields))) + if (NULL == (fnames = (char **)calloc((size_t)nfields, sizeof(char *)))) goto out; for (i = 0; i < nfields; i++) diff --git a/test/hyperslab.c b/test/hyperslab.c index 24cef142712..c407facf18a 100644 --- a/test/hyperslab.c +++ b/test/hyperslab.c @@ -985,7 +985,7 @@ test_array_fill(size_t lo, size_t hi) TESTING(s); /* Initialize */ - if (NULL == (dst = (int *)calloc(sizeof(int), ARRAY_FILL_SIZE * hi))) + if (NULL == (dst = (int *)calloc((ARRAY_FILL_SIZE * hi), sizeof(int)))) TEST_ERROR; /* Setup */ diff --git a/test/ntypes.c b/test/ntypes.c index 3fcd40ffb4b..14357087f2a 100644 --- a/test/ntypes.c +++ b/test/ntypes.c @@ -335,9 +335,9 @@ test_compound_dtype2(hid_t file) TESTING("nested compound datatype"); /* Allocate space for the points & check arrays */ - if (NULL == (points = malloc(sizeof(s1) * DIM0 * DIM1))) + if (NULL == (points = (s1 *)malloc((DIM0 * DIM1) * sizeof(s1)))) TEST_ERROR; - if (NULL == (check = calloc(DIM0 * DIM1, sizeof(s1)))) + if (NULL == (check = (s1 *)calloc((DIM0 * DIM1), sizeof(s1)))) TEST_ERROR; /* Initialize the dataset */ @@ -533,9 +533,9 @@ test_compound_dtype2(hid_t file) /* Read the dataset back. Temporary buffer is for special platforms like * Cray */ - if (NULL == (tmp = malloc(DIM0 * DIM1 * H5Tget_size(native_type)))) + if (NULL == (tmp = malloc((DIM0 * DIM1) * H5Tget_size(native_type)))) TEST_ERROR; - if (NULL == (bkg = calloc(DIM0 * DIM1, sizeof(s1)))) + if (NULL == (bkg = calloc((DIM0 * DIM1), sizeof(s1)))) TEST_ERROR; if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp) < 0) @@ -648,9 +648,9 @@ test_compound_dtype(hid_t file) TESTING("compound datatype"); /* Allocate space for the points & check arrays */ - if (NULL == (points = malloc(sizeof(s1) * DIM0 * DIM1))) + if (NULL == (points = (s1 *)malloc((DIM0 * DIM1) * sizeof(s1)))) TEST_ERROR; - if (NULL == (check = calloc(DIM0 * DIM1, sizeof(s1)))) + if (NULL == (check = (s1 *)calloc((DIM0 * DIM1), sizeof(s1)))) TEST_ERROR; /* Initialize the dataset */ @@ -752,9 +752,9 @@ test_compound_dtype(hid_t file) /* Read the dataset back. Temporary buffer is for special platforms like * Cray */ - if (NULL == (tmp = malloc(DIM0 * DIM1 * H5Tget_size(native_type)))) + if (NULL == (tmp = malloc((DIM0 * DIM1) * H5Tget_size(native_type)))) TEST_ERROR; - if (NULL == (bkg = calloc(DIM0 * DIM1, sizeof(s1)))) + if (NULL == (bkg = calloc((DIM0 * DIM1), sizeof(s1)))) TEST_ERROR; if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp) < 0) @@ -856,9 +856,9 @@ test_compound_dtype3(hid_t file) TESTING("compound datatype with array as field"); /* Allocate space for the points & check arrays */ - if (NULL == (points = malloc(sizeof(s1) * DIM0 * DIM1))) + if (NULL == (points = (s1 *)malloc((DIM0 * DIM1) * sizeof(s1)))) TEST_ERROR; - if (NULL == (check = calloc(DIM0 * DIM1, sizeof(s1)))) + if (NULL == (check = (s1 *)calloc((DIM0 * DIM1), sizeof(s1)))) TEST_ERROR; /* Initialize the dataset */ @@ -980,9 +980,9 @@ test_compound_dtype3(hid_t file) /* Read the dataset back. Temporary buffer is for special platforms like * Cray */ - if (NULL == (tmp = malloc(DIM0 * DIM1 * H5Tget_size(native_type)))) + if (NULL == (tmp = malloc((DIM0 * DIM1) * H5Tget_size(native_type)))) TEST_ERROR; - if (NULL == (bkg = calloc(DIM0 * DIM1, sizeof(s1)))) + if (NULL == (bkg = calloc((DIM0 * DIM1), sizeof(s1)))) TEST_ERROR; if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp) < 0) @@ -1091,9 +1091,9 @@ test_compound_opaque(hid_t file) TESTING("compound datatype with opaque field"); /* Allocate space for the points & check arrays */ - if (NULL == (points = malloc(sizeof(s1) * DIM0 * DIM1))) + if (NULL == (points = (s1 *)malloc((DIM0 * DIM1) * sizeof(s1)))) TEST_ERROR; - if (NULL == (check = calloc(DIM0 * DIM1, sizeof(s1)))) + if (NULL == (check = (s1 *)calloc((DIM0 * DIM1), sizeof(s1)))) TEST_ERROR; /* Initialize the dataset */ @@ -1206,9 +1206,9 @@ test_compound_opaque(hid_t file) /* Read the dataset back. Temporary buffer is for special platforms like * Cray */ - if (NULL == (tmp = malloc(DIM0 * DIM1 * H5Tget_size(native_type)))) + if (NULL == (tmp = malloc((DIM0 * DIM1) * H5Tget_size(native_type)))) TEST_ERROR; - if (NULL == (bkg = calloc(DIM0 * DIM1, sizeof(s1)))) + if (NULL == (bkg = calloc((DIM0 * DIM1), sizeof(s1)))) TEST_ERROR; if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp) < 0) @@ -1469,9 +1469,9 @@ test_array_dtype(hid_t file) TESTING("array of compound datatype"); /* Allocate space for the points & check arrays */ - if (NULL == (points = malloc(sizeof(s1) * DIM0 * DIM1 * 5))) + if (NULL == (points = (s1 *)malloc((DIM0 * DIM1 * 5) * sizeof(s1)))) TEST_ERROR; - if (NULL == (check = calloc(DIM0 * DIM1 * 5, sizeof(s1)))) + if (NULL == (check = (s1 *)calloc((DIM0 * DIM1 * 5), sizeof(s1)))) TEST_ERROR; /* Initialize the dataset */ @@ -2428,9 +2428,9 @@ test_refer_dtype2(hid_t file) TESTING("dataset region reference"); /* Allocate write & read buffers */ - if (NULL == (dwbuf = malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2))) + if (NULL == (dwbuf = (uint8_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint8_t)))) TEST_ERROR; - if (NULL == (drbuf = calloc(SPACE2_DIM1 * SPACE2_DIM2, sizeof(uint8_t)))) + if (NULL == (drbuf = (uint8_t *)calloc((SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)))) TEST_ERROR; /* Create dataspace for datasets */ diff --git a/test/trefer.c b/test/trefer.c index ac35ea5978f..bc443b7b4be 100644 --- a/test/trefer.c +++ b/test/trefer.c @@ -127,7 +127,7 @@ test_reference_params(void) wbuf = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); rbuf = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); tbuf = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); - obuf = calloc(SPACE1_DIM1, sizeof(unsigned)); + obuf = (unsigned *)calloc(SPACE1_DIM1, sizeof(unsigned)); for (i = 0; i < SPACE1_DIM1; i++) obuf[i] = i * 3; @@ -468,10 +468,10 @@ test_reference_obj(void) MESSAGE(5, ("Testing Object Reference Functions\n")); /* Allocate write & read buffers */ - wbuf = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); - rbuf = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); - ibuf = calloc(SPACE1_DIM1, sizeof(unsigned)); - obuf = calloc(SPACE1_DIM1, sizeof(unsigned)); + wbuf = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + rbuf = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + ibuf = (unsigned *)calloc(SPACE1_DIM1, sizeof(unsigned)); + obuf = (unsigned *)calloc(SPACE1_DIM1, sizeof(unsigned)); for (i = 0; i < SPACE1_DIM1; i++) obuf[i] = i * 3; @@ -571,7 +571,7 @@ test_reference_obj(void) VERIFY(obj_type, H5O_TYPE_NAMED_DATATYPE, "H5Rget_obj_type3"); /* Check copying a reference */ - wbuf_cp = calloc(1, sizeof(H5R_ref_t)); + wbuf_cp = (H5R_ref_t *)calloc(1, sizeof(H5R_ref_t)); ret = H5Rcopy(&wbuf[0], &wbuf_cp[0]); CHECK(ret, FAIL, "H5Rcopy"); @@ -838,9 +838,9 @@ test_reference_vlen_obj(void) MESSAGE(5, ("Testing Object Reference Functions within VLEN type\n")); /* Allocate write & read buffers */ - wbuf = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); - ibuf = calloc(SPACE1_DIM1, sizeof(unsigned)); - obuf = calloc(SPACE1_DIM1, sizeof(unsigned)); + wbuf = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + ibuf = (unsigned *)calloc(SPACE1_DIM1, sizeof(unsigned)); + obuf = (unsigned *)calloc(SPACE1_DIM1, sizeof(unsigned)); for (i = 0; i < SPACE1_DIM1; i++) obuf[i] = i * 3; @@ -1102,8 +1102,8 @@ test_reference_cmpnd_obj(void) MESSAGE(5, ("Testing Object Reference Functions within compound type\n")); /* Allocate write & read buffers */ - ibuf = calloc(SPACE1_DIM1, sizeof(unsigned)); - obuf = calloc(SPACE1_DIM1, sizeof(unsigned)); + ibuf = (unsigned *)calloc(SPACE1_DIM1, sizeof(unsigned)); + obuf = (unsigned *)calloc(SPACE1_DIM1, sizeof(unsigned)); for (i = 0; i < SPACE1_DIM1; i++) obuf[i] = i * 3; @@ -1411,10 +1411,10 @@ test_reference_region(H5F_libver_t libver_low, H5F_libver_t libver_high) MESSAGE(5, ("Testing Dataset Region Reference Functions\n")); /* Allocate write & read buffers */ - wbuf = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); - rbuf = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); - dwbuf = (uint8_t *)calloc((size_t)(SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); - drbuf = (uint8_t *)calloc((size_t)(SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); + wbuf = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + rbuf = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + dwbuf = (uint8_t *)calloc((SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); + drbuf = (uint8_t *)calloc((SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); for (tu8 = dwbuf, i = 0; i < (SPACE2_DIM1 * SPACE2_DIM2); i++) *tu8++ = (uint8_t)(i * 3); @@ -1867,10 +1867,10 @@ test_reference_region_1D(H5F_libver_t libver_low, H5F_libver_t libver_high) MESSAGE(5, ("Testing 1-D Dataset Region Reference Functions\n")); /* Allocate write & read buffers */ - wbuf = calloc((size_t)SPACE1_DIM1, sizeof(H5R_ref_t)); - rbuf = calloc((size_t)SPACE1_DIM1, sizeof(H5R_ref_t)); - dwbuf = (uint8_t *)calloc((size_t)SPACE3_DIM1, sizeof(uint8_t)); - drbuf = (uint8_t *)calloc((size_t)SPACE3_DIM1, sizeof(uint8_t)); + wbuf = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + rbuf = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + dwbuf = (uint8_t *)calloc(SPACE3_DIM1, sizeof(uint8_t)); + drbuf = (uint8_t *)calloc(SPACE3_DIM1, sizeof(uint8_t)); for (tu8 = dwbuf, i = 0; i < SPACE3_DIM1; i++) *tu8++ = (uint8_t)(i * 3); @@ -3125,10 +3125,10 @@ test_reference_compat_conv(void) } /* Allocate write & read buffers */ - wbuf_obj = calloc(SPACE1_DIM1, sizeof(hobj_ref_t)); - rbuf_obj = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); - wbuf_reg = calloc(SPACE1_DIM1, sizeof(hdset_reg_ref_t)); - rbuf_reg = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + wbuf_obj = (hobj_ref_t *)calloc(SPACE1_DIM1, sizeof(hobj_ref_t)); + rbuf_obj = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + wbuf_reg = (hdset_reg_ref_t *)calloc(SPACE1_DIM1, sizeof(hdset_reg_ref_t)); + rbuf_reg = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); /* Create dataspace for datasets */ sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL); @@ -3434,17 +3434,17 @@ test_reference_perf(void) MESSAGE(5, ("Testing Object Reference Performance\n")); /* Allocate write & read buffers */ - wbuf = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); - obuf = calloc(SPACE1_DIM1, sizeof(unsigned)); - ibuf = calloc(SPACE1_DIM1, sizeof(unsigned)); - wbuf_deprec = calloc(SPACE1_DIM1, sizeof(hobj_ref_t)); - rbuf = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); - rbuf_deprec = calloc(SPACE1_DIM1, sizeof(hobj_ref_t)); - tbuf = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); - wbuf_reg = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); - rbuf_reg = calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); - wbuf_reg_deprec = calloc(SPACE1_DIM1, sizeof(hdset_reg_ref_t)); - rbuf_reg_deprec = calloc(SPACE1_DIM1, sizeof(hdset_reg_ref_t)); + wbuf = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + obuf = (unsigned *)calloc(SPACE1_DIM1, sizeof(unsigned)); + ibuf = (unsigned *)calloc(SPACE1_DIM1, sizeof(unsigned)); + wbuf_deprec = (hobj_ref_t *)calloc(SPACE1_DIM1, sizeof(hobj_ref_t)); + rbuf = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + rbuf_deprec = (hobj_ref_t *)calloc(SPACE1_DIM1, sizeof(hobj_ref_t)); + tbuf = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + wbuf_reg = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + rbuf_reg = (H5R_ref_t *)calloc(SPACE1_DIM1, sizeof(H5R_ref_t)); + wbuf_reg_deprec = (hdset_reg_ref_t *)calloc(SPACE1_DIM1, sizeof(hdset_reg_ref_t)); + rbuf_reg_deprec = (hdset_reg_ref_t *)calloc(SPACE1_DIM1, sizeof(hdset_reg_ref_t)); for (i = 0; i < SPACE1_DIM1; i++) obuf[i] = i * 3; diff --git a/test/trefer_deprec.c b/test/trefer_deprec.c index 3f932f53b93..d06f5e39ef1 100644 --- a/test/trefer_deprec.c +++ b/test/trefer_deprec.c @@ -623,10 +623,10 @@ test_reference_region(H5F_libver_t libver_low, H5F_libver_t libver_high) MESSAGE(5, ("Testing Dataset Region Reference Functions\n")); /* Allocate write & read buffers */ - wbuf = calloc((size_t)SPACE1_DIM1, sizeof(hdset_reg_ref_t)); - rbuf = malloc(sizeof(hdset_reg_ref_t) * SPACE1_DIM1); - dwbuf = malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); - drbuf = calloc((size_t)(SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); + wbuf = (hdset_reg_ref_t *)calloc(SPACE1_DIM1, sizeof(hdset_reg_ref_t)); + rbuf = (hdset_reg_ref_t *)malloc(SPACE1_DIM1 * sizeof(hdset_reg_ref_t)); + dwbuf = (uint8_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint8_t)); + drbuf = (uint8_t *)calloc((SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); /* Create file access property list */ fapl = H5Pcreate(H5P_FILE_ACCESS); @@ -1064,10 +1064,10 @@ test_reference_region_1D(H5F_libver_t libver_low, H5F_libver_t libver_high) MESSAGE(5, ("Testing 1-D Dataset Region Reference Functions\n")); /* Allocate write & read buffers */ - wbuf = calloc((size_t)SPACE1_DIM1, sizeof(hdset_reg_ref_t)); - rbuf = malloc(sizeof(hdset_reg_ref_t) * SPACE1_DIM1); - dwbuf = malloc(sizeof(uint8_t) * SPACE3_DIM1); - drbuf = calloc((size_t)SPACE3_DIM1, sizeof(uint8_t)); + wbuf = (hdset_reg_ref_t *)calloc(SPACE1_DIM1, sizeof(hdset_reg_ref_t)); + rbuf = (hdset_reg_ref_t *)malloc(SPACE1_DIM1 * sizeof(hdset_reg_ref_t)); + dwbuf = (uint8_t *)malloc(SPACE3_DIM1 * sizeof(uint8_t)); + drbuf = (uint8_t *)calloc(SPACE3_DIM1, sizeof(uint8_t)); /* Create the file access property list */ fapl = H5Pcreate(H5P_FILE_ACCESS); @@ -1636,10 +1636,10 @@ test_reference_compat(void) MESSAGE(5, ("Testing Deprecated Object Reference Functions\n")); /* Allocate write & read buffers */ - wbuf_obj = calloc(SPACE1_DIM1, sizeof(hobj_ref_t)); - rbuf_obj = malloc(sizeof(hobj_ref_t) * SPACE1_DIM1); - wbuf_reg = calloc(SPACE1_DIM1, sizeof(hdset_reg_ref_t)); - rbuf_reg = malloc(sizeof(hdset_reg_ref_t) * SPACE1_DIM1); + wbuf_obj = (hobj_ref_t *)calloc(SPACE1_DIM1, sizeof(hobj_ref_t)); + rbuf_obj = (hobj_ref_t *)malloc(SPACE1_DIM1 * sizeof(hobj_ref_t)); + wbuf_reg = (hdset_reg_ref_t *)calloc(SPACE1_DIM1, sizeof(hdset_reg_ref_t)); + rbuf_reg = (hdset_reg_ref_t *)malloc(SPACE1_DIM1 * sizeof(hdset_reg_ref_t)); /* Create file */ fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); diff --git a/test/tselect.c b/test/tselect.c index 6f9bc6f1426..21c3648d587 100644 --- a/test/tselect.c +++ b/test/tselect.c @@ -247,9 +247,9 @@ test_select_hyper(hid_t xfer_plist) MESSAGE(5, ("Testing Hyperslab Selection Functions\n")); /* Allocate write & read buffers */ - wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (uint8_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint8_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); + rbuf = (uint8_t *)calloc((SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -501,9 +501,9 @@ test_select_point(hid_t xfer_plist) MESSAGE(5, ("Testing Element Selection Functions\n")); /* Allocate write & read buffers */ - wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (uint8_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint8_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); + rbuf = (uint8_t *)calloc((SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -863,9 +863,9 @@ test_select_all(hid_t xfer_plist) MESSAGE(5, ("Testing 'All' Selection Functions\n")); /* Allocate write & read buffers */ - wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE4_DIM1 * SPACE4_DIM2 * SPACE4_DIM3); + wbuf = (uint8_t *)malloc((SPACE4_DIM1 * SPACE4_DIM2 * SPACE4_DIM3) * sizeof(uint8_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc((size_t)(SPACE4_DIM1 * SPACE4_DIM2 * SPACE4_DIM3), sizeof(uint8_t)); + rbuf = (uint8_t *)calloc((SPACE4_DIM1 * SPACE4_DIM2 * SPACE4_DIM3), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -950,9 +950,9 @@ test_select_all_hyper(hid_t xfer_plist) MESSAGE(5, ("Testing 'All' Selection Functions\n")); /* Allocate write & read buffers */ - wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (uint8_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint8_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); + rbuf = (uint8_t *)calloc((SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -1104,9 +1104,9 @@ test_select_combo(void) MESSAGE(5, ("Testing Combination of Hyperslab & Element Selection Functions\n")); /* Allocate write & read buffers */ - wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (uint8_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint8_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); + rbuf = (uint8_t *)calloc((SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -1299,9 +1299,9 @@ test_select_hyper_stride(hid_t xfer_plist) MESSAGE(5, ("Testing Hyperslabs with Strides Functionality\n")); /* Allocate write & read buffers */ - wbuf = (uint16_t *)malloc(sizeof(uint16_t) * SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (uint16_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint16_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint16_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint16_t)); + rbuf = (uint16_t *)calloc((SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint16_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -1445,9 +1445,9 @@ test_select_hyper_contig(hid_t dset_type, hid_t xfer_plist) MESSAGE(5, ("Testing Contiguous Hyperslabs Functionality\n")); /* Allocate write & read buffers */ - wbuf = (uint16_t *)malloc(sizeof(uint16_t) * SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (uint16_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint16_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint16_t *)calloc((size_t)(SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint16_t)); + rbuf = (uint16_t *)calloc((SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint16_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -1585,10 +1585,9 @@ test_select_hyper_contig2(hid_t dset_type, hid_t xfer_plist) MESSAGE(5, ("Testing More Contiguous Hyperslabs Functionality\n")); /* Allocate write & read buffers */ - wbuf = (uint16_t *)malloc(sizeof(uint16_t) * SPACE8_DIM1 * SPACE8_DIM2 * SPACE8_DIM3 * SPACE8_DIM4); + wbuf = (uint16_t *)malloc((SPACE8_DIM1 * SPACE8_DIM2 * SPACE8_DIM3 * SPACE8_DIM4) * sizeof(uint16_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = - (uint16_t *)calloc((size_t)(SPACE8_DIM1 * SPACE8_DIM2 * SPACE8_DIM3 * SPACE8_DIM4), sizeof(uint16_t)); + rbuf = (uint16_t *)calloc((SPACE8_DIM1 * SPACE8_DIM2 * SPACE8_DIM3 * SPACE8_DIM4), sizeof(uint16_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -1731,10 +1730,9 @@ test_select_hyper_contig3(hid_t dset_type, hid_t xfer_plist) MESSAGE(5, ("Testing Yet More Contiguous Hyperslabs Functionality\n")); /* Allocate write & read buffers */ - wbuf = (uint16_t *)malloc(sizeof(uint16_t) * SPACE8_DIM1 * SPACE8_DIM2 * SPACE8_DIM3 * SPACE8_DIM4); + wbuf = (uint16_t *)malloc((SPACE8_DIM1 * SPACE8_DIM2 * SPACE8_DIM3 * SPACE8_DIM4) * sizeof(uint16_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = - (uint16_t *)calloc((size_t)(SPACE8_DIM1 * SPACE8_DIM2 * SPACE8_DIM3 * SPACE8_DIM4), sizeof(uint16_t)); + rbuf = (uint16_t *)calloc((SPACE8_DIM1 * SPACE8_DIM2 * SPACE8_DIM3 * SPACE8_DIM4), sizeof(uint16_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -3679,11 +3677,11 @@ test_select_hyper_copy(void) MESSAGE(5, ("Testing Hyperslabs with Strides Functionality\n")); /* Allocate write & read buffers */ - wbuf = (uint16_t *)malloc(sizeof(uint16_t) * SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (uint16_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint16_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint16_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint16_t)); + rbuf = (uint16_t *)calloc((SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint16_t)); CHECK_PTR(rbuf, "calloc"); - rbuf2 = (uint16_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint16_t)); + rbuf2 = (uint16_t *)calloc((SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint16_t)); CHECK_PTR(rbuf2, "calloc"); /* Initialize write buffer */ @@ -3850,11 +3848,11 @@ test_select_point_copy(void) MESSAGE(5, ("Testing Hyperslabs with Strides Functionality\n")); /* Allocate write & read buffers */ - wbuf = (uint16_t *)malloc(sizeof(uint16_t) * SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (uint16_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint16_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint16_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint16_t)); + rbuf = (uint16_t *)calloc((SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint16_t)); CHECK_PTR(rbuf, "calloc"); - rbuf2 = (uint16_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint16_t)); + rbuf2 = (uint16_t *)calloc((SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint16_t)); CHECK_PTR(rbuf2, "calloc"); /* Initialize write buffer */ @@ -4068,9 +4066,9 @@ test_select_hyper_offset(void) MESSAGE(5, ("Testing Hyperslab Selection Functions with Offsets\n")); /* Allocate write & read buffers */ - wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (uint8_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint8_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); + rbuf = (uint8_t *)calloc((SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -4276,9 +4274,9 @@ test_select_hyper_offset2(void) MESSAGE(5, ("Testing More Hyperslab Selection Functions with Offsets\n")); /* Allocate write & read buffers */ - wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE7_DIM1 * SPACE7_DIM2); + wbuf = (uint8_t *)malloc((SPACE7_DIM1 * SPACE7_DIM2) * sizeof(uint8_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc((size_t)(SPACE7_DIM1 * SPACE7_DIM2), sizeof(uint8_t)); + rbuf = (uint8_t *)calloc((SPACE7_DIM1 * SPACE7_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -4406,9 +4404,9 @@ test_select_point_offset(void) MESSAGE(5, ("Testing Element Selection Functions\n")); /* Allocate write & read buffers */ - wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (uint8_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint8_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); + rbuf = (uint8_t *)calloc((SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -4633,9 +4631,9 @@ test_select_hyper_union(void) MESSAGE(5, ("Testing Hyperslab Selection Functions with unions of hyperslabs\n")); /* Allocate write & read buffers */ - wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (uint8_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint8_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc((size_t)(SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); + rbuf = (uint8_t *)calloc((SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -5411,9 +5409,9 @@ test_select_hyper_union_3d(void) MESSAGE(5, ("Testing Hyperslab Selection Functions with unions of 3-D hyperslabs\n")); /* Allocate write & read buffers */ - wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE4_DIM1 * SPACE4_DIM2 * SPACE4_DIM3); + wbuf = (uint8_t *)malloc((SPACE4_DIM1 * SPACE4_DIM2 * SPACE4_DIM3) * sizeof(uint8_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(SPACE3_DIM1 * SPACE3_DIM2, sizeof(uint8_t)); + rbuf = (uint8_t *)calloc((SPACE3_DIM1 * SPACE3_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -5735,9 +5733,9 @@ test_select_hyper_and_2d(void) MESSAGE(5, ("Testing Hyperslab Selection Functions with intersection of 2-D hyperslabs\n")); /* Allocate write & read buffers */ - wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (uint8_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint8_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc((size_t)(SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); + rbuf = (uint8_t *)calloc((SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -5874,9 +5872,9 @@ test_select_hyper_xor_2d(void) MESSAGE(5, ("Testing Hyperslab Selection Functions with XOR of 2-D hyperslabs\n")); /* Allocate write & read buffers */ - wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (uint8_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint8_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc((size_t)(SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); + rbuf = (uint8_t *)calloc((SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -6015,9 +6013,9 @@ test_select_hyper_notb_2d(void) MESSAGE(5, ("Testing Hyperslab Selection Functions with NOTB of 2-D hyperslabs\n")); /* Allocate write & read buffers */ - wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (uint8_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint8_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc((size_t)(SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); + rbuf = (uint8_t *)calloc((SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -6154,9 +6152,9 @@ test_select_hyper_nota_2d(void) MESSAGE(5, ("Testing Hyperslab Selection Functions with NOTA of 2-D hyperslabs\n")); /* Allocate write & read buffers */ - wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (uint8_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint8_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc((size_t)(SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); + rbuf = (uint8_t *)calloc((SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -6324,10 +6322,9 @@ test_select_hyper_union_random_5d(hid_t read_plist) MESSAGE(5, ("Testing Hyperslab Selection Functions with random unions of 5-D hyperslabs\n")); /* Allocate write & read buffers */ - wbuf = (int *)malloc(sizeof(int) * SPACE5_DIM1 * SPACE5_DIM2 * SPACE5_DIM3 * SPACE5_DIM4 * SPACE5_DIM5); + wbuf = (int *)malloc((SPACE5_DIM1 * SPACE5_DIM2 * SPACE5_DIM3 * SPACE5_DIM4 * SPACE5_DIM5) * sizeof(int)); CHECK_PTR(wbuf, "malloc"); - rbuf = (int *)calloc((size_t)(SPACE5_DIM1 * SPACE5_DIM2 * SPACE5_DIM3 * SPACE5_DIM4 * SPACE5_DIM5), - sizeof(int)); + rbuf = (int *)calloc((SPACE5_DIM1 * SPACE5_DIM2 * SPACE5_DIM3 * SPACE5_DIM4 * SPACE5_DIM5), sizeof(int)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -7995,9 +7992,9 @@ test_select_none(void) MESSAGE(5, ("Testing I/O on 0-sized Selections\n")); /* Allocate write & read buffers */ - wbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE7_DIM1 * SPACE7_DIM2); + wbuf = (uint8_t *)malloc((SPACE7_DIM1 * SPACE7_DIM2) * sizeof(uint8_t)); CHECK_PTR(wbuf, "malloc"); - rbuf = (uint8_t *)calloc(SPACE7_DIM1 * SPACE7_DIM2, sizeof(uint8_t)); + rbuf = (uint8_t *)calloc((SPACE7_DIM1 * SPACE7_DIM2), sizeof(uint8_t)); CHECK_PTR(rbuf, "calloc"); /* Initialize write buffer */ @@ -13579,7 +13576,7 @@ test_select_hyper_chunk_offset(void) MESSAGE(6, ("Testing hyperslab selections using offsets in chunked datasets\n")); /* Allocate buffers */ - wbuf = (int *)malloc(sizeof(int) * SPACE10_DIM1); + wbuf = (int *)malloc(SPACE10_DIM1 * sizeof(int)); CHECK_PTR(wbuf, "malloc"); rbuf = (int *)calloc(SPACE10_DIM1, sizeof(int)); CHECK_PTR(rbuf, "calloc"); diff --git a/tools/src/h5repack/h5repack_refs.c b/tools/src/h5repack/h5repack_refs.c index bbdc135ffda..0c281b006e8 100644 --- a/tools/src/h5repack/h5repack_refs.c +++ b/tools/src/h5repack/h5repack_refs.c @@ -234,7 +234,7 @@ do_copy_refobjs(hid_t fidin, hid_t fidout, trav_table_t *travt, pack_opt_t *opti *------------------------------------------------------------------------- */ if (nelmts) { - buf = (hdset_reg_ref_t *)malloc((unsigned)(nelmts * msize)); + buf = (hdset_reg_ref_t *)malloc((size_t)(nelmts * msize)); if (buf == NULL) { printf("cannot read into memory\n"); H5TOOLS_GOTO_ERROR((-1), "malloc failed"); @@ -246,8 +246,7 @@ do_copy_refobjs(hid_t fidin, hid_t fidout, trav_table_t *travt, pack_opt_t *opti * create output *------------------------------------------------------------------------- */ - refbuf = (hdset_reg_ref_t *)calloc(sizeof(hdset_reg_ref_t), - (size_t)nelmts); /*init to zero */ + refbuf = (hdset_reg_ref_t *)calloc((size_t)nelmts, sizeof(hdset_reg_ref_t)); if (refbuf == NULL) { printf("cannot allocate memory\n"); H5TOOLS_GOTO_ERROR((-1), "calloc failed"); diff --git a/tools/test/h5dump/h5dumpgentest.c b/tools/test/h5dump/h5dumpgentest.c index 5c13d614844..bac3d9fab1d 100644 --- a/tools/test/h5dump/h5dumpgentest.c +++ b/tools/test/h5dump/h5dumpgentest.c @@ -2254,10 +2254,10 @@ gent_datareg(void) int i; /* counting variables */ /* Allocate write & read buffers */ - wbuf = (hdset_reg_ref_t *)calloc(sizeof(hdset_reg_ref_t), SPACE1_DIM1); - rbuf = (hdset_reg_ref_t *)malloc(sizeof(hdset_reg_ref_t) * SPACE1_DIM1); - dwbuf = (uint8_t *)malloc(sizeof(uint8_t) * SPACE2_DIM1 * SPACE2_DIM2); - drbuf = (uint8_t *)calloc(sizeof(uint8_t), SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (hdset_reg_ref_t *)calloc(SPACE1_DIM1, sizeof(hdset_reg_ref_t)); + rbuf = (hdset_reg_ref_t *)malloc(SPACE1_DIM1 * sizeof(hdset_reg_ref_t)); + dwbuf = (uint8_t *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(uint8_t)); + drbuf = (uint8_t *)calloc((SPACE2_DIM1 * SPACE2_DIM2), sizeof(uint8_t)); /* Create file */ fid1 = H5Fcreate(FILE17, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); diff --git a/tools/test/h5repack/h5repacktst.c b/tools/test/h5repack/h5repacktst.c index e3c34fe82ab..784ebc78651 100644 --- a/tools/test/h5repack/h5repacktst.c +++ b/tools/test/h5repack/h5repacktst.c @@ -4682,8 +4682,8 @@ make_dset_reg_ref(hid_t loc_id) int retval = -1; /* return value */ /* Allocate write & read buffers */ - wbuf = (hdset_reg_ref_t *)calloc(sizeof(hdset_reg_ref_t), (size_t)SPACE1_DIM1); - dwbuf = (int *)malloc(sizeof(int) * SPACE2_DIM1 * SPACE2_DIM2); + wbuf = (hdset_reg_ref_t *)calloc(SPACE1_DIM1, sizeof(hdset_reg_ref_t)); + dwbuf = (int *)malloc((SPACE2_DIM1 * SPACE2_DIM2) * sizeof(int)); /* Create dataspace for datasets */ if ((sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL)) < 0) From d8953c0dbaca71fa95800741fccc1de60f87c358 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Mon, 28 Oct 2024 06:59:26 -0700 Subject: [PATCH 052/179] bin/restore deleted checked-in files (#5017) This was not fixed when we started checking in files that were generated by the Perl scripts in bin --- bin/restore.sh | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/bin/restore.sh b/bin/restore.sh index 3709fda6c03..3aab8e892d8 100755 --- a/bin/restore.sh +++ b/bin/restore.sh @@ -51,18 +51,6 @@ rm -f bin/depcomp echo "Remove files generated by autoheader" rm -f src/H5config.h.in -echo "Remove files generated by bin/make_err" -rm -f src/H5Epubgen.h -rm -f src/H5Einit.h -rm -f src/H5Eterm.h -rm -f src/H5Edefin.h - -echo "Remove files generated by bin/make_vers" -rm -f src/H5version.h - -echo "Remove files generated by bin/make_overflow" -rm -f src/H5overflow.h - echo "Remove remaining generated files" rm -f aclocal.m4 From 60dd8526d7aa7a178757e78193c1648ffdea4f6f Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Mon, 28 Oct 2024 07:35:33 -0700 Subject: [PATCH 053/179] Fix bad private FUNC_ENTER macros (#5020) The name check in the FUNC_ENTER checks for private FUNC_ENTER macros (which have NOAPI in the name) only checked for not having the public form (H5Xfoo), so they could be inappropriately applied to package-level functions (H5X__foo). This PR fixes the bug and updates the inappropriate macros. --- src/H5.c | 2 +- src/H5Aint.c | 2 +- src/H5B2hdr.c | 4 ++-- src/H5B2int.c | 4 ++-- src/H5B2test.c | 2 +- src/H5Dchunk.c | 4 ++-- src/H5Dio.c | 4 ++-- src/H5Dlayout.c | 2 +- src/H5FDint.c | 4 ++-- src/H5FDmpio.c | 2 +- src/H5FDtest.c | 2 +- src/H5FL.c | 2 +- src/H5FScache.c | 2 +- src/H5FSint.c | 4 ++-- src/H5Faccum.c | 4 ++-- src/H5Fprivate.h | 4 ++-- src/H5Fquery.c | 6 +++--- src/H5Gstab.c | 2 +- src/H5HG.c | 2 +- src/H5Oattr.c | 2 +- src/H5Oattribute.c | 2 +- src/H5Oshared.h | 18 +++++++++++++----- src/H5Pint.c | 2 +- src/H5Rint.c | 2 +- src/H5T.c | 2 +- src/H5TSc11.c | 2 +- src/H5TSint.c | 2 +- src/H5TSpthread.c | 2 +- src/H5TSrec_rwlock.c | 6 +++--- src/H5TSwin.c | 6 +++--- src/H5Tvlen.c | 2 +- src/H5VLnative.c | 2 +- src/H5private.h | 14 +++++++------- 33 files changed, 65 insertions(+), 57 deletions(-) diff --git a/src/H5.c b/src/H5.c index 3da7a43ccfa..662de79252a 100644 --- a/src/H5.c +++ b/src/H5.c @@ -108,7 +108,7 @@ H5__init_package(void) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_PACKAGE /* Run the library initialization routine, if it hasn't already ran */ if (!H5_INIT_GLOBAL && !H5_TERM_GLOBAL) diff --git a/src/H5Aint.c b/src/H5Aint.c index 91bcfb12f89..f06c5ea0ede 100644 --- a/src/H5Aint.c +++ b/src/H5Aint.c @@ -1983,7 +1983,7 @@ H5A__get_ainfo(H5F_t *f, H5O_t *oh, H5O_ainfo_t *ainfo) H5B2_t *bt2_name = NULL; /* v2 B-tree handle for name index */ htri_t ret_value = FAIL; /* Return value */ - FUNC_ENTER_NOAPI_TAG(oh->cache_info.addr, FAIL) + FUNC_ENTER_PACKAGE_TAG(oh->cache_info.addr) /* check arguments */ assert(f); diff --git a/src/H5B2hdr.c b/src/H5B2hdr.c index 96372265fa0..1a966edac73 100644 --- a/src/H5B2hdr.c +++ b/src/H5B2hdr.c @@ -404,7 +404,7 @@ H5B2__hdr_decr(H5B2_hdr_t *hdr) herr_t H5B2__hdr_fuse_incr(H5B2_hdr_t *hdr) { - FUNC_ENTER_NOAPI_NOINIT_NOERR + FUNC_ENTER_PACKAGE_NOERR /* Sanity check */ assert(hdr); @@ -427,7 +427,7 @@ H5B2__hdr_fuse_incr(H5B2_hdr_t *hdr) size_t H5B2__hdr_fuse_decr(H5B2_hdr_t *hdr) { - FUNC_ENTER_NOAPI_NOINIT_NOERR + FUNC_ENTER_PACKAGE_NOERR /* Sanity check */ assert(hdr); diff --git a/src/H5B2int.c b/src/H5B2int.c index 51327de3e20..74d431d63d7 100644 --- a/src/H5B2int.c +++ b/src/H5B2int.c @@ -1847,7 +1847,7 @@ H5B2__create_flush_depend(H5AC_info_t *parent_entry, H5AC_info_t *child_entry) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_PACKAGE /* Sanity check */ assert(parent_entry); @@ -2006,7 +2006,7 @@ H5B2__destroy_flush_depend(H5AC_info_t *parent_entry, H5AC_info_t *child_entry) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_PACKAGE /* Sanity check */ assert(parent_entry); diff --git a/src/H5B2test.c b/src/H5B2test.c index b842dab2f1e..f295bc6b622 100644 --- a/src/H5B2test.c +++ b/src/H5B2test.c @@ -417,7 +417,7 @@ H5B2__test2_debug(FILE *stream, int indent, int fwidth, const void *record, cons herr_t H5B2__get_root_addr_test(H5B2_t *bt2, haddr_t *root_addr) { - FUNC_ENTER_NOAPI_NOINIT_NOERR + FUNC_ENTER_PACKAGE_NOERR /* Check arguments. */ assert(bt2); diff --git a/src/H5Dchunk.c b/src/H5Dchunk.c index 8b83d1d3cda..e02ef6227e5 100644 --- a/src/H5Dchunk.c +++ b/src/H5Dchunk.c @@ -759,7 +759,7 @@ H5D__chunk_set_sizes(H5D_t *dset) unsigned u; /* Iterator */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE /* Sanity checks */ assert(dset); @@ -8229,7 +8229,7 @@ H5D__chunk_get_offset_copy(const H5D_t *dset, const hsize_t *offset, hsize_t *of unsigned u; herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE assert(dset); assert(offset); diff --git a/src/H5Dio.c b/src/H5Dio.c index c5b6ee21dbb..436e9c95650 100644 --- a/src/H5Dio.c +++ b/src/H5Dio.c @@ -103,7 +103,7 @@ H5D__read(size_t count, H5D_dset_io_info_t *dset_info) char fake_char; /* Temporary variable for NULL buffer pointers */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE #ifdef H5_HAVE_PARALLEL /* Reset the actual io mode properties to the default values in case @@ -530,7 +530,7 @@ H5D__write(size_t count, H5D_dset_io_info_t *dset_info) char fake_char; /* Temporary variable for NULL buffer pointers */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE #ifdef H5_HAVE_PARALLEL /* Reset the actual io mode properties to the default values in case diff --git a/src/H5Dlayout.c b/src/H5Dlayout.c index 0e50d110308..26903b2408d 100644 --- a/src/H5Dlayout.c +++ b/src/H5Dlayout.c @@ -285,7 +285,7 @@ H5D__layout_set_version(H5F_t *f, H5O_layout_t *layout) unsigned version; /* Message version */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE /* Sanity check */ assert(layout); diff --git a/src/H5FDint.c b/src/H5FDint.c index 4456ae485fa..07761742c13 100644 --- a/src/H5FDint.c +++ b/src/H5FDint.c @@ -850,7 +850,7 @@ H5FD__read_selection_translate(uint32_t skip_vector_cb, H5FD_t *file, H5FD_mem_t size_t vec_arr_nused = 0; herr_t ret_value = SUCCEED; - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE /* Sanity checks */ assert(file); @@ -1542,7 +1542,7 @@ H5FD__write_selection_translate(uint32_t skip_vector_cb, H5FD_t *file, H5FD_mem_ size_t vec_arr_nused = 0; herr_t ret_value = SUCCEED; - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE /* Sanity checks */ assert(file); diff --git a/src/H5FDmpio.c b/src/H5FDmpio.c index 2d811ac68cc..cce5d2ee1ff 100644 --- a/src/H5FDmpio.c +++ b/src/H5FDmpio.c @@ -3904,7 +3904,7 @@ H5FD__mpio_ctl(H5FD_t *_file, uint64_t op_code, uint64_t flags, const void H5_AT H5FD_mpio_t *file = (H5FD_mpio_t *)_file; herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE /* Sanity checks */ assert(file); diff --git a/src/H5FDtest.c b/src/H5FDtest.c index d5bc634c23a..086d41f7808 100644 --- a/src/H5FDtest.c +++ b/src/H5FDtest.c @@ -88,7 +88,7 @@ H5FD__supports_swmr_test(const char *vfd_name) { bool ret_value = false; - FUNC_ENTER_NOAPI_NOINIT_NOERR + FUNC_ENTER_PACKAGE_NOERR if (!vfd_name) vfd_name = getenv("HDF5_TEST_DRIVER"); diff --git a/src/H5FL.c b/src/H5FL.c index 9430a109107..087017e03e9 100644 --- a/src/H5FL.c +++ b/src/H5FL.c @@ -1941,7 +1941,7 @@ H5FL__fac_gc(void) H5FL_fac_gc_node_t *gc_node; /* Pointer into the list of things to garbage collect */ herr_t ret_value = SUCCEED; /* return value*/ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_PACKAGE /* Walk through all the free lists, free()'ing the nodes */ gc_node = H5FL_fac_gc_head.first; diff --git a/src/H5FScache.c b/src/H5FScache.c index 8f730c3f2f4..a9b430d3698 100644 --- a/src/H5FScache.c +++ b/src/H5FScache.c @@ -766,7 +766,7 @@ H5FS__cache_hdr_notify(H5AC_notify_action_t action, void *_thing) H5FS_t *fspace = (H5FS_t *)_thing; /* Pointer to the object */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_PACKAGE /* Sanity check */ assert(fspace); diff --git a/src/H5FSint.c b/src/H5FSint.c index 7ccd7584a66..011a9822563 100644 --- a/src/H5FSint.c +++ b/src/H5FSint.c @@ -100,7 +100,7 @@ H5FS__create_flush_depend(H5AC_info_t *parent_entry, H5AC_info_t *child_entry) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_PACKAGE /* Sanity check */ assert(parent_entry); @@ -128,7 +128,7 @@ H5FS__destroy_flush_depend(H5AC_info_t *parent_entry, H5AC_info_t *child_entry) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_PACKAGE /* Sanity check */ assert(parent_entry); diff --git a/src/H5Faccum.c b/src/H5Faccum.c index e73ba110182..4d713576ca6 100644 --- a/src/H5Faccum.c +++ b/src/H5Faccum.c @@ -405,7 +405,7 @@ H5F__accum_write(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, size_t s H5FD_t *file; /* File driver pointer */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE /* Sanity checks */ assert(f_sh); @@ -1004,7 +1004,7 @@ H5F__accum_flush(H5F_shared_t *f_sh) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE /* Sanity checks */ assert(f_sh); diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h index 8509a997f79..1894a49cd1b 100644 --- a/src/H5Fprivate.h +++ b/src/H5Fprivate.h @@ -124,7 +124,7 @@ typedef struct H5F_t H5F_t; #define H5F_HAS_FEATURE(F, FL) (H5F_has_feature(F, FL)) #define H5F_BASE_ADDR(F) (H5F_get_base_addr(F)) #define H5F_SYM_LEAF_K(F) (H5F_sym_leaf_k(F)) -#define H5F_KVALUE(F, T) (H5F_Kvalue(F, T)) +#define H5F_KVALUE(F, T) (H5F_kvalue(F, T)) #define H5F_NREFS(F) (H5F_get_nrefs(F)) #define H5F_SIZEOF_ADDR(F) (H5F_sizeof_addr(F)) #define H5F_SIZEOF_SIZE(F) (H5F_sizeof_size(F)) @@ -532,7 +532,7 @@ H5_DLL uint64_t H5F_get_rfic_flags(const H5F_t *f); /* Functions than retrieve values set/cached from the superblock/FCPL */ H5_DLL haddr_t H5F_get_base_addr(const H5F_t *f); H5_DLL unsigned H5F_sym_leaf_k(const H5F_t *f); -H5_DLL unsigned H5F_Kvalue(const H5F_t *f, const struct H5B_class_t *type); +H5_DLL unsigned H5F_kvalue(const H5F_t *f, const struct H5B_class_t *type); H5_DLL unsigned H5F_get_nrefs(const H5F_t *f); H5_DLL uint8_t H5F_sizeof_addr(const H5F_t *f); H5_DLL uint8_t H5F_sizeof_size(const H5F_t *f); diff --git a/src/H5Fquery.c b/src/H5Fquery.c index 89d2e70f0bc..8d02a9dc9ab 100644 --- a/src/H5Fquery.c +++ b/src/H5Fquery.c @@ -515,7 +515,7 @@ H5F_get_min_dset_ohdr(const H5F_t *f) } /* end H5F_get_min_dset_ohdr */ /*------------------------------------------------------------------------- - * Function: H5F_Kvalue + * Function: H5F_kvalue * * Purpose: Replaced a macro to retrieve a B-tree key value for a certain * type, now that the generic properties are being used to store @@ -527,7 +527,7 @@ H5F_get_min_dset_ohdr(const H5F_t *f) *------------------------------------------------------------------------- */ unsigned -H5F_Kvalue(const H5F_t *f, const H5B_class_t *type) +H5F_kvalue(const H5F_t *f, const H5B_class_t *type) { /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */ FUNC_ENTER_NOAPI_NOINIT_NOERR @@ -538,7 +538,7 @@ H5F_Kvalue(const H5F_t *f, const H5B_class_t *type) assert(type); FUNC_LEAVE_NOAPI(f->shared->sblock->btree_k[type->id]) -} /* end H5F_Kvalue() */ +} /* end H5F_kvalue() */ /*------------------------------------------------------------------------- * Function: H5F_get_nrefs diff --git a/src/H5Gstab.c b/src/H5Gstab.c index a101315a406..c86406422b7 100644 --- a/src/H5Gstab.c +++ b/src/H5Gstab.c @@ -685,7 +685,7 @@ H5G__stab_get_name_by_idx(const H5O_loc_t *oloc, H5_iter_order_t order, hsize_t /* Portably clear udata struct (before FUNC_ENTER) */ memset(&udata, 0, sizeof(udata)); - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE /* Sanity check */ assert(oloc); diff --git a/src/H5HG.c b/src/H5HG.c index d28c457d6cb..0354489f28d 100644 --- a/src/H5HG.c +++ b/src/H5HG.c @@ -841,7 +841,7 @@ H5HG__free(H5HG_heap_t *heap) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE /* Check arguments */ assert(heap); diff --git a/src/H5Oattr.c b/src/H5Oattr.c index a671d507f27..1f11892e2f1 100644 --- a/src/H5Oattr.c +++ b/src/H5Oattr.c @@ -564,7 +564,7 @@ H5O__attr_delete(H5F_t *f, H5O_t *oh, void *_mesg) H5A_t *attr = (H5A_t *)_mesg; herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_PACKAGE /* check args */ assert(f); diff --git a/src/H5Oattribute.c b/src/H5Oattribute.c index fd8d5a4b732..39637e48669 100644 --- a/src/H5Oattribute.c +++ b/src/H5Oattribute.c @@ -201,7 +201,7 @@ H5O__attr_create(const H5O_loc_t *loc, H5A_t *attr) htri_t shared_mesg; /* Should this message be stored in the Shared Message table? */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_PACKAGE /* Check arguments */ assert(loc); diff --git a/src/H5Oshared.h b/src/H5Oshared.h index 86c22265313..a7b3fd4d442 100644 --- a/src/H5Oshared.h +++ b/src/H5Oshared.h @@ -42,7 +42,8 @@ H5O_SHARED_DECODE(H5F_t *f, H5O_t *open_oh, unsigned mesg_flags, unsigned *iofla { void *ret_value = NULL; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + /* H5O_SHARED_DECODE will be defined as a package function */ + FUNC_ENTER_PACKAGE #ifndef H5O_SHARED_TYPE #error "Need to define H5O_SHARED_TYPE macro!" @@ -97,7 +98,8 @@ H5O_SHARED_ENCODE(H5F_t *f, bool disable_shared, size_t H5_ATTR_UNUSED p_size, u (const H5O_shared_t *)_mesg; /* Pointer to shared message portion of actual message */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + /* H5O_SHARED_ENCODE will be defined as a package function */ + FUNC_ENTER_PACKAGE #ifndef H5O_SHARED_TYPE #error "Need to define H5O_SHARED_TYPE macro!" @@ -148,7 +150,8 @@ H5O_SHARED_SIZE(const H5F_t *f, bool disable_shared, const void *_mesg) (const H5O_shared_t *)_mesg; /* Pointer to shared message portion of actual message */ size_t ret_value = 0; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + /* H5O_SHARED_SIZE will be defined as a package function */ + FUNC_ENTER_PACKAGE #ifndef H5O_SHARED_TYPE #error "Need to define H5O_SHARED_TYPE macro!" @@ -195,6 +198,7 @@ H5O_SHARED_DELETE(H5F_t *f, H5O_t *open_oh, void *_mesg) H5O_shared_t *sh_mesg = (H5O_shared_t *)_mesg; /* Pointer to shared message portion of actual message */ herr_t ret_value = SUCCEED; /* Return value */ + /* H5O_SHARED_DELETE will be defined as a package function */ FUNC_ENTER_PACKAGE #ifndef H5O_SHARED_TYPE @@ -241,6 +245,7 @@ H5O_SHARED_LINK(H5F_t *f, H5O_t *open_oh, void *_mesg) H5O_shared_t *sh_mesg = (H5O_shared_t *)_mesg; /* Pointer to shared message portion of actual message */ herr_t ret_value = SUCCEED; /* Return value */ + /* H5O_SHARED_LINK will be defined as a package function */ FUNC_ENTER_PACKAGE #ifndef H5O_SHARED_TYPE @@ -287,6 +292,7 @@ H5O_SHARED_COPY_FILE(H5F_t *file_src, void *_native_src, H5F_t *file_dst, bool * void *dst_mesg = NULL; /* Destination message */ void *ret_value = NULL; /* Return value */ + /* H5O_SHARED_COPY_FILE will be defined as a package function */ FUNC_ENTER_PACKAGE #ifndef H5O_SHARED_TYPE @@ -347,7 +353,8 @@ H5O_SHARED_POST_COPY_FILE(const H5O_loc_t H5_ATTR_NDEBUG_UNUSED *oloc_src, const H5O_shared_t *shared_dst = (H5O_shared_t *)mesg_dst; /* Alias to shared info in native destination */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + /* H5O_SHARED_POST_COPY_FILE will be defined as a package function */ + FUNC_ENTER_PACKAGE assert(oloc_src->file); assert(oloc_dst->file); @@ -409,7 +416,8 @@ H5O_SHARED_DEBUG(H5F_t *f, const void *_mesg, FILE *stream, int indent, int fwid (const H5O_shared_t *)_mesg; /* Pointer to shared message portion of actual message */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + /* H5O_SHARED_DEBUG will be defined as a package function */ + FUNC_ENTER_PACKAGE #ifndef H5O_SHARED_TYPE #error "Need to define H5O_SHARED_TYPE macro!" diff --git a/src/H5Pint.c b/src/H5Pint.c index da6fbc89274..3ff94a63d3d 100644 --- a/src/H5Pint.c +++ b/src/H5Pint.c @@ -5524,7 +5524,7 @@ H5P__close_class(H5P_genclass_t *pclass) { herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_PACKAGE assert(pclass); diff --git a/src/H5Rint.c b/src/H5Rint.c index 85282b1d4d6..30b92a380fd 100644 --- a/src/H5Rint.c +++ b/src/H5Rint.c @@ -159,7 +159,7 @@ DESCRIPTION herr_t H5R__init_package(void) { - FUNC_ENTER_NOAPI_NOINIT_NOERR + FUNC_ENTER_PACKAGE_NOERR /* Sanity check, if assert fails, H5R_REF_BUF_SIZE must be increased */ HDcompile_assert(sizeof(H5R_ref_priv_t) <= H5R_REF_BUF_SIZE); diff --git a/src/H5T.c b/src/H5T.c index d9ef9ea4587..b5e23452caf 100644 --- a/src/H5T.c +++ b/src/H5T.c @@ -879,7 +879,7 @@ H5T__init_package(void) #endif herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_PACKAGE /* Initialize the ID group for the file IDs */ if (H5I_register_type(H5I_DATATYPE_CLS) < 0) diff --git a/src/H5TSc11.c b/src/H5TSc11.c index e5f6732030d..016a066c1dd 100644 --- a/src/H5TSc11.c +++ b/src/H5TSc11.c @@ -73,7 +73,7 @@ void H5TS__c11_first_thread_init(void) { - FUNC_ENTER_NOAPI_NAMECHECK_ONLY + FUNC_ENTER_PACKAGE_NAMECHECK_ONLY /* Initialize H5TS package */ H5TS__init(); diff --git a/src/H5TSint.c b/src/H5TSint.c index 6f0c49648e2..503e21cb1e8 100644 --- a/src/H5TSint.c +++ b/src/H5TSint.c @@ -251,7 +251,7 @@ H5TS__api_mutex_release(unsigned *lock_count) { herr_t ret_value = SUCCEED; - FUNC_ENTER_NOAPI_NAMECHECK_ONLY + FUNC_ENTER_PACKAGE_NAMECHECK_ONLY /* Return the current lock count */ *lock_count = H5TS_api_info_p.lock_count; diff --git a/src/H5TSpthread.c b/src/H5TSpthread.c index 11ca704c200..56715654694 100644 --- a/src/H5TSpthread.c +++ b/src/H5TSpthread.c @@ -73,7 +73,7 @@ void H5TS__pthread_first_thread_init(void) { - FUNC_ENTER_NOAPI_NAMECHECK_ONLY + FUNC_ENTER_PACKAGE_NAMECHECK_ONLY /* Initialize H5TS package */ H5TS__init(); diff --git a/src/H5TSrec_rwlock.c b/src/H5TSrec_rwlock.c index 43528c2afa3..6c8f1a76bd9 100644 --- a/src/H5TSrec_rwlock.c +++ b/src/H5TSrec_rwlock.c @@ -539,7 +539,7 @@ H5TS__rec_rwlock_wrlock(H5TS_rec_rwlock_t *lock) bool have_mutex = false; herr_t ret_value = SUCCEED; - FUNC_ENTER_NOAPI_NAMECHECK_ONLY + FUNC_ENTER_PACKAGE_NAMECHECK_ONLY if (H5_UNLIKELY(NULL == lock)) HGOTO_DONE(FAIL); @@ -619,7 +619,7 @@ H5TS__rec_rwlock_rdunlock(H5TS_rec_rwlock_t *lock) bool have_mutex = false; herr_t ret_value = SUCCEED; - FUNC_ENTER_NOAPI_NAMECHECK_ONLY + FUNC_ENTER_PACKAGE_NAMECHECK_ONLY if (H5_UNLIKELY(NULL == lock)) HGOTO_DONE(FAIL); @@ -694,7 +694,7 @@ H5TS__rec_rwlock_wrunlock(H5TS_rec_rwlock_t *lock) bool have_mutex = false; herr_t ret_value = SUCCEED; - FUNC_ENTER_NOAPI_NAMECHECK_ONLY + FUNC_ENTER_PACKAGE_NAMECHECK_ONLY if (H5_UNLIKELY(NULL == lock)) HGOTO_DONE(FAIL); diff --git a/src/H5TSwin.c b/src/H5TSwin.c index c1f281360c1..b82f364bdd2 100644 --- a/src/H5TSwin.c +++ b/src/H5TSwin.c @@ -79,7 +79,7 @@ H5TS__win32_process_enter(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *lpContex) { BOOL ret_value = TRUE; - FUNC_ENTER_NOAPI_NAMECHECK_ONLY + FUNC_ENTER_PACKAGE_NAMECHECK_ONLY /* Initialize H5TS package */ if (H5_UNLIKELY(H5TS__init() < 0)) @@ -102,7 +102,7 @@ H5TS__win32_process_enter(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *lpContex) static herr_t H5TS__win32_thread_enter(void) { - FUNC_ENTER_NOAPI_NAMECHECK_ONLY + FUNC_ENTER_PACKAGE_NAMECHECK_ONLY /* Currently a placeholder function. TLS setup is performed * elsewhere in the library. @@ -129,7 +129,7 @@ H5TS__win32_thread_exit(void) { herr_t ret_value = SUCCEED; - FUNC_ENTER_NOAPI_NAMECHECK_ONLY + FUNC_ENTER_PACKAGE_NAMECHECK_ONLY /* Windows uses a different thread local storage mechanism which does * not support auto-freeing like pthreads' keys. diff --git a/src/H5Tvlen.c b/src/H5Tvlen.c index eda525be565..98b2bb52843 100644 --- a/src/H5Tvlen.c +++ b/src/H5Tvlen.c @@ -934,7 +934,7 @@ H5T__vlen_reclaim(void *elem, const H5T_t *dt, H5T_vlen_alloc_info_t *alloc_info void *free_info; /* Free info */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE /* Sanity checks */ assert(elem); diff --git a/src/H5VLnative.c b/src/H5VLnative.c index d11337f9e71..d4bb31d9aea 100644 --- a/src/H5VLnative.c +++ b/src/H5VLnative.c @@ -344,7 +344,7 @@ H5VL__native_get_file_addr_len(void *obj, H5I_type_t obj_type, size_t *addr_len) H5F_t *file = NULL; /* File struct pointer */ herr_t ret_value = SUCCEED; - FUNC_ENTER_NOAPI(FAIL) + FUNC_ENTER_PACKAGE /* check arguments */ assert(obj); diff --git a/src/H5private.h b/src/H5private.h index 534962dfba4..7fa2cc453c0 100644 --- a/src/H5private.h +++ b/src/H5private.h @@ -1322,14 +1322,14 @@ extern char H5_lib_vers_info_g[]; /* Use this macro for all "normal" non-API functions */ #define FUNC_ENTER_NOAPI(err) \ { \ - FUNC_ENTER_COMMON(!H5_IS_API(__func__)); \ + FUNC_ENTER_COMMON(H5_IS_PRIV(__func__)); \ FUNC_ENTER_NOAPI_INIT(err) \ if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { /* Use this macro for all non-API functions, which propagate errors, but don't issue them */ #define FUNC_ENTER_NOAPI_NOERR \ { \ - FUNC_ENTER_COMMON_NOERR(!H5_IS_API(__func__)); \ + FUNC_ENTER_COMMON_NOERR(H5_IS_PRIV(__func__)); \ FUNC_ENTER_NOAPI_INIT(-) \ if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { @@ -1343,7 +1343,7 @@ extern char H5_lib_vers_info_g[]; */ #define FUNC_ENTER_NOAPI_NOINIT \ { \ - FUNC_ENTER_COMMON(!H5_IS_API(__func__)); \ + FUNC_ENTER_COMMON(H5_IS_PRIV(__func__)); \ if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { /* @@ -1357,7 +1357,7 @@ extern char H5_lib_vers_info_g[]; */ #define FUNC_ENTER_NOAPI_NOINIT_NOERR \ { \ - FUNC_ENTER_COMMON_NOERR(!H5_IS_API(__func__)); \ + FUNC_ENTER_COMMON_NOERR(H5_IS_PRIV(__func__)); \ if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { /* @@ -1368,7 +1368,7 @@ extern char H5_lib_vers_info_g[]; */ #define FUNC_ENTER_NOAPI_NAMECHECK_ONLY \ { \ - FUNC_ENTER_COMMON_NOERR(!H5_IS_API(__func__)); + FUNC_ENTER_COMMON_NOERR(H5_IS_PRIV(__func__)); /* Use the following two macros as replacements for the FUNC_ENTER_NOAPI * and FUNC_ENTER_NOAPI_NOINIT macros when the function needs to set @@ -1378,7 +1378,7 @@ extern char H5_lib_vers_info_g[]; { \ haddr_t prev_tag = HADDR_UNDEF; \ \ - FUNC_ENTER_COMMON(!H5_IS_API(__func__)); \ + FUNC_ENTER_COMMON(H5_IS_PRIV(__func__)); \ H5AC_tag(tag, &prev_tag); \ FUNC_ENTER_NOAPI_INIT(err) \ if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { @@ -1387,7 +1387,7 @@ extern char H5_lib_vers_info_g[]; { \ haddr_t prev_tag = HADDR_UNDEF; \ \ - FUNC_ENTER_COMMON(!H5_IS_API(__func__)); \ + FUNC_ENTER_COMMON(H5_IS_PRIV(__func__)); \ H5AC_tag(tag, &prev_tag); \ if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { From cad28e9659c96dbcde221dbd9b41f04b805acafb Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Mon, 28 Oct 2024 11:56:31 -0500 Subject: [PATCH 054/179] Add workflow step to test expected test failures (#5023) --- .github/workflows/nvhpc-cmake.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/nvhpc-cmake.yml b/.github/workflows/nvhpc-cmake.yml index 3dbefa22861..dbdcb365ec9 100644 --- a/.github/workflows/nvhpc-cmake.yml +++ b/.github/workflows/nvhpc-cmake.yml @@ -76,6 +76,13 @@ jobs: ctest . -E "MPI_TEST|H5TEST-dt_arith|H5TEST-dtransform" --parallel 2 -C ${{ inputs.build_mode }} -V working-directory: ${{ runner.workspace }}/build + - name: CMake Run Expected To Fail Tests + shell: bash + run: | + ctest . -R "H5TEST-dt_arith|H5TEST-dtransform" --parallel 2 -C ${{ inputs.build_mode }} -V + working-directory: ${{ runner.workspace }}/build + continue-on-error: true + - name: CMake Run Parallel Tests shell: bash run: | From f4dbb810c15755113bedb74a5e82d63abac5d37d Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Mon, 28 Oct 2024 18:28:29 -0500 Subject: [PATCH 055/179] Add msys2 workflow for CMake (#4991) Also updates CMake configure checks to build HDF5 w/ MSYS2 --- .github/workflows/cmake.yml | 16 ++++-- .github/workflows/msys2-cmake.yml | 91 ++++++++++++++++++++++++++++++ config/cmake/ConfigureChecks.cmake | 9 ++- release_docs/RELEASE.txt | 12 ++++ 4 files changed, 121 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/msys2-cmake.yml diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index d57978d5fcc..cd941e6a7a1 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -109,8 +109,14 @@ 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" + # call-release-cmake-julia: + # name: "CMake Julia Workflows" + # uses: ./.github/workflows/julia-cmake.yml + # with: + # build_mode: "Release" + + call-release-cmake-msys2: + name: "CMake Msys2 Workflows" + uses: ./.github/workflows/msys2-cmake.yml + with: + build_mode: "Release" \ No newline at end of file diff --git a/.github/workflows/msys2-cmake.yml b/.github/workflows/msys2-cmake.yml new file mode 100644 index 00000000000..7cbd7890f1c --- /dev/null +++ b/.github/workflows/msys2-cmake.yml @@ -0,0 +1,91 @@ +name: hdf5 dev CMake MSys2 CI + +# Triggers the workflow on a call from another workflow +on: + workflow_call: + inputs: + build_mode: + description: "release vs. debug build" + required: true + type: string + +permissions: + contents: read + +jobs: + + CMake_build_and_test: + + # The type of runner that the job will run on + runs-on: windows-latest + strategy: + matrix: + include: + - { icon: '⬛', sys: mingw32 } + - { icon: '🟦', sys: mingw64 } + - { icon: '🟨', sys: ucrt64 } + - { icon: '🟧', sys: clang64 } + name: ${{ matrix.icon }} MSYS2-${{ matrix.sys }}-${{ inputs.build_mode }} + defaults: + run: + shell: msys2 {0} + + steps: + - name: '${{ matrix.icon }} Setup MSYS2' + uses: msys2/setup-msys2@v2 + with: + msystem: ${{matrix.sys}} + update: true + install: >- + base-devel + git + gcc + make + development + pacboy: >- + toolchain:p + cmake:p + ninja:p + + - name: Set git to use LF + run: | + git config --global core.autocrlf input + + - name: Get Sources + uses: actions/checkout@v4.1.1 + + - name: CMake Configure + 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 }} \ + -DCMAKE_TOOLCHAIN_FILE="" \ + -DHDF5_GENERATE_HEADERS=OFF \ + -DBUILD_SHARED_LIBS=ON \ + -DHDF5_ENABLE_ALL_WARNINGS=ON \ + -DHDF5_ENABLE_PARALLEL:BOOL=OFF \ + -DHDF5_BUILD_CPP_LIB:BOOL=OFF \ + -DHDF5_BUILD_FORTRAN=OFF \ + -DHDF5_BUILD_JAVA=OFF \ + -DHDF5_BUILD_DOC=OFF \ + -DLIBAEC_USE_LOCALCONTENT=OFF \ + -DZLIB_USE_LOCALCONTENT=OFF \ + $GITHUB_WORKSPACE + + - name: CMake Build + run: | + cmake --build . --parallel 3 --config ${{ inputs.build_mode }} + working-directory: ${{ runner.workspace }}/build + + - name: CMake Run Tests + run: | + ctest . --parallel 2 -C ${{ inputs.build_mode }} -V -E "tfloatsattrs|testhdf5-base|cache_api|dt_arith|H5TEST-dtypes|err_compat" + working-directory: ${{ runner.workspace }}/build + + - name: CMake Run Expected to Fail Tests + run: | + ctest . --parallel 2 -C ${{ inputs.build_mode }} -V -R "tfloatsattrs|testhdf5-base|cache_api|dt_arith|H5TEST-dtypes|err_compat" + working-directory: ${{ runner.workspace }}/build + continue-on-error: true diff --git a/config/cmake/ConfigureChecks.cmake b/config/cmake/ConfigureChecks.cmake index df6c760f0cc..ed53feae60b 100644 --- a/config/cmake/ConfigureChecks.cmake +++ b/config/cmake/ConfigureChecks.cmake @@ -140,7 +140,7 @@ else () set(C_INCLUDE_QUADMATH_H 0) endif () -if (CYGWIN) +if (MINGW OR CYGWIN) set (CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_GNU_SOURCE") add_definitions ("-D_GNU_SOURCE") endif () @@ -399,7 +399,12 @@ endif () #----------------------------------------------------------------------------- # Check for some functions that are used # -CHECK_FUNCTION_EXISTS (alarm ${HDF_PREFIX}_HAVE_ALARM) +if (NOT MINGW) + # alarm(2) support is spotty in MinGW, so assume it doesn't exist + # + # https://lists.gnu.org/archive/html/bug-gnulib/2013-03/msg00040.html + CHECK_FUNCTION_EXISTS (alarm ${HDF_PREFIX}_HAVE_ALARM) +endif () CHECK_FUNCTION_EXISTS (fcntl ${HDF_PREFIX}_HAVE_FCNTL) CHECK_FUNCTION_EXISTS (flock ${HDF_PREFIX}_HAVE_FLOCK) CHECK_FUNCTION_EXISTS (fork ${HDF_PREFIX}_HAVE_FORK) diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 897adaf039f..1545bdc4402 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -47,6 +47,18 @@ New Features Configuration: ------------- + - Added support for MinGW + MSYS2 when building with CMake + + We previously added support for this to the Autotools and the appropriate + configure-time checks have been added to CMake. + + CMake + MinGW + MSYS2 is now tested with the following environments: + + * mingw32 + * mingw64 + * ucrt64 + * clang64 + - Added CMake build mode flags to the libhdf5.settings file Flags from the CMake build mode (e.g., optimization) are not a part of From 5bdd379a645c1a372ab0bd2e208a1cf960f25acc Mon Sep 17 00:00:00 2001 From: bmribler <39579120+bmribler@users.noreply.github.com> Date: Tue, 29 Oct 2024 03:53:50 -0400 Subject: [PATCH 056/179] Fix segfault in h5dump caused by corrupted btree node level (#5002) Added another argument, expected node level, to H5B__iterate_helper to pass down to H5B__cache_deserialize for checking the decoded node level. When this expected level is not known, the new macro H5_UNKNOWN_NODELEVEL (-1) will be used for not checking the level. Fixes GH-4432 --- src/H5B.c | 18 ++++++++++++++---- src/H5Bcache.c | 11 +++++------ src/H5Bpkg.h | 6 ++++++ 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/H5B.c b/src/H5B.c index 9969e08b0c9..d87f8828074 100644 --- a/src/H5B.c +++ b/src/H5B.c @@ -309,6 +309,7 @@ H5B_find(H5F_t *f, const H5B_class_t *type, haddr_t addr, bool *found, void *uda cache_udata.f = f; cache_udata.type = type; cache_udata.rc_shared = rc_shared; + cache_udata.exp_level = H5B_UNKNOWN_NODELEVEL; if (NULL == (bt = (H5B_t *)H5AC_protect(f, H5AC_BT, addr, &cache_udata, H5AC__READ_ONLY_FLAG))) HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree node"); @@ -428,6 +429,7 @@ H5B__split(H5F_t *f, H5B_ins_ud_t *bt_ud, unsigned idx, void *udata, H5B_ins_ud_ cache_udata.f = f; cache_udata.type = shared->type; cache_udata.rc_shared = bt_ud->bt->rc_shared; + cache_udata.exp_level = H5B_UNKNOWN_NODELEVEL; if (NULL == (split_bt_ud->bt = (H5B_t *)H5AC_protect(f, H5AC_BT, split_bt_ud->addr, &cache_udata, H5AC__NO_FLAGS_SET))) HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree"); @@ -535,6 +537,7 @@ H5B_insert(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata) cache_udata.f = f; cache_udata.type = type; cache_udata.rc_shared = rc_shared; + cache_udata.exp_level = H5B_UNKNOWN_NODELEVEL; bt_ud.addr = addr; if (NULL == (bt_ud.bt = (H5B_t *)H5AC_protect(f, H5AC_BT, addr, &cache_udata, H5AC__NO_FLAGS_SET))) HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to locate root of B-tree"); @@ -792,6 +795,7 @@ H5B__insert_helper(H5F_t *f, H5B_ins_ud_t *bt_ud, const H5B_class_t *type, uint8 cache_udata.f = f; cache_udata.type = type; cache_udata.rc_shared = rc_shared; + cache_udata.exp_level = H5B_UNKNOWN_NODELEVEL; if (0 == bt->nchildren) { /* @@ -1048,7 +1052,8 @@ H5B__insert_helper(H5F_t *f, H5B_ins_ud_t *bt_ud, const H5B_class_t *type, uint8 *------------------------------------------------------------------------- */ static herr_t -H5B__iterate_helper(H5F_t *f, const H5B_class_t *type, haddr_t addr, H5B_operator_t op, void *udata) +H5B__iterate_helper(H5F_t *f, const H5B_class_t *type, haddr_t addr, int exp_level, H5B_operator_t op, + void *udata) { H5B_t *bt = NULL; /* Pointer to current B-tree node */ H5UC_t *rc_shared; /* Ref-counted shared info */ @@ -1078,13 +1083,14 @@ H5B__iterate_helper(H5F_t *f, const H5B_class_t *type, haddr_t addr, H5B_operato cache_udata.f = f; cache_udata.type = type; cache_udata.rc_shared = rc_shared; + cache_udata.exp_level = exp_level; if (NULL == (bt = (H5B_t *)H5AC_protect(f, H5AC_BT, addr, &cache_udata, H5AC__READ_ONLY_FLAG))) HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, H5_ITER_ERROR, "unable to load B-tree node"); /* Iterate over node's children */ for (u = 0; u < bt->nchildren && ret_value == H5_ITER_CONT; u++) { if (bt->level > 0) - ret_value = H5B__iterate_helper(f, type, bt->child[u], op, udata); + ret_value = H5B__iterate_helper(f, type, bt->child[u], (int)(bt->level - 1), op, udata); else ret_value = (*op)(f, H5B_NKEY(bt, shared, u), bt->child[u], H5B_NKEY(bt, shared, u + 1), udata); if (ret_value < 0) @@ -1125,7 +1131,7 @@ H5B_iterate(H5F_t *f, const H5B_class_t *type, haddr_t addr, H5B_operator_t op, assert(udata); /* Iterate over the B-tree records */ - if ((ret_value = H5B__iterate_helper(f, type, addr, op, udata)) < 0) + if ((ret_value = H5B__iterate_helper(f, type, addr, H5B_UNKNOWN_NODELEVEL, op, udata)) < 0) HERROR(H5E_BTREE, H5E_BADITER, "B-tree iteration failed"); FUNC_LEAVE_NOAPI(ret_value) @@ -1191,6 +1197,7 @@ H5B__remove_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type, int level, u cache_udata.f = f; cache_udata.type = type; cache_udata.rc_shared = rc_shared; + cache_udata.exp_level = H5B_UNKNOWN_NODELEVEL; if (NULL == (bt = (H5B_t *)H5AC_protect(f, H5AC_BT, addr, &cache_udata, H5AC__NO_FLAGS_SET))) HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, H5B_INS_ERROR, "unable to load B-tree node"); @@ -1543,6 +1550,7 @@ H5B_delete(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata) cache_udata.f = f; cache_udata.type = type; cache_udata.rc_shared = rc_shared; + cache_udata.exp_level = H5B_UNKNOWN_NODELEVEL; if (NULL == (bt = (H5B_t *)H5AC_protect(f, H5AC_BT, addr, &cache_udata, H5AC__NO_FLAGS_SET))) HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree node"); @@ -1783,6 +1791,7 @@ H5B__get_info_helper(H5F_t *f, const H5B_class_t *type, haddr_t addr, const H5B_ cache_udata.f = f; cache_udata.type = type; cache_udata.rc_shared = rc_shared; + cache_udata.exp_level = H5B_UNKNOWN_NODELEVEL; if (NULL == (bt = (H5B_t *)H5AC_protect(f, H5AC_BT, addr, &cache_udata, H5AC__READ_ONLY_FLAG))) HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree node"); @@ -1878,7 +1887,7 @@ H5B_get_info(H5F_t *f, const H5B_class_t *type, haddr_t addr, H5B_info_t *bt_inf /* Iterate over the B-tree records, making any "leaf" callbacks */ /* (Only if operator defined) */ if (op) - if ((ret_value = H5B__iterate_helper(f, type, addr, op, udata)) < 0) + if ((ret_value = H5B__iterate_helper(f, type, addr, H5B_UNKNOWN_NODELEVEL, op, udata)) < 0) HERROR(H5E_BTREE, H5E_BADITER, "B-tree iteration failed"); done: @@ -1924,6 +1933,7 @@ H5B_valid(H5F_t *f, const H5B_class_t *type, haddr_t addr) cache_udata.f = f; cache_udata.type = type; cache_udata.rc_shared = rc_shared; + cache_udata.exp_level = H5B_UNKNOWN_NODELEVEL; if (NULL == (bt = (H5B_t *)H5AC_protect(f, H5AC_BT, addr, &cache_udata, H5AC__READ_ONLY_FLAG))) HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree node"); diff --git a/src/H5Bcache.c b/src/H5Bcache.c index 8d3655dadff..a832425c78b 100644 --- a/src/H5Bcache.c +++ b/src/H5Bcache.c @@ -170,6 +170,11 @@ H5B__cache_deserialize(const void *_image, size_t len, void *_udata, bool H5_ATT HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, NULL, "incorrect B-tree node type"); bt->level = *image++; + /* Check in case of level is corrupted, if expected level is known */ + if (udata->exp_level != H5B_UNKNOWN_NODELEVEL) + if (bt->level != (unsigned)udata->exp_level) + HGOTO_ERROR(H5E_BTREE, H5E_BADVALUE, NULL, "level is not as expected, possibly corrupted"); + /* Entries used */ if (H5_IS_BUFFER_OVERFLOW(image, 2, p_end)) HGOTO_ERROR(H5E_BTREE, H5E_OVERFLOW, NULL, "ran off end of input buffer while decoding"); @@ -179,12 +184,6 @@ H5B__cache_deserialize(const void *_image, size_t len, void *_udata, bool H5_ATT if (bt->nchildren > shared->two_k) HGOTO_ERROR(H5E_BTREE, H5E_BADVALUE, NULL, "number of children is greater than maximum"); - /* Check in case of level is corrupted, it is unreasonable for level to be - larger than the number of entries */ - if (bt->level > bt->nchildren) - HGOTO_ERROR(H5E_BTREE, H5E_BADVALUE, NULL, - "level cannot be greater than the number of children, possibly corrupted"); - /* Sibling pointers */ if (H5_IS_BUFFER_OVERFLOW(image, H5F_sizeof_addr(udata->f), p_end)) HGOTO_ERROR(H5E_BTREE, H5E_OVERFLOW, NULL, "ran off end of input buffer while decoding"); diff --git a/src/H5Bpkg.h b/src/H5Bpkg.h index 4f61614a9e0..b56a6f3a7e9 100644 --- a/src/H5Bpkg.h +++ b/src/H5Bpkg.h @@ -39,6 +39,11 @@ /* # of bits for node level: 1 byte */ #define LEVEL_BITS 8 +/* Indicates that the level of the current node is unknown. When the level + * is known, it can be used to detect corrupted level during decoding + */ +#define H5B_UNKNOWN_NODELEVEL -1 + /****************************/ /* Package Private Typedefs */ /****************************/ @@ -60,6 +65,7 @@ typedef struct H5B_t { typedef struct H5B_cache_ud_t { H5F_t *f; /* File that B-tree node is within */ const struct H5B_class_t *type; /* Type of tree */ + int exp_level; /* Expected level of the current node */ H5UC_t *rc_shared; /* Ref-counted shared info */ } H5B_cache_ud_t; From 1cd0168e6eaa36b34288714a12bb1b9aeab5e749 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Tue, 29 Oct 2024 05:58:30 -0700 Subject: [PATCH 057/179] Rework FUNC_ENTER macros (#5024) * Initial cleanup of "prep" macros * Cleanup of initialization routines * Renamed init/push macros --- src/H5.c | 2 +- src/H5private.h | 206 +++++++++++++++++++++++++++++------------------- 2 files changed, 125 insertions(+), 83 deletions(-) diff --git a/src/H5.c b/src/H5.c index 662de79252a..b246763b490 100644 --- a/src/H5.c +++ b/src/H5.c @@ -307,7 +307,7 @@ H5_term_library(void) H5CX_node_t api_ctx = {{0}, NULL}; /* API context node to push */ /* Acquire the API lock */ - FUNC_ENTER_API_VARS + H5_API_SETUP_PUBLIC_API_VARS H5_API_LOCK /* Don't do anything if the library is already closed */ diff --git a/src/H5private.h b/src/H5private.h index 7fa2cc453c0..acf880af36d 100644 --- a/src/H5private.h +++ b/src/H5private.h @@ -1100,6 +1100,8 @@ extern char H5_lib_vers_info_g[]; #include "H5CXprivate.h" /* API Contexts */ +/* clang-format off */ + /* ---------------------------------------------------------------------------- * Macros to check function names for appropriate form. Called from the * FUNC_ENTER macros, below. @@ -1127,7 +1129,7 @@ extern char H5_lib_vers_info_g[]; * - Underscore at position 4 if position 3 is uppercase or a digit. * Handles H5XY_. */ -#define H5_IS_API(S) \ +#define H5_IS_PUBLIC(S) \ ('_' != ((const char *)S)[2] /* underscore at position 2 */ \ && '_' != ((const char *)S)[3] /* underscore at position 3 */ \ && !( /* NOT */ \ @@ -1142,7 +1144,7 @@ extern char H5_lib_vers_info_g[]; * * `S' is the name of a function which is being tested to check if it's a private function */ -#define H5_IS_PRIV(S) \ +#define H5_IS_PRIVATE(S) \ (((isdigit((int)S[1]) || isupper((int)S[1])) && '_' == S[2] && islower((int)S[3])) || \ ((isdigit((int)S[2]) || isupper((int)S[2])) && '_' == S[3] && islower((int)S[4])) || \ ((isdigit((int)S[3]) || isupper((int)S[3])) && '_' == S[4] && islower((int)S[5]))) @@ -1164,7 +1166,7 @@ extern char H5_lib_vers_info_g[]; * place once per API call per library initialization. */ #ifndef NDEBUG -#define FUNC_ENTER_CHECK_NAME(asrt) \ +#define H5_CHECK_FUNCTION_NAME(asrt) \ { \ static bool func_check = false; \ \ @@ -1179,44 +1181,46 @@ extern char H5_lib_vers_info_g[]; } \ } #else -#define FUNC_ENTER_CHECK_NAME(asrt) +#define H5_CHECK_FUNCTION_NAME(asrt) #endif /* ---------------------------------------------------------------------------- - * Macros that set things up upon entering an HDF5 API call + * Macros that things up upon entering an HDF5 API call + * + * These are all of the form `H5_API_SETUP_` * ---------------------------------------------------------------------------- */ -#define FUNC_ENTER_COMMON(asrt) \ - bool err_occurred = false; \ - \ - FUNC_ENTER_CHECK_NAME(asrt); - -#define FUNC_ENTER_COMMON_NOERR(asrt) FUNC_ENTER_CHECK_NAME(asrt); +/* Error setup for FUNC_ENTER macros that report an error */ +#define H5_API_SETUP_ERROR_HANDLING \ + bool err_occurred = false; -/* Local variables for API routines */ -#define FUNC_ENTER_API_VARS H5CANCEL_DECL +/* Entry setup for public API call variables */ +#define H5_API_SETUP_PUBLIC_API_VARS \ + H5CANCEL_DECL /* thread cancellation */ -#define FUNC_ENTER_API_COMMON \ - FUNC_ENTER_API_VARS \ - FUNC_ENTER_COMMON(H5_IS_API(__func__)); \ - H5_API_LOCK - -#define FUNC_ENTER_API_INIT(err) \ - /* Initialize the library */ \ - if (H5_UNLIKELY(!H5_INIT_GLOBAL && !H5_TERM_GLOBAL)) \ - if (H5_UNLIKELY(H5_init_library() < 0)) \ - HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, err, "library initialization failed"); \ - \ - /* Initialize the package, if appropriate */ \ - H5_PACKAGE_INIT(H5_MY_PKG_INIT, err) +/* Macro to initialize the library, if some other package hasn't already done that */ +#define H5_API_SETUP_INIT_LIBRARY(err) \ + do { \ + if (H5_UNLIKELY(!H5_INIT_GLOBAL && !H5_TERM_GLOBAL)) { \ + if (H5_UNLIKELY(H5_init_library() < 0)) \ + HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, err, "library initialization failed"); \ + } \ + /* Initialize the package, if appropriate */ \ + H5_PACKAGE_INIT(H5_MY_PKG_INIT, err) \ + } while (0) -#define FUNC_ENTER_API_PUSH(err) \ - /* Push the API context */ \ - if (H5_UNLIKELY(H5CX_push(&api_ctx) < 0)) \ - HGOTO_ERROR(H5E_FUNC, H5E_CANTSET, err, "can't set API context"); \ - else \ - api_ctx_pushed = true; +/* Macro to push the API context */ +#define H5_API_SETUP_PUSH_CONTEXT(err) \ + /* The library context variable can't go in this macro since then it might \ + * be uninitialized if the library init fails. \ + */ \ + do { \ + if (H5_UNLIKELY(H5CX_push(&api_ctx) < 0)) \ + HGOTO_ERROR(H5E_FUNC, H5E_CANTSET, err, "can't set API context"); \ + else \ + api_ctx_pushed = true; \ + } while (0) /* ---------------------------------------------------------------------------- * HDF5 API call entry macros @@ -1233,9 +1237,14 @@ extern char H5_lib_vers_info_g[]; H5CX_node_t api_ctx = {{0}, NULL}; \ bool api_ctx_pushed = false; \ \ - FUNC_ENTER_API_COMMON \ - FUNC_ENTER_API_INIT(err); \ - FUNC_ENTER_API_PUSH(err); \ + H5_CHECK_FUNCTION_NAME(H5_IS_PUBLIC(__func__)); \ + \ + H5_API_SETUP_PUBLIC_API_VARS \ + H5_API_SETUP_ERROR_HANDLING \ + H5_API_LOCK \ + H5_API_SETUP_INIT_LIBRARY(err); \ + H5_API_SETUP_PUSH_CONTEXT(err); \ + \ /* Clear thread error stack entering public functions */ \ H5E_clear_stack(); \ { @@ -1250,9 +1259,13 @@ extern char H5_lib_vers_info_g[]; H5CX_node_t api_ctx = {{0}, NULL}; \ bool api_ctx_pushed = false; \ \ - FUNC_ENTER_API_COMMON \ - FUNC_ENTER_API_INIT(err); \ - FUNC_ENTER_API_PUSH(err); \ + H5_CHECK_FUNCTION_NAME(H5_IS_PUBLIC(__func__)); \ + \ + H5_API_SETUP_PUBLIC_API_VARS \ + H5_API_SETUP_ERROR_HANDLING \ + H5_API_LOCK \ + H5_API_SETUP_INIT_LIBRARY(err); \ + H5_API_SETUP_PUSH_CONTEXT(err); \ { /* @@ -1264,22 +1277,27 @@ extern char H5_lib_vers_info_g[]; { \ { \ { \ - FUNC_ENTER_API_COMMON \ + H5_CHECK_FUNCTION_NAME(H5_IS_PUBLIC(__func__)); \ + \ + H5_API_SETUP_PUBLIC_API_VARS \ + H5_API_SETUP_ERROR_HANDLING \ + H5_API_LOCK \ { /* - * Use this macro for API functions that shouldn't perform _any_ initialization - * of the library or an interface and also don't return errors. Examples - * are: H5close, H5check_version, etc. - * + * Use this macro for public API functions that shouldn't perform _any_ + * initialization of the library or an interface or push themselves on the + * function stack, just perform tracing, etc. Examples are: H5close, + * H5check_version, etc. */ #define FUNC_ENTER_API_NOINIT_NOERR \ { \ { \ { \ { \ - FUNC_ENTER_API_VARS \ - FUNC_ENTER_COMMON_NOERR(H5_IS_API(__func__)); \ + H5_CHECK_FUNCTION_NAME(H5_IS_PUBLIC(__func__)); \ + \ + H5_API_SETUP_PUBLIC_API_VARS \ H5_API_LOCK \ { @@ -1294,8 +1312,12 @@ extern char H5_lib_vers_info_g[]; { \ { \ { \ - FUNC_ENTER_API_COMMON \ - FUNC_ENTER_API_INIT(err); \ + H5_CHECK_FUNCTION_NAME(H5_IS_PUBLIC(__func__)); \ + \ + H5_API_SETUP_PUBLIC_API_VARS \ + H5_API_SETUP_ERROR_HANDLING \ + H5_API_LOCK \ + H5_API_SETUP_INIT_LIBRARY(err); \ { /* @@ -1311,10 +1333,10 @@ extern char H5_lib_vers_info_g[]; { \ { \ { \ - FUNC_ENTER_COMMON_NOERR(H5_IS_API(__func__)); \ + H5_CHECK_FUNCTION_NAME(H5_IS_PUBLIC(__func__)); \ { -/* Note: this macro only works when there's _no_ interface initialization routine for the module */ +/* Note: This macro only works when there's _no_ interface initialization routine for the module */ #define FUNC_ENTER_NOAPI_INIT(err) \ /* Initialize the package, if appropriate */ \ H5_PACKAGE_INIT(H5_MY_PKG_INIT, err) @@ -1322,43 +1344,45 @@ extern char H5_lib_vers_info_g[]; /* Use this macro for all "normal" non-API functions */ #define FUNC_ENTER_NOAPI(err) \ { \ - FUNC_ENTER_COMMON(H5_IS_PRIV(__func__)); \ + H5_CHECK_FUNCTION_NAME(H5_IS_PRIVATE(__func__)); \ + \ + H5_API_SETUP_ERROR_HANDLING \ FUNC_ENTER_NOAPI_INIT(err) \ - if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) \ + { /* Use this macro for all non-API functions, which propagate errors, but don't issue them */ #define FUNC_ENTER_NOAPI_NOERR \ { \ - FUNC_ENTER_COMMON_NOERR(H5_IS_PRIV(__func__)); \ + H5_CHECK_FUNCTION_NAME(H5_IS_PRIVATE(__func__)); \ + \ FUNC_ENTER_NOAPI_INIT(-) \ - if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) \ + { /* - * Use this macro for non-API functions which fall into these categories: - * - static functions, since they must be called from a function in the - * interface, the library and interface must already be - * initialized. - * - functions which are called during library shutdown, since we don't - * want to re-initialize the library. + * Use this macro for non-API functions which are called during library + * shutdown, since we don't want to re-initialize the library. */ #define FUNC_ENTER_NOAPI_NOINIT \ { \ - FUNC_ENTER_COMMON(H5_IS_PRIV(__func__)); \ - if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { + H5_CHECK_FUNCTION_NAME(H5_IS_PRIVATE(__func__)); \ + \ + H5_API_SETUP_ERROR_HANDLING \ + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) \ + { /* - * Use this macro for non-API functions which fall into these categories: - * - static functions, since they must be called from a function in the - * interface, the library and interface must already be - * initialized. - * - functions which are called during library shutdown, since we don't - * want to re-initialize the library. - * - functions that propagate, but don't issue errors + * Use this macro for non-API functions that propagate, but do not issue + * errors, which are called during library shutdown, since we don't want to + * re-initialize the library. */ #define FUNC_ENTER_NOAPI_NOINIT_NOERR \ { \ - FUNC_ENTER_COMMON_NOERR(H5_IS_PRIV(__func__)); \ - if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { + H5_CHECK_FUNCTION_NAME(H5_IS_PRIVATE(__func__)); \ + \ + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) \ + { /* * Use this macro for non-API functions that shouldn't perform _any_ @@ -1368,7 +1392,7 @@ extern char H5_lib_vers_info_g[]; */ #define FUNC_ENTER_NOAPI_NAMECHECK_ONLY \ { \ - FUNC_ENTER_COMMON_NOERR(H5_IS_PRIV(__func__)); + H5_CHECK_FUNCTION_NAME(H5_IS_PRIVATE(__func__)); /* Use the following two macros as replacements for the FUNC_ENTER_NOAPI * and FUNC_ENTER_NOAPI_NOINIT macros when the function needs to set @@ -1378,32 +1402,44 @@ extern char H5_lib_vers_info_g[]; { \ haddr_t prev_tag = HADDR_UNDEF; \ \ - FUNC_ENTER_COMMON(H5_IS_PRIV(__func__)); \ + H5_CHECK_FUNCTION_NAME(H5_IS_PRIVATE(__func__)); \ + \ + H5_API_SETUP_ERROR_HANDLING \ + \ H5AC_tag(tag, &prev_tag); \ FUNC_ENTER_NOAPI_INIT(err) \ - if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) \ + { #define FUNC_ENTER_NOAPI_NOINIT_TAG(tag) \ { \ haddr_t prev_tag = HADDR_UNDEF; \ \ - FUNC_ENTER_COMMON(H5_IS_PRIV(__func__)); \ + H5_CHECK_FUNCTION_NAME(H5_IS_PRIVATE(__func__)); \ + \ + H5_API_SETUP_ERROR_HANDLING \ + \ H5AC_tag(tag, &prev_tag); \ - if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) \ + { /* Use this macro for all "normal" package-level and static functions */ #define FUNC_ENTER_PACKAGE \ { \ - FUNC_ENTER_COMMON(H5_IS_PKG(__func__)); \ - if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { + H5_CHECK_FUNCTION_NAME(H5_IS_PKG(__func__)); \ + \ + H5_API_SETUP_ERROR_HANDLING \ + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) \ + { /* Use this macro for package-level and static functions which propagate * errors, but don't issue them */ #define FUNC_ENTER_PACKAGE_NOERR \ { \ - FUNC_ENTER_COMMON_NOERR(H5_IS_PKG(__func__)); \ - if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { + H5_CHECK_FUNCTION_NAME(H5_IS_PKG(__func__)); \ + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) \ + { /* Use the following macro as replacement for the FUNC_ENTER_PACKAGE * macro when the function needs to set up a metadata tag. @@ -1412,9 +1448,13 @@ extern char H5_lib_vers_info_g[]; { \ haddr_t prev_tag = HADDR_UNDEF; \ \ - FUNC_ENTER_COMMON(H5_IS_PKG(__func__)); \ + H5_CHECK_FUNCTION_NAME(H5_IS_PKG(__func__)); \ + \ + H5_API_SETUP_ERROR_HANDLING \ + \ H5AC_tag(tag, &prev_tag); \ - if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) { + if (H5_LIKELY(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL)) \ + { /* * Use this macro for package-level or static functions that shouldn't perform @@ -1424,7 +1464,7 @@ extern char H5_lib_vers_info_g[]; */ #define FUNC_ENTER_PACKAGE_NAMECHECK_ONLY \ { \ - FUNC_ENTER_COMMON_NOERR(H5_IS_PKG(__func__)); + H5_CHECK_FUNCTION_NAME(H5_IS_PKG(__func__)); /* ---------------------------------------------------------------------------- * HDF5 API call leave macros @@ -1534,6 +1574,8 @@ extern char H5_lib_vers_info_g[]; return (ret_value); \ } /* end scope from beginning of FUNC_ENTER */ +/* clang-format on */ + /* Macros to declare package initialization function, if a package initialization routine is defined */ #define H5_PKG_DECLARE_YES_FUNC(pkg) extern herr_t H5_PACKAGE_INIT_FUNC(pkg)(void); #define H5_PKG_DECLARE_NO_FUNC(pkg) From 40ac285febb127b990abb0aa3be6591b167cb6be Mon Sep 17 00:00:00 2001 From: Gerd Heber Date: Tue, 29 Oct 2024 08:05:17 -0500 Subject: [PATCH 058/179] Add full-text search to Doxygen (#4994) * Update hdf5doxy_layout.xml Menu item for fulltext search. * Update FTS.dox Updated Google PSE ID. --- doxygen/dox/FTS.dox | 4 ++-- doxygen/hdf5doxy_layout.xml | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/doxygen/dox/FTS.dox b/doxygen/dox/FTS.dox index 9dae7c135aa..513786a19ac 100644 --- a/doxygen/dox/FTS.dox +++ b/doxygen/dox/FTS.dox @@ -1,8 +1,8 @@ /** \page FTS Full-Text Search \htmlonly - + \endhtmlonly -*/ \ No newline at end of file +*/ diff --git a/doxygen/hdf5doxy_layout.xml b/doxygen/hdf5doxy_layout.xml index 8bd7aaf4c08..0299094947e 100644 --- a/doxygen/hdf5doxy_layout.xml +++ b/doxygen/hdf5doxy_layout.xml @@ -14,6 +14,7 @@ + From 72093836a34e8c10f22d6fed551d5ee7e89f239d Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Tue, 29 Oct 2024 08:35:01 -0500 Subject: [PATCH 059/179] restore GH to site name (#5027) --- .github/workflows/cmake-script.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/cmake-script.yml b/.github/workflows/cmake-script.yml index 617eb4b0236..b780ba30728 100644 --- a/.github/workflows/cmake-script.yml +++ b/.github/workflows/cmake-script.yml @@ -111,7 +111,7 @@ jobs: - name: Run ctest script (Windows) run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }},LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=VS202264,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-${{ github.event.repository.full_name }},LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=VS202264,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log shell: bash continue-on-error: true @@ -200,7 +200,7 @@ jobs: - name: Run ctest (Linux) run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-GCC,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-${{ github.event.repository.full_name }}-GCC,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log shell: bash continue-on-error: true @@ -302,7 +302,7 @@ jobs: id: run-ctest run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-Clang,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-${{ github.event.repository.full_name }}-Clang,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log shell: bash continue-on-error: true @@ -387,7 +387,7 @@ jobs: - name: Run ctest (Linux S3) run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-S3,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-${{ github.event.repository.full_name }}-S3,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log shell: bash continue-on-error: true @@ -493,7 +493,7 @@ jobs: CXX: ${{ steps.setup-fortran.outputs.cc }} run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-Intel,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=VS202264,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-${{ github.event.repository.full_name }}-Intel,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=VS202264,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log shell: pwsh continue-on-error: true @@ -588,7 +588,7 @@ jobs: CXX: ${{ steps.setup-fortran.outputs.cxx }} run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-Intel,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-${{ github.event.repository.full_name }}-Intel,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log shell: bash continue-on-error: true @@ -682,7 +682,7 @@ jobs: - name: Run ctest (Linux_clang) run: | cd "${{ runner.workspace }}/hdf5" - ctest -S HDF5config.cmake,CTEST_SITE_EXT=${{ github.event.repository.full_name }}-Clang,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log + ctest -S HDF5config.cmake,CTEST_SITE_EXT=GH-${{ github.event.repository.full_name }}-Clang,LOCAL_SUBMIT=ON,NINJA=TRUE,BUILD_GENERATOR=Unix,CTEST_SOURCE_NAME=${{ steps.set-file-base.outputs.SOURCE_BASE }} -C Release -VV -O hdf5.log shell: bash continue-on-error: true From 192d630f275bc41ba71d51975fb571d0c8c8b4b1 Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Tue, 29 Oct 2024 10:06:13 -0500 Subject: [PATCH 060/179] Add long double format option to h5dump (#5025) --- hl/tools/h5watch/h5watch.c | 3 + release_docs/RELEASE.txt | 7 + tools/lib/h5tools.h | 4 + tools/lib/h5tools_dump.c | 1 + tools/lib/h5tools_str.c | 2 +- tools/src/h5dump/h5dump.c | 15 +- tools/src/h5dump/h5dump.h | 5 +- tools/src/h5dump/h5dump_ddl.c | 21 + tools/src/h5dump/h5dump_extern.h | 1 + tools/src/h5dump/h5dump_xml.c | 43 + tools/src/h5ls/h5ls.c | 7 + tools/test/h5dump/CMakeTests.cmake | 9 +- tools/test/h5dump/expected/h5dump-help.txt | 4 +- .../pbits/tnofilename-with-packed-bits.ddl | 4 +- .../expected/pbits/tpbitsIncomplete.ddl | 4 +- .../expected/pbits/tpbitsLengthExceeded.ddl | 4 +- .../expected/pbits/tpbitsLengthPositive.ddl | 4 +- .../expected/pbits/tpbitsMaxExceeded.ddl | 4 +- .../expected/pbits/tpbitsOffsetExceeded.ddl | 4 +- .../expected/pbits/tpbitsOffsetNegative.ddl | 4 +- tools/test/h5dump/expected/tfloatsattrs.ddl | 916 ++++++++---------- tools/test/h5dump/expected/tfloatsattrs.wddl | 621 ------------ tools/test/h5dump/testh5dump.sh.in | 2 +- 23 files changed, 538 insertions(+), 1151 deletions(-) delete mode 100644 tools/test/h5dump/expected/tfloatsattrs.wddl diff --git a/hl/tools/h5watch/h5watch.c b/hl/tools/h5watch/h5watch.c index ec05a886952..cfa6bae857d 100644 --- a/hl/tools/h5watch/h5watch.c +++ b/hl/tools/h5watch/h5watch.c @@ -96,6 +96,7 @@ doprint(hid_t did, const hsize_t *start, const hsize_t *block, int rank) { h5tools_context_t ctx; /* print context */ h5tool_format_t info; /* Format info for the tools library */ + static char fmt_ldouble[16]; /* Format info */ static char fmt_double[16], fmt_float[16]; /* Format info */ struct subset_t subset; /* Subsetting info */ hsize_t ss_start[H5S_MAX_RANK]; /* Info for hyperslab */ @@ -175,6 +176,8 @@ doprint(hid_t did, const hsize_t *start, const hsize_t *block, int rank) info.fmt_float = fmt_float; snprintf(fmt_double, sizeof(fmt_double), "%%1.%dg", DBL_DIG); info.fmt_double = fmt_double; + snprintf(fmt_ldouble, sizeof(fmt_ldouble), "%%1.%dLg", DBL_DIG); + info.fmt_ldouble = fmt_ldouble; info.dset_format = "DSET-%s "; info.dset_hidefileno = 0; diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 1545bdc4402..5f8321daae9 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -198,6 +198,13 @@ New Features Tools: ------ + - Added h5dump command option to set the floating point format for long double + + The new option is --lformat, which allows the user to set the + floating point format for long double. The default format is %Lg. + There is already an option --format to set the floating point format + for double and float. The default format is %g. + - Remove the high-level GIF tools The high-level GIF tools, h52gif and gif2h5, have unfixed CVE issues diff --git a/tools/lib/h5tools.h b/tools/lib/h5tools.h index e9798ea222d..354fba0001a 100644 --- a/tools/lib/h5tools.h +++ b/tools/lib/h5tools.h @@ -267,6 +267,9 @@ typedef struct h5tool_format_t { * typed `unsigned long long'. The default depends on what * printf() format is available to print this datatype. * + * fmt_ldouble: The printf() format to use when rendering data which is + * typed `long double'. The default is `%Lg'. + * * fmt_double: The printf() format to use when rendering data which is * typed `double'. The default is `%g'. * @@ -303,6 +306,7 @@ typedef struct h5tool_format_t { const char *fmt_ulong; const char *fmt_llong; const char *fmt_ullong; + const char *fmt_ldouble; const char *fmt_double; const char *fmt_float; int ascii; diff --git a/tools/lib/h5tools_dump.c b/tools/lib/h5tools_dump.c index f9c3c6a2265..4cecbbd4b65 100644 --- a/tools/lib/h5tools_dump.c +++ b/tools/lib/h5tools_dump.c @@ -35,6 +35,7 @@ h5tool_format_t h5tools_dataformat = { "%lu", /*fmt_ulong */ NULL, /*fmt_llong */ NULL, /*fmt_ullong */ + "%Lg", /*fmt_ldouble */ "%g", /*fmt_double */ "%g", /*fmt_float */ diff --git a/tools/lib/h5tools_str.c b/tools/lib/h5tools_str.c index 4758a7ba379..bdadd92102c 100644 --- a/tools/lib/h5tools_str.c +++ b/tools/lib/h5tools_str.c @@ -729,7 +729,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai long double templdouble; memcpy(&templdouble, vp, sizeof(long double)); - h5tools_str_append(str, "%Lg", templdouble); + h5tools_str_append(str, OPT(info->fmt_ldouble, "%Lg"), templdouble); } else { size_t i; diff --git a/tools/src/h5dump/h5dump.c b/tools/src/h5dump/h5dump.c index 95e607959ba..f4f4d1b9f83 100644 --- a/tools/src/h5dump/h5dump.c +++ b/tools/src/h5dump/h5dump.c @@ -98,7 +98,7 @@ struct handler_t { */ /* The following initialization makes use of C language concatenating */ /* "xxx" "yyy" into "xxxyyy". */ -static const char *s_opts = "a:b*c:d:ef:g:hik:l:m:n*o*pq:rs:t:uvw:xyz:A*BCD:E*F:G:HK:M:N:O*RS:VX:"; +static const char *s_opts = "a:b*c:d:ef:g:hik:l:m:n*o*pq:rs:t:uvw:xyz:A*BCD:E*F:G:HK:L:M:N:O*RS:VX:"; static struct h5_long_options l_opts[] = {{"attribute", require_arg, 'a'}, {"binary", optional_arg, 'b'}, {"count", require_arg, 'c'}, @@ -134,6 +134,7 @@ static struct h5_long_options l_opts[] = {{"attribute", require_arg, 'a'}, {"vds-gap-size", require_arg, 'G'}, {"header", no_arg, 'H'}, {"page-buffer-size", require_arg, 'K'}, + {"lformat", require_arg, 'L'}, {"packed-bits", require_arg, 'M'}, {"any_path", require_arg, 'N'}, {"ddl", optional_arg, 'O'}, @@ -285,6 +286,8 @@ usage(const char *prog) PRINTVALSTREAM(rawoutstream, " -r, --string Print 1-byte integer datasets as ASCII\n"); PRINTVALSTREAM(rawoutstream, " -y, --noindex Do not print array indices with the data\n"); PRINTVALSTREAM(rawoutstream, " -m T, --format=T Set the floating point output format\n"); + PRINTVALSTREAM(rawoutstream, + " -L T, --lformat=T Set the floating point long double output format\n"); PRINTVALSTREAM(rawoutstream, " -q Q, --sort_by=Q Sort groups and attributes by index Q\n"); PRINTVALSTREAM(rawoutstream, " -z Z, --sort_order=Z Sort groups and attributes by order Z\n"); PRINTVALSTREAM(rawoutstream, @@ -346,7 +349,9 @@ usage(const char *prog) PRINTVALSTREAM(rawoutstream, " F - is a filename.\n"); PRINTVALSTREAM(rawoutstream, " P - is the full path from the root group to the object.\n"); PRINTVALSTREAM(rawoutstream, " N - is an integer greater than 1.\n"); - PRINTVALSTREAM(rawoutstream, " T - is a string containing the floating point format, e.g '%%.3f'\n"); + PRINTVALSTREAM(rawoutstream, " T - is a string containing the floating point format, e.g '%%.3g'\n"); + PRINTVALSTREAM(rawoutstream, + " T - is a string containing the floating point long double format, e.g '%%.3Lg'\n"); PRINTVALSTREAM(rawoutstream, " U - is a URI reference (as defined in [IETF RFC 2396],\n"); PRINTVALSTREAM(rawoutstream, " updated by [IETF RFC 2732])\n"); PRINTVALSTREAM(rawoutstream, @@ -1056,6 +1061,12 @@ parse_command_line(int argc, const char *const *argv) h5tools_nCols = 0; break; + case 'L': + /* specify alternative floating point long double printing format */ + fp_lformat = H5_optarg; + h5tools_nCols = 0; + break; + case 'X': /* specify XML namespace (default="hdf5:"), or none */ /* To Do: check format of this value? */ diff --git a/tools/src/h5dump/h5dump.h b/tools/src/h5dump/h5dump.h index 9761e8e035b..98c17538631 100644 --- a/tools/src/h5dump/h5dump.h +++ b/tools/src/h5dump/h5dump.h @@ -95,6 +95,7 @@ * \li --string Print 1-byte integer datasets as ASCII * \li --noindex Do not print array indices with the data * \li --format=T Set the floating point output format + * \li --lformat=T Set the floating point long double output format * \li --sort_by=Q Sort groups and attributes by index Q * \li --sort_order=Z Sort groups and attributes by order Z * \li --no-compact-subset Disable compact form of subsetting and allow the use @@ -143,7 +144,8 @@ * \li F - is a filename. * \li P - is the full path from the root group to the object. * \li N - is an integer greater than 1. - * \li T - is a string containing the floating point format, e.g '%.3f' + * \li T - is a string containing the floating point format, e.g '%.3g' + * \li T - is a string containing the floating point long double format, e.g '%.3Lg' * \li U - is a URI reference (as defined in [IETF RFC 2396], * updated by [IETF RFC 2732]) * \li B - is the form of binary output: NATIVE for a memory type, FILE for the @@ -239,6 +241,7 @@ bool hit_elink = false; /* whether we have traversed an external link * size_t prefix_len = 1024; char *prefix = NULL; const char *fp_format = NULL; +const char *fp_lformat = NULL; /* things to display or which are set via command line parameters */ typedef struct { diff --git a/tools/src/h5dump/h5dump_ddl.c b/tools/src/h5dump/h5dump_ddl.c index 80bffe68de8..124184207d5 100644 --- a/tools/src/h5dump/h5dump_ddl.c +++ b/tools/src/h5dump/h5dump_ddl.c @@ -116,6 +116,9 @@ dump_attr_cb(hid_t oid, const char *attr_name, const H5A_info_t H5_ATTR_UNUSED * string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -175,6 +178,9 @@ dump_all_cb(hid_t group, const char *name, const H5L_info2_t *linfo, void H5_ATT string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -646,6 +652,9 @@ dump_named_datatype(hid_t tid, const char *name) string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -802,6 +811,9 @@ dump_group(hid_t gid, const char *name) string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -928,6 +940,9 @@ dump_dataset(hid_t did, const char *name, struct subset_t *sset) string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -1098,6 +1113,9 @@ dump_data(hid_t obj_id, int obj_data, struct subset_t *sset, int display_index) string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -1563,6 +1581,9 @@ handle_attributes(hid_t fid, const char *attr, void H5_ATTR_UNUSED *data, int H5 string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; diff --git a/tools/src/h5dump/h5dump_extern.h b/tools/src/h5dump/h5dump_extern.h index 87a5ff1a399..ba8692dd2f9 100644 --- a/tools/src/h5dump/h5dump_extern.h +++ b/tools/src/h5dump/h5dump_extern.h @@ -56,6 +56,7 @@ extern bool hit_elink; /* whether we have traversed an external link */ extern size_t prefix_len; extern char *prefix; extern const char *fp_format; +extern const char *fp_lformat; /* things to display or which are set via command line parameters */ typedef struct { diff --git a/tools/src/h5dump/h5dump_xml.c b/tools/src/h5dump/h5dump_xml.c index 605bfd7374c..be4658d0d2d 100644 --- a/tools/src/h5dump/h5dump_xml.c +++ b/tools/src/h5dump/h5dump_xml.c @@ -47,6 +47,7 @@ static h5tool_format_t xml_dataformat = { "%lu", /*fmt_ulong */ NULL, /*fmt_llong */ NULL, /*fmt_ullong */ + "%Lg", /*fmt_ldouble */ "%g", /*fmt_double */ "%g", /*fmt_float */ @@ -152,6 +153,9 @@ xml_dump_all_cb(hid_t group, const char *name, const H5L_info2_t *linfo, void H5 string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -885,6 +889,9 @@ xml_print_datatype(hid_t type, unsigned in_group) string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -1582,6 +1589,9 @@ xml_dump_datatype(hid_t type) string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -1716,6 +1726,9 @@ xml_dump_dataspace(hid_t space) string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -1889,6 +1902,9 @@ xml_dump_data(hid_t obj_id, int obj_data, struct subset_t H5_ATTR_UNUSED *sset, string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -2056,6 +2072,9 @@ xml_dump_attr(hid_t attr, const char *attr_name, const H5A_info_t H5_ATTR_UNUSED string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -2387,6 +2406,9 @@ xml_dump_named_datatype(hid_t type, const char *name) string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -2606,6 +2628,9 @@ xml_dump_group(hid_t gid, const char *name) string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -3010,6 +3035,9 @@ xml_print_refs(hid_t did, int source) string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -3166,6 +3194,9 @@ xml_print_strs(hid_t did, int source) string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -3281,6 +3312,9 @@ check_filters(hid_t dcpl) string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -3422,6 +3456,9 @@ xml_dump_fill_value(hid_t dcpl, hid_t type) string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -3803,6 +3840,9 @@ xml_dump_dataset(hid_t did, const char *name, struct subset_t H5_ATTR_UNUSED *ss string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; @@ -4390,6 +4430,9 @@ xml_print_enum(hid_t type) string_dataformat.fmt_double = fp_format; string_dataformat.fmt_float = fp_format; } + if (fp_lformat) { + string_dataformat.fmt_ldouble = fp_lformat; + } if (h5tools_nCols == 0) { string_dataformat.line_ncols = 65535; diff --git a/tools/src/h5ls/h5ls.c b/tools/src/h5ls/h5ls.c index 109e4e2de95..c5863a2bd2e 100644 --- a/tools/src/h5ls/h5ls.c +++ b/tools/src/h5ls/h5ls.c @@ -45,6 +45,7 @@ static h5tool_format_t ls_dataformat = { "%lu", /*fmt_ulong */ NULL, /*fmt_llong */ NULL, /*fmt_ullong */ + "%Lg", /*fmt_ldouble */ "%g", /*fmt_double */ "%g", /*fmt_float */ @@ -1324,6 +1325,7 @@ dump_dataset_values(hid_t dset) hsize_t total_size[H5S_MAX_RANK]; int ndims; char string_prefix[64]; + static char fmt_ldouble[16]; static char fmt_double[16]; static char fmt_float[16]; hsize_t curr_pos = 0; /* total data element position */ @@ -1399,6 +1401,8 @@ dump_dataset_values(hid_t dset) outputformat.fmt_float = fmt_float; snprintf(fmt_double, sizeof(fmt_double), "%%1.%dg", DBL_DIG); outputformat.fmt_double = fmt_double; + snprintf(fmt_ldouble, sizeof(fmt_ldouble), "%%1.%dLg", LDBL_DIG); + outputformat.fmt_ldouble = fmt_ldouble; if (hexdump_g) { /* Print all data in hexadecimal format if the `-x' or `--hexdump' @@ -1493,6 +1497,7 @@ dump_attribute_values(hid_t attr) hsize_t total_size[H5S_MAX_RANK]; int ndims; char string_prefix[64]; + static char fmt_ldouble[16]; static char fmt_double[16]; static char fmt_float[16]; hsize_t curr_pos = 0; /* total data element position */ @@ -1568,6 +1573,8 @@ dump_attribute_values(hid_t attr) outputformat.fmt_float = fmt_float; snprintf(fmt_double, sizeof(fmt_double), "%%1.%dg", DBL_DIG); outputformat.fmt_double = fmt_double; + snprintf(fmt_ldouble, sizeof(fmt_ldouble), "%%1.%dLg", LDBL_DIG); + outputformat.fmt_ldouble = fmt_ldouble; if (hexdump_g) { /* Print all data in hexadecimal format if the `-x' or `--hexdump' diff --git a/tools/test/h5dump/CMakeTests.cmake b/tools/test/h5dump/CMakeTests.cmake index d06eceb3e81..29e184e695e 100644 --- a/tools/test/h5dump/CMakeTests.cmake +++ b/tools/test/h5dump/CMakeTests.cmake @@ -103,8 +103,7 @@ tfamily.ddl tfill.ddl tfletcher32.ddl - #tfloatsattrs.ddl #native - #tfloatsattrs.wddl #special for windows + tfloatsattrs.ddl tfloat16.ddl tfloat16_be.ddl tfpformat.ddl @@ -400,12 +399,10 @@ HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/expected/tbin1.ddl" "${PROJECT_BINARY_DIR}/testfiles/std/tbin1LE.ddl" "h5dump_std_files") # Certain versions of Visual Studio produce rounding differences compared with the reference data of the tfloatsattr test - if (WIN32 AND (CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION VERSION_LESS 10.0.18362.0 OR CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION VERSION_GREATER_EQUAL 19.41.34123.0)) + if (WIN32 AND (CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION VERSION_LESS 10.0.18362.0)) configure_file(${PROJECT_SOURCE_DIR}/exportfiles/tbinregR.exp ${PROJECT_BINARY_DIR}/testfiles/std/tbinregR.exp NEWLINE_STYLE CRLF) - HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/expected/tfloatsattrs.wddl" "${PROJECT_BINARY_DIR}/testfiles/std/tfloatsattrs.ddl" "h5dump_std_files") else () HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/exportfiles/tbinregR.exp" "${PROJECT_BINARY_DIR}/testfiles/std/tbinregR.exp" "h5dump_std_files") - HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/expected/tfloatsattrs.ddl" "${PROJECT_BINARY_DIR}/testfiles/std/tfloatsattrs.ddl" "h5dump_std_files") endif () add_custom_target(h5dump_std_files ALL COMMENT "Copying files needed by h5dump_std tests" DEPENDS ${h5dump_std_files_list}) @@ -1309,7 +1306,7 @@ ADD_H5_TEST (zerodim 0 --enable-error-stack zerodim.h5) # test for long double (some systems do not have long double) - ADD_H5_TEST (tfloatsattrs 0 -p --enable-error-stack tfloatsattrs.h5) + ADD_H5_TEST (tfloatsattrs 0 -p --format=%.4g --lformat=%.4Lg --width=80 --enable-error-stack tfloatsattrs.h5) ADD_H5_TEST (tldouble 0 --enable-error-stack tldouble.h5) ADD_H5_TEST (tldouble_scalar 0 -p --enable-error-stack tldouble_scalar.h5) diff --git a/tools/test/h5dump/expected/h5dump-help.txt b/tools/test/h5dump/expected/h5dump-help.txt index 2f17b51da95..46b0bcb7217 100644 --- a/tools/test/h5dump/expected/h5dump-help.txt +++ b/tools/test/h5dump/expected/h5dump-help.txt @@ -72,6 +72,7 @@ usage: h5dump [OPTIONS] files -r, --string Print 1-byte integer datasets as ASCII -y, --noindex Do not print array indices with the data -m T, --format=T Set the floating point output format + -L T, --lformat=T Set the floating point long double output format -q Q, --sort_by=Q Sort groups and attributes by index Q -z Z, --sort_order=Z Sort groups and attributes by order Z --no-compact-subset Disable compact form of subsetting and allow the use @@ -114,7 +115,8 @@ usage: h5dump [OPTIONS] files F - is a filename. P - is the full path from the root group to the object. N - is an integer greater than 1. - T - is a string containing the floating point format, e.g '%.3f' + T - is a string containing the floating point format, e.g '%.3g' + T - is a string containing the floating point long double format, e.g '%.3Lg' U - is a URI reference (as defined in [IETF RFC 2396], updated by [IETF RFC 2732]) B - is the form of binary output: NATIVE for a memory type, FILE for the diff --git a/tools/test/h5dump/expected/pbits/tnofilename-with-packed-bits.ddl b/tools/test/h5dump/expected/pbits/tnofilename-with-packed-bits.ddl index 2f17b51da95..46b0bcb7217 100644 --- a/tools/test/h5dump/expected/pbits/tnofilename-with-packed-bits.ddl +++ b/tools/test/h5dump/expected/pbits/tnofilename-with-packed-bits.ddl @@ -72,6 +72,7 @@ usage: h5dump [OPTIONS] files -r, --string Print 1-byte integer datasets as ASCII -y, --noindex Do not print array indices with the data -m T, --format=T Set the floating point output format + -L T, --lformat=T Set the floating point long double output format -q Q, --sort_by=Q Sort groups and attributes by index Q -z Z, --sort_order=Z Sort groups and attributes by order Z --no-compact-subset Disable compact form of subsetting and allow the use @@ -114,7 +115,8 @@ usage: h5dump [OPTIONS] files F - is a filename. P - is the full path from the root group to the object. N - is an integer greater than 1. - T - is a string containing the floating point format, e.g '%.3f' + T - is a string containing the floating point format, e.g '%.3g' + T - is a string containing the floating point long double format, e.g '%.3Lg' U - is a URI reference (as defined in [IETF RFC 2396], updated by [IETF RFC 2732]) B - is the form of binary output: NATIVE for a memory type, FILE for the diff --git a/tools/test/h5dump/expected/pbits/tpbitsIncomplete.ddl b/tools/test/h5dump/expected/pbits/tpbitsIncomplete.ddl index 2f17b51da95..46b0bcb7217 100644 --- a/tools/test/h5dump/expected/pbits/tpbitsIncomplete.ddl +++ b/tools/test/h5dump/expected/pbits/tpbitsIncomplete.ddl @@ -72,6 +72,7 @@ usage: h5dump [OPTIONS] files -r, --string Print 1-byte integer datasets as ASCII -y, --noindex Do not print array indices with the data -m T, --format=T Set the floating point output format + -L T, --lformat=T Set the floating point long double output format -q Q, --sort_by=Q Sort groups and attributes by index Q -z Z, --sort_order=Z Sort groups and attributes by order Z --no-compact-subset Disable compact form of subsetting and allow the use @@ -114,7 +115,8 @@ usage: h5dump [OPTIONS] files F - is a filename. P - is the full path from the root group to the object. N - is an integer greater than 1. - T - is a string containing the floating point format, e.g '%.3f' + T - is a string containing the floating point format, e.g '%.3g' + T - is a string containing the floating point long double format, e.g '%.3Lg' U - is a URI reference (as defined in [IETF RFC 2396], updated by [IETF RFC 2732]) B - is the form of binary output: NATIVE for a memory type, FILE for the diff --git a/tools/test/h5dump/expected/pbits/tpbitsLengthExceeded.ddl b/tools/test/h5dump/expected/pbits/tpbitsLengthExceeded.ddl index 2f17b51da95..46b0bcb7217 100644 --- a/tools/test/h5dump/expected/pbits/tpbitsLengthExceeded.ddl +++ b/tools/test/h5dump/expected/pbits/tpbitsLengthExceeded.ddl @@ -72,6 +72,7 @@ usage: h5dump [OPTIONS] files -r, --string Print 1-byte integer datasets as ASCII -y, --noindex Do not print array indices with the data -m T, --format=T Set the floating point output format + -L T, --lformat=T Set the floating point long double output format -q Q, --sort_by=Q Sort groups and attributes by index Q -z Z, --sort_order=Z Sort groups and attributes by order Z --no-compact-subset Disable compact form of subsetting and allow the use @@ -114,7 +115,8 @@ usage: h5dump [OPTIONS] files F - is a filename. P - is the full path from the root group to the object. N - is an integer greater than 1. - T - is a string containing the floating point format, e.g '%.3f' + T - is a string containing the floating point format, e.g '%.3g' + T - is a string containing the floating point long double format, e.g '%.3Lg' U - is a URI reference (as defined in [IETF RFC 2396], updated by [IETF RFC 2732]) B - is the form of binary output: NATIVE for a memory type, FILE for the diff --git a/tools/test/h5dump/expected/pbits/tpbitsLengthPositive.ddl b/tools/test/h5dump/expected/pbits/tpbitsLengthPositive.ddl index 2f17b51da95..46b0bcb7217 100644 --- a/tools/test/h5dump/expected/pbits/tpbitsLengthPositive.ddl +++ b/tools/test/h5dump/expected/pbits/tpbitsLengthPositive.ddl @@ -72,6 +72,7 @@ usage: h5dump [OPTIONS] files -r, --string Print 1-byte integer datasets as ASCII -y, --noindex Do not print array indices with the data -m T, --format=T Set the floating point output format + -L T, --lformat=T Set the floating point long double output format -q Q, --sort_by=Q Sort groups and attributes by index Q -z Z, --sort_order=Z Sort groups and attributes by order Z --no-compact-subset Disable compact form of subsetting and allow the use @@ -114,7 +115,8 @@ usage: h5dump [OPTIONS] files F - is a filename. P - is the full path from the root group to the object. N - is an integer greater than 1. - T - is a string containing the floating point format, e.g '%.3f' + T - is a string containing the floating point format, e.g '%.3g' + T - is a string containing the floating point long double format, e.g '%.3Lg' U - is a URI reference (as defined in [IETF RFC 2396], updated by [IETF RFC 2732]) B - is the form of binary output: NATIVE for a memory type, FILE for the diff --git a/tools/test/h5dump/expected/pbits/tpbitsMaxExceeded.ddl b/tools/test/h5dump/expected/pbits/tpbitsMaxExceeded.ddl index 2f17b51da95..46b0bcb7217 100644 --- a/tools/test/h5dump/expected/pbits/tpbitsMaxExceeded.ddl +++ b/tools/test/h5dump/expected/pbits/tpbitsMaxExceeded.ddl @@ -72,6 +72,7 @@ usage: h5dump [OPTIONS] files -r, --string Print 1-byte integer datasets as ASCII -y, --noindex Do not print array indices with the data -m T, --format=T Set the floating point output format + -L T, --lformat=T Set the floating point long double output format -q Q, --sort_by=Q Sort groups and attributes by index Q -z Z, --sort_order=Z Sort groups and attributes by order Z --no-compact-subset Disable compact form of subsetting and allow the use @@ -114,7 +115,8 @@ usage: h5dump [OPTIONS] files F - is a filename. P - is the full path from the root group to the object. N - is an integer greater than 1. - T - is a string containing the floating point format, e.g '%.3f' + T - is a string containing the floating point format, e.g '%.3g' + T - is a string containing the floating point long double format, e.g '%.3Lg' U - is a URI reference (as defined in [IETF RFC 2396], updated by [IETF RFC 2732]) B - is the form of binary output: NATIVE for a memory type, FILE for the diff --git a/tools/test/h5dump/expected/pbits/tpbitsOffsetExceeded.ddl b/tools/test/h5dump/expected/pbits/tpbitsOffsetExceeded.ddl index 2f17b51da95..46b0bcb7217 100644 --- a/tools/test/h5dump/expected/pbits/tpbitsOffsetExceeded.ddl +++ b/tools/test/h5dump/expected/pbits/tpbitsOffsetExceeded.ddl @@ -72,6 +72,7 @@ usage: h5dump [OPTIONS] files -r, --string Print 1-byte integer datasets as ASCII -y, --noindex Do not print array indices with the data -m T, --format=T Set the floating point output format + -L T, --lformat=T Set the floating point long double output format -q Q, --sort_by=Q Sort groups and attributes by index Q -z Z, --sort_order=Z Sort groups and attributes by order Z --no-compact-subset Disable compact form of subsetting and allow the use @@ -114,7 +115,8 @@ usage: h5dump [OPTIONS] files F - is a filename. P - is the full path from the root group to the object. N - is an integer greater than 1. - T - is a string containing the floating point format, e.g '%.3f' + T - is a string containing the floating point format, e.g '%.3g' + T - is a string containing the floating point long double format, e.g '%.3Lg' U - is a URI reference (as defined in [IETF RFC 2396], updated by [IETF RFC 2732]) B - is the form of binary output: NATIVE for a memory type, FILE for the diff --git a/tools/test/h5dump/expected/pbits/tpbitsOffsetNegative.ddl b/tools/test/h5dump/expected/pbits/tpbitsOffsetNegative.ddl index 2f17b51da95..46b0bcb7217 100644 --- a/tools/test/h5dump/expected/pbits/tpbitsOffsetNegative.ddl +++ b/tools/test/h5dump/expected/pbits/tpbitsOffsetNegative.ddl @@ -72,6 +72,7 @@ usage: h5dump [OPTIONS] files -r, --string Print 1-byte integer datasets as ASCII -y, --noindex Do not print array indices with the data -m T, --format=T Set the floating point output format + -L T, --lformat=T Set the floating point long double output format -q Q, --sort_by=Q Sort groups and attributes by index Q -z Z, --sort_order=Z Sort groups and attributes by order Z --no-compact-subset Disable compact form of subsetting and allow the use @@ -114,7 +115,8 @@ usage: h5dump [OPTIONS] files F - is a filename. P - is the full path from the root group to the object. N - is an integer greater than 1. - T - is a string containing the floating point format, e.g '%.3f' + T - is a string containing the floating point format, e.g '%.3g' + T - is a string containing the floating point long double format, e.g '%.3Lg' U - is a URI reference (as defined in [IETF RFC 2396], updated by [IETF RFC 2732]) B - is the form of binary output: NATIVE for a memory type, FILE for the diff --git a/tools/test/h5dump/expected/tfloatsattrs.ddl b/tools/test/h5dump/expected/tfloatsattrs.ddl index 11c65b8093f..6daebd07fd1 100644 --- a/tools/test/h5dump/expected/tfloatsattrs.ddl +++ b/tools/test/h5dump/expected/tfloatsattrs.ddl @@ -20,322 +20,254 @@ GROUP "/" { } DATA { (0,0): 128, 0.0625, 0.125, 0.1875, 0.25, 0.3125, 0.375, 0.4375, 0.5, - (0,9): 0.5625, 0.625, 0.6875, 0.75, 0.8125, 0.875, 0.9375, 1, 1.0625, - (0,18): 1.125, 1.1875, 1.25, 1.3125, 1.375, 1.4375, 1.5, 1.5625, 1.625, - (0,27): 1.6875, 1.75, 1.8125, 1.875, 1.9375, 2, 2.0625, 2.125, 2.1875, - (0,36): 2.25, 2.3125, 2.375, 2.4375, 2.5, 2.5625, 2.625, 2.6875, 2.75, - (0,45): 2.8125, 2.875, 2.9375, 3, 3.0625, 3.125, 3.1875, 3.25, 3.3125, - (0,54): 3.375, 3.4375, 3.5, 3.5625, 3.625, 3.6875, 3.75, 3.8125, 3.875, - (0,63): 3.9375, 4, 4.0625, 4.125, 4.1875, 4.25, 4.3125, 4.375, 4.4375, - (0,72): 4.5, 4.5625, 4.625, 4.6875, 4.75, 4.8125, 4.875, 4.9375, 5, - (0,81): 5.0625, 5.125, 5.1875, 5.25, 5.3125, 5.375, 5.4375, 5.5, - (0,89): 5.5625, 5.625, 5.6875, 5.75, 5.8125, 5.875, 5.9375, 6, 6.0625, - (0,98): 6.125, 6.1875, 6.25, 6.3125, 6.375, 6.4375, 6.5, 6.5625, 6.625, - (0,107): 6.6875, 6.75, 6.8125, 6.875, 6.9375, 7, 7.0625, 7.125, 7.1875, - (0,116): 7.25, 7.3125, 7.375, 7.4375, 7.5, 7.5625, 7.625, 7.6875, 7.75, - (0,125): 7.8125, 7.875, 7.9375, - (1,0): 127, 0.0703125, 0.132812, 0.195312, 0.257812, 0.320312, - (1,6): 0.382812, 0.445312, 0.507812, 0.570312, 0.632812, 0.695312, - (1,12): 0.757812, 0.820312, 0.882812, 0.945312, 1.00781, 1.07031, - (1,18): 1.13281, 1.19531, 1.25781, 1.32031, 1.38281, 1.44531, 1.50781, - (1,25): 1.57031, 1.63281, 1.69531, 1.75781, 1.82031, 1.88281, 1.94531, - (1,32): 2.00781, 2.07031, 2.13281, 2.19531, 2.25781, 2.32031, 2.38281, - (1,39): 2.44531, 2.50781, 2.57031, 2.63281, 2.69531, 2.75781, 2.82031, - (1,46): 2.88281, 2.94531, 3.00781, 3.07031, 3.13281, 3.19531, 3.25781, - (1,53): 3.32031, 3.38281, 3.44531, 3.50781, 3.57031, 3.63281, 3.69531, - (1,60): 3.75781, 3.82031, 3.88281, 3.94531, 4.00781, 4.07031, 4.13281, - (1,67): 4.19531, 4.25781, 4.32031, 4.38281, 4.44531, 4.50781, 4.57031, - (1,74): 4.63281, 4.69531, 4.75781, 4.82031, 4.88281, 4.94531, 5.00781, - (1,81): 5.07031, 5.13281, 5.19531, 5.25781, 5.32031, 5.38281, 5.44531, - (1,88): 5.50781, 5.57031, 5.63281, 5.69531, 5.75781, 5.82031, 5.88281, - (1,95): 5.94531, 6.00781, 6.07031, 6.13281, 6.19531, 6.25781, 6.32031, - (1,102): 6.38281, 6.44531, 6.50781, 6.57031, 6.63281, 6.69531, 6.75781, - (1,109): 6.82031, 6.88281, 6.94531, 7.00781, 7.07031, 7.13281, 7.19531, - (1,116): 7.25781, 7.32031, 7.38281, 7.44531, 7.50781, 7.57031, 7.63281, - (1,123): 7.69531, 7.75781, 7.82031, 7.88281, 7.94531, - (2,0): 126, 0.078125, 0.140625, 0.203125, 0.265625, 0.328125, 0.390625, - (2,7): 0.453125, 0.515625, 0.578125, 0.640625, 0.703125, 0.765625, - (2,13): 0.828125, 0.890625, 0.953125, 1.01562, 1.07812, 1.14062, - (2,19): 1.20312, 1.26562, 1.32812, 1.39062, 1.45312, 1.51562, 1.57812, - (2,26): 1.64062, 1.70312, 1.76562, 1.82812, 1.89062, 1.95312, 2.01562, - (2,33): 2.07812, 2.14062, 2.20312, 2.26562, 2.32812, 2.39062, 2.45312, - (2,40): 2.51562, 2.57812, 2.64062, 2.70312, 2.76562, 2.82812, 2.89062, - (2,47): 2.95312, 3.01562, 3.07812, 3.14062, 3.20312, 3.26562, 3.32812, - (2,54): 3.39062, 3.45312, 3.51562, 3.57812, 3.64062, 3.70312, 3.76562, - (2,61): 3.82812, 3.89062, 3.95312, 4.01562, 4.07812, 4.14062, 4.20312, - (2,68): 4.26562, 4.32812, 4.39062, 4.45312, 4.51562, 4.57812, 4.64062, - (2,75): 4.70312, 4.76562, 4.82812, 4.89062, 4.95312, 5.01562, 5.07812, - (2,82): 5.14062, 5.20312, 5.26562, 5.32812, 5.39062, 5.45312, 5.51562, - (2,89): 5.57812, 5.64062, 5.70312, 5.76562, 5.82812, 5.89062, 5.95312, - (2,96): 6.01562, 6.07812, 6.14062, 6.20312, 6.26562, 6.32812, 6.39062, - (2,103): 6.45312, 6.51562, 6.57812, 6.64062, 6.70312, 6.76562, 6.82812, - (2,110): 6.89062, 6.95312, 7.01562, 7.07812, 7.14062, 7.20312, 7.26562, - (2,117): 7.32812, 7.39062, 7.45312, 7.51562, 7.57812, 7.64062, 7.70312, - (2,124): 7.76562, 7.82812, 7.89062, 7.95312, - (3,0): 125, 0.0859375, 0.148438, 0.210938, 0.273438, 0.335938, - (3,6): 0.398438, 0.460938, 0.523438, 0.585938, 0.648438, 0.710938, - (3,12): 0.773438, 0.835938, 0.898438, 0.960938, 1.02344, 1.08594, - (3,18): 1.14844, 1.21094, 1.27344, 1.33594, 1.39844, 1.46094, 1.52344, - (3,25): 1.58594, 1.64844, 1.71094, 1.77344, 1.83594, 1.89844, 1.96094, - (3,32): 2.02344, 2.08594, 2.14844, 2.21094, 2.27344, 2.33594, 2.39844, - (3,39): 2.46094, 2.52344, 2.58594, 2.64844, 2.71094, 2.77344, 2.83594, - (3,46): 2.89844, 2.96094, 3.02344, 3.08594, 3.14844, 3.21094, 3.27344, - (3,53): 3.33594, 3.39844, 3.46094, 3.52344, 3.58594, 3.64844, 3.71094, - (3,60): 3.77344, 3.83594, 3.89844, 3.96094, 4.02344, 4.08594, 4.14844, - (3,67): 4.21094, 4.27344, 4.33594, 4.39844, 4.46094, 4.52344, 4.58594, - (3,74): 4.64844, 4.71094, 4.77344, 4.83594, 4.89844, 4.96094, 5.02344, - (3,81): 5.08594, 5.14844, 5.21094, 5.27344, 5.33594, 5.39844, 5.46094, - (3,88): 5.52344, 5.58594, 5.64844, 5.71094, 5.77344, 5.83594, 5.89844, - (3,95): 5.96094, 6.02344, 6.08594, 6.14844, 6.21094, 6.27344, 6.33594, - (3,102): 6.39844, 6.46094, 6.52344, 6.58594, 6.64844, 6.71094, 6.77344, - (3,109): 6.83594, 6.89844, 6.96094, 7.02344, 7.08594, 7.14844, 7.21094, - (3,116): 7.27344, 7.33594, 7.39844, 7.46094, 7.52344, 7.58594, 7.64844, - (3,123): 7.71094, 7.77344, 7.83594, 7.89844, 7.96094, - (4,0): 124, 0.09375, 0.15625, 0.21875, 0.28125, 0.34375, 0.40625, - (4,7): 0.46875, 0.53125, 0.59375, 0.65625, 0.71875, 0.78125, 0.84375, - (4,14): 0.90625, 0.96875, 1.03125, 1.09375, 1.15625, 1.21875, 1.28125, - (4,21): 1.34375, 1.40625, 1.46875, 1.53125, 1.59375, 1.65625, 1.71875, - (4,28): 1.78125, 1.84375, 1.90625, 1.96875, 2.03125, 2.09375, 2.15625, - (4,35): 2.21875, 2.28125, 2.34375, 2.40625, 2.46875, 2.53125, 2.59375, - (4,42): 2.65625, 2.71875, 2.78125, 2.84375, 2.90625, 2.96875, 3.03125, - (4,49): 3.09375, 3.15625, 3.21875, 3.28125, 3.34375, 3.40625, 3.46875, - (4,56): 3.53125, 3.59375, 3.65625, 3.71875, 3.78125, 3.84375, 3.90625, - (4,63): 3.96875, 4.03125, 4.09375, 4.15625, 4.21875, 4.28125, 4.34375, - (4,70): 4.40625, 4.46875, 4.53125, 4.59375, 4.65625, 4.71875, 4.78125, - (4,77): 4.84375, 4.90625, 4.96875, 5.03125, 5.09375, 5.15625, 5.21875, - (4,84): 5.28125, 5.34375, 5.40625, 5.46875, 5.53125, 5.59375, 5.65625, - (4,91): 5.71875, 5.78125, 5.84375, 5.90625, 5.96875, 6.03125, 6.09375, - (4,98): 6.15625, 6.21875, 6.28125, 6.34375, 6.40625, 6.46875, 6.53125, - (4,105): 6.59375, 6.65625, 6.71875, 6.78125, 6.84375, 6.90625, 6.96875, - (4,112): 7.03125, 7.09375, 7.15625, 7.21875, 7.28125, 7.34375, 7.40625, - (4,119): 7.46875, 7.53125, 7.59375, 7.65625, 7.71875, 7.78125, 7.84375, - (4,126): 7.90625, 7.96875, - (5,0): 123, 0.101562, 0.164062, 0.226562, 0.289062, 0.351562, 0.414062, - (5,7): 0.476562, 0.539062, 0.601562, 0.664062, 0.726562, 0.789062, - (5,13): 0.851562, 0.914062, 0.976562, 1.03906, 1.10156, 1.16406, - (5,19): 1.22656, 1.28906, 1.35156, 1.41406, 1.47656, 1.53906, 1.60156, - (5,26): 1.66406, 1.72656, 1.78906, 1.85156, 1.91406, 1.97656, 2.03906, - (5,33): 2.10156, 2.16406, 2.22656, 2.28906, 2.35156, 2.41406, 2.47656, - (5,40): 2.53906, 2.60156, 2.66406, 2.72656, 2.78906, 2.85156, 2.91406, - (5,47): 2.97656, 3.03906, 3.10156, 3.16406, 3.22656, 3.28906, 3.35156, - (5,54): 3.41406, 3.47656, 3.53906, 3.60156, 3.66406, 3.72656, 3.78906, - (5,61): 3.85156, 3.91406, 3.97656, 4.03906, 4.10156, 4.16406, 4.22656, - (5,68): 4.28906, 4.35156, 4.41406, 4.47656, 4.53906, 4.60156, 4.66406, - (5,75): 4.72656, 4.78906, 4.85156, 4.91406, 4.97656, 5.03906, 5.10156, - (5,82): 5.16406, 5.22656, 5.28906, 5.35156, 5.41406, 5.47656, 5.53906, - (5,89): 5.60156, 5.66406, 5.72656, 5.78906, 5.85156, 5.91406, 5.97656, - (5,96): 6.03906, 6.10156, 6.16406, 6.22656, 6.28906, 6.35156, 6.41406, - (5,103): 6.47656, 6.53906, 6.60156, 6.66406, 6.72656, 6.78906, 6.85156, - (5,110): 6.91406, 6.97656, 7.03906, 7.10156, 7.16406, 7.22656, 7.28906, - (5,117): 7.35156, 7.41406, 7.47656, 7.53906, 7.60156, 7.66406, 7.72656, - (5,124): 7.78906, 7.85156, 7.91406, 7.97656, - (6,0): 122, 0.109375, 0.171875, 0.234375, 0.296875, 0.359375, 0.421875, - (6,7): 0.484375, 0.546875, 0.609375, 0.671875, 0.734375, 0.796875, - (6,13): 0.859375, 0.921875, 0.984375, 1.04688, 1.10938, 1.17188, - (6,19): 1.23438, 1.29688, 1.35938, 1.42188, 1.48438, 1.54688, 1.60938, - (6,26): 1.67188, 1.73438, 1.79688, 1.85938, 1.92188, 1.98438, 2.04688, - (6,33): 2.10938, 2.17188, 2.23438, 2.29688, 2.35938, 2.42188, 2.48438, - (6,40): 2.54688, 2.60938, 2.67188, 2.73438, 2.79688, 2.85938, 2.92188, - (6,47): 2.98438, 3.04688, 3.10938, 3.17188, 3.23438, 3.29688, 3.35938, - (6,54): 3.42188, 3.48438, 3.54688, 3.60938, 3.67188, 3.73438, 3.79688, - (6,61): 3.85938, 3.92188, 3.98438, 4.04688, 4.10938, 4.17188, 4.23438, - (6,68): 4.29688, 4.35938, 4.42188, 4.48438, 4.54688, 4.60938, 4.67188, - (6,75): 4.73438, 4.79688, 4.85938, 4.92188, 4.98438, 5.04688, 5.10938, - (6,82): 5.17188, 5.23438, 5.29688, 5.35938, 5.42188, 5.48438, 5.54688, - (6,89): 5.60938, 5.67188, 5.73438, 5.79688, 5.85938, 5.92188, 5.98438, - (6,96): 6.04688, 6.10938, 6.17188, 6.23438, 6.29688, 6.35938, 6.42188, - (6,103): 6.48438, 6.54688, 6.60938, 6.67188, 6.73438, 6.79688, 6.85938, - (6,110): 6.92188, 6.98438, 7.04688, 7.10938, 7.17188, 7.23438, 7.29688, - (6,117): 7.35938, 7.42188, 7.48438, 7.54688, 7.60938, 7.67188, 7.73438, - (6,124): 7.79688, 7.85938, 7.92188, 7.98438, - (7,0): 121, 0.117188, 0.179688, 0.242188, 0.304688, 0.367188, 0.429688, - (7,7): 0.492188, 0.554688, 0.617188, 0.679688, 0.742188, 0.804688, - (7,13): 0.867188, 0.929688, 0.992188, 1.05469, 1.11719, 1.17969, - (7,19): 1.24219, 1.30469, 1.36719, 1.42969, 1.49219, 1.55469, 1.61719, - (7,26): 1.67969, 1.74219, 1.80469, 1.86719, 1.92969, 1.99219, 2.05469, - (7,33): 2.11719, 2.17969, 2.24219, 2.30469, 2.36719, 2.42969, 2.49219, - (7,40): 2.55469, 2.61719, 2.67969, 2.74219, 2.80469, 2.86719, 2.92969, - (7,47): 2.99219, 3.05469, 3.11719, 3.17969, 3.24219, 3.30469, 3.36719, - (7,54): 3.42969, 3.49219, 3.55469, 3.61719, 3.67969, 3.74219, 3.80469, - (7,61): 3.86719, 3.92969, 3.99219, 4.05469, 4.11719, 4.17969, 4.24219, - (7,68): 4.30469, 4.36719, 4.42969, 4.49219, 4.55469, 4.61719, 4.67969, - (7,75): 4.74219, 4.80469, 4.86719, 4.92969, 4.99219, 5.05469, 5.11719, - (7,82): 5.17969, 5.24219, 5.30469, 5.36719, 5.42969, 5.49219, 5.55469, - (7,89): 5.61719, 5.67969, 5.74219, 5.80469, 5.86719, 5.92969, 5.99219, - (7,96): 6.05469, 6.11719, 6.17969, 6.24219, 6.30469, 6.36719, 6.42969, - (7,103): 6.49219, 6.55469, 6.61719, 6.67969, 6.74219, 6.80469, 6.86719, - (7,110): 6.92969, 6.99219, 7.05469, 7.11719, 7.17969, 7.24219, 7.30469, - (7,117): 7.36719, 7.42969, 7.49219, 7.55469, 7.61719, 7.67969, 7.74219, - (7,124): 7.80469, 7.86719, 7.92969, 7.99219 + (0,9): 0.5625, 0.625, 0.6875, 0.75, 0.8125, 0.875, 0.9375, 1, 1.062, + (0,18): 1.125, 1.188, 1.25, 1.312, 1.375, 1.438, 1.5, 1.562, 1.625, + (0,27): 1.688, 1.75, 1.812, 1.875, 1.938, 2, 2.062, 2.125, 2.188, 2.25, + (0,37): 2.312, 2.375, 2.438, 2.5, 2.562, 2.625, 2.688, 2.75, 2.812, + (0,46): 2.875, 2.938, 3, 3.062, 3.125, 3.188, 3.25, 3.312, 3.375, + (0,55): 3.438, 3.5, 3.562, 3.625, 3.688, 3.75, 3.812, 3.875, 3.938, 4, + (0,65): 4.062, 4.125, 4.188, 4.25, 4.312, 4.375, 4.438, 4.5, 4.562, + (0,74): 4.625, 4.688, 4.75, 4.812, 4.875, 4.938, 5, 5.062, 5.125, + (0,83): 5.188, 5.25, 5.312, 5.375, 5.438, 5.5, 5.562, 5.625, 5.688, + (0,92): 5.75, 5.812, 5.875, 5.938, 6, 6.062, 6.125, 6.188, 6.25, 6.312, + (0,102): 6.375, 6.438, 6.5, 6.562, 6.625, 6.688, 6.75, 6.812, 6.875, + (0,111): 6.938, 7, 7.062, 7.125, 7.188, 7.25, 7.312, 7.375, 7.438, 7.5, + (0,121): 7.562, 7.625, 7.688, 7.75, 7.812, 7.875, 7.938, + (1,0): 127, 0.07031, 0.1328, 0.1953, 0.2578, 0.3203, 0.3828, 0.4453, + (1,8): 0.5078, 0.5703, 0.6328, 0.6953, 0.7578, 0.8203, 0.8828, 0.9453, + (1,16): 1.008, 1.07, 1.133, 1.195, 1.258, 1.32, 1.383, 1.445, 1.508, + (1,25): 1.57, 1.633, 1.695, 1.758, 1.82, 1.883, 1.945, 2.008, 2.07, + (1,34): 2.133, 2.195, 2.258, 2.32, 2.383, 2.445, 2.508, 2.57, 2.633, + (1,43): 2.695, 2.758, 2.82, 2.883, 2.945, 3.008, 3.07, 3.133, 3.195, + (1,52): 3.258, 3.32, 3.383, 3.445, 3.508, 3.57, 3.633, 3.695, 3.758, + (1,61): 3.82, 3.883, 3.945, 4.008, 4.07, 4.133, 4.195, 4.258, 4.32, + (1,70): 4.383, 4.445, 4.508, 4.57, 4.633, 4.695, 4.758, 4.82, 4.883, + (1,79): 4.945, 5.008, 5.07, 5.133, 5.195, 5.258, 5.32, 5.383, 5.445, + (1,88): 5.508, 5.57, 5.633, 5.695, 5.758, 5.82, 5.883, 5.945, 6.008, + (1,97): 6.07, 6.133, 6.195, 6.258, 6.32, 6.383, 6.445, 6.508, 6.57, + (1,106): 6.633, 6.695, 6.758, 6.82, 6.883, 6.945, 7.008, 7.07, 7.133, + (1,115): 7.195, 7.258, 7.32, 7.383, 7.445, 7.508, 7.57, 7.633, 7.695, + (1,124): 7.758, 7.82, 7.883, 7.945, + (2,0): 126, 0.07812, 0.1406, 0.2031, 0.2656, 0.3281, 0.3906, 0.4531, + (2,8): 0.5156, 0.5781, 0.6406, 0.7031, 0.7656, 0.8281, 0.8906, 0.9531, + (2,16): 1.016, 1.078, 1.141, 1.203, 1.266, 1.328, 1.391, 1.453, 1.516, + (2,25): 1.578, 1.641, 1.703, 1.766, 1.828, 1.891, 1.953, 2.016, 2.078, + (2,34): 2.141, 2.203, 2.266, 2.328, 2.391, 2.453, 2.516, 2.578, 2.641, + (2,43): 2.703, 2.766, 2.828, 2.891, 2.953, 3.016, 3.078, 3.141, 3.203, + (2,52): 3.266, 3.328, 3.391, 3.453, 3.516, 3.578, 3.641, 3.703, 3.766, + (2,61): 3.828, 3.891, 3.953, 4.016, 4.078, 4.141, 4.203, 4.266, 4.328, + (2,70): 4.391, 4.453, 4.516, 4.578, 4.641, 4.703, 4.766, 4.828, 4.891, + (2,79): 4.953, 5.016, 5.078, 5.141, 5.203, 5.266, 5.328, 5.391, 5.453, + (2,88): 5.516, 5.578, 5.641, 5.703, 5.766, 5.828, 5.891, 5.953, 6.016, + (2,97): 6.078, 6.141, 6.203, 6.266, 6.328, 6.391, 6.453, 6.516, 6.578, + (2,106): 6.641, 6.703, 6.766, 6.828, 6.891, 6.953, 7.016, 7.078, 7.141, + (2,115): 7.203, 7.266, 7.328, 7.391, 7.453, 7.516, 7.578, 7.641, 7.703, + (2,124): 7.766, 7.828, 7.891, 7.953, + (3,0): 125, 0.08594, 0.1484, 0.2109, 0.2734, 0.3359, 0.3984, 0.4609, + (3,8): 0.5234, 0.5859, 0.6484, 0.7109, 0.7734, 0.8359, 0.8984, 0.9609, + (3,16): 1.023, 1.086, 1.148, 1.211, 1.273, 1.336, 1.398, 1.461, 1.523, + (3,25): 1.586, 1.648, 1.711, 1.773, 1.836, 1.898, 1.961, 2.023, 2.086, + (3,34): 2.148, 2.211, 2.273, 2.336, 2.398, 2.461, 2.523, 2.586, 2.648, + (3,43): 2.711, 2.773, 2.836, 2.898, 2.961, 3.023, 3.086, 3.148, 3.211, + (3,52): 3.273, 3.336, 3.398, 3.461, 3.523, 3.586, 3.648, 3.711, 3.773, + (3,61): 3.836, 3.898, 3.961, 4.023, 4.086, 4.148, 4.211, 4.273, 4.336, + (3,70): 4.398, 4.461, 4.523, 4.586, 4.648, 4.711, 4.773, 4.836, 4.898, + (3,79): 4.961, 5.023, 5.086, 5.148, 5.211, 5.273, 5.336, 5.398, 5.461, + (3,88): 5.523, 5.586, 5.648, 5.711, 5.773, 5.836, 5.898, 5.961, 6.023, + (3,97): 6.086, 6.148, 6.211, 6.273, 6.336, 6.398, 6.461, 6.523, 6.586, + (3,106): 6.648, 6.711, 6.773, 6.836, 6.898, 6.961, 7.023, 7.086, 7.148, + (3,115): 7.211, 7.273, 7.336, 7.398, 7.461, 7.523, 7.586, 7.648, 7.711, + (3,124): 7.773, 7.836, 7.898, 7.961, + (4,0): 124, 0.09375, 0.1562, 0.2188, 0.2812, 0.3438, 0.4062, 0.4688, + (4,8): 0.5312, 0.5938, 0.6562, 0.7188, 0.7812, 0.8438, 0.9062, 0.9688, + (4,16): 1.031, 1.094, 1.156, 1.219, 1.281, 1.344, 1.406, 1.469, 1.531, + (4,25): 1.594, 1.656, 1.719, 1.781, 1.844, 1.906, 1.969, 2.031, 2.094, + (4,34): 2.156, 2.219, 2.281, 2.344, 2.406, 2.469, 2.531, 2.594, 2.656, + (4,43): 2.719, 2.781, 2.844, 2.906, 2.969, 3.031, 3.094, 3.156, 3.219, + (4,52): 3.281, 3.344, 3.406, 3.469, 3.531, 3.594, 3.656, 3.719, 3.781, + (4,61): 3.844, 3.906, 3.969, 4.031, 4.094, 4.156, 4.219, 4.281, 4.344, + (4,70): 4.406, 4.469, 4.531, 4.594, 4.656, 4.719, 4.781, 4.844, 4.906, + (4,79): 4.969, 5.031, 5.094, 5.156, 5.219, 5.281, 5.344, 5.406, 5.469, + (4,88): 5.531, 5.594, 5.656, 5.719, 5.781, 5.844, 5.906, 5.969, 6.031, + (4,97): 6.094, 6.156, 6.219, 6.281, 6.344, 6.406, 6.469, 6.531, 6.594, + (4,106): 6.656, 6.719, 6.781, 6.844, 6.906, 6.969, 7.031, 7.094, 7.156, + (4,115): 7.219, 7.281, 7.344, 7.406, 7.469, 7.531, 7.594, 7.656, 7.719, + (4,124): 7.781, 7.844, 7.906, 7.969, + (5,0): 123, 0.1016, 0.1641, 0.2266, 0.2891, 0.3516, 0.4141, 0.4766, + (5,8): 0.5391, 0.6016, 0.6641, 0.7266, 0.7891, 0.8516, 0.9141, 0.9766, + (5,16): 1.039, 1.102, 1.164, 1.227, 1.289, 1.352, 1.414, 1.477, 1.539, + (5,25): 1.602, 1.664, 1.727, 1.789, 1.852, 1.914, 1.977, 2.039, 2.102, + (5,34): 2.164, 2.227, 2.289, 2.352, 2.414, 2.477, 2.539, 2.602, 2.664, + (5,43): 2.727, 2.789, 2.852, 2.914, 2.977, 3.039, 3.102, 3.164, 3.227, + (5,52): 3.289, 3.352, 3.414, 3.477, 3.539, 3.602, 3.664, 3.727, 3.789, + (5,61): 3.852, 3.914, 3.977, 4.039, 4.102, 4.164, 4.227, 4.289, 4.352, + (5,70): 4.414, 4.477, 4.539, 4.602, 4.664, 4.727, 4.789, 4.852, 4.914, + (5,79): 4.977, 5.039, 5.102, 5.164, 5.227, 5.289, 5.352, 5.414, 5.477, + (5,88): 5.539, 5.602, 5.664, 5.727, 5.789, 5.852, 5.914, 5.977, 6.039, + (5,97): 6.102, 6.164, 6.227, 6.289, 6.352, 6.414, 6.477, 6.539, 6.602, + (5,106): 6.664, 6.727, 6.789, 6.852, 6.914, 6.977, 7.039, 7.102, 7.164, + (5,115): 7.227, 7.289, 7.352, 7.414, 7.477, 7.539, 7.602, 7.664, 7.727, + (5,124): 7.789, 7.852, 7.914, 7.977, + (6,0): 122, 0.1094, 0.1719, 0.2344, 0.2969, 0.3594, 0.4219, 0.4844, + (6,8): 0.5469, 0.6094, 0.6719, 0.7344, 0.7969, 0.8594, 0.9219, 0.9844, + (6,16): 1.047, 1.109, 1.172, 1.234, 1.297, 1.359, 1.422, 1.484, 1.547, + (6,25): 1.609, 1.672, 1.734, 1.797, 1.859, 1.922, 1.984, 2.047, 2.109, + (6,34): 2.172, 2.234, 2.297, 2.359, 2.422, 2.484, 2.547, 2.609, 2.672, + (6,43): 2.734, 2.797, 2.859, 2.922, 2.984, 3.047, 3.109, 3.172, 3.234, + (6,52): 3.297, 3.359, 3.422, 3.484, 3.547, 3.609, 3.672, 3.734, 3.797, + (6,61): 3.859, 3.922, 3.984, 4.047, 4.109, 4.172, 4.234, 4.297, 4.359, + (6,70): 4.422, 4.484, 4.547, 4.609, 4.672, 4.734, 4.797, 4.859, 4.922, + (6,79): 4.984, 5.047, 5.109, 5.172, 5.234, 5.297, 5.359, 5.422, 5.484, + (6,88): 5.547, 5.609, 5.672, 5.734, 5.797, 5.859, 5.922, 5.984, 6.047, + (6,97): 6.109, 6.172, 6.234, 6.297, 6.359, 6.422, 6.484, 6.547, 6.609, + (6,106): 6.672, 6.734, 6.797, 6.859, 6.922, 6.984, 7.047, 7.109, 7.172, + (6,115): 7.234, 7.297, 7.359, 7.422, 7.484, 7.547, 7.609, 7.672, 7.734, + (6,124): 7.797, 7.859, 7.922, 7.984, + (7,0): 121, 0.1172, 0.1797, 0.2422, 0.3047, 0.3672, 0.4297, 0.4922, + (7,8): 0.5547, 0.6172, 0.6797, 0.7422, 0.8047, 0.8672, 0.9297, 0.9922, + (7,16): 1.055, 1.117, 1.18, 1.242, 1.305, 1.367, 1.43, 1.492, 1.555, + (7,25): 1.617, 1.68, 1.742, 1.805, 1.867, 1.93, 1.992, 2.055, 2.117, + (7,34): 2.18, 2.242, 2.305, 2.367, 2.43, 2.492, 2.555, 2.617, 2.68, + (7,43): 2.742, 2.805, 2.867, 2.93, 2.992, 3.055, 3.117, 3.18, 3.242, + (7,52): 3.305, 3.367, 3.43, 3.492, 3.555, 3.617, 3.68, 3.742, 3.805, + (7,61): 3.867, 3.93, 3.992, 4.055, 4.117, 4.18, 4.242, 4.305, 4.367, + (7,70): 4.43, 4.492, 4.555, 4.617, 4.68, 4.742, 4.805, 4.867, 4.93, + (7,79): 4.992, 5.055, 5.117, 5.18, 5.242, 5.305, 5.367, 5.43, 5.492, + (7,88): 5.555, 5.617, 5.68, 5.742, 5.805, 5.867, 5.93, 5.992, 6.055, + (7,97): 6.117, 6.18, 6.242, 6.305, 6.367, 6.43, 6.492, 6.555, 6.617, + (7,106): 6.68, 6.742, 6.805, 6.867, 6.93, 6.992, 7.055, 7.117, 7.18, + (7,115): 7.242, 7.305, 7.367, 7.43, 7.492, 7.555, 7.617, 7.68, 7.742, + (7,124): 7.805, 7.867, 7.93, 7.992 } ATTRIBUTE "DS128BITS" { DATATYPE 128-bit little-endian floating-point 80-bit precision DATASPACE SIMPLE { ( 1024 ) / ( 1024 ) } DATA { (0): 128, 0.0625, 0.125, 0.1875, 0.25, 0.3125, 0.375, 0.4375, 0.5, - (9): 0.5625, 0.625, 0.6875, 0.75, 0.8125, 0.875, 0.9375, 1, 1.0625, - (18): 1.125, 1.1875, 1.25, 1.3125, 1.375, 1.4375, 1.5, 1.5625, - (26): 1.625, 1.6875, 1.75, 1.8125, 1.875, 1.9375, 2, 2.0625, 2.125, - (35): 2.1875, 2.25, 2.3125, 2.375, 2.4375, 2.5, 2.5625, 2.625, - (43): 2.6875, 2.75, 2.8125, 2.875, 2.9375, 3, 3.0625, 3.125, 3.1875, - (52): 3.25, 3.3125, 3.375, 3.4375, 3.5, 3.5625, 3.625, 3.6875, 3.75, - (61): 3.8125, 3.875, 3.9375, 4, 4.0625, 4.125, 4.1875, 4.25, 4.3125, - (70): 4.375, 4.4375, 4.5, 4.5625, 4.625, 4.6875, 4.75, 4.8125, - (78): 4.875, 4.9375, 5, 5.0625, 5.125, 5.1875, 5.25, 5.3125, 5.375, - (87): 5.4375, 5.5, 5.5625, 5.625, 5.6875, 5.75, 5.8125, 5.875, - (95): 5.9375, 6, 6.0625, 6.125, 6.1875, 6.25, 6.3125, 6.375, 6.4375, - (104): 6.5, 6.5625, 6.625, 6.6875, 6.75, 6.8125, 6.875, 6.9375, 7, - (113): 7.0625, 7.125, 7.1875, 7.25, 7.3125, 7.375, 7.4375, 7.5, - (121): 7.5625, 7.625, 7.6875, 7.75, 7.8125, 7.875, 7.9375, 127, - (129): 0.0703125, 0.132812, 0.195312, 0.257812, 0.320312, 0.382812, - (135): 0.445312, 0.507812, 0.570312, 0.632812, 0.695312, 0.757812, - (141): 0.820312, 0.882812, 0.945312, 1.00781, 1.07031, 1.13281, - (147): 1.19531, 1.25781, 1.32031, 1.38281, 1.44531, 1.50781, - (153): 1.57031, 1.63281, 1.69531, 1.75781, 1.82031, 1.88281, - (159): 1.94531, 2.00781, 2.07031, 2.13281, 2.19531, 2.25781, - (165): 2.32031, 2.38281, 2.44531, 2.50781, 2.57031, 2.63281, - (171): 2.69531, 2.75781, 2.82031, 2.88281, 2.94531, 3.00781, - (177): 3.07031, 3.13281, 3.19531, 3.25781, 3.32031, 3.38281, - (183): 3.44531, 3.50781, 3.57031, 3.63281, 3.69531, 3.75781, - (189): 3.82031, 3.88281, 3.94531, 4.00781, 4.07031, 4.13281, - (195): 4.19531, 4.25781, 4.32031, 4.38281, 4.44531, 4.50781, - (201): 4.57031, 4.63281, 4.69531, 4.75781, 4.82031, 4.88281, - (207): 4.94531, 5.00781, 5.07031, 5.13281, 5.19531, 5.25781, - (213): 5.32031, 5.38281, 5.44531, 5.50781, 5.57031, 5.63281, - (219): 5.69531, 5.75781, 5.82031, 5.88281, 5.94531, 6.00781, - (225): 6.07031, 6.13281, 6.19531, 6.25781, 6.32031, 6.38281, - (231): 6.44531, 6.50781, 6.57031, 6.63281, 6.69531, 6.75781, - (237): 6.82031, 6.88281, 6.94531, 7.00781, 7.07031, 7.13281, - (243): 7.19531, 7.25781, 7.32031, 7.38281, 7.44531, 7.50781, - (249): 7.57031, 7.63281, 7.69531, 7.75781, 7.82031, 7.88281, - (255): 7.94531, 126, 0.078125, 0.140625, 0.203125, 0.265625, - (261): 0.328125, 0.390625, 0.453125, 0.515625, 0.578125, 0.640625, - (267): 0.703125, 0.765625, 0.828125, 0.890625, 0.953125, 1.01562, - (273): 1.07812, 1.14062, 1.20312, 1.26562, 1.32812, 1.39062, - (279): 1.45312, 1.51562, 1.57812, 1.64062, 1.70312, 1.76562, - (285): 1.82812, 1.89062, 1.95312, 2.01562, 2.07812, 2.14062, - (291): 2.20312, 2.26562, 2.32812, 2.39062, 2.45312, 2.51562, - (297): 2.57812, 2.64062, 2.70312, 2.76562, 2.82812, 2.89062, - (303): 2.95312, 3.01562, 3.07812, 3.14062, 3.20312, 3.26562, - (309): 3.32812, 3.39062, 3.45312, 3.51562, 3.57812, 3.64062, - (315): 3.70312, 3.76562, 3.82812, 3.89062, 3.95312, 4.01562, - (321): 4.07812, 4.14062, 4.20312, 4.26562, 4.32812, 4.39062, - (327): 4.45312, 4.51562, 4.57812, 4.64062, 4.70312, 4.76562, - (333): 4.82812, 4.89062, 4.95312, 5.01562, 5.07812, 5.14062, - (339): 5.20312, 5.26562, 5.32812, 5.39062, 5.45312, 5.51562, - (345): 5.57812, 5.64062, 5.70312, 5.76562, 5.82812, 5.89062, - (351): 5.95312, 6.01562, 6.07812, 6.14062, 6.20312, 6.26562, - (357): 6.32812, 6.39062, 6.45312, 6.51562, 6.57812, 6.64062, - (363): 6.70312, 6.76562, 6.82812, 6.89062, 6.95312, 7.01562, - (369): 7.07812, 7.14062, 7.20312, 7.26562, 7.32812, 7.39062, - (375): 7.45312, 7.51562, 7.57812, 7.64062, 7.70312, 7.76562, - (381): 7.82812, 7.89062, 7.95312, 125, 0.0859375, 0.148438, - (387): 0.210938, 0.273438, 0.335938, 0.398438, 0.460938, 0.523438, - (393): 0.585938, 0.648438, 0.710938, 0.773438, 0.835938, 0.898438, - (399): 0.960938, 1.02344, 1.08594, 1.14844, 1.21094, 1.27344, - (405): 1.33594, 1.39844, 1.46094, 1.52344, 1.58594, 1.64844, - (411): 1.71094, 1.77344, 1.83594, 1.89844, 1.96094, 2.02344, - (417): 2.08594, 2.14844, 2.21094, 2.27344, 2.33594, 2.39844, - (423): 2.46094, 2.52344, 2.58594, 2.64844, 2.71094, 2.77344, - (429): 2.83594, 2.89844, 2.96094, 3.02344, 3.08594, 3.14844, - (435): 3.21094, 3.27344, 3.33594, 3.39844, 3.46094, 3.52344, - (441): 3.58594, 3.64844, 3.71094, 3.77344, 3.83594, 3.89844, - (447): 3.96094, 4.02344, 4.08594, 4.14844, 4.21094, 4.27344, - (453): 4.33594, 4.39844, 4.46094, 4.52344, 4.58594, 4.64844, - (459): 4.71094, 4.77344, 4.83594, 4.89844, 4.96094, 5.02344, - (465): 5.08594, 5.14844, 5.21094, 5.27344, 5.33594, 5.39844, - (471): 5.46094, 5.52344, 5.58594, 5.64844, 5.71094, 5.77344, - (477): 5.83594, 5.89844, 5.96094, 6.02344, 6.08594, 6.14844, - (483): 6.21094, 6.27344, 6.33594, 6.39844, 6.46094, 6.52344, - (489): 6.58594, 6.64844, 6.71094, 6.77344, 6.83594, 6.89844, - (495): 6.96094, 7.02344, 7.08594, 7.14844, 7.21094, 7.27344, - (501): 7.33594, 7.39844, 7.46094, 7.52344, 7.58594, 7.64844, - (507): 7.71094, 7.77344, 7.83594, 7.89844, 7.96094, 124, 0.09375, - (514): 0.15625, 0.21875, 0.28125, 0.34375, 0.40625, 0.46875, - (520): 0.53125, 0.59375, 0.65625, 0.71875, 0.78125, 0.84375, - (526): 0.90625, 0.96875, 1.03125, 1.09375, 1.15625, 1.21875, - (532): 1.28125, 1.34375, 1.40625, 1.46875, 1.53125, 1.59375, - (538): 1.65625, 1.71875, 1.78125, 1.84375, 1.90625, 1.96875, - (544): 2.03125, 2.09375, 2.15625, 2.21875, 2.28125, 2.34375, - (550): 2.40625, 2.46875, 2.53125, 2.59375, 2.65625, 2.71875, - (556): 2.78125, 2.84375, 2.90625, 2.96875, 3.03125, 3.09375, - (562): 3.15625, 3.21875, 3.28125, 3.34375, 3.40625, 3.46875, - (568): 3.53125, 3.59375, 3.65625, 3.71875, 3.78125, 3.84375, - (574): 3.90625, 3.96875, 4.03125, 4.09375, 4.15625, 4.21875, - (580): 4.28125, 4.34375, 4.40625, 4.46875, 4.53125, 4.59375, - (586): 4.65625, 4.71875, 4.78125, 4.84375, 4.90625, 4.96875, - (592): 5.03125, 5.09375, 5.15625, 5.21875, 5.28125, 5.34375, - (598): 5.40625, 5.46875, 5.53125, 5.59375, 5.65625, 5.71875, - (604): 5.78125, 5.84375, 5.90625, 5.96875, 6.03125, 6.09375, - (610): 6.15625, 6.21875, 6.28125, 6.34375, 6.40625, 6.46875, - (616): 6.53125, 6.59375, 6.65625, 6.71875, 6.78125, 6.84375, - (622): 6.90625, 6.96875, 7.03125, 7.09375, 7.15625, 7.21875, - (628): 7.28125, 7.34375, 7.40625, 7.46875, 7.53125, 7.59375, - (634): 7.65625, 7.71875, 7.78125, 7.84375, 7.90625, 7.96875, 123, - (641): 0.101562, 0.164062, 0.226562, 0.289062, 0.351562, 0.414062, - (647): 0.476562, 0.539062, 0.601562, 0.664062, 0.726562, 0.789062, - (653): 0.851562, 0.914062, 0.976562, 1.03906, 1.10156, 1.16406, - (659): 1.22656, 1.28906, 1.35156, 1.41406, 1.47656, 1.53906, - (665): 1.60156, 1.66406, 1.72656, 1.78906, 1.85156, 1.91406, - (671): 1.97656, 2.03906, 2.10156, 2.16406, 2.22656, 2.28906, - (677): 2.35156, 2.41406, 2.47656, 2.53906, 2.60156, 2.66406, - (683): 2.72656, 2.78906, 2.85156, 2.91406, 2.97656, 3.03906, - (689): 3.10156, 3.16406, 3.22656, 3.28906, 3.35156, 3.41406, - (695): 3.47656, 3.53906, 3.60156, 3.66406, 3.72656, 3.78906, - (701): 3.85156, 3.91406, 3.97656, 4.03906, 4.10156, 4.16406, - (707): 4.22656, 4.28906, 4.35156, 4.41406, 4.47656, 4.53906, - (713): 4.60156, 4.66406, 4.72656, 4.78906, 4.85156, 4.91406, - (719): 4.97656, 5.03906, 5.10156, 5.16406, 5.22656, 5.28906, - (725): 5.35156, 5.41406, 5.47656, 5.53906, 5.60156, 5.66406, - (731): 5.72656, 5.78906, 5.85156, 5.91406, 5.97656, 6.03906, - (737): 6.10156, 6.16406, 6.22656, 6.28906, 6.35156, 6.41406, - (743): 6.47656, 6.53906, 6.60156, 6.66406, 6.72656, 6.78906, - (749): 6.85156, 6.91406, 6.97656, 7.03906, 7.10156, 7.16406, - (755): 7.22656, 7.28906, 7.35156, 7.41406, 7.47656, 7.53906, - (761): 7.60156, 7.66406, 7.72656, 7.78906, 7.85156, 7.91406, - (767): 7.97656, 122, 0.109375, 0.171875, 0.234375, 0.296875, - (773): 0.359375, 0.421875, 0.484375, 0.546875, 0.609375, 0.671875, - (779): 0.734375, 0.796875, 0.859375, 0.921875, 0.984375, 1.04688, - (785): 1.10938, 1.17188, 1.23438, 1.29688, 1.35938, 1.42188, - (791): 1.48438, 1.54688, 1.60938, 1.67188, 1.73438, 1.79688, - (797): 1.85938, 1.92188, 1.98438, 2.04688, 2.10938, 2.17188, - (803): 2.23438, 2.29688, 2.35938, 2.42188, 2.48438, 2.54688, - (809): 2.60938, 2.67188, 2.73438, 2.79688, 2.85938, 2.92188, - (815): 2.98438, 3.04688, 3.10938, 3.17188, 3.23438, 3.29688, - (821): 3.35938, 3.42188, 3.48438, 3.54688, 3.60938, 3.67188, - (827): 3.73438, 3.79688, 3.85938, 3.92188, 3.98438, 4.04688, - (833): 4.10938, 4.17188, 4.23438, 4.29688, 4.35938, 4.42188, - (839): 4.48438, 4.54688, 4.60938, 4.67188, 4.73438, 4.79688, - (845): 4.85938, 4.92188, 4.98438, 5.04688, 5.10938, 5.17188, - (851): 5.23438, 5.29688, 5.35938, 5.42188, 5.48438, 5.54688, - (857): 5.60938, 5.67188, 5.73438, 5.79688, 5.85938, 5.92188, - (863): 5.98438, 6.04688, 6.10938, 6.17188, 6.23438, 6.29688, - (869): 6.35938, 6.42188, 6.48438, 6.54688, 6.60938, 6.67188, - (875): 6.73438, 6.79688, 6.85938, 6.92188, 6.98438, 7.04688, - (881): 7.10938, 7.17188, 7.23438, 7.29688, 7.35938, 7.42188, - (887): 7.48438, 7.54688, 7.60938, 7.67188, 7.73438, 7.79688, - (893): 7.85938, 7.92188, 7.98438, 121, 0.117188, 0.179688, 0.242188, - (900): 0.304688, 0.367188, 0.429688, 0.492188, 0.554688, 0.617188, - (906): 0.679688, 0.742188, 0.804688, 0.867188, 0.929688, 0.992188, - (912): 1.05469, 1.11719, 1.17969, 1.24219, 1.30469, 1.36719, - (918): 1.42969, 1.49219, 1.55469, 1.61719, 1.67969, 1.74219, - (924): 1.80469, 1.86719, 1.92969, 1.99219, 2.05469, 2.11719, - (930): 2.17969, 2.24219, 2.30469, 2.36719, 2.42969, 2.49219, - (936): 2.55469, 2.61719, 2.67969, 2.74219, 2.80469, 2.86719, - (942): 2.92969, 2.99219, 3.05469, 3.11719, 3.17969, 3.24219, - (948): 3.30469, 3.36719, 3.42969, 3.49219, 3.55469, 3.61719, - (954): 3.67969, 3.74219, 3.80469, 3.86719, 3.92969, 3.99219, - (960): 4.05469, 4.11719, 4.17969, 4.24219, 4.30469, 4.36719, - (966): 4.42969, 4.49219, 4.55469, 4.61719, 4.67969, 4.74219, - (972): 4.80469, 4.86719, 4.92969, 4.99219, 5.05469, 5.11719, - (978): 5.17969, 5.24219, 5.30469, 5.36719, 5.42969, 5.49219, - (984): 5.55469, 5.61719, 5.67969, 5.74219, 5.80469, 5.86719, - (990): 5.92969, 5.99219, 6.05469, 6.11719, 6.17969, 6.24219, - (996): 6.30469, 6.36719, 6.42969, 6.49219, 6.55469, 6.61719, - (1002): 6.67969, 6.74219, 6.80469, 6.86719, 6.92969, 6.99219, - (1008): 7.05469, 7.11719, 7.17969, 7.24219, 7.30469, 7.36719, - (1014): 7.42969, 7.49219, 7.55469, 7.61719, 7.67969, 7.74219, - (1020): 7.80469, 7.86719, 7.92969, 7.99219 + (9): 0.5625, 0.625, 0.6875, 0.75, 0.8125, 0.875, 0.9375, 1, 1.062, + (18): 1.125, 1.188, 1.25, 1.312, 1.375, 1.438, 1.5, 1.562, 1.625, + (27): 1.688, 1.75, 1.812, 1.875, 1.938, 2, 2.062, 2.125, 2.188, + (36): 2.25, 2.312, 2.375, 2.438, 2.5, 2.562, 2.625, 2.688, 2.75, + (45): 2.812, 2.875, 2.938, 3, 3.062, 3.125, 3.188, 3.25, 3.312, + (54): 3.375, 3.438, 3.5, 3.562, 3.625, 3.688, 3.75, 3.812, 3.875, + (63): 3.938, 4, 4.062, 4.125, 4.188, 4.25, 4.312, 4.375, 4.438, 4.5, + (73): 4.562, 4.625, 4.688, 4.75, 4.812, 4.875, 4.938, 5, 5.062, + (82): 5.125, 5.188, 5.25, 5.312, 5.375, 5.438, 5.5, 5.562, 5.625, + (91): 5.688, 5.75, 5.812, 5.875, 5.938, 6, 6.062, 6.125, 6.188, + (100): 6.25, 6.312, 6.375, 6.438, 6.5, 6.562, 6.625, 6.688, 6.75, + (109): 6.812, 6.875, 6.938, 7, 7.062, 7.125, 7.188, 7.25, 7.312, + (118): 7.375, 7.438, 7.5, 7.562, 7.625, 7.688, 7.75, 7.812, 7.875, + (127): 7.938, 127, 0.07031, 0.1328, 0.1953, 0.2578, 0.3203, 0.3828, + (135): 0.4453, 0.5078, 0.5703, 0.6328, 0.6953, 0.7578, 0.8203, + (142): 0.8828, 0.9453, 1.008, 1.07, 1.133, 1.195, 1.258, 1.32, + (150): 1.383, 1.445, 1.508, 1.57, 1.633, 1.695, 1.758, 1.82, 1.883, + (159): 1.945, 2.008, 2.07, 2.133, 2.195, 2.258, 2.32, 2.383, 2.445, + (168): 2.508, 2.57, 2.633, 2.695, 2.758, 2.82, 2.883, 2.945, 3.008, + (177): 3.07, 3.133, 3.195, 3.258, 3.32, 3.383, 3.445, 3.508, 3.57, + (186): 3.633, 3.695, 3.758, 3.82, 3.883, 3.945, 4.008, 4.07, 4.133, + (195): 4.195, 4.258, 4.32, 4.383, 4.445, 4.508, 4.57, 4.633, 4.695, + (204): 4.758, 4.82, 4.883, 4.945, 5.008, 5.07, 5.133, 5.195, 5.258, + (213): 5.32, 5.383, 5.445, 5.508, 5.57, 5.633, 5.695, 5.758, 5.82, + (222): 5.883, 5.945, 6.008, 6.07, 6.133, 6.195, 6.258, 6.32, 6.383, + (231): 6.445, 6.508, 6.57, 6.633, 6.695, 6.758, 6.82, 6.883, 6.945, + (240): 7.008, 7.07, 7.133, 7.195, 7.258, 7.32, 7.383, 7.445, 7.508, + (249): 7.57, 7.633, 7.695, 7.758, 7.82, 7.883, 7.945, 126, 0.07812, + (258): 0.1406, 0.2031, 0.2656, 0.3281, 0.3906, 0.4531, 0.5156, + (265): 0.5781, 0.6406, 0.7031, 0.7656, 0.8281, 0.8906, 0.9531, + (272): 1.016, 1.078, 1.141, 1.203, 1.266, 1.328, 1.391, 1.453, + (280): 1.516, 1.578, 1.641, 1.703, 1.766, 1.828, 1.891, 1.953, + (288): 2.016, 2.078, 2.141, 2.203, 2.266, 2.328, 2.391, 2.453, + (296): 2.516, 2.578, 2.641, 2.703, 2.766, 2.828, 2.891, 2.953, + (304): 3.016, 3.078, 3.141, 3.203, 3.266, 3.328, 3.391, 3.453, + (312): 3.516, 3.578, 3.641, 3.703, 3.766, 3.828, 3.891, 3.953, + (320): 4.016, 4.078, 4.141, 4.203, 4.266, 4.328, 4.391, 4.453, + (328): 4.516, 4.578, 4.641, 4.703, 4.766, 4.828, 4.891, 4.953, + (336): 5.016, 5.078, 5.141, 5.203, 5.266, 5.328, 5.391, 5.453, + (344): 5.516, 5.578, 5.641, 5.703, 5.766, 5.828, 5.891, 5.953, + (352): 6.016, 6.078, 6.141, 6.203, 6.266, 6.328, 6.391, 6.453, + (360): 6.516, 6.578, 6.641, 6.703, 6.766, 6.828, 6.891, 6.953, + (368): 7.016, 7.078, 7.141, 7.203, 7.266, 7.328, 7.391, 7.453, + (376): 7.516, 7.578, 7.641, 7.703, 7.766, 7.828, 7.891, 7.953, 125, + (385): 0.08594, 0.1484, 0.2109, 0.2734, 0.3359, 0.3984, 0.4609, + (392): 0.5234, 0.5859, 0.6484, 0.7109, 0.7734, 0.8359, 0.8984, + (399): 0.9609, 1.023, 1.086, 1.148, 1.211, 1.273, 1.336, 1.398, + (407): 1.461, 1.523, 1.586, 1.648, 1.711, 1.773, 1.836, 1.898, + (415): 1.961, 2.023, 2.086, 2.148, 2.211, 2.273, 2.336, 2.398, + (423): 2.461, 2.523, 2.586, 2.648, 2.711, 2.773, 2.836, 2.898, + (431): 2.961, 3.023, 3.086, 3.148, 3.211, 3.273, 3.336, 3.398, + (439): 3.461, 3.523, 3.586, 3.648, 3.711, 3.773, 3.836, 3.898, + (447): 3.961, 4.023, 4.086, 4.148, 4.211, 4.273, 4.336, 4.398, + (455): 4.461, 4.523, 4.586, 4.648, 4.711, 4.773, 4.836, 4.898, + (463): 4.961, 5.023, 5.086, 5.148, 5.211, 5.273, 5.336, 5.398, + (471): 5.461, 5.523, 5.586, 5.648, 5.711, 5.773, 5.836, 5.898, + (479): 5.961, 6.023, 6.086, 6.148, 6.211, 6.273, 6.336, 6.398, + (487): 6.461, 6.523, 6.586, 6.648, 6.711, 6.773, 6.836, 6.898, + (495): 6.961, 7.023, 7.086, 7.148, 7.211, 7.273, 7.336, 7.398, + (503): 7.461, 7.523, 7.586, 7.648, 7.711, 7.773, 7.836, 7.898, + (511): 7.961, 124, 0.09375, 0.1562, 0.2188, 0.2812, 0.3438, 0.4062, + (519): 0.4688, 0.5312, 0.5938, 0.6562, 0.7188, 0.7812, 0.8438, + (526): 0.9062, 0.9688, 1.031, 1.094, 1.156, 1.219, 1.281, 1.344, + (534): 1.406, 1.469, 1.531, 1.594, 1.656, 1.719, 1.781, 1.844, + (542): 1.906, 1.969, 2.031, 2.094, 2.156, 2.219, 2.281, 2.344, + (550): 2.406, 2.469, 2.531, 2.594, 2.656, 2.719, 2.781, 2.844, + (558): 2.906, 2.969, 3.031, 3.094, 3.156, 3.219, 3.281, 3.344, + (566): 3.406, 3.469, 3.531, 3.594, 3.656, 3.719, 3.781, 3.844, + (574): 3.906, 3.969, 4.031, 4.094, 4.156, 4.219, 4.281, 4.344, + (582): 4.406, 4.469, 4.531, 4.594, 4.656, 4.719, 4.781, 4.844, + (590): 4.906, 4.969, 5.031, 5.094, 5.156, 5.219, 5.281, 5.344, + (598): 5.406, 5.469, 5.531, 5.594, 5.656, 5.719, 5.781, 5.844, + (606): 5.906, 5.969, 6.031, 6.094, 6.156, 6.219, 6.281, 6.344, + (614): 6.406, 6.469, 6.531, 6.594, 6.656, 6.719, 6.781, 6.844, + (622): 6.906, 6.969, 7.031, 7.094, 7.156, 7.219, 7.281, 7.344, + (630): 7.406, 7.469, 7.531, 7.594, 7.656, 7.719, 7.781, 7.844, + (638): 7.906, 7.969, 123, 0.1016, 0.1641, 0.2266, 0.2891, 0.3516, + (646): 0.4141, 0.4766, 0.5391, 0.6016, 0.6641, 0.7266, 0.7891, + (653): 0.8516, 0.9141, 0.9766, 1.039, 1.102, 1.164, 1.227, 1.289, + (661): 1.352, 1.414, 1.477, 1.539, 1.602, 1.664, 1.727, 1.789, + (669): 1.852, 1.914, 1.977, 2.039, 2.102, 2.164, 2.227, 2.289, + (677): 2.352, 2.414, 2.477, 2.539, 2.602, 2.664, 2.727, 2.789, + (685): 2.852, 2.914, 2.977, 3.039, 3.102, 3.164, 3.227, 3.289, + (693): 3.352, 3.414, 3.477, 3.539, 3.602, 3.664, 3.727, 3.789, + (701): 3.852, 3.914, 3.977, 4.039, 4.102, 4.164, 4.227, 4.289, + (709): 4.352, 4.414, 4.477, 4.539, 4.602, 4.664, 4.727, 4.789, + (717): 4.852, 4.914, 4.977, 5.039, 5.102, 5.164, 5.227, 5.289, + (725): 5.352, 5.414, 5.477, 5.539, 5.602, 5.664, 5.727, 5.789, + (733): 5.852, 5.914, 5.977, 6.039, 6.102, 6.164, 6.227, 6.289, + (741): 6.352, 6.414, 6.477, 6.539, 6.602, 6.664, 6.727, 6.789, + (749): 6.852, 6.914, 6.977, 7.039, 7.102, 7.164, 7.227, 7.289, + (757): 7.352, 7.414, 7.477, 7.539, 7.602, 7.664, 7.727, 7.789, + (765): 7.852, 7.914, 7.977, 122, 0.1094, 0.1719, 0.2344, 0.2969, + (773): 0.3594, 0.4219, 0.4844, 0.5469, 0.6094, 0.6719, 0.7344, + (780): 0.7969, 0.8594, 0.9219, 0.9844, 1.047, 1.109, 1.172, 1.234, + (788): 1.297, 1.359, 1.422, 1.484, 1.547, 1.609, 1.672, 1.734, + (796): 1.797, 1.859, 1.922, 1.984, 2.047, 2.109, 2.172, 2.234, + (804): 2.297, 2.359, 2.422, 2.484, 2.547, 2.609, 2.672, 2.734, + (812): 2.797, 2.859, 2.922, 2.984, 3.047, 3.109, 3.172, 3.234, + (820): 3.297, 3.359, 3.422, 3.484, 3.547, 3.609, 3.672, 3.734, + (828): 3.797, 3.859, 3.922, 3.984, 4.047, 4.109, 4.172, 4.234, + (836): 4.297, 4.359, 4.422, 4.484, 4.547, 4.609, 4.672, 4.734, + (844): 4.797, 4.859, 4.922, 4.984, 5.047, 5.109, 5.172, 5.234, + (852): 5.297, 5.359, 5.422, 5.484, 5.547, 5.609, 5.672, 5.734, + (860): 5.797, 5.859, 5.922, 5.984, 6.047, 6.109, 6.172, 6.234, + (868): 6.297, 6.359, 6.422, 6.484, 6.547, 6.609, 6.672, 6.734, + (876): 6.797, 6.859, 6.922, 6.984, 7.047, 7.109, 7.172, 7.234, + (884): 7.297, 7.359, 7.422, 7.484, 7.547, 7.609, 7.672, 7.734, + (892): 7.797, 7.859, 7.922, 7.984, 121, 0.1172, 0.1797, 0.2422, + (900): 0.3047, 0.3672, 0.4297, 0.4922, 0.5547, 0.6172, 0.6797, + (907): 0.7422, 0.8047, 0.8672, 0.9297, 0.9922, 1.055, 1.117, 1.18, + (915): 1.242, 1.305, 1.367, 1.43, 1.492, 1.555, 1.617, 1.68, 1.742, + (924): 1.805, 1.867, 1.93, 1.992, 2.055, 2.117, 2.18, 2.242, 2.305, + (933): 2.367, 2.43, 2.492, 2.555, 2.617, 2.68, 2.742, 2.805, 2.867, + (942): 2.93, 2.992, 3.055, 3.117, 3.18, 3.242, 3.305, 3.367, 3.43, + (951): 3.492, 3.555, 3.617, 3.68, 3.742, 3.805, 3.867, 3.93, 3.992, + (960): 4.055, 4.117, 4.18, 4.242, 4.305, 4.367, 4.43, 4.492, 4.555, + (969): 4.617, 4.68, 4.742, 4.805, 4.867, 4.93, 4.992, 5.055, 5.117, + (978): 5.18, 5.242, 5.305, 5.367, 5.43, 5.492, 5.555, 5.617, 5.68, + (987): 5.742, 5.805, 5.867, 5.93, 5.992, 6.055, 6.117, 6.18, 6.242, + (996): 6.305, 6.367, 6.43, 6.492, 6.555, 6.617, 6.68, 6.742, 6.805, + (1005): 6.867, 6.93, 6.992, 7.055, 7.117, 7.18, 7.242, 7.305, 7.367, + (1014): 7.43, 7.492, 7.555, 7.617, 7.68, 7.742, 7.805, 7.867, 7.93, + (1023): 7.992 } } } @@ -361,38 +293,34 @@ GROUP "/" { (0,0): 32, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, (0,13): 3.25, 3.5, 3.75, 4, 4.25, 4.5, 4.75, 5, 5.25, 5.5, 5.75, 6, (0,25): 6.25, 6.5, 6.75, 7, 7.25, 7.5, 7.75, - (1,0): 31, 0.28125, 0.53125, 0.78125, 1.03125, 1.28125, 1.53125, - (1,7): 1.78125, 2.03125, 2.28125, 2.53125, 2.78125, 3.03125, 3.28125, - (1,14): 3.53125, 3.78125, 4.03125, 4.28125, 4.53125, 4.78125, 5.03125, - (1,21): 5.28125, 5.53125, 5.78125, 6.03125, 6.28125, 6.53125, 6.78125, - (1,28): 7.03125, 7.28125, 7.53125, 7.78125, - (2,0): 30, 0.3125, 0.5625, 0.8125, 1.0625, 1.3125, 1.5625, 1.8125, - (2,8): 2.0625, 2.3125, 2.5625, 2.8125, 3.0625, 3.3125, 3.5625, 3.8125, - (2,16): 4.0625, 4.3125, 4.5625, 4.8125, 5.0625, 5.3125, 5.5625, 5.8125, - (2,24): 6.0625, 6.3125, 6.5625, 6.8125, 7.0625, 7.3125, 7.5625, 7.8125, - (3,0): 29, 0.34375, 0.59375, 0.84375, 1.09375, 1.34375, 1.59375, - (3,7): 1.84375, 2.09375, 2.34375, 2.59375, 2.84375, 3.09375, 3.34375, - (3,14): 3.59375, 3.84375, 4.09375, 4.34375, 4.59375, 4.84375, 5.09375, - (3,21): 5.34375, 5.59375, 5.84375, 6.09375, 6.34375, 6.59375, 6.84375, - (3,28): 7.09375, 7.34375, 7.59375, 7.84375, + (1,0): 31, 0.2812, 0.5312, 0.7812, 1.031, 1.281, 1.531, 1.781, 2.031, + (1,9): 2.281, 2.531, 2.781, 3.031, 3.281, 3.531, 3.781, 4.031, 4.281, + (1,18): 4.531, 4.781, 5.031, 5.281, 5.531, 5.781, 6.031, 6.281, 6.531, + (1,27): 6.781, 7.031, 7.281, 7.531, 7.781, + (2,0): 30, 0.3125, 0.5625, 0.8125, 1.062, 1.312, 1.562, 1.812, 2.062, + (2,9): 2.312, 2.562, 2.812, 3.062, 3.312, 3.562, 3.812, 4.062, 4.312, + (2,18): 4.562, 4.812, 5.062, 5.312, 5.562, 5.812, 6.062, 6.312, 6.562, + (2,27): 6.812, 7.062, 7.312, 7.562, 7.812, + (3,0): 29, 0.3438, 0.5938, 0.8438, 1.094, 1.344, 1.594, 1.844, 2.094, + (3,9): 2.344, 2.594, 2.844, 3.094, 3.344, 3.594, 3.844, 4.094, 4.344, + (3,18): 4.594, 4.844, 5.094, 5.344, 5.594, 5.844, 6.094, 6.344, 6.594, + (3,27): 6.844, 7.094, 7.344, 7.594, 7.844, (4,0): 28, 0.375, 0.625, 0.875, 1.125, 1.375, 1.625, 1.875, 2.125, (4,9): 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.125, 4.375, (4,18): 4.625, 4.875, 5.125, 5.375, 5.625, 5.875, 6.125, 6.375, 6.625, (4,27): 6.875, 7.125, 7.375, 7.625, 7.875, - (5,0): 27, 0.40625, 0.65625, 0.90625, 1.15625, 1.40625, 1.65625, - (5,7): 1.90625, 2.15625, 2.40625, 2.65625, 2.90625, 3.15625, 3.40625, - (5,14): 3.65625, 3.90625, 4.15625, 4.40625, 4.65625, 4.90625, 5.15625, - (5,21): 5.40625, 5.65625, 5.90625, 6.15625, 6.40625, 6.65625, 6.90625, - (5,28): 7.15625, 7.40625, 7.65625, 7.90625, - (6,0): 26, 0.4375, 0.6875, 0.9375, 1.1875, 1.4375, 1.6875, 1.9375, - (6,8): 2.1875, 2.4375, 2.6875, 2.9375, 3.1875, 3.4375, 3.6875, 3.9375, - (6,16): 4.1875, 4.4375, 4.6875, 4.9375, 5.1875, 5.4375, 5.6875, 5.9375, - (6,24): 6.1875, 6.4375, 6.6875, 6.9375, 7.1875, 7.4375, 7.6875, 7.9375, - (7,0): 25, 0.46875, 0.71875, 0.96875, 1.21875, 1.46875, 1.71875, - (7,7): 1.96875, 2.21875, 2.46875, 2.71875, 2.96875, 3.21875, 3.46875, - (7,14): 3.71875, 3.96875, 4.21875, 4.46875, 4.71875, 4.96875, 5.21875, - (7,21): 5.46875, 5.71875, 5.96875, 6.21875, 6.46875, 6.71875, 6.96875, - (7,28): 7.21875, 7.46875, 7.71875, 7.96875 + (5,0): 27, 0.4062, 0.6562, 0.9062, 1.156, 1.406, 1.656, 1.906, 2.156, + (5,9): 2.406, 2.656, 2.906, 3.156, 3.406, 3.656, 3.906, 4.156, 4.406, + (5,18): 4.656, 4.906, 5.156, 5.406, 5.656, 5.906, 6.156, 6.406, 6.656, + (5,27): 6.906, 7.156, 7.406, 7.656, 7.906, + (6,0): 26, 0.4375, 0.6875, 0.9375, 1.188, 1.438, 1.688, 1.938, 2.188, + (6,9): 2.438, 2.688, 2.938, 3.188, 3.438, 3.688, 3.938, 4.188, 4.438, + (6,18): 4.688, 4.938, 5.188, 5.438, 5.688, 5.938, 6.188, 6.438, 6.688, + (6,27): 6.938, 7.188, 7.438, 7.688, 7.938, + (7,0): 25, 0.4688, 0.7188, 0.9688, 1.219, 1.469, 1.719, 1.969, 2.219, + (7,9): 2.469, 2.719, 2.969, 3.219, 3.469, 3.719, 3.969, 4.219, 4.469, + (7,18): 4.719, 4.969, 5.219, 5.469, 5.719, 5.969, 6.219, 6.469, 6.719, + (7,27): 6.969, 7.219, 7.469, 7.719, 7.969 } ATTRIBUTE "DS32BITS" { DATATYPE H5T_IEEE_F32LE @@ -400,40 +328,34 @@ GROUP "/" { DATA { (0): 32, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, (13): 3.25, 3.5, 3.75, 4, 4.25, 4.5, 4.75, 5, 5.25, 5.5, 5.75, 6, - (25): 6.25, 6.5, 6.75, 7, 7.25, 7.5, 7.75, 31, 0.28125, 0.53125, - (35): 0.78125, 1.03125, 1.28125, 1.53125, 1.78125, 2.03125, 2.28125, - (42): 2.53125, 2.78125, 3.03125, 3.28125, 3.53125, 3.78125, 4.03125, - (49): 4.28125, 4.53125, 4.78125, 5.03125, 5.28125, 5.53125, 5.78125, - (56): 6.03125, 6.28125, 6.53125, 6.78125, 7.03125, 7.28125, 7.53125, - (63): 7.78125, 30, 0.3125, 0.5625, 0.8125, 1.0625, 1.3125, 1.5625, - (71): 1.8125, 2.0625, 2.3125, 2.5625, 2.8125, 3.0625, 3.3125, - (78): 3.5625, 3.8125, 4.0625, 4.3125, 4.5625, 4.8125, 5.0625, - (85): 5.3125, 5.5625, 5.8125, 6.0625, 6.3125, 6.5625, 6.8125, - (92): 7.0625, 7.3125, 7.5625, 7.8125, 29, 0.34375, 0.59375, 0.84375, - (100): 1.09375, 1.34375, 1.59375, 1.84375, 2.09375, 2.34375, - (106): 2.59375, 2.84375, 3.09375, 3.34375, 3.59375, 3.84375, - (112): 4.09375, 4.34375, 4.59375, 4.84375, 5.09375, 5.34375, - (118): 5.59375, 5.84375, 6.09375, 6.34375, 6.59375, 6.84375, - (124): 7.09375, 7.34375, 7.59375, 7.84375, 28, 0.375, 0.625, 0.875, - (132): 1.125, 1.375, 1.625, 1.875, 2.125, 2.375, 2.625, 2.875, - (140): 3.125, 3.375, 3.625, 3.875, 4.125, 4.375, 4.625, 4.875, - (148): 5.125, 5.375, 5.625, 5.875, 6.125, 6.375, 6.625, 6.875, - (156): 7.125, 7.375, 7.625, 7.875, 27, 0.40625, 0.65625, 0.90625, - (164): 1.15625, 1.40625, 1.65625, 1.90625, 2.15625, 2.40625, - (170): 2.65625, 2.90625, 3.15625, 3.40625, 3.65625, 3.90625, - (176): 4.15625, 4.40625, 4.65625, 4.90625, 5.15625, 5.40625, - (182): 5.65625, 5.90625, 6.15625, 6.40625, 6.65625, 6.90625, - (188): 7.15625, 7.40625, 7.65625, 7.90625, 26, 0.4375, 0.6875, - (195): 0.9375, 1.1875, 1.4375, 1.6875, 1.9375, 2.1875, 2.4375, - (202): 2.6875, 2.9375, 3.1875, 3.4375, 3.6875, 3.9375, 4.1875, - (209): 4.4375, 4.6875, 4.9375, 5.1875, 5.4375, 5.6875, 5.9375, - (216): 6.1875, 6.4375, 6.6875, 6.9375, 7.1875, 7.4375, 7.6875, - (223): 7.9375, 25, 0.46875, 0.71875, 0.96875, 1.21875, 1.46875, - (230): 1.71875, 1.96875, 2.21875, 2.46875, 2.71875, 2.96875, - (236): 3.21875, 3.46875, 3.71875, 3.96875, 4.21875, 4.46875, - (242): 4.71875, 4.96875, 5.21875, 5.46875, 5.71875, 5.96875, - (248): 6.21875, 6.46875, 6.71875, 6.96875, 7.21875, 7.46875, - (254): 7.71875, 7.96875 + (25): 6.25, 6.5, 6.75, 7, 7.25, 7.5, 7.75, 31, 0.2812, 0.5312, + (35): 0.7812, 1.031, 1.281, 1.531, 1.781, 2.031, 2.281, 2.531, + (43): 2.781, 3.031, 3.281, 3.531, 3.781, 4.031, 4.281, 4.531, 4.781, + (52): 5.031, 5.281, 5.531, 5.781, 6.031, 6.281, 6.531, 6.781, 7.031, + (61): 7.281, 7.531, 7.781, 30, 0.3125, 0.5625, 0.8125, 1.062, 1.312, + (70): 1.562, 1.812, 2.062, 2.312, 2.562, 2.812, 3.062, 3.312, 3.562, + (79): 3.812, 4.062, 4.312, 4.562, 4.812, 5.062, 5.312, 5.562, 5.812, + (88): 6.062, 6.312, 6.562, 6.812, 7.062, 7.312, 7.562, 7.812, 29, + (97): 0.3438, 0.5938, 0.8438, 1.094, 1.344, 1.594, 1.844, 2.094, + (105): 2.344, 2.594, 2.844, 3.094, 3.344, 3.594, 3.844, 4.094, + (113): 4.344, 4.594, 4.844, 5.094, 5.344, 5.594, 5.844, 6.094, + (121): 6.344, 6.594, 6.844, 7.094, 7.344, 7.594, 7.844, 28, 0.375, + (130): 0.625, 0.875, 1.125, 1.375, 1.625, 1.875, 2.125, 2.375, + (138): 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.125, 4.375, + (146): 4.625, 4.875, 5.125, 5.375, 5.625, 5.875, 6.125, 6.375, + (154): 6.625, 6.875, 7.125, 7.375, 7.625, 7.875, 27, 0.4062, 0.6562, + (163): 0.9062, 1.156, 1.406, 1.656, 1.906, 2.156, 2.406, 2.656, + (171): 2.906, 3.156, 3.406, 3.656, 3.906, 4.156, 4.406, 4.656, + (179): 4.906, 5.156, 5.406, 5.656, 5.906, 6.156, 6.406, 6.656, + (187): 6.906, 7.156, 7.406, 7.656, 7.906, 26, 0.4375, 0.6875, + (195): 0.9375, 1.188, 1.438, 1.688, 1.938, 2.188, 2.438, 2.688, + (203): 2.938, 3.188, 3.438, 3.688, 3.938, 4.188, 4.438, 4.688, + (211): 4.938, 5.188, 5.438, 5.688, 5.938, 6.188, 6.438, 6.688, + (219): 6.938, 7.188, 7.438, 7.688, 7.938, 25, 0.4688, 0.7188, + (227): 0.9688, 1.219, 1.469, 1.719, 1.969, 2.219, 2.469, 2.719, + (235): 2.969, 3.219, 3.469, 3.719, 3.969, 4.219, 4.469, 4.719, + (243): 4.969, 5.219, 5.469, 5.719, 5.969, 6.219, 6.469, 6.719, + (251): 6.969, 7.219, 7.469, 7.719, 7.969 } } } @@ -463,74 +385,62 @@ GROUP "/" { (0,41): 5.125, 5.25, 5.375, 5.5, 5.625, 5.75, 5.875, 6, 6.125, 6.25, (0,51): 6.375, 6.5, 6.625, 6.75, 6.875, 7, 7.125, 7.25, 7.375, 7.5, (0,61): 7.625, 7.75, 7.875, - (1,0): 63, 0.140625, 0.265625, 0.390625, 0.515625, 0.640625, 0.765625, - (1,7): 0.890625, 1.01562, 1.14062, 1.26562, 1.39062, 1.51562, 1.64062, - (1,14): 1.76562, 1.89062, 2.01562, 2.14062, 2.26562, 2.39062, 2.51562, - (1,21): 2.64062, 2.76562, 2.89062, 3.01562, 3.14062, 3.26562, 3.39062, - (1,28): 3.51562, 3.64062, 3.76562, 3.89062, 4.01562, 4.14062, 4.26562, - (1,35): 4.39062, 4.51562, 4.64062, 4.76562, 4.89062, 5.01562, 5.14062, - (1,42): 5.26562, 5.39062, 5.51562, 5.64062, 5.76562, 5.89062, 6.01562, - (1,49): 6.14062, 6.26562, 6.39062, 6.51562, 6.64062, 6.76562, 6.89062, - (1,56): 7.01562, 7.14062, 7.26562, 7.39062, 7.51562, 7.64062, 7.76562, - (1,63): 7.89062, - (2,0): 62, 0.15625, 0.28125, 0.40625, 0.53125, 0.65625, 0.78125, - (2,7): 0.90625, 1.03125, 1.15625, 1.28125, 1.40625, 1.53125, 1.65625, - (2,14): 1.78125, 1.90625, 2.03125, 2.15625, 2.28125, 2.40625, 2.53125, - (2,21): 2.65625, 2.78125, 2.90625, 3.03125, 3.15625, 3.28125, 3.40625, - (2,28): 3.53125, 3.65625, 3.78125, 3.90625, 4.03125, 4.15625, 4.28125, - (2,35): 4.40625, 4.53125, 4.65625, 4.78125, 4.90625, 5.03125, 5.15625, - (2,42): 5.28125, 5.40625, 5.53125, 5.65625, 5.78125, 5.90625, 6.03125, - (2,49): 6.15625, 6.28125, 6.40625, 6.53125, 6.65625, 6.78125, 6.90625, - (2,56): 7.03125, 7.15625, 7.28125, 7.40625, 7.53125, 7.65625, 7.78125, - (2,63): 7.90625, - (3,0): 61, 0.171875, 0.296875, 0.421875, 0.546875, 0.671875, 0.796875, - (3,7): 0.921875, 1.04688, 1.17188, 1.29688, 1.42188, 1.54688, 1.67188, - (3,14): 1.79688, 1.92188, 2.04688, 2.17188, 2.29688, 2.42188, 2.54688, - (3,21): 2.67188, 2.79688, 2.92188, 3.04688, 3.17188, 3.29688, 3.42188, - (3,28): 3.54688, 3.67188, 3.79688, 3.92188, 4.04688, 4.17188, 4.29688, - (3,35): 4.42188, 4.54688, 4.67188, 4.79688, 4.92188, 5.04688, 5.17188, - (3,42): 5.29688, 5.42188, 5.54688, 5.67188, 5.79688, 5.92188, 6.04688, - (3,49): 6.17188, 6.29688, 6.42188, 6.54688, 6.67188, 6.79688, 6.92188, - (3,56): 7.04688, 7.17188, 7.29688, 7.42188, 7.54688, 7.67188, 7.79688, - (3,63): 7.92188, + (1,0): 63, 0.1406, 0.2656, 0.3906, 0.5156, 0.6406, 0.7656, 0.8906, + (1,8): 1.016, 1.141, 1.266, 1.391, 1.516, 1.641, 1.766, 1.891, 2.016, + (1,17): 2.141, 2.266, 2.391, 2.516, 2.641, 2.766, 2.891, 3.016, 3.141, + (1,26): 3.266, 3.391, 3.516, 3.641, 3.766, 3.891, 4.016, 4.141, 4.266, + (1,35): 4.391, 4.516, 4.641, 4.766, 4.891, 5.016, 5.141, 5.266, 5.391, + (1,44): 5.516, 5.641, 5.766, 5.891, 6.016, 6.141, 6.266, 6.391, 6.516, + (1,53): 6.641, 6.766, 6.891, 7.016, 7.141, 7.266, 7.391, 7.516, 7.641, + (1,62): 7.766, 7.891, + (2,0): 62, 0.1562, 0.2812, 0.4062, 0.5312, 0.6562, 0.7812, 0.9062, + (2,8): 1.031, 1.156, 1.281, 1.406, 1.531, 1.656, 1.781, 1.906, 2.031, + (2,17): 2.156, 2.281, 2.406, 2.531, 2.656, 2.781, 2.906, 3.031, 3.156, + (2,26): 3.281, 3.406, 3.531, 3.656, 3.781, 3.906, 4.031, 4.156, 4.281, + (2,35): 4.406, 4.531, 4.656, 4.781, 4.906, 5.031, 5.156, 5.281, 5.406, + (2,44): 5.531, 5.656, 5.781, 5.906, 6.031, 6.156, 6.281, 6.406, 6.531, + (2,53): 6.656, 6.781, 6.906, 7.031, 7.156, 7.281, 7.406, 7.531, 7.656, + (2,62): 7.781, 7.906, + (3,0): 61, 0.1719, 0.2969, 0.4219, 0.5469, 0.6719, 0.7969, 0.9219, + (3,8): 1.047, 1.172, 1.297, 1.422, 1.547, 1.672, 1.797, 1.922, 2.047, + (3,17): 2.172, 2.297, 2.422, 2.547, 2.672, 2.797, 2.922, 3.047, 3.172, + (3,26): 3.297, 3.422, 3.547, 3.672, 3.797, 3.922, 4.047, 4.172, 4.297, + (3,35): 4.422, 4.547, 4.672, 4.797, 4.922, 5.047, 5.172, 5.297, 5.422, + (3,44): 5.547, 5.672, 5.797, 5.922, 6.047, 6.172, 6.297, 6.422, 6.547, + (3,53): 6.672, 6.797, 6.922, 7.047, 7.172, 7.297, 7.422, 7.547, 7.672, + (3,62): 7.797, 7.922, (4,0): 60, 0.1875, 0.3125, 0.4375, 0.5625, 0.6875, 0.8125, 0.9375, - (4,8): 1.0625, 1.1875, 1.3125, 1.4375, 1.5625, 1.6875, 1.8125, 1.9375, - (4,16): 2.0625, 2.1875, 2.3125, 2.4375, 2.5625, 2.6875, 2.8125, 2.9375, - (4,24): 3.0625, 3.1875, 3.3125, 3.4375, 3.5625, 3.6875, 3.8125, 3.9375, - (4,32): 4.0625, 4.1875, 4.3125, 4.4375, 4.5625, 4.6875, 4.8125, 4.9375, - (4,40): 5.0625, 5.1875, 5.3125, 5.4375, 5.5625, 5.6875, 5.8125, 5.9375, - (4,48): 6.0625, 6.1875, 6.3125, 6.4375, 6.5625, 6.6875, 6.8125, 6.9375, - (4,56): 7.0625, 7.1875, 7.3125, 7.4375, 7.5625, 7.6875, 7.8125, 7.9375, - (5,0): 59, 0.203125, 0.328125, 0.453125, 0.578125, 0.703125, 0.828125, - (5,7): 0.953125, 1.07812, 1.20312, 1.32812, 1.45312, 1.57812, 1.70312, - (5,14): 1.82812, 1.95312, 2.07812, 2.20312, 2.32812, 2.45312, 2.57812, - (5,21): 2.70312, 2.82812, 2.95312, 3.07812, 3.20312, 3.32812, 3.45312, - (5,28): 3.57812, 3.70312, 3.82812, 3.95312, 4.07812, 4.20312, 4.32812, - (5,35): 4.45312, 4.57812, 4.70312, 4.82812, 4.95312, 5.07812, 5.20312, - (5,42): 5.32812, 5.45312, 5.57812, 5.70312, 5.82812, 5.95312, 6.07812, - (5,49): 6.20312, 6.32812, 6.45312, 6.57812, 6.70312, 6.82812, 6.95312, - (5,56): 7.07812, 7.20312, 7.32812, 7.45312, 7.57812, 7.70312, 7.82812, - (5,63): 7.95312, - (6,0): 58, 0.21875, 0.34375, 0.46875, 0.59375, 0.71875, 0.84375, - (6,7): 0.96875, 1.09375, 1.21875, 1.34375, 1.46875, 1.59375, 1.71875, - (6,14): 1.84375, 1.96875, 2.09375, 2.21875, 2.34375, 2.46875, 2.59375, - (6,21): 2.71875, 2.84375, 2.96875, 3.09375, 3.21875, 3.34375, 3.46875, - (6,28): 3.59375, 3.71875, 3.84375, 3.96875, 4.09375, 4.21875, 4.34375, - (6,35): 4.46875, 4.59375, 4.71875, 4.84375, 4.96875, 5.09375, 5.21875, - (6,42): 5.34375, 5.46875, 5.59375, 5.71875, 5.84375, 5.96875, 6.09375, - (6,49): 6.21875, 6.34375, 6.46875, 6.59375, 6.71875, 6.84375, 6.96875, - (6,56): 7.09375, 7.21875, 7.34375, 7.46875, 7.59375, 7.71875, 7.84375, - (6,63): 7.96875, - (7,0): 57, 0.234375, 0.359375, 0.484375, 0.609375, 0.734375, 0.859375, - (7,7): 0.984375, 1.10938, 1.23438, 1.35938, 1.48438, 1.60938, 1.73438, - (7,14): 1.85938, 1.98438, 2.10938, 2.23438, 2.35938, 2.48438, 2.60938, - (7,21): 2.73438, 2.85938, 2.98438, 3.10938, 3.23438, 3.35938, 3.48438, - (7,28): 3.60938, 3.73438, 3.85938, 3.98438, 4.10938, 4.23438, 4.35938, - (7,35): 4.48438, 4.60938, 4.73438, 4.85938, 4.98438, 5.10938, 5.23438, - (7,42): 5.35938, 5.48438, 5.60938, 5.73438, 5.85938, 5.98438, 6.10938, - (7,49): 6.23438, 6.35938, 6.48438, 6.60938, 6.73438, 6.85938, 6.98438, - (7,56): 7.10938, 7.23438, 7.35938, 7.48438, 7.60938, 7.73438, 7.85938, - (7,63): 7.98438 + (4,8): 1.062, 1.188, 1.312, 1.438, 1.562, 1.688, 1.812, 1.938, 2.062, + (4,17): 2.188, 2.312, 2.438, 2.562, 2.688, 2.812, 2.938, 3.062, 3.188, + (4,26): 3.312, 3.438, 3.562, 3.688, 3.812, 3.938, 4.062, 4.188, 4.312, + (4,35): 4.438, 4.562, 4.688, 4.812, 4.938, 5.062, 5.188, 5.312, 5.438, + (4,44): 5.562, 5.688, 5.812, 5.938, 6.062, 6.188, 6.312, 6.438, 6.562, + (4,53): 6.688, 6.812, 6.938, 7.062, 7.188, 7.312, 7.438, 7.562, 7.688, + (4,62): 7.812, 7.938, + (5,0): 59, 0.2031, 0.3281, 0.4531, 0.5781, 0.7031, 0.8281, 0.9531, + (5,8): 1.078, 1.203, 1.328, 1.453, 1.578, 1.703, 1.828, 1.953, 2.078, + (5,17): 2.203, 2.328, 2.453, 2.578, 2.703, 2.828, 2.953, 3.078, 3.203, + (5,26): 3.328, 3.453, 3.578, 3.703, 3.828, 3.953, 4.078, 4.203, 4.328, + (5,35): 4.453, 4.578, 4.703, 4.828, 4.953, 5.078, 5.203, 5.328, 5.453, + (5,44): 5.578, 5.703, 5.828, 5.953, 6.078, 6.203, 6.328, 6.453, 6.578, + (5,53): 6.703, 6.828, 6.953, 7.078, 7.203, 7.328, 7.453, 7.578, 7.703, + (5,62): 7.828, 7.953, + (6,0): 58, 0.2188, 0.3438, 0.4688, 0.5938, 0.7188, 0.8438, 0.9688, + (6,8): 1.094, 1.219, 1.344, 1.469, 1.594, 1.719, 1.844, 1.969, 2.094, + (6,17): 2.219, 2.344, 2.469, 2.594, 2.719, 2.844, 2.969, 3.094, 3.219, + (6,26): 3.344, 3.469, 3.594, 3.719, 3.844, 3.969, 4.094, 4.219, 4.344, + (6,35): 4.469, 4.594, 4.719, 4.844, 4.969, 5.094, 5.219, 5.344, 5.469, + (6,44): 5.594, 5.719, 5.844, 5.969, 6.094, 6.219, 6.344, 6.469, 6.594, + (6,53): 6.719, 6.844, 6.969, 7.094, 7.219, 7.344, 7.469, 7.594, 7.719, + (6,62): 7.844, 7.969, + (7,0): 57, 0.2344, 0.3594, 0.4844, 0.6094, 0.7344, 0.8594, 0.9844, + (7,8): 1.109, 1.234, 1.359, 1.484, 1.609, 1.734, 1.859, 1.984, 2.109, + (7,17): 2.234, 2.359, 2.484, 2.609, 2.734, 2.859, 2.984, 3.109, 3.234, + (7,26): 3.359, 3.484, 3.609, 3.734, 3.859, 3.984, 4.109, 4.234, 4.359, + (7,35): 4.484, 4.609, 4.734, 4.859, 4.984, 5.109, 5.234, 5.359, 5.484, + (7,44): 5.609, 5.734, 5.859, 5.984, 6.109, 6.234, 6.359, 6.484, 6.609, + (7,53): 6.734, 6.859, 6.984, 7.109, 7.234, 7.359, 7.484, 7.609, 7.734, + (7,62): 7.859, 7.984 } ATTRIBUTE "DS64BITS" { DATATYPE H5T_IEEE_F64LE @@ -542,78 +452,62 @@ GROUP "/" { (30): 3.75, 3.875, 4, 4.125, 4.25, 4.375, 4.5, 4.625, 4.75, 4.875, (40): 5, 5.125, 5.25, 5.375, 5.5, 5.625, 5.75, 5.875, 6, 6.125, (50): 6.25, 6.375, 6.5, 6.625, 6.75, 6.875, 7, 7.125, 7.25, 7.375, - (60): 7.5, 7.625, 7.75, 7.875, 63, 0.140625, 0.265625, 0.390625, - (68): 0.515625, 0.640625, 0.765625, 0.890625, 1.01562, 1.14062, - (74): 1.26562, 1.39062, 1.51562, 1.64062, 1.76562, 1.89062, 2.01562, - (81): 2.14062, 2.26562, 2.39062, 2.51562, 2.64062, 2.76562, 2.89062, - (88): 3.01562, 3.14062, 3.26562, 3.39062, 3.51562, 3.64062, 3.76562, - (95): 3.89062, 4.01562, 4.14062, 4.26562, 4.39062, 4.51562, 4.64062, - (102): 4.76562, 4.89062, 5.01562, 5.14062, 5.26562, 5.39062, - (108): 5.51562, 5.64062, 5.76562, 5.89062, 6.01562, 6.14062, - (114): 6.26562, 6.39062, 6.51562, 6.64062, 6.76562, 6.89062, - (120): 7.01562, 7.14062, 7.26562, 7.39062, 7.51562, 7.64062, - (126): 7.76562, 7.89062, 62, 0.15625, 0.28125, 0.40625, 0.53125, - (133): 0.65625, 0.78125, 0.90625, 1.03125, 1.15625, 1.28125, - (139): 1.40625, 1.53125, 1.65625, 1.78125, 1.90625, 2.03125, - (145): 2.15625, 2.28125, 2.40625, 2.53125, 2.65625, 2.78125, - (151): 2.90625, 3.03125, 3.15625, 3.28125, 3.40625, 3.53125, - (157): 3.65625, 3.78125, 3.90625, 4.03125, 4.15625, 4.28125, - (163): 4.40625, 4.53125, 4.65625, 4.78125, 4.90625, 5.03125, - (169): 5.15625, 5.28125, 5.40625, 5.53125, 5.65625, 5.78125, - (175): 5.90625, 6.03125, 6.15625, 6.28125, 6.40625, 6.53125, - (181): 6.65625, 6.78125, 6.90625, 7.03125, 7.15625, 7.28125, - (187): 7.40625, 7.53125, 7.65625, 7.78125, 7.90625, 61, 0.171875, - (194): 0.296875, 0.421875, 0.546875, 0.671875, 0.796875, 0.921875, - (200): 1.04688, 1.17188, 1.29688, 1.42188, 1.54688, 1.67188, - (206): 1.79688, 1.92188, 2.04688, 2.17188, 2.29688, 2.42188, - (212): 2.54688, 2.67188, 2.79688, 2.92188, 3.04688, 3.17188, - (218): 3.29688, 3.42188, 3.54688, 3.67188, 3.79688, 3.92188, - (224): 4.04688, 4.17188, 4.29688, 4.42188, 4.54688, 4.67188, - (230): 4.79688, 4.92188, 5.04688, 5.17188, 5.29688, 5.42188, - (236): 5.54688, 5.67188, 5.79688, 5.92188, 6.04688, 6.17188, - (242): 6.29688, 6.42188, 6.54688, 6.67188, 6.79688, 6.92188, - (248): 7.04688, 7.17188, 7.29688, 7.42188, 7.54688, 7.67188, - (254): 7.79688, 7.92188, 60, 0.1875, 0.3125, 0.4375, 0.5625, 0.6875, - (262): 0.8125, 0.9375, 1.0625, 1.1875, 1.3125, 1.4375, 1.5625, - (269): 1.6875, 1.8125, 1.9375, 2.0625, 2.1875, 2.3125, 2.4375, - (276): 2.5625, 2.6875, 2.8125, 2.9375, 3.0625, 3.1875, 3.3125, - (283): 3.4375, 3.5625, 3.6875, 3.8125, 3.9375, 4.0625, 4.1875, - (290): 4.3125, 4.4375, 4.5625, 4.6875, 4.8125, 4.9375, 5.0625, - (297): 5.1875, 5.3125, 5.4375, 5.5625, 5.6875, 5.8125, 5.9375, - (304): 6.0625, 6.1875, 6.3125, 6.4375, 6.5625, 6.6875, 6.8125, - (311): 6.9375, 7.0625, 7.1875, 7.3125, 7.4375, 7.5625, 7.6875, - (318): 7.8125, 7.9375, 59, 0.203125, 0.328125, 0.453125, 0.578125, - (325): 0.703125, 0.828125, 0.953125, 1.07812, 1.20312, 1.32812, - (331): 1.45312, 1.57812, 1.70312, 1.82812, 1.95312, 2.07812, - (337): 2.20312, 2.32812, 2.45312, 2.57812, 2.70312, 2.82812, - (343): 2.95312, 3.07812, 3.20312, 3.32812, 3.45312, 3.57812, - (349): 3.70312, 3.82812, 3.95312, 4.07812, 4.20312, 4.32812, - (355): 4.45312, 4.57812, 4.70312, 4.82812, 4.95312, 5.07812, - (361): 5.20312, 5.32812, 5.45312, 5.57812, 5.70312, 5.82812, - (367): 5.95312, 6.07812, 6.20312, 6.32812, 6.45312, 6.57812, - (373): 6.70312, 6.82812, 6.95312, 7.07812, 7.20312, 7.32812, - (379): 7.45312, 7.57812, 7.70312, 7.82812, 7.95312, 58, 0.21875, - (386): 0.34375, 0.46875, 0.59375, 0.71875, 0.84375, 0.96875, - (392): 1.09375, 1.21875, 1.34375, 1.46875, 1.59375, 1.71875, - (398): 1.84375, 1.96875, 2.09375, 2.21875, 2.34375, 2.46875, - (404): 2.59375, 2.71875, 2.84375, 2.96875, 3.09375, 3.21875, - (410): 3.34375, 3.46875, 3.59375, 3.71875, 3.84375, 3.96875, - (416): 4.09375, 4.21875, 4.34375, 4.46875, 4.59375, 4.71875, - (422): 4.84375, 4.96875, 5.09375, 5.21875, 5.34375, 5.46875, - (428): 5.59375, 5.71875, 5.84375, 5.96875, 6.09375, 6.21875, - (434): 6.34375, 6.46875, 6.59375, 6.71875, 6.84375, 6.96875, - (440): 7.09375, 7.21875, 7.34375, 7.46875, 7.59375, 7.71875, - (446): 7.84375, 7.96875, 57, 0.234375, 0.359375, 0.484375, 0.609375, - (453): 0.734375, 0.859375, 0.984375, 1.10938, 1.23438, 1.35938, - (459): 1.48438, 1.60938, 1.73438, 1.85938, 1.98438, 2.10938, - (465): 2.23438, 2.35938, 2.48438, 2.60938, 2.73438, 2.85938, - (471): 2.98438, 3.10938, 3.23438, 3.35938, 3.48438, 3.60938, - (477): 3.73438, 3.85938, 3.98438, 4.10938, 4.23438, 4.35938, - (483): 4.48438, 4.60938, 4.73438, 4.85938, 4.98438, 5.10938, - (489): 5.23438, 5.35938, 5.48438, 5.60938, 5.73438, 5.85938, - (495): 5.98438, 6.10938, 6.23438, 6.35938, 6.48438, 6.60938, - (501): 6.73438, 6.85938, 6.98438, 7.10938, 7.23438, 7.35938, - (507): 7.48438, 7.60938, 7.73438, 7.85938, 7.98438 + (60): 7.5, 7.625, 7.75, 7.875, 63, 0.1406, 0.2656, 0.3906, 0.5156, + (69): 0.6406, 0.7656, 0.8906, 1.016, 1.141, 1.266, 1.391, 1.516, + (77): 1.641, 1.766, 1.891, 2.016, 2.141, 2.266, 2.391, 2.516, 2.641, + (86): 2.766, 2.891, 3.016, 3.141, 3.266, 3.391, 3.516, 3.641, 3.766, + (95): 3.891, 4.016, 4.141, 4.266, 4.391, 4.516, 4.641, 4.766, 4.891, + (104): 5.016, 5.141, 5.266, 5.391, 5.516, 5.641, 5.766, 5.891, + (112): 6.016, 6.141, 6.266, 6.391, 6.516, 6.641, 6.766, 6.891, + (120): 7.016, 7.141, 7.266, 7.391, 7.516, 7.641, 7.766, 7.891, 62, + (129): 0.1562, 0.2812, 0.4062, 0.5312, 0.6562, 0.7812, 0.9062, + (136): 1.031, 1.156, 1.281, 1.406, 1.531, 1.656, 1.781, 1.906, + (144): 2.031, 2.156, 2.281, 2.406, 2.531, 2.656, 2.781, 2.906, + (152): 3.031, 3.156, 3.281, 3.406, 3.531, 3.656, 3.781, 3.906, + (160): 4.031, 4.156, 4.281, 4.406, 4.531, 4.656, 4.781, 4.906, + (168): 5.031, 5.156, 5.281, 5.406, 5.531, 5.656, 5.781, 5.906, + (176): 6.031, 6.156, 6.281, 6.406, 6.531, 6.656, 6.781, 6.906, + (184): 7.031, 7.156, 7.281, 7.406, 7.531, 7.656, 7.781, 7.906, 61, + (193): 0.1719, 0.2969, 0.4219, 0.5469, 0.6719, 0.7969, 0.9219, + (200): 1.047, 1.172, 1.297, 1.422, 1.547, 1.672, 1.797, 1.922, + (208): 2.047, 2.172, 2.297, 2.422, 2.547, 2.672, 2.797, 2.922, + (216): 3.047, 3.172, 3.297, 3.422, 3.547, 3.672, 3.797, 3.922, + (224): 4.047, 4.172, 4.297, 4.422, 4.547, 4.672, 4.797, 4.922, + (232): 5.047, 5.172, 5.297, 5.422, 5.547, 5.672, 5.797, 5.922, + (240): 6.047, 6.172, 6.297, 6.422, 6.547, 6.672, 6.797, 6.922, + (248): 7.047, 7.172, 7.297, 7.422, 7.547, 7.672, 7.797, 7.922, 60, + (257): 0.1875, 0.3125, 0.4375, 0.5625, 0.6875, 0.8125, 0.9375, + (264): 1.062, 1.188, 1.312, 1.438, 1.562, 1.688, 1.812, 1.938, + (272): 2.062, 2.188, 2.312, 2.438, 2.562, 2.688, 2.812, 2.938, + (280): 3.062, 3.188, 3.312, 3.438, 3.562, 3.688, 3.812, 3.938, + (288): 4.062, 4.188, 4.312, 4.438, 4.562, 4.688, 4.812, 4.938, + (296): 5.062, 5.188, 5.312, 5.438, 5.562, 5.688, 5.812, 5.938, + (304): 6.062, 6.188, 6.312, 6.438, 6.562, 6.688, 6.812, 6.938, + (312): 7.062, 7.188, 7.312, 7.438, 7.562, 7.688, 7.812, 7.938, 59, + (321): 0.2031, 0.3281, 0.4531, 0.5781, 0.7031, 0.8281, 0.9531, + (328): 1.078, 1.203, 1.328, 1.453, 1.578, 1.703, 1.828, 1.953, + (336): 2.078, 2.203, 2.328, 2.453, 2.578, 2.703, 2.828, 2.953, + (344): 3.078, 3.203, 3.328, 3.453, 3.578, 3.703, 3.828, 3.953, + (352): 4.078, 4.203, 4.328, 4.453, 4.578, 4.703, 4.828, 4.953, + (360): 5.078, 5.203, 5.328, 5.453, 5.578, 5.703, 5.828, 5.953, + (368): 6.078, 6.203, 6.328, 6.453, 6.578, 6.703, 6.828, 6.953, + (376): 7.078, 7.203, 7.328, 7.453, 7.578, 7.703, 7.828, 7.953, 58, + (385): 0.2188, 0.3438, 0.4688, 0.5938, 0.7188, 0.8438, 0.9688, + (392): 1.094, 1.219, 1.344, 1.469, 1.594, 1.719, 1.844, 1.969, + (400): 2.094, 2.219, 2.344, 2.469, 2.594, 2.719, 2.844, 2.969, + (408): 3.094, 3.219, 3.344, 3.469, 3.594, 3.719, 3.844, 3.969, + (416): 4.094, 4.219, 4.344, 4.469, 4.594, 4.719, 4.844, 4.969, + (424): 5.094, 5.219, 5.344, 5.469, 5.594, 5.719, 5.844, 5.969, + (432): 6.094, 6.219, 6.344, 6.469, 6.594, 6.719, 6.844, 6.969, + (440): 7.094, 7.219, 7.344, 7.469, 7.594, 7.719, 7.844, 7.969, 57, + (449): 0.2344, 0.3594, 0.4844, 0.6094, 0.7344, 0.8594, 0.9844, + (456): 1.109, 1.234, 1.359, 1.484, 1.609, 1.734, 1.859, 1.984, + (464): 2.109, 2.234, 2.359, 2.484, 2.609, 2.734, 2.859, 2.984, + (472): 3.109, 3.234, 3.359, 3.484, 3.609, 3.734, 3.859, 3.984, + (480): 4.109, 4.234, 4.359, 4.484, 4.609, 4.734, 4.859, 4.984, + (488): 5.109, 5.234, 5.359, 5.484, 5.609, 5.734, 5.859, 5.984, + (496): 6.109, 6.234, 6.359, 6.484, 6.609, 6.734, 6.859, 6.984, + (504): 7.109, 7.234, 7.359, 7.484, 7.609, 7.734, 7.859, 7.984 } } } diff --git a/tools/test/h5dump/expected/tfloatsattrs.wddl b/tools/test/h5dump/expected/tfloatsattrs.wddl deleted file mode 100644 index 38b735f7f24..00000000000 --- a/tools/test/h5dump/expected/tfloatsattrs.wddl +++ /dev/null @@ -1,621 +0,0 @@ -HDF5 "tfloatsattrs.h5" { -GROUP "/" { - DATASET "DS128BITS" { - DATATYPE 128-bit little-endian floating-point 80-bit precision - DATASPACE SIMPLE { ( 8, 128 ) / ( 8, 128 ) } - STORAGE_LAYOUT { - CONTIGUOUS - SIZE 16384 - OFFSET 14416 - } - FILTERS { - NONE - } - FILLVALUE { - FILL_TIME H5D_FILL_TIME_IFSET - VALUE H5D_FILL_VALUE_DEFAULT - } - ALLOCATION_TIME { - H5D_ALLOC_TIME_LATE - } - DATA { - (0,0): 128, 0.0625, 0.125, 0.1875, 0.25, 0.3125, 0.375, 0.4375, 0.5, - (0,9): 0.5625, 0.625, 0.6875, 0.75, 0.8125, 0.875, 0.9375, 1, 1.0625, - (0,18): 1.125, 1.1875, 1.25, 1.3125, 1.375, 1.4375, 1.5, 1.5625, 1.625, - (0,27): 1.6875, 1.75, 1.8125, 1.875, 1.9375, 2, 2.0625, 2.125, 2.1875, - (0,36): 2.25, 2.3125, 2.375, 2.4375, 2.5, 2.5625, 2.625, 2.6875, 2.75, - (0,45): 2.8125, 2.875, 2.9375, 3, 3.0625, 3.125, 3.1875, 3.25, 3.3125, - (0,54): 3.375, 3.4375, 3.5, 3.5625, 3.625, 3.6875, 3.75, 3.8125, 3.875, - (0,63): 3.9375, 4, 4.0625, 4.125, 4.1875, 4.25, 4.3125, 4.375, 4.4375, - (0,72): 4.5, 4.5625, 4.625, 4.6875, 4.75, 4.8125, 4.875, 4.9375, 5, - (0,81): 5.0625, 5.125, 5.1875, 5.25, 5.3125, 5.375, 5.4375, 5.5, - (0,89): 5.5625, 5.625, 5.6875, 5.75, 5.8125, 5.875, 5.9375, 6, 6.0625, - (0,98): 6.125, 6.1875, 6.25, 6.3125, 6.375, 6.4375, 6.5, 6.5625, 6.625, - (0,107): 6.6875, 6.75, 6.8125, 6.875, 6.9375, 7, 7.0625, 7.125, 7.1875, - (0,116): 7.25, 7.3125, 7.375, 7.4375, 7.5, 7.5625, 7.625, 7.6875, 7.75, - (0,125): 7.8125, 7.875, 7.9375, - (1,0): 127, 0.0703125, 0.132813, 0.195313, 0.257813, 0.320313, - (1,6): 0.382813, 0.445313, 0.507813, 0.570313, 0.632813, 0.695313, - (1,12): 0.757813, 0.820313, 0.882813, 0.945313, 1.00781, 1.07031, - (1,18): 1.13281, 1.19531, 1.25781, 1.32031, 1.38281, 1.44531, 1.50781, - (1,25): 1.57031, 1.63281, 1.69531, 1.75781, 1.82031, 1.88281, 1.94531, - (1,32): 2.00781, 2.07031, 2.13281, 2.19531, 2.25781, 2.32031, 2.38281, - (1,39): 2.44531, 2.50781, 2.57031, 2.63281, 2.69531, 2.75781, 2.82031, - (1,46): 2.88281, 2.94531, 3.00781, 3.07031, 3.13281, 3.19531, 3.25781, - (1,53): 3.32031, 3.38281, 3.44531, 3.50781, 3.57031, 3.63281, 3.69531, - (1,60): 3.75781, 3.82031, 3.88281, 3.94531, 4.00781, 4.07031, 4.13281, - (1,67): 4.19531, 4.25781, 4.32031, 4.38281, 4.44531, 4.50781, 4.57031, - (1,74): 4.63281, 4.69531, 4.75781, 4.82031, 4.88281, 4.94531, 5.00781, - (1,81): 5.07031, 5.13281, 5.19531, 5.25781, 5.32031, 5.38281, 5.44531, - (1,88): 5.50781, 5.57031, 5.63281, 5.69531, 5.75781, 5.82031, 5.88281, - (1,95): 5.94531, 6.00781, 6.07031, 6.13281, 6.19531, 6.25781, 6.32031, - (1,102): 6.38281, 6.44531, 6.50781, 6.57031, 6.63281, 6.69531, 6.75781, - (1,109): 6.82031, 6.88281, 6.94531, 7.00781, 7.07031, 7.13281, 7.19531, - (1,116): 7.25781, 7.32031, 7.38281, 7.44531, 7.50781, 7.57031, 7.63281, - (1,123): 7.69531, 7.75781, 7.82031, 7.88281, 7.94531, - (2,0): 126, 0.078125, 0.140625, 0.203125, 0.265625, 0.328125, 0.390625, - (2,7): 0.453125, 0.515625, 0.578125, 0.640625, 0.703125, 0.765625, - (2,13): 0.828125, 0.890625, 0.953125, 1.01563, 1.07813, 1.14063, - (2,19): 1.20313, 1.26563, 1.32813, 1.39063, 1.45313, 1.51563, 1.57813, - (2,26): 1.64063, 1.70313, 1.76563, 1.82813, 1.89063, 1.95313, 2.01563, - (2,33): 2.07813, 2.14063, 2.20313, 2.26563, 2.32813, 2.39063, 2.45313, - (2,40): 2.51563, 2.57813, 2.64063, 2.70313, 2.76563, 2.82813, 2.89063, - (2,47): 2.95313, 3.01563, 3.07813, 3.14063, 3.20313, 3.26563, 3.32813, - (2,54): 3.39063, 3.45313, 3.51563, 3.57813, 3.64063, 3.70313, 3.76563, - (2,61): 3.82813, 3.89063, 3.95313, 4.01563, 4.07813, 4.14063, 4.20313, - (2,68): 4.26563, 4.32813, 4.39063, 4.45313, 4.51563, 4.57813, 4.64063, - (2,75): 4.70313, 4.76563, 4.82813, 4.89063, 4.95313, 5.01563, 5.07813, - (2,82): 5.14063, 5.20313, 5.26563, 5.32813, 5.39063, 5.45313, 5.51563, - (2,89): 5.57813, 5.64063, 5.70313, 5.76563, 5.82813, 5.89063, 5.95313, - (2,96): 6.01563, 6.07813, 6.14063, 6.20313, 6.26563, 6.32813, 6.39063, - (2,103): 6.45313, 6.51563, 6.57813, 6.64063, 6.70313, 6.76563, 6.82813, - (2,110): 6.89063, 6.95313, 7.01563, 7.07813, 7.14063, 7.20313, 7.26563, - (2,117): 7.32813, 7.39063, 7.45313, 7.51563, 7.57813, 7.64063, 7.70313, - (2,124): 7.76563, 7.82813, 7.89063, 7.95313, - (3,0): 125, 0.0859375, 0.148438, 0.210938, 0.273438, 0.335938, - (3,6): 0.398438, 0.460938, 0.523438, 0.585938, 0.648438, 0.710938, - (3,12): 0.773438, 0.835938, 0.898438, 0.960938, 1.02344, 1.08594, - (3,18): 1.14844, 1.21094, 1.27344, 1.33594, 1.39844, 1.46094, 1.52344, - (3,25): 1.58594, 1.64844, 1.71094, 1.77344, 1.83594, 1.89844, 1.96094, - (3,32): 2.02344, 2.08594, 2.14844, 2.21094, 2.27344, 2.33594, 2.39844, - (3,39): 2.46094, 2.52344, 2.58594, 2.64844, 2.71094, 2.77344, 2.83594, - (3,46): 2.89844, 2.96094, 3.02344, 3.08594, 3.14844, 3.21094, 3.27344, - (3,53): 3.33594, 3.39844, 3.46094, 3.52344, 3.58594, 3.64844, 3.71094, - (3,60): 3.77344, 3.83594, 3.89844, 3.96094, 4.02344, 4.08594, 4.14844, - (3,67): 4.21094, 4.27344, 4.33594, 4.39844, 4.46094, 4.52344, 4.58594, - (3,74): 4.64844, 4.71094, 4.77344, 4.83594, 4.89844, 4.96094, 5.02344, - (3,81): 5.08594, 5.14844, 5.21094, 5.27344, 5.33594, 5.39844, 5.46094, - (3,88): 5.52344, 5.58594, 5.64844, 5.71094, 5.77344, 5.83594, 5.89844, - (3,95): 5.96094, 6.02344, 6.08594, 6.14844, 6.21094, 6.27344, 6.33594, - (3,102): 6.39844, 6.46094, 6.52344, 6.58594, 6.64844, 6.71094, 6.77344, - (3,109): 6.83594, 6.89844, 6.96094, 7.02344, 7.08594, 7.14844, 7.21094, - (3,116): 7.27344, 7.33594, 7.39844, 7.46094, 7.52344, 7.58594, 7.64844, - (3,123): 7.71094, 7.77344, 7.83594, 7.89844, 7.96094, - (4,0): 124, 0.09375, 0.15625, 0.21875, 0.28125, 0.34375, 0.40625, - (4,7): 0.46875, 0.53125, 0.59375, 0.65625, 0.71875, 0.78125, 0.84375, - (4,14): 0.90625, 0.96875, 1.03125, 1.09375, 1.15625, 1.21875, 1.28125, - (4,21): 1.34375, 1.40625, 1.46875, 1.53125, 1.59375, 1.65625, 1.71875, - (4,28): 1.78125, 1.84375, 1.90625, 1.96875, 2.03125, 2.09375, 2.15625, - (4,35): 2.21875, 2.28125, 2.34375, 2.40625, 2.46875, 2.53125, 2.59375, - (4,42): 2.65625, 2.71875, 2.78125, 2.84375, 2.90625, 2.96875, 3.03125, - (4,49): 3.09375, 3.15625, 3.21875, 3.28125, 3.34375, 3.40625, 3.46875, - (4,56): 3.53125, 3.59375, 3.65625, 3.71875, 3.78125, 3.84375, 3.90625, - (4,63): 3.96875, 4.03125, 4.09375, 4.15625, 4.21875, 4.28125, 4.34375, - (4,70): 4.40625, 4.46875, 4.53125, 4.59375, 4.65625, 4.71875, 4.78125, - (4,77): 4.84375, 4.90625, 4.96875, 5.03125, 5.09375, 5.15625, 5.21875, - (4,84): 5.28125, 5.34375, 5.40625, 5.46875, 5.53125, 5.59375, 5.65625, - (4,91): 5.71875, 5.78125, 5.84375, 5.90625, 5.96875, 6.03125, 6.09375, - (4,98): 6.15625, 6.21875, 6.28125, 6.34375, 6.40625, 6.46875, 6.53125, - (4,105): 6.59375, 6.65625, 6.71875, 6.78125, 6.84375, 6.90625, 6.96875, - (4,112): 7.03125, 7.09375, 7.15625, 7.21875, 7.28125, 7.34375, 7.40625, - (4,119): 7.46875, 7.53125, 7.59375, 7.65625, 7.71875, 7.78125, 7.84375, - (4,126): 7.90625, 7.96875, - (5,0): 123, 0.101563, 0.164063, 0.226563, 0.289063, 0.351563, 0.414063, - (5,7): 0.476563, 0.539063, 0.601563, 0.664063, 0.726563, 0.789063, - (5,13): 0.851563, 0.914063, 0.976563, 1.03906, 1.10156, 1.16406, - (5,19): 1.22656, 1.28906, 1.35156, 1.41406, 1.47656, 1.53906, 1.60156, - (5,26): 1.66406, 1.72656, 1.78906, 1.85156, 1.91406, 1.97656, 2.03906, - (5,33): 2.10156, 2.16406, 2.22656, 2.28906, 2.35156, 2.41406, 2.47656, - (5,40): 2.53906, 2.60156, 2.66406, 2.72656, 2.78906, 2.85156, 2.91406, - (5,47): 2.97656, 3.03906, 3.10156, 3.16406, 3.22656, 3.28906, 3.35156, - (5,54): 3.41406, 3.47656, 3.53906, 3.60156, 3.66406, 3.72656, 3.78906, - (5,61): 3.85156, 3.91406, 3.97656, 4.03906, 4.10156, 4.16406, 4.22656, - (5,68): 4.28906, 4.35156, 4.41406, 4.47656, 4.53906, 4.60156, 4.66406, - (5,75): 4.72656, 4.78906, 4.85156, 4.91406, 4.97656, 5.03906, 5.10156, - (5,82): 5.16406, 5.22656, 5.28906, 5.35156, 5.41406, 5.47656, 5.53906, - (5,89): 5.60156, 5.66406, 5.72656, 5.78906, 5.85156, 5.91406, 5.97656, - (5,96): 6.03906, 6.10156, 6.16406, 6.22656, 6.28906, 6.35156, 6.41406, - (5,103): 6.47656, 6.53906, 6.60156, 6.66406, 6.72656, 6.78906, 6.85156, - (5,110): 6.91406, 6.97656, 7.03906, 7.10156, 7.16406, 7.22656, 7.28906, - (5,117): 7.35156, 7.41406, 7.47656, 7.53906, 7.60156, 7.66406, 7.72656, - (5,124): 7.78906, 7.85156, 7.91406, 7.97656, - (6,0): 122, 0.109375, 0.171875, 0.234375, 0.296875, 0.359375, 0.421875, - (6,7): 0.484375, 0.546875, 0.609375, 0.671875, 0.734375, 0.796875, - (6,13): 0.859375, 0.921875, 0.984375, 1.04688, 1.10938, 1.17188, - (6,19): 1.23438, 1.29688, 1.35938, 1.42188, 1.48438, 1.54688, 1.60938, - (6,26): 1.67188, 1.73438, 1.79688, 1.85938, 1.92188, 1.98438, 2.04688, - (6,33): 2.10938, 2.17188, 2.23438, 2.29688, 2.35938, 2.42188, 2.48438, - (6,40): 2.54688, 2.60938, 2.67188, 2.73438, 2.79688, 2.85938, 2.92188, - (6,47): 2.98438, 3.04688, 3.10938, 3.17188, 3.23438, 3.29688, 3.35938, - (6,54): 3.42188, 3.48438, 3.54688, 3.60938, 3.67188, 3.73438, 3.79688, - (6,61): 3.85938, 3.92188, 3.98438, 4.04688, 4.10938, 4.17188, 4.23438, - (6,68): 4.29688, 4.35938, 4.42188, 4.48438, 4.54688, 4.60938, 4.67188, - (6,75): 4.73438, 4.79688, 4.85938, 4.92188, 4.98438, 5.04688, 5.10938, - (6,82): 5.17188, 5.23438, 5.29688, 5.35938, 5.42188, 5.48438, 5.54688, - (6,89): 5.60938, 5.67188, 5.73438, 5.79688, 5.85938, 5.92188, 5.98438, - (6,96): 6.04688, 6.10938, 6.17188, 6.23438, 6.29688, 6.35938, 6.42188, - (6,103): 6.48438, 6.54688, 6.60938, 6.67188, 6.73438, 6.79688, 6.85938, - (6,110): 6.92188, 6.98438, 7.04688, 7.10938, 7.17188, 7.23438, 7.29688, - (6,117): 7.35938, 7.42188, 7.48438, 7.54688, 7.60938, 7.67188, 7.73438, - (6,124): 7.79688, 7.85938, 7.92188, 7.98438, - (7,0): 121, 0.117188, 0.179688, 0.242188, 0.304688, 0.367188, 0.429688, - (7,7): 0.492188, 0.554688, 0.617188, 0.679688, 0.742188, 0.804688, - (7,13): 0.867188, 0.929688, 0.992188, 1.05469, 1.11719, 1.17969, - (7,19): 1.24219, 1.30469, 1.36719, 1.42969, 1.49219, 1.55469, 1.61719, - (7,26): 1.67969, 1.74219, 1.80469, 1.86719, 1.92969, 1.99219, 2.05469, - (7,33): 2.11719, 2.17969, 2.24219, 2.30469, 2.36719, 2.42969, 2.49219, - (7,40): 2.55469, 2.61719, 2.67969, 2.74219, 2.80469, 2.86719, 2.92969, - (7,47): 2.99219, 3.05469, 3.11719, 3.17969, 3.24219, 3.30469, 3.36719, - (7,54): 3.42969, 3.49219, 3.55469, 3.61719, 3.67969, 3.74219, 3.80469, - (7,61): 3.86719, 3.92969, 3.99219, 4.05469, 4.11719, 4.17969, 4.24219, - (7,68): 4.30469, 4.36719, 4.42969, 4.49219, 4.55469, 4.61719, 4.67969, - (7,75): 4.74219, 4.80469, 4.86719, 4.92969, 4.99219, 5.05469, 5.11719, - (7,82): 5.17969, 5.24219, 5.30469, 5.36719, 5.42969, 5.49219, 5.55469, - (7,89): 5.61719, 5.67969, 5.74219, 5.80469, 5.86719, 5.92969, 5.99219, - (7,96): 6.05469, 6.11719, 6.17969, 6.24219, 6.30469, 6.36719, 6.42969, - (7,103): 6.49219, 6.55469, 6.61719, 6.67969, 6.74219, 6.80469, 6.86719, - (7,110): 6.92969, 6.99219, 7.05469, 7.11719, 7.17969, 7.24219, 7.30469, - (7,117): 7.36719, 7.42969, 7.49219, 7.55469, 7.61719, 7.67969, 7.74219, - (7,124): 7.80469, 7.86719, 7.92969, 7.99219 - } - ATTRIBUTE "DS128BITS" { - DATATYPE 128-bit little-endian floating-point 80-bit precision - DATASPACE SIMPLE { ( 1024 ) / ( 1024 ) } - DATA { - (0): 128, 0.0625, 0.125, 0.1875, 0.25, 0.3125, 0.375, 0.4375, 0.5, - (9): 0.5625, 0.625, 0.6875, 0.75, 0.8125, 0.875, 0.9375, 1, 1.0625, - (18): 1.125, 1.1875, 1.25, 1.3125, 1.375, 1.4375, 1.5, 1.5625, - (26): 1.625, 1.6875, 1.75, 1.8125, 1.875, 1.9375, 2, 2.0625, 2.125, - (35): 2.1875, 2.25, 2.3125, 2.375, 2.4375, 2.5, 2.5625, 2.625, - (43): 2.6875, 2.75, 2.8125, 2.875, 2.9375, 3, 3.0625, 3.125, 3.1875, - (52): 3.25, 3.3125, 3.375, 3.4375, 3.5, 3.5625, 3.625, 3.6875, 3.75, - (61): 3.8125, 3.875, 3.9375, 4, 4.0625, 4.125, 4.1875, 4.25, 4.3125, - (70): 4.375, 4.4375, 4.5, 4.5625, 4.625, 4.6875, 4.75, 4.8125, - (78): 4.875, 4.9375, 5, 5.0625, 5.125, 5.1875, 5.25, 5.3125, 5.375, - (87): 5.4375, 5.5, 5.5625, 5.625, 5.6875, 5.75, 5.8125, 5.875, - (95): 5.9375, 6, 6.0625, 6.125, 6.1875, 6.25, 6.3125, 6.375, 6.4375, - (104): 6.5, 6.5625, 6.625, 6.6875, 6.75, 6.8125, 6.875, 6.9375, 7, - (113): 7.0625, 7.125, 7.1875, 7.25, 7.3125, 7.375, 7.4375, 7.5, - (121): 7.5625, 7.625, 7.6875, 7.75, 7.8125, 7.875, 7.9375, 127, - (129): 0.0703125, 0.132813, 0.195313, 0.257813, 0.320313, 0.382813, - (135): 0.445313, 0.507813, 0.570313, 0.632813, 0.695313, 0.757813, - (141): 0.820313, 0.882813, 0.945313, 1.00781, 1.07031, 1.13281, - (147): 1.19531, 1.25781, 1.32031, 1.38281, 1.44531, 1.50781, - (153): 1.57031, 1.63281, 1.69531, 1.75781, 1.82031, 1.88281, - (159): 1.94531, 2.00781, 2.07031, 2.13281, 2.19531, 2.25781, - (165): 2.32031, 2.38281, 2.44531, 2.50781, 2.57031, 2.63281, - (171): 2.69531, 2.75781, 2.82031, 2.88281, 2.94531, 3.00781, - (177): 3.07031, 3.13281, 3.19531, 3.25781, 3.32031, 3.38281, - (183): 3.44531, 3.50781, 3.57031, 3.63281, 3.69531, 3.75781, - (189): 3.82031, 3.88281, 3.94531, 4.00781, 4.07031, 4.13281, - (195): 4.19531, 4.25781, 4.32031, 4.38281, 4.44531, 4.50781, - (201): 4.57031, 4.63281, 4.69531, 4.75781, 4.82031, 4.88281, - (207): 4.94531, 5.00781, 5.07031, 5.13281, 5.19531, 5.25781, - (213): 5.32031, 5.38281, 5.44531, 5.50781, 5.57031, 5.63281, - (219): 5.69531, 5.75781, 5.82031, 5.88281, 5.94531, 6.00781, - (225): 6.07031, 6.13281, 6.19531, 6.25781, 6.32031, 6.38281, - (231): 6.44531, 6.50781, 6.57031, 6.63281, 6.69531, 6.75781, - (237): 6.82031, 6.88281, 6.94531, 7.00781, 7.07031, 7.13281, - (243): 7.19531, 7.25781, 7.32031, 7.38281, 7.44531, 7.50781, - (249): 7.57031, 7.63281, 7.69531, 7.75781, 7.82031, 7.88281, - (255): 7.94531, 126, 0.078125, 0.140625, 0.203125, 0.265625, - (261): 0.328125, 0.390625, 0.453125, 0.515625, 0.578125, 0.640625, - (267): 0.703125, 0.765625, 0.828125, 0.890625, 0.953125, 1.01563, - (273): 1.07813, 1.14063, 1.20313, 1.26563, 1.32813, 1.39063, - (279): 1.45313, 1.51563, 1.57813, 1.64063, 1.70313, 1.76563, - (285): 1.82813, 1.89063, 1.95313, 2.01563, 2.07813, 2.14063, - (291): 2.20313, 2.26563, 2.32813, 2.39063, 2.45313, 2.51563, - (297): 2.57813, 2.64063, 2.70313, 2.76563, 2.82813, 2.89063, - (303): 2.95313, 3.01563, 3.07813, 3.14063, 3.20313, 3.26563, - (309): 3.32813, 3.39063, 3.45313, 3.51563, 3.57813, 3.64063, - (315): 3.70313, 3.76563, 3.82813, 3.89063, 3.95313, 4.01563, - (321): 4.07813, 4.14063, 4.20313, 4.26563, 4.32813, 4.39063, - (327): 4.45313, 4.51563, 4.57813, 4.64063, 4.70313, 4.76563, - (333): 4.82813, 4.89063, 4.95313, 5.01563, 5.07813, 5.14063, - (339): 5.20313, 5.26563, 5.32813, 5.39063, 5.45313, 5.51563, - (345): 5.57813, 5.64063, 5.70313, 5.76563, 5.82813, 5.89063, - (351): 5.95313, 6.01563, 6.07813, 6.14063, 6.20313, 6.26563, - (357): 6.32813, 6.39063, 6.45313, 6.51563, 6.57813, 6.64063, - (363): 6.70313, 6.76563, 6.82813, 6.89063, 6.95313, 7.01563, - (369): 7.07813, 7.14063, 7.20313, 7.26563, 7.32813, 7.39063, - (375): 7.45313, 7.51563, 7.57813, 7.64063, 7.70313, 7.76563, - (381): 7.82813, 7.89063, 7.95313, 125, 0.0859375, 0.148438, - (387): 0.210938, 0.273438, 0.335938, 0.398438, 0.460938, 0.523438, - (393): 0.585938, 0.648438, 0.710938, 0.773438, 0.835938, 0.898438, - (399): 0.960938, 1.02344, 1.08594, 1.14844, 1.21094, 1.27344, - (405): 1.33594, 1.39844, 1.46094, 1.52344, 1.58594, 1.64844, - (411): 1.71094, 1.77344, 1.83594, 1.89844, 1.96094, 2.02344, - (417): 2.08594, 2.14844, 2.21094, 2.27344, 2.33594, 2.39844, - (423): 2.46094, 2.52344, 2.58594, 2.64844, 2.71094, 2.77344, - (429): 2.83594, 2.89844, 2.96094, 3.02344, 3.08594, 3.14844, - (435): 3.21094, 3.27344, 3.33594, 3.39844, 3.46094, 3.52344, - (441): 3.58594, 3.64844, 3.71094, 3.77344, 3.83594, 3.89844, - (447): 3.96094, 4.02344, 4.08594, 4.14844, 4.21094, 4.27344, - (453): 4.33594, 4.39844, 4.46094, 4.52344, 4.58594, 4.64844, - (459): 4.71094, 4.77344, 4.83594, 4.89844, 4.96094, 5.02344, - (465): 5.08594, 5.14844, 5.21094, 5.27344, 5.33594, 5.39844, - (471): 5.46094, 5.52344, 5.58594, 5.64844, 5.71094, 5.77344, - (477): 5.83594, 5.89844, 5.96094, 6.02344, 6.08594, 6.14844, - (483): 6.21094, 6.27344, 6.33594, 6.39844, 6.46094, 6.52344, - (489): 6.58594, 6.64844, 6.71094, 6.77344, 6.83594, 6.89844, - (495): 6.96094, 7.02344, 7.08594, 7.14844, 7.21094, 7.27344, - (501): 7.33594, 7.39844, 7.46094, 7.52344, 7.58594, 7.64844, - (507): 7.71094, 7.77344, 7.83594, 7.89844, 7.96094, 124, 0.09375, - (514): 0.15625, 0.21875, 0.28125, 0.34375, 0.40625, 0.46875, - (520): 0.53125, 0.59375, 0.65625, 0.71875, 0.78125, 0.84375, - (526): 0.90625, 0.96875, 1.03125, 1.09375, 1.15625, 1.21875, - (532): 1.28125, 1.34375, 1.40625, 1.46875, 1.53125, 1.59375, - (538): 1.65625, 1.71875, 1.78125, 1.84375, 1.90625, 1.96875, - (544): 2.03125, 2.09375, 2.15625, 2.21875, 2.28125, 2.34375, - (550): 2.40625, 2.46875, 2.53125, 2.59375, 2.65625, 2.71875, - (556): 2.78125, 2.84375, 2.90625, 2.96875, 3.03125, 3.09375, - (562): 3.15625, 3.21875, 3.28125, 3.34375, 3.40625, 3.46875, - (568): 3.53125, 3.59375, 3.65625, 3.71875, 3.78125, 3.84375, - (574): 3.90625, 3.96875, 4.03125, 4.09375, 4.15625, 4.21875, - (580): 4.28125, 4.34375, 4.40625, 4.46875, 4.53125, 4.59375, - (586): 4.65625, 4.71875, 4.78125, 4.84375, 4.90625, 4.96875, - (592): 5.03125, 5.09375, 5.15625, 5.21875, 5.28125, 5.34375, - (598): 5.40625, 5.46875, 5.53125, 5.59375, 5.65625, 5.71875, - (604): 5.78125, 5.84375, 5.90625, 5.96875, 6.03125, 6.09375, - (610): 6.15625, 6.21875, 6.28125, 6.34375, 6.40625, 6.46875, - (616): 6.53125, 6.59375, 6.65625, 6.71875, 6.78125, 6.84375, - (622): 6.90625, 6.96875, 7.03125, 7.09375, 7.15625, 7.21875, - (628): 7.28125, 7.34375, 7.40625, 7.46875, 7.53125, 7.59375, - (634): 7.65625, 7.71875, 7.78125, 7.84375, 7.90625, 7.96875, 123, - (641): 0.101563, 0.164063, 0.226563, 0.289063, 0.351563, 0.414063, - (647): 0.476563, 0.539063, 0.601563, 0.664063, 0.726563, 0.789063, - (653): 0.851563, 0.914063, 0.976563, 1.03906, 1.10156, 1.16406, - (659): 1.22656, 1.28906, 1.35156, 1.41406, 1.47656, 1.53906, - (665): 1.60156, 1.66406, 1.72656, 1.78906, 1.85156, 1.91406, - (671): 1.97656, 2.03906, 2.10156, 2.16406, 2.22656, 2.28906, - (677): 2.35156, 2.41406, 2.47656, 2.53906, 2.60156, 2.66406, - (683): 2.72656, 2.78906, 2.85156, 2.91406, 2.97656, 3.03906, - (689): 3.10156, 3.16406, 3.22656, 3.28906, 3.35156, 3.41406, - (695): 3.47656, 3.53906, 3.60156, 3.66406, 3.72656, 3.78906, - (701): 3.85156, 3.91406, 3.97656, 4.03906, 4.10156, 4.16406, - (707): 4.22656, 4.28906, 4.35156, 4.41406, 4.47656, 4.53906, - (713): 4.60156, 4.66406, 4.72656, 4.78906, 4.85156, 4.91406, - (719): 4.97656, 5.03906, 5.10156, 5.16406, 5.22656, 5.28906, - (725): 5.35156, 5.41406, 5.47656, 5.53906, 5.60156, 5.66406, - (731): 5.72656, 5.78906, 5.85156, 5.91406, 5.97656, 6.03906, - (737): 6.10156, 6.16406, 6.22656, 6.28906, 6.35156, 6.41406, - (743): 6.47656, 6.53906, 6.60156, 6.66406, 6.72656, 6.78906, - (749): 6.85156, 6.91406, 6.97656, 7.03906, 7.10156, 7.16406, - (755): 7.22656, 7.28906, 7.35156, 7.41406, 7.47656, 7.53906, - (761): 7.60156, 7.66406, 7.72656, 7.78906, 7.85156, 7.91406, - (767): 7.97656, 122, 0.109375, 0.171875, 0.234375, 0.296875, - (773): 0.359375, 0.421875, 0.484375, 0.546875, 0.609375, 0.671875, - (779): 0.734375, 0.796875, 0.859375, 0.921875, 0.984375, 1.04688, - (785): 1.10938, 1.17188, 1.23438, 1.29688, 1.35938, 1.42188, - (791): 1.48438, 1.54688, 1.60938, 1.67188, 1.73438, 1.79688, - (797): 1.85938, 1.92188, 1.98438, 2.04688, 2.10938, 2.17188, - (803): 2.23438, 2.29688, 2.35938, 2.42188, 2.48438, 2.54688, - (809): 2.60938, 2.67188, 2.73438, 2.79688, 2.85938, 2.92188, - (815): 2.98438, 3.04688, 3.10938, 3.17188, 3.23438, 3.29688, - (821): 3.35938, 3.42188, 3.48438, 3.54688, 3.60938, 3.67188, - (827): 3.73438, 3.79688, 3.85938, 3.92188, 3.98438, 4.04688, - (833): 4.10938, 4.17188, 4.23438, 4.29688, 4.35938, 4.42188, - (839): 4.48438, 4.54688, 4.60938, 4.67188, 4.73438, 4.79688, - (845): 4.85938, 4.92188, 4.98438, 5.04688, 5.10938, 5.17188, - (851): 5.23438, 5.29688, 5.35938, 5.42188, 5.48438, 5.54688, - (857): 5.60938, 5.67188, 5.73438, 5.79688, 5.85938, 5.92188, - (863): 5.98438, 6.04688, 6.10938, 6.17188, 6.23438, 6.29688, - (869): 6.35938, 6.42188, 6.48438, 6.54688, 6.60938, 6.67188, - (875): 6.73438, 6.79688, 6.85938, 6.92188, 6.98438, 7.04688, - (881): 7.10938, 7.17188, 7.23438, 7.29688, 7.35938, 7.42188, - (887): 7.48438, 7.54688, 7.60938, 7.67188, 7.73438, 7.79688, - (893): 7.85938, 7.92188, 7.98438, 121, 0.117188, 0.179688, 0.242188, - (900): 0.304688, 0.367188, 0.429688, 0.492188, 0.554688, 0.617188, - (906): 0.679688, 0.742188, 0.804688, 0.867188, 0.929688, 0.992188, - (912): 1.05469, 1.11719, 1.17969, 1.24219, 1.30469, 1.36719, - (918): 1.42969, 1.49219, 1.55469, 1.61719, 1.67969, 1.74219, - (924): 1.80469, 1.86719, 1.92969, 1.99219, 2.05469, 2.11719, - (930): 2.17969, 2.24219, 2.30469, 2.36719, 2.42969, 2.49219, - (936): 2.55469, 2.61719, 2.67969, 2.74219, 2.80469, 2.86719, - (942): 2.92969, 2.99219, 3.05469, 3.11719, 3.17969, 3.24219, - (948): 3.30469, 3.36719, 3.42969, 3.49219, 3.55469, 3.61719, - (954): 3.67969, 3.74219, 3.80469, 3.86719, 3.92969, 3.99219, - (960): 4.05469, 4.11719, 4.17969, 4.24219, 4.30469, 4.36719, - (966): 4.42969, 4.49219, 4.55469, 4.61719, 4.67969, 4.74219, - (972): 4.80469, 4.86719, 4.92969, 4.99219, 5.05469, 5.11719, - (978): 5.17969, 5.24219, 5.30469, 5.36719, 5.42969, 5.49219, - (984): 5.55469, 5.61719, 5.67969, 5.74219, 5.80469, 5.86719, - (990): 5.92969, 5.99219, 6.05469, 6.11719, 6.17969, 6.24219, - (996): 6.30469, 6.36719, 6.42969, 6.49219, 6.55469, 6.61719, - (1002): 6.67969, 6.74219, 6.80469, 6.86719, 6.92969, 6.99219, - (1008): 7.05469, 7.11719, 7.17969, 7.24219, 7.30469, 7.36719, - (1014): 7.42969, 7.49219, 7.55469, 7.61719, 7.67969, 7.74219, - (1020): 7.80469, 7.86719, 7.92969, 7.99219 - } - } - } - DATASET "DS32BITS" { - DATATYPE H5T_IEEE_F32LE - DATASPACE SIMPLE { ( 8, 32 ) / ( 8, 32 ) } - STORAGE_LAYOUT { - CONTIGUOUS - SIZE 1024 - OFFSET 2048 - } - FILTERS { - NONE - } - FILLVALUE { - FILL_TIME H5D_FILL_TIME_IFSET - VALUE H5D_FILL_VALUE_DEFAULT - } - ALLOCATION_TIME { - H5D_ALLOC_TIME_LATE - } - DATA { - (0,0): 32, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, - (0,13): 3.25, 3.5, 3.75, 4, 4.25, 4.5, 4.75, 5, 5.25, 5.5, 5.75, 6, - (0,25): 6.25, 6.5, 6.75, 7, 7.25, 7.5, 7.75, - (1,0): 31, 0.28125, 0.53125, 0.78125, 1.03125, 1.28125, 1.53125, - (1,7): 1.78125, 2.03125, 2.28125, 2.53125, 2.78125, 3.03125, 3.28125, - (1,14): 3.53125, 3.78125, 4.03125, 4.28125, 4.53125, 4.78125, 5.03125, - (1,21): 5.28125, 5.53125, 5.78125, 6.03125, 6.28125, 6.53125, 6.78125, - (1,28): 7.03125, 7.28125, 7.53125, 7.78125, - (2,0): 30, 0.3125, 0.5625, 0.8125, 1.0625, 1.3125, 1.5625, 1.8125, - (2,8): 2.0625, 2.3125, 2.5625, 2.8125, 3.0625, 3.3125, 3.5625, 3.8125, - (2,16): 4.0625, 4.3125, 4.5625, 4.8125, 5.0625, 5.3125, 5.5625, 5.8125, - (2,24): 6.0625, 6.3125, 6.5625, 6.8125, 7.0625, 7.3125, 7.5625, 7.8125, - (3,0): 29, 0.34375, 0.59375, 0.84375, 1.09375, 1.34375, 1.59375, - (3,7): 1.84375, 2.09375, 2.34375, 2.59375, 2.84375, 3.09375, 3.34375, - (3,14): 3.59375, 3.84375, 4.09375, 4.34375, 4.59375, 4.84375, 5.09375, - (3,21): 5.34375, 5.59375, 5.84375, 6.09375, 6.34375, 6.59375, 6.84375, - (3,28): 7.09375, 7.34375, 7.59375, 7.84375, - (4,0): 28, 0.375, 0.625, 0.875, 1.125, 1.375, 1.625, 1.875, 2.125, - (4,9): 2.375, 2.625, 2.875, 3.125, 3.375, 3.625, 3.875, 4.125, 4.375, - (4,18): 4.625, 4.875, 5.125, 5.375, 5.625, 5.875, 6.125, 6.375, 6.625, - (4,27): 6.875, 7.125, 7.375, 7.625, 7.875, - (5,0): 27, 0.40625, 0.65625, 0.90625, 1.15625, 1.40625, 1.65625, - (5,7): 1.90625, 2.15625, 2.40625, 2.65625, 2.90625, 3.15625, 3.40625, - (5,14): 3.65625, 3.90625, 4.15625, 4.40625, 4.65625, 4.90625, 5.15625, - (5,21): 5.40625, 5.65625, 5.90625, 6.15625, 6.40625, 6.65625, 6.90625, - (5,28): 7.15625, 7.40625, 7.65625, 7.90625, - (6,0): 26, 0.4375, 0.6875, 0.9375, 1.1875, 1.4375, 1.6875, 1.9375, - (6,8): 2.1875, 2.4375, 2.6875, 2.9375, 3.1875, 3.4375, 3.6875, 3.9375, - (6,16): 4.1875, 4.4375, 4.6875, 4.9375, 5.1875, 5.4375, 5.6875, 5.9375, - (6,24): 6.1875, 6.4375, 6.6875, 6.9375, 7.1875, 7.4375, 7.6875, 7.9375, - (7,0): 25, 0.46875, 0.71875, 0.96875, 1.21875, 1.46875, 1.71875, - (7,7): 1.96875, 2.21875, 2.46875, 2.71875, 2.96875, 3.21875, 3.46875, - (7,14): 3.71875, 3.96875, 4.21875, 4.46875, 4.71875, 4.96875, 5.21875, - (7,21): 5.46875, 5.71875, 5.96875, 6.21875, 6.46875, 6.71875, 6.96875, - (7,28): 7.21875, 7.46875, 7.71875, 7.96875 - } - ATTRIBUTE "DS32BITS" { - DATATYPE H5T_IEEE_F32LE - DATASPACE SIMPLE { ( 256 ) / ( 256 ) } - DATA { - (0): 32, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, - (13): 3.25, 3.5, 3.75, 4, 4.25, 4.5, 4.75, 5, 5.25, 5.5, 5.75, 6, - (25): 6.25, 6.5, 6.75, 7, 7.25, 7.5, 7.75, 31, 0.28125, 0.53125, - (35): 0.78125, 1.03125, 1.28125, 1.53125, 1.78125, 2.03125, 2.28125, - (42): 2.53125, 2.78125, 3.03125, 3.28125, 3.53125, 3.78125, 4.03125, - (49): 4.28125, 4.53125, 4.78125, 5.03125, 5.28125, 5.53125, 5.78125, - (56): 6.03125, 6.28125, 6.53125, 6.78125, 7.03125, 7.28125, 7.53125, - (63): 7.78125, 30, 0.3125, 0.5625, 0.8125, 1.0625, 1.3125, 1.5625, - (71): 1.8125, 2.0625, 2.3125, 2.5625, 2.8125, 3.0625, 3.3125, - (78): 3.5625, 3.8125, 4.0625, 4.3125, 4.5625, 4.8125, 5.0625, - (85): 5.3125, 5.5625, 5.8125, 6.0625, 6.3125, 6.5625, 6.8125, - (92): 7.0625, 7.3125, 7.5625, 7.8125, 29, 0.34375, 0.59375, 0.84375, - (100): 1.09375, 1.34375, 1.59375, 1.84375, 2.09375, 2.34375, - (106): 2.59375, 2.84375, 3.09375, 3.34375, 3.59375, 3.84375, - (112): 4.09375, 4.34375, 4.59375, 4.84375, 5.09375, 5.34375, - (118): 5.59375, 5.84375, 6.09375, 6.34375, 6.59375, 6.84375, - (124): 7.09375, 7.34375, 7.59375, 7.84375, 28, 0.375, 0.625, 0.875, - (132): 1.125, 1.375, 1.625, 1.875, 2.125, 2.375, 2.625, 2.875, - (140): 3.125, 3.375, 3.625, 3.875, 4.125, 4.375, 4.625, 4.875, - (148): 5.125, 5.375, 5.625, 5.875, 6.125, 6.375, 6.625, 6.875, - (156): 7.125, 7.375, 7.625, 7.875, 27, 0.40625, 0.65625, 0.90625, - (164): 1.15625, 1.40625, 1.65625, 1.90625, 2.15625, 2.40625, - (170): 2.65625, 2.90625, 3.15625, 3.40625, 3.65625, 3.90625, - (176): 4.15625, 4.40625, 4.65625, 4.90625, 5.15625, 5.40625, - (182): 5.65625, 5.90625, 6.15625, 6.40625, 6.65625, 6.90625, - (188): 7.15625, 7.40625, 7.65625, 7.90625, 26, 0.4375, 0.6875, - (195): 0.9375, 1.1875, 1.4375, 1.6875, 1.9375, 2.1875, 2.4375, - (202): 2.6875, 2.9375, 3.1875, 3.4375, 3.6875, 3.9375, 4.1875, - (209): 4.4375, 4.6875, 4.9375, 5.1875, 5.4375, 5.6875, 5.9375, - (216): 6.1875, 6.4375, 6.6875, 6.9375, 7.1875, 7.4375, 7.6875, - (223): 7.9375, 25, 0.46875, 0.71875, 0.96875, 1.21875, 1.46875, - (230): 1.71875, 1.96875, 2.21875, 2.46875, 2.71875, 2.96875, - (236): 3.21875, 3.46875, 3.71875, 3.96875, 4.21875, 4.46875, - (242): 4.71875, 4.96875, 5.21875, 5.46875, 5.71875, 5.96875, - (248): 6.21875, 6.46875, 6.71875, 6.96875, 7.21875, 7.46875, - (254): 7.71875, 7.96875 - } - } - } - DATASET "DS64BITS" { - DATATYPE H5T_IEEE_F64LE - DATASPACE SIMPLE { ( 8, 64 ) / ( 8, 64 ) } - STORAGE_LAYOUT { - CONTIGUOUS - SIZE 4096 - OFFSET 6144 - } - FILTERS { - NONE - } - FILLVALUE { - FILL_TIME H5D_FILL_TIME_IFSET - VALUE H5D_FILL_VALUE_DEFAULT - } - ALLOCATION_TIME { - H5D_ALLOC_TIME_LATE - } - DATA { - (0,0): 64, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1, 1.125, 1.25, - (0,11): 1.375, 1.5, 1.625, 1.75, 1.875, 2, 2.125, 2.25, 2.375, 2.5, - (0,21): 2.625, 2.75, 2.875, 3, 3.125, 3.25, 3.375, 3.5, 3.625, 3.75, - (0,31): 3.875, 4, 4.125, 4.25, 4.375, 4.5, 4.625, 4.75, 4.875, 5, - (0,41): 5.125, 5.25, 5.375, 5.5, 5.625, 5.75, 5.875, 6, 6.125, 6.25, - (0,51): 6.375, 6.5, 6.625, 6.75, 6.875, 7, 7.125, 7.25, 7.375, 7.5, - (0,61): 7.625, 7.75, 7.875, - (1,0): 63, 0.140625, 0.265625, 0.390625, 0.515625, 0.640625, 0.765625, - (1,7): 0.890625, 1.01563, 1.14063, 1.26563, 1.39063, 1.51563, 1.64063, - (1,14): 1.76563, 1.89063, 2.01563, 2.14063, 2.26563, 2.39063, 2.51563, - (1,21): 2.64063, 2.76563, 2.89063, 3.01563, 3.14063, 3.26563, 3.39063, - (1,28): 3.51563, 3.64063, 3.76563, 3.89063, 4.01563, 4.14063, 4.26563, - (1,35): 4.39063, 4.51563, 4.64063, 4.76563, 4.89063, 5.01563, 5.14063, - (1,42): 5.26563, 5.39063, 5.51563, 5.64063, 5.76563, 5.89063, 6.01563, - (1,49): 6.14063, 6.26563, 6.39063, 6.51563, 6.64063, 6.76563, 6.89063, - (1,56): 7.01563, 7.14063, 7.26563, 7.39063, 7.51563, 7.64063, 7.76563, - (1,63): 7.89063, - (2,0): 62, 0.15625, 0.28125, 0.40625, 0.53125, 0.65625, 0.78125, - (2,7): 0.90625, 1.03125, 1.15625, 1.28125, 1.40625, 1.53125, 1.65625, - (2,14): 1.78125, 1.90625, 2.03125, 2.15625, 2.28125, 2.40625, 2.53125, - (2,21): 2.65625, 2.78125, 2.90625, 3.03125, 3.15625, 3.28125, 3.40625, - (2,28): 3.53125, 3.65625, 3.78125, 3.90625, 4.03125, 4.15625, 4.28125, - (2,35): 4.40625, 4.53125, 4.65625, 4.78125, 4.90625, 5.03125, 5.15625, - (2,42): 5.28125, 5.40625, 5.53125, 5.65625, 5.78125, 5.90625, 6.03125, - (2,49): 6.15625, 6.28125, 6.40625, 6.53125, 6.65625, 6.78125, 6.90625, - (2,56): 7.03125, 7.15625, 7.28125, 7.40625, 7.53125, 7.65625, 7.78125, - (2,63): 7.90625, - (3,0): 61, 0.171875, 0.296875, 0.421875, 0.546875, 0.671875, 0.796875, - (3,7): 0.921875, 1.04688, 1.17188, 1.29688, 1.42188, 1.54688, 1.67188, - (3,14): 1.79688, 1.92188, 2.04688, 2.17188, 2.29688, 2.42188, 2.54688, - (3,21): 2.67188, 2.79688, 2.92188, 3.04688, 3.17188, 3.29688, 3.42188, - (3,28): 3.54688, 3.67188, 3.79688, 3.92188, 4.04688, 4.17188, 4.29688, - (3,35): 4.42188, 4.54688, 4.67188, 4.79688, 4.92188, 5.04688, 5.17188, - (3,42): 5.29688, 5.42188, 5.54688, 5.67188, 5.79688, 5.92188, 6.04688, - (3,49): 6.17188, 6.29688, 6.42188, 6.54688, 6.67188, 6.79688, 6.92188, - (3,56): 7.04688, 7.17188, 7.29688, 7.42188, 7.54688, 7.67188, 7.79688, - (3,63): 7.92188, - (4,0): 60, 0.1875, 0.3125, 0.4375, 0.5625, 0.6875, 0.8125, 0.9375, - (4,8): 1.0625, 1.1875, 1.3125, 1.4375, 1.5625, 1.6875, 1.8125, 1.9375, - (4,16): 2.0625, 2.1875, 2.3125, 2.4375, 2.5625, 2.6875, 2.8125, 2.9375, - (4,24): 3.0625, 3.1875, 3.3125, 3.4375, 3.5625, 3.6875, 3.8125, 3.9375, - (4,32): 4.0625, 4.1875, 4.3125, 4.4375, 4.5625, 4.6875, 4.8125, 4.9375, - (4,40): 5.0625, 5.1875, 5.3125, 5.4375, 5.5625, 5.6875, 5.8125, 5.9375, - (4,48): 6.0625, 6.1875, 6.3125, 6.4375, 6.5625, 6.6875, 6.8125, 6.9375, - (4,56): 7.0625, 7.1875, 7.3125, 7.4375, 7.5625, 7.6875, 7.8125, 7.9375, - (5,0): 59, 0.203125, 0.328125, 0.453125, 0.578125, 0.703125, 0.828125, - (5,7): 0.953125, 1.07813, 1.20313, 1.32813, 1.45313, 1.57813, 1.70313, - (5,14): 1.82813, 1.95313, 2.07813, 2.20313, 2.32813, 2.45313, 2.57813, - (5,21): 2.70313, 2.82813, 2.95313, 3.07813, 3.20313, 3.32813, 3.45313, - (5,28): 3.57813, 3.70313, 3.82813, 3.95313, 4.07813, 4.20313, 4.32813, - (5,35): 4.45313, 4.57813, 4.70313, 4.82813, 4.95313, 5.07813, 5.20313, - (5,42): 5.32813, 5.45313, 5.57813, 5.70313, 5.82813, 5.95313, 6.07813, - (5,49): 6.20313, 6.32813, 6.45313, 6.57813, 6.70313, 6.82813, 6.95313, - (5,56): 7.07813, 7.20313, 7.32813, 7.45313, 7.57813, 7.70313, 7.82813, - (5,63): 7.95313, - (6,0): 58, 0.21875, 0.34375, 0.46875, 0.59375, 0.71875, 0.84375, - (6,7): 0.96875, 1.09375, 1.21875, 1.34375, 1.46875, 1.59375, 1.71875, - (6,14): 1.84375, 1.96875, 2.09375, 2.21875, 2.34375, 2.46875, 2.59375, - (6,21): 2.71875, 2.84375, 2.96875, 3.09375, 3.21875, 3.34375, 3.46875, - (6,28): 3.59375, 3.71875, 3.84375, 3.96875, 4.09375, 4.21875, 4.34375, - (6,35): 4.46875, 4.59375, 4.71875, 4.84375, 4.96875, 5.09375, 5.21875, - (6,42): 5.34375, 5.46875, 5.59375, 5.71875, 5.84375, 5.96875, 6.09375, - (6,49): 6.21875, 6.34375, 6.46875, 6.59375, 6.71875, 6.84375, 6.96875, - (6,56): 7.09375, 7.21875, 7.34375, 7.46875, 7.59375, 7.71875, 7.84375, - (6,63): 7.96875, - (7,0): 57, 0.234375, 0.359375, 0.484375, 0.609375, 0.734375, 0.859375, - (7,7): 0.984375, 1.10938, 1.23438, 1.35938, 1.48438, 1.60938, 1.73438, - (7,14): 1.85938, 1.98438, 2.10938, 2.23438, 2.35938, 2.48438, 2.60938, - (7,21): 2.73438, 2.85938, 2.98438, 3.10938, 3.23438, 3.35938, 3.48438, - (7,28): 3.60938, 3.73438, 3.85938, 3.98438, 4.10938, 4.23438, 4.35938, - (7,35): 4.48438, 4.60938, 4.73438, 4.85938, 4.98438, 5.10938, 5.23438, - (7,42): 5.35938, 5.48438, 5.60938, 5.73438, 5.85938, 5.98438, 6.10938, - (7,49): 6.23438, 6.35938, 6.48438, 6.60938, 6.73438, 6.85938, 6.98438, - (7,56): 7.10938, 7.23438, 7.35938, 7.48438, 7.60938, 7.73438, 7.85938, - (7,63): 7.98438 - } - ATTRIBUTE "DS64BITS" { - DATATYPE H5T_IEEE_F64LE - DATASPACE SIMPLE { ( 512 ) / ( 512 ) } - DATA { - (0): 64, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1, 1.125, - (10): 1.25, 1.375, 1.5, 1.625, 1.75, 1.875, 2, 2.125, 2.25, 2.375, - (20): 2.5, 2.625, 2.75, 2.875, 3, 3.125, 3.25, 3.375, 3.5, 3.625, - (30): 3.75, 3.875, 4, 4.125, 4.25, 4.375, 4.5, 4.625, 4.75, 4.875, - (40): 5, 5.125, 5.25, 5.375, 5.5, 5.625, 5.75, 5.875, 6, 6.125, - (50): 6.25, 6.375, 6.5, 6.625, 6.75, 6.875, 7, 7.125, 7.25, 7.375, - (60): 7.5, 7.625, 7.75, 7.875, 63, 0.140625, 0.265625, 0.390625, - (68): 0.515625, 0.640625, 0.765625, 0.890625, 1.01563, 1.14063, - (74): 1.26563, 1.39063, 1.51563, 1.64063, 1.76563, 1.89063, 2.01563, - (81): 2.14063, 2.26563, 2.39063, 2.51563, 2.64063, 2.76563, 2.89063, - (88): 3.01563, 3.14063, 3.26563, 3.39063, 3.51563, 3.64063, 3.76563, - (95): 3.89063, 4.01563, 4.14063, 4.26563, 4.39063, 4.51563, 4.64063, - (102): 4.76563, 4.89063, 5.01563, 5.14063, 5.26563, 5.39063, - (108): 5.51563, 5.64063, 5.76563, 5.89063, 6.01563, 6.14063, - (114): 6.26563, 6.39063, 6.51563, 6.64063, 6.76563, 6.89063, - (120): 7.01563, 7.14063, 7.26563, 7.39063, 7.51563, 7.64063, - (126): 7.76563, 7.89063, 62, 0.15625, 0.28125, 0.40625, 0.53125, - (133): 0.65625, 0.78125, 0.90625, 1.03125, 1.15625, 1.28125, - (139): 1.40625, 1.53125, 1.65625, 1.78125, 1.90625, 2.03125, - (145): 2.15625, 2.28125, 2.40625, 2.53125, 2.65625, 2.78125, - (151): 2.90625, 3.03125, 3.15625, 3.28125, 3.40625, 3.53125, - (157): 3.65625, 3.78125, 3.90625, 4.03125, 4.15625, 4.28125, - (163): 4.40625, 4.53125, 4.65625, 4.78125, 4.90625, 5.03125, - (169): 5.15625, 5.28125, 5.40625, 5.53125, 5.65625, 5.78125, - (175): 5.90625, 6.03125, 6.15625, 6.28125, 6.40625, 6.53125, - (181): 6.65625, 6.78125, 6.90625, 7.03125, 7.15625, 7.28125, - (187): 7.40625, 7.53125, 7.65625, 7.78125, 7.90625, 61, 0.171875, - (194): 0.296875, 0.421875, 0.546875, 0.671875, 0.796875, 0.921875, - (200): 1.04688, 1.17188, 1.29688, 1.42188, 1.54688, 1.67188, - (206): 1.79688, 1.92188, 2.04688, 2.17188, 2.29688, 2.42188, - (212): 2.54688, 2.67188, 2.79688, 2.92188, 3.04688, 3.17188, - (218): 3.29688, 3.42188, 3.54688, 3.67188, 3.79688, 3.92188, - (224): 4.04688, 4.17188, 4.29688, 4.42188, 4.54688, 4.67188, - (230): 4.79688, 4.92188, 5.04688, 5.17188, 5.29688, 5.42188, - (236): 5.54688, 5.67188, 5.79688, 5.92188, 6.04688, 6.17188, - (242): 6.29688, 6.42188, 6.54688, 6.67188, 6.79688, 6.92188, - (248): 7.04688, 7.17188, 7.29688, 7.42188, 7.54688, 7.67188, - (254): 7.79688, 7.92188, 60, 0.1875, 0.3125, 0.4375, 0.5625, 0.6875, - (262): 0.8125, 0.9375, 1.0625, 1.1875, 1.3125, 1.4375, 1.5625, - (269): 1.6875, 1.8125, 1.9375, 2.0625, 2.1875, 2.3125, 2.4375, - (276): 2.5625, 2.6875, 2.8125, 2.9375, 3.0625, 3.1875, 3.3125, - (283): 3.4375, 3.5625, 3.6875, 3.8125, 3.9375, 4.0625, 4.1875, - (290): 4.3125, 4.4375, 4.5625, 4.6875, 4.8125, 4.9375, 5.0625, - (297): 5.1875, 5.3125, 5.4375, 5.5625, 5.6875, 5.8125, 5.9375, - (304): 6.0625, 6.1875, 6.3125, 6.4375, 6.5625, 6.6875, 6.8125, - (311): 6.9375, 7.0625, 7.1875, 7.3125, 7.4375, 7.5625, 7.6875, - (318): 7.8125, 7.9375, 59, 0.203125, 0.328125, 0.453125, 0.578125, - (325): 0.703125, 0.828125, 0.953125, 1.07813, 1.20313, 1.32813, - (331): 1.45313, 1.57813, 1.70313, 1.82813, 1.95313, 2.07813, - (337): 2.20313, 2.32813, 2.45313, 2.57813, 2.70313, 2.82813, - (343): 2.95313, 3.07813, 3.20313, 3.32813, 3.45313, 3.57813, - (349): 3.70313, 3.82813, 3.95313, 4.07813, 4.20313, 4.32813, - (355): 4.45313, 4.57813, 4.70313, 4.82813, 4.95313, 5.07813, - (361): 5.20313, 5.32813, 5.45313, 5.57813, 5.70313, 5.82813, - (367): 5.95313, 6.07813, 6.20313, 6.32813, 6.45313, 6.57813, - (373): 6.70313, 6.82813, 6.95313, 7.07813, 7.20313, 7.32813, - (379): 7.45313, 7.57813, 7.70313, 7.82813, 7.95313, 58, 0.21875, - (386): 0.34375, 0.46875, 0.59375, 0.71875, 0.84375, 0.96875, - (392): 1.09375, 1.21875, 1.34375, 1.46875, 1.59375, 1.71875, - (398): 1.84375, 1.96875, 2.09375, 2.21875, 2.34375, 2.46875, - (404): 2.59375, 2.71875, 2.84375, 2.96875, 3.09375, 3.21875, - (410): 3.34375, 3.46875, 3.59375, 3.71875, 3.84375, 3.96875, - (416): 4.09375, 4.21875, 4.34375, 4.46875, 4.59375, 4.71875, - (422): 4.84375, 4.96875, 5.09375, 5.21875, 5.34375, 5.46875, - (428): 5.59375, 5.71875, 5.84375, 5.96875, 6.09375, 6.21875, - (434): 6.34375, 6.46875, 6.59375, 6.71875, 6.84375, 6.96875, - (440): 7.09375, 7.21875, 7.34375, 7.46875, 7.59375, 7.71875, - (446): 7.84375, 7.96875, 57, 0.234375, 0.359375, 0.484375, 0.609375, - (453): 0.734375, 0.859375, 0.984375, 1.10938, 1.23438, 1.35938, - (459): 1.48438, 1.60938, 1.73438, 1.85938, 1.98438, 2.10938, - (465): 2.23438, 2.35938, 2.48438, 2.60938, 2.73438, 2.85938, - (471): 2.98438, 3.10938, 3.23438, 3.35938, 3.48438, 3.60938, - (477): 3.73438, 3.85938, 3.98438, 4.10938, 4.23438, 4.35938, - (483): 4.48438, 4.60938, 4.73438, 4.85938, 4.98438, 5.10938, - (489): 5.23438, 5.35938, 5.48438, 5.60938, 5.73438, 5.85938, - (495): 5.98438, 6.10938, 6.23438, 6.35938, 6.48438, 6.60938, - (501): 6.73438, 6.85938, 6.98438, 7.10938, 7.23438, 7.35938, - (507): 7.48438, 7.60938, 7.73438, 7.85938, 7.98438 - } - } - } -} -} diff --git a/tools/test/h5dump/testh5dump.sh.in b/tools/test/h5dump/testh5dump.sh.in index 17bac431be2..09e6b3379d4 100644 --- a/tools/test/h5dump/testh5dump.sh.in +++ b/tools/test/h5dump/testh5dump.sh.in @@ -1357,7 +1357,7 @@ TOOLTEST tgrpnullspace.ddl -p --enable-error-stack tgrpnullspace.h5 TOOLTEST zerodim.ddl --enable-error-stack zerodim.h5 # test for long double (some systems do not have long double) -TOOLTEST tfloatsattrs.ddl -p --enable-error-stack tfloatsattrs.h5 +TOOLTEST tfloatsattrs.ddl -p --format=%.4g --lformat=%.4Lg --width=80 --enable-error-stack tfloatsattrs.h5 TOOLTEST tldouble.ddl --enable-error-stack tldouble.h5 TOOLTEST tldouble_scalar.ddl -p --enable-error-stack tldouble_scalar.h5 From b7ebf03db50c11650c4ae423c4bef9ba6db290bf Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Tue, 29 Oct 2024 10:17:49 -0700 Subject: [PATCH 061/179] Remove Julia CI source patch (#5030) The H5Oexists issue has been fixed upstream --- .github/workflows/autotools.yml | 10 +++++----- .github/workflows/cmake.yml | 12 ++++++------ .github/workflows/julia-auto.yml | 13 ------------- .github/workflows/julia-cmake.yml | 13 ------------- .github/workflows/julia_ci.patch | 19 ------------------- 5 files changed, 11 insertions(+), 56 deletions(-) delete mode 100644 .github/workflows/julia_ci.patch diff --git a/.github/workflows/autotools.yml b/.github/workflows/autotools.yml index e2dcacf9aa4..6bf5a8813cf 100644 --- a/.github/workflows/autotools.yml +++ b/.github/workflows/autotools.yml @@ -100,11 +100,11 @@ 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" + 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" diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index cd941e6a7a1..dd863c58517 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -109,14 +109,14 @@ 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" + call-release-cmake-julia: + name: "CMake Julia Workflows" + uses: ./.github/workflows/julia-cmake.yml + with: + build_mode: "Release" call-release-cmake-msys2: name: "CMake Msys2 Workflows" uses: ./.github/workflows/msys2-cmake.yml with: - build_mode: "Release" \ No newline at end of file + build_mode: "Release" diff --git a/.github/workflows/julia-auto.yml b/.github/workflows/julia-auto.yml index f254335ad96..f31063e1665 100644 --- a/.github/workflows/julia-auto.yml +++ b/.github/workflows/julia-auto.yml @@ -19,14 +19,6 @@ jobs: - name: Get HDF5 source uses: actions/checkout@v4.1.7 - # Checking out the Julia HDF5 wrappers will clobber the HDF5 checkout - # NOTE: Remove this when the Julia wrappers have been patched - - name: Save the Julia patch file - shell: bash - run: | - mkdir "${{ runner.workspace }}/julia_patch" - cp .github/workflows/julia_ci.patch "${{ runner.workspace }}/julia_patch" - - name: Install Dependencies shell: bash run: | @@ -73,11 +65,6 @@ jobs: repository: JuliaIO/HDF5.jl path: . - # NOTE: Remove this when the Julia wrappers have been patched - - name: Patch Julia CI - run: | - git apply "${{ runner.workspace }}/julia_patch/julia_ci.patch" -v - - name: Generate LocalPreferences run: | echo '[HDF5]' >> LocalPreferences.toml diff --git a/.github/workflows/julia-cmake.yml b/.github/workflows/julia-cmake.yml index 02407ce5c85..1d7791b310d 100644 --- a/.github/workflows/julia-cmake.yml +++ b/.github/workflows/julia-cmake.yml @@ -19,14 +19,6 @@ jobs: - name: Get HDF5 source uses: actions/checkout@v4.1.7 - # Checking out the Julia HDF5 wrappers will clobber the HDF5 checkout - # NOTE: Remove this when the Julia wrappers have been patched - - name: Save the Julia patch file - shell: bash - run: | - mkdir "${{ runner.workspace }}/julia_patch" - cp .github/workflows/julia_ci.patch "${{ runner.workspace }}/julia_patch" - - name: Install Dependencies shell: bash run: | @@ -76,11 +68,6 @@ jobs: repository: JuliaIO/HDF5.jl path: . - # NOTE: Remove this when the Julia wrappers have been patched - - name: Patch Julia CI - run: | - git apply "${{ runner.workspace }}/julia_patch/julia_ci.patch" -v - - name: Generate LocalPreferences run: | echo '[HDF5]' >> LocalPreferences.toml diff --git a/.github/workflows/julia_ci.patch b/.github/workflows/julia_ci.patch deleted file mode 100644 index 959a4ec4510..00000000000 --- a/.github/workflows/julia_ci.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff --git a/test/objects.jl b/test/objects.jl -index d68dd749..0541e91a 100644 ---- a/test/objects.jl -+++ b/test/objects.jl -@@ -16,7 +16,13 @@ using HDF5.API - h5open(fn, "r") do h5f - @test API.h5o_exists_by_name(h5f, "data") - @test API.h5o_exists_by_name(h5f, "lore") -- @test_throws API.H5Error API.h5o_exists_by_name(h5f, "noonian") -+ @static if HDF5.API.h5_get_libversion() <= v"1.14.5" -+ # Buggy behavior in earlier versions of HDF5 returns FAIL (-1) -+ @test_throws API.H5Error API.h5o_exists_by_name(h5f, "noonian") -+ else -+ # The correct behavior is to return false (0) -+ @test API.h5o_exists_by_name(h5f, "noonian") == 0 -+ end - - loc_id = API.h5o_open(h5f, "data", API.H5P_DEFAULT) - try From 46901e1d97e2f3bba6cdd09b845b1aae91318748 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Tue, 29 Oct 2024 10:18:10 -0700 Subject: [PATCH 062/179] Remove Autotools Cygwin PR action (#5031) --- .github/workflows/autotools.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/autotools.yml b/.github/workflows/autotools.yml index 6bf5a8813cf..034e577c135 100644 --- a/.github/workflows/autotools.yml +++ b/.github/workflows/autotools.yml @@ -90,12 +90,6 @@ jobs: with: build_mode: "production" - call-release-auto-cygwin: - name: "Autotools Cygwin Workflows" - uses: ./.github/workflows/cygwin-auto.yml - with: - build_mode: "production" - call-release-auto-xpr: name: "Autotools TestExpress Workflows" uses: ./.github/workflows/testxpr-auto.yml From 1e977c1db4b25f7f2563d043a194f640e425e518 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Tue, 29 Oct 2024 10:18:26 -0700 Subject: [PATCH 063/179] Remove comment about multi VFD duplication (#5029) --- src/H5warnings.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/H5warnings.h b/src/H5warnings.h index 850fb29e290..4dd03e2b7fa 100644 --- a/src/H5warnings.h +++ b/src/H5warnings.h @@ -18,10 +18,6 @@ #define H5warnings_H /* Macros for enabling/disabling particular GCC / clang warnings - * - * These are duplicated in H5FDmulti.c (we don't want to put them in the - * public header and the multi VFD can't use private headers). If you make - * changes here, be sure to update those as well. * * (see the following web-sites for more info: * http://www.dbp-consulting.com/tutorials/SuppressingGCCWarnings.html From ec4654e698c629f2f77bb3f781c92ddadfa7a77f Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Tue, 29 Oct 2024 17:13:31 -0500 Subject: [PATCH 064/179] Verify CMake workflows match autotools (#5035) --- .github/workflows/main-cmake-par-spc.yml | 4 ++-- .github/workflows/main-cmake-par.yml | 2 ++ .github/workflows/main-cmake-spc.yml | 23 +++++++++++++++-------- .github/workflows/main-cmake.yml | 7 ------- .github/workflows/msys2-cmake.yml | 4 ++-- .github/workflows/nvhpc-cmake.yml | 2 ++ .github/workflows/testxpr-cmake.yml | 1 - 7 files changed, 23 insertions(+), 20 deletions(-) diff --git a/.github/workflows/main-cmake-par-spc.yml b/.github/workflows/main-cmake-par-spc.yml index 72bc99bed11..6e16a52add8 100644 --- a/.github/workflows/main-cmake-par-spc.yml +++ b/.github/workflows/main-cmake-par-spc.yml @@ -48,6 +48,8 @@ jobs: -DHDF5_ENABLE_ALL_WARNINGS=ON \ -DHDF5_ENABLE_WARNINGS_AS_ERRORS=ON \ -DHDF5_ENABLE_PARALLEL:BOOL=ON \ + -DMPIEXEC_NUMPROC_FLAG:STRING=-n \ + -DMPIEXEC_MAX_NUMPROCS:STRING=2 \ -DHDF5_ENABLE_SUBFILING_VFD:BOOL=ON \ -DHDF5_BUILD_CPP_LIB:BOOL=OFF \ -DHDF5_BUILD_FORTRAN=OFF \ @@ -65,9 +67,7 @@ jobs: 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 diff --git a/.github/workflows/main-cmake-par.yml b/.github/workflows/main-cmake-par.yml index c3d9900e857..278855e9737 100644 --- a/.github/workflows/main-cmake-par.yml +++ b/.github/workflows/main-cmake-par.yml @@ -47,6 +47,8 @@ jobs: -DBUILD_SHARED_LIBS=ON \ -DHDF5_ENABLE_ALL_WARNINGS=ON \ -DHDF5_ENABLE_PARALLEL:BOOL=ON \ + -DMPIEXEC_NUMPROC_FLAG:STRING=-n \ + -DMPIEXEC_MAX_NUMPROCS:STRING=2 \ -DHDF5_ENABLE_SUBFILING_VFD:BOOL=ON \ -DHDF5_BUILD_CPP_LIB:BOOL=OFF \ -DHDF5_BUILD_FORTRAN=ON \ diff --git a/.github/workflows/main-cmake-spc.yml b/.github/workflows/main-cmake-spc.yml index 416bac4e8a6..e944ff4be13 100644 --- a/.github/workflows/main-cmake-spc.yml +++ b/.github/workflows/main-cmake-spc.yml @@ -68,10 +68,17 @@ jobs: run: cmake --build . --parallel 3 --config Debug working-directory: ${{ runner.workspace }}/build - # RUN TESTS - disable until some tests are fixed -# - name: CMake Run Tests -# run: ctest . --parallel 2 -C Debug -V -# working-directory: ${{ runner.workspace }}/build + # RUN TESTS + - name: CMake Run Tests + run: | + ctest . --parallel 2 -C Debug -V -E "testhdf5-base|cache_api|dt_arith|H5TEST-dtypes|err_compat" + working-directory: ${{ runner.workspace }}/build + + - name: CMake Run Expected to Fail Tests + run: | + ctest . --parallel 2 -C Debug -V -R "testhdf5-base|cache_api|dt_arith|H5TEST-dtypes|err_compat" + working-directory: ${{ runner.workspace }}/build + continue-on-error: true build_v1_8: name: "gcc DBG v1.8 default API" @@ -123,11 +130,11 @@ jobs: working-directory: ${{ runner.workspace }}/build # - # RUN TESTS - disable until some tests are fixed + # RUN TESTS # -# - name: CMake Run Tests -# run: ctest . --parallel 2 -C Debug -V -# working-directory: ${{ runner.workspace }}/build + - name: CMake Run Tests + run: ctest . --parallel 2 -C Debug -V + working-directory: ${{ runner.workspace }}/build build_v1_10: name: "gcc DBG v1.10 default API" diff --git a/.github/workflows/main-cmake.yml b/.github/workflows/main-cmake.yml index 6c192cdcfc9..aad19620d9d 100644 --- a/.github/workflows/main-cmake.yml +++ b/.github/workflows/main-cmake.yml @@ -8,7 +8,6 @@ on: description: "TS or empty" required: true type: string - build_mode: description: "release vs. debug build" required: true @@ -160,9 +159,7 @@ jobs: - name: Get Sources uses: actions/checkout@v4.1.7 - # # CMAKE CONFIGURE - # - name: CMake Configure run: | mkdir "${{ runner.workspace }}/build" @@ -217,16 +214,12 @@ jobs: shell: bash if: ${{ inputs.thread_safety == 'TS' }} - # # BUILD - # - 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 . --parallel 2 -C ${{ inputs.build_mode }} -V working-directory: ${{ runner.workspace }}/build diff --git a/.github/workflows/msys2-cmake.yml b/.github/workflows/msys2-cmake.yml index 7cbd7890f1c..46f1a2b4c37 100644 --- a/.github/workflows/msys2-cmake.yml +++ b/.github/workflows/msys2-cmake.yml @@ -81,11 +81,11 @@ jobs: - name: CMake Run Tests run: | - ctest . --parallel 2 -C ${{ inputs.build_mode }} -V -E "tfloatsattrs|testhdf5-base|cache_api|dt_arith|H5TEST-dtypes|err_compat" + ctest . --parallel 2 -C ${{ inputs.build_mode }} -V -E "testhdf5-base|cache_api|dt_arith|H5TEST-dtypes|err_compat" working-directory: ${{ runner.workspace }}/build - name: CMake Run Expected to Fail Tests run: | - ctest . --parallel 2 -C ${{ inputs.build_mode }} -V -R "tfloatsattrs|testhdf5-base|cache_api|dt_arith|H5TEST-dtypes|err_compat" + ctest . --parallel 2 -C ${{ inputs.build_mode }} -V -R "testhdf5-base|cache_api|dt_arith|H5TEST-dtypes|err_compat" working-directory: ${{ runner.workspace }}/build continue-on-error: true diff --git a/.github/workflows/nvhpc-cmake.yml b/.github/workflows/nvhpc-cmake.yml index dbdcb365ec9..66ef39c536c 100644 --- a/.github/workflows/nvhpc-cmake.yml +++ b/.github/workflows/nvhpc-cmake.yml @@ -54,6 +54,8 @@ jobs: -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF \ -DHDF5_ENABLE_PARALLEL:BOOL=ON \ + -DMPIEXEC_NUMPROC_FLAG:STRING=-np \ + -DMPIEXEC_MAX_NUMPROCS:STRING=2 \ -DHDF5_BUILD_CPP_LIB:BOOL=OFF \ -DLIBAEC_USE_LOCALCONTENT=OFF \ -DZLIB_USE_LOCALCONTENT=OFF \ diff --git a/.github/workflows/testxpr-cmake.yml b/.github/workflows/testxpr-cmake.yml index b03a67c53cd..47f2d4768d8 100644 --- a/.github/workflows/testxpr-cmake.yml +++ b/.github/workflows/testxpr-cmake.yml @@ -65,4 +65,3 @@ jobs: HDF5TestExpress: 0 run: ctest . --parallel 2 -C ${{ matrix.build_mode }} -V -R H5TESTXPR working-directory: ${{ runner.workspace }}/build - From d8c9b66fb94d2aaf972021c11af426cc007d3138 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Wed, 30 Oct 2024 12:02:22 -0700 Subject: [PATCH 065/179] Add HDF5 2.0 planning link to README.md (#5050) --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f7b5c631422..85322f56ac3 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,8 @@ are tentative. NOTE: In the March 2025 release we will begin using semantic versioning (https://semver.org/) and the previously announced 1.16.0 version will instead be numbered 2.0.0. +[A list of planned HDF5 2.0 features and bugfixes can be found here.](https://github.com/HDFGroup/hdf5/wiki/HDF5-2.0-Planning) + This list of feature release versions is also tentative, and the specific release in which a feature is introduced may change. From 8f0cdce2a2ce65c7c816f5c236df334ceff661b6 Mon Sep 17 00:00:00 2001 From: jhendersonHDF Date: Wed, 30 Oct 2024 15:44:49 -0500 Subject: [PATCH 066/179] Add callable workflows for building OpenMPI and MPICH from source (#5051) --- .github/workflows/build_mpich_source.yml | 82 ++++++++++++++++++++++ .github/workflows/build_openmpi_source.yml | 75 ++++++++++++++++++++ 2 files changed, 157 insertions(+) create mode 100644 .github/workflows/build_mpich_source.yml create mode 100644 .github/workflows/build_openmpi_source.yml diff --git a/.github/workflows/build_mpich_source.yml b/.github/workflows/build_mpich_source.yml new file mode 100644 index 00000000000..25b715693fc --- /dev/null +++ b/.github/workflows/build_mpich_source.yml @@ -0,0 +1,82 @@ +# Build MPICH from source using the latest commit on the +# 'main' branch and cache the results. The result is installed +# to (or restored to) '${{ runner.workspace }}/mpich'. + +# Triggers the workflow on a call from another workflow +on: + workflow_call: + inputs: + build_mode: + description: "production vs. debug build" + required: true + type: string + +permissions: + contents: read + +jobs: + ubuntu_gcc_build_and_test: + name: "Build MPICH ${{ inputs.build_mode }} (GCC)" + + runs-on: ubuntu-latest + + steps: + - name: Install Linux dependencies + run: | + sudo apt-get update + sudo apt-get install build-essential libtool libtool-bin + + - name: Get MPICH source + uses: actions/checkout@v4.1.7 + with: + repository: 'pmodels/mpich' + path: 'mpich' + submodules: recursive + + - name: Get MPICH commit hash + shell: bash + id: get-sha + run: | + cd $GITHUB_WORKSPACE/mpich + export MPICH_SHA=$(git rev-parse HEAD) + echo "MPICH_SHA=$MPICH_SHA" >> $GITHUB_ENV + echo "sha=$MPICH_SHA" >> $GITHUB_OUTPUT + # Output SHA for debugging + echo "MPICH_SHA=$MPICH_SHA" + + - name: Cache MPICH (GCC) installation + id: cache-mpich-ubuntu-gcc + uses: actions/cache@v4 + with: + path: ${{ runner.workspace }}/mpich + key: ${{ runner.os }}-${{ runner.arch }}-gcc-mpich-${{ steps.get-sha.outputs.sha }}-${{ inputs.build_mode }} + + # Enable threads=multiple for testing with Subfiling and + # VOL connectors that require MPI_THREAD_MULTIPLE + - name: Install MPICH (GCC) (Production) + if: ${{ steps.cache-mpich-ubuntu-gcc.cache-hit != 'true' && (inputs.build_mode != 'debug') }} + run: | + cd $GITHUB_WORKSPACE/mpich + ./autogen.sh + ./configure \ + CC=gcc \ + --prefix=${{ runner.workspace }}/mpich \ + --enable-threads=multiple + make -j2 + make install + + # Enable threads=multiple for testing with Subfiling and + # VOL connectors that require MPI_THREAD_MULTIPLE + - name: Install MPICH (GCC) (Debug) + if: ${{ steps.cache-mpich-ubuntu-gcc.cache-hit != 'true' && (inputs.build_mode == 'debug') }} + run: | + cd $GITHUB_WORKSPACE/mpich + ./autogen.sh + ./configure \ + CC=gcc \ + --prefix=${{ runner.workspace }}/mpich \ + --enable-g=most \ + --enable-debuginfo \ + --enable-threads=multiple + make -j2 + make install diff --git a/.github/workflows/build_openmpi_source.yml b/.github/workflows/build_openmpi_source.yml new file mode 100644 index 00000000000..a617153cc4f --- /dev/null +++ b/.github/workflows/build_openmpi_source.yml @@ -0,0 +1,75 @@ +# Build OpenMPI from source using the latest commit on the +# 'main' branch and cache the results. The result is installed +# to (or restored to) '${{ runner.workspace }}/openmpi'. + +# Triggers the workflow on a call from another workflow +on: + workflow_call: + inputs: + build_mode: + description: "production vs. debug build" + required: true + type: string + +permissions: + contents: read + +jobs: + ubuntu_gcc_build_and_test: + name: "Build OpenMPI ${{ inputs.build_mode }} (GCC)" + + runs-on: ubuntu-latest + + steps: + - name: Install Linux dependencies + run: | + sudo apt-get update + sudo apt-get install build-essential libtool libtool-bin + + - name: Get OpenMPI source + uses: actions/checkout@v4.1.7 + with: + repository: 'open-mpi/ompi' + path: 'ompi' + submodules: recursive + + - name: Get OpenMPI commit hash + shell: bash + id: get-sha + run: | + cd $GITHUB_WORKSPACE/ompi + export OPENMPI_SHA=$(git rev-parse HEAD) + echo "OPENMPI_SHA=$OPENMPI_SHA" >> $GITHUB_ENV + echo "sha=$OPENMPI_SHA" >> $GITHUB_OUTPUT + # Output SHA for debugging + echo "OPENMPI_SHA=$OPENMPI_SHA" + + - name: Cache OpenMPI (GCC) installation + id: cache-openmpi-ubuntu-gcc + uses: actions/cache@v4 + with: + path: ${{ runner.workspace }}/openmpi + key: ${{ runner.os }}-${{ runner.arch }}-gcc-openmpi-${{ steps.get-sha.outputs.sha }}-${{ inputs.build_mode }} + + - name: Install OpenMPI (GCC) (Production) + if: ${{ steps.cache-openmpi-ubuntu-gcc.cache-hit != 'true' && (inputs.build_mode != 'debug') }} + run: | + cd $GITHUB_WORKSPACE/ompi + ./autogen.pl + ./configure \ + CC=gcc \ + --prefix=${{ runner.workspace }}/openmpi + make -j2 + make install + + - name: Install OpenMPI (GCC) (Debug) + if: ${{ steps.cache-openmpi-ubuntu-gcc.cache-hit != 'true' && (inputs.build_mode == 'debug') }} + run: | + cd $GITHUB_WORKSPACE/ompi + ./autogen.pl + ./configure \ + CC=gcc \ + --prefix=${{ runner.workspace }}/openmpi \ + --enable-debug + make -j2 + make install From 92033dff84ca348285e191c91d6fd888a1ad2091 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Thu, 31 Oct 2024 07:38:50 -0700 Subject: [PATCH 067/179] malloc --> calloc in H5B cache entry (#5053) oss-fuzz occasionally complains about intermittent undefined behavior when when Boolean variables in H5C_cache_entry_t (like is_protected) are set to values other than 0 or 1 when parsing fuzzed files. Using calloc() to iniitialize the H5B_t struct (like other metadata already does) should fix this. --- src/H5B.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/H5B.c b/src/H5B.c index d87f8828074..81ba3dfb156 100644 --- a/src/H5B.c +++ b/src/H5B.c @@ -215,7 +215,7 @@ H5B_create(H5F_t *f, const H5B_class_t *type, void *udata, haddr_t *addr_p /*out /* * Allocate file and memory data structures. */ - if (NULL == (bt = H5FL_MALLOC(H5B_t))) + if (NULL == (bt = H5FL_CALLOC(H5B_t))) HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, FAIL, "memory allocation failed for B-tree root node"); memset(&bt->cache_info, 0, sizeof(H5AC_info_t)); bt->level = 0; From e8257bd2b52d0d1748ec07e5acf0e3646a1284f6 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Thu, 31 Oct 2024 07:43:04 -0700 Subject: [PATCH 068/179] Make H5T__free more aggressive about cleanup (#5054) oss-fuzz often trips over unfreed datatype memory when parsing fuzzed files. This changes H5T__free() to use HDONE macros so cleanup continues on errors. --- src/H5T.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/H5T.c b/src/H5T.c index b5e23452caf..b2137e752c3 100644 --- a/src/H5T.c +++ b/src/H5T.c @@ -4133,7 +4133,8 @@ H5T__free(H5T_t *dt) for (i = 0; i < dt->shared->u.compnd.nmembs; i++) { dt->shared->u.compnd.memb[i].name = (char *)H5MM_xfree(dt->shared->u.compnd.memb[i].name); if (H5T_close_real(dt->shared->u.compnd.memb[i].type) < 0) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL, + /* Push errors, but keep going */ + HDONE_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL, "unable to close datatype for compound member"); } dt->shared->u.compnd.memb = (H5T_cmemb_t *)H5MM_xfree(dt->shared->u.compnd.memb); @@ -4170,12 +4171,14 @@ H5T__free(H5T_t *dt) /* Close the parent */ assert(dt->shared->parent != dt); if (dt->shared->parent && H5T_close_real(dt->shared->parent) < 0) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL, "unable to close parent data type"); + /* Push errors, but keep going */ + HDONE_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL, "unable to close parent data type"); dt->shared->parent = NULL; /* Close the owned VOL object */ if (dt->shared->owned_vol_obj && H5VL_free_object(dt->shared->owned_vol_obj) < 0) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL, "unable to close owned VOL object"); + /* Push errors, but keep going */ + HDONE_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL, "unable to close owned VOL object"); dt->shared->owned_vol_obj = NULL; done: From 90429f5e7d7251a7b8810e161792d15269b90ead Mon Sep 17 00:00:00 2001 From: jhendersonHDF Date: Thu, 31 Oct 2024 15:54:25 -0500 Subject: [PATCH 069/179] Implement support for complex number datatypes (#4630) * Implement support for complex number datatypes Adds the new datatype class H5T_COMPLEX Adds the new API function H5Tcomplex_create which creates a complex number datatype from an ID of a base floating-point datatype Adds the new feature check macros H5_HAVE_COMPLEX_NUMBERS and H5_HAVE_C99_COMPLEX_NUMBERS Adds the new datatype size macros H5_SIZEOF_FLOAT_COMPLEX, H5_SIZEOF_DOUBLE_COMPLEX and H5_SIZEOF_LONG_DOUBLE_COMPLEX Adds the new datatype ID macros H5T_NATIVE_FLOAT_COMPLEX, H5T_NATIVE_DOUBLE_COMPLEX, H5T_NATIVE_LDOUBLE_COMPLEX, H5T_CPLX_IEEE_F16LE, H5T_CPLX_IEEE_F16BE, H5T_CPLX_IEEE_F32LE, H5T_CPLX_IEEE_F32BE, H5T_CPLX_IEEE_F64LE and H5T_CPLX_IEEE_F64BE Adds hard and soft datatype conversion paths between complex number datatypes and all the integer and floating-point datatypes, as well as between other complex number datatypes Adds a special conversion path between complex number datatypes and array or compound datatypes where the in-memory layout of data is the same between the datatypes and data can be converted directly Adds support for complex number datatypes to the h5dump, h5ls and h5diff/ph5diff tools. Allows h5dump '-m' option to change floating-point printing format for float complex and double complex datatypes, as well as long double complex if it has the same size as double complex Adds minimal support to the h5watch and h5import tools Adds support for the predefined complex number datatypes and H5Tcomplex_create function to the Java wrappers. Also adds initial, untested support to the JNI for future use with HDFView Adds support for just the H5T_COMPLEX datatype class to the Fortran wrappers Adds support for the predefined complex number datatypes and H5Tcomplex_create function to the high level library H5LT interface for use with the H5LTtext_to_dtype and H5LTdtype_to_text functions Changes some usages of "complex" in the library since it conflicts with the "complex" keyword from the complex.h header. Also changes various usages of the word "complex" throughout the library to distinguish compound datatypes from complex datatypes. --- HDF5Examples/C/H5T/200/h5ex_t_complex.c | 137 + .../C/H5T/200/h5ex_t_complex_custom.c | 145 + HDF5Examples/C/H5T/200/h5ex_t_complex_msvc.c | 138 + HDF5Examples/JAVA/H5T/H5Ex_T_Commit.java | 3 +- c++/test/tattr.cpp | 8 +- config/cmake/ConfigureChecks.cmake | 66 + config/cmake/H5pubconf.h.in | 18 + config/cmake/HDFTests.c | 62 + configure.ac | 52 + doxygen/aliases | 2 +- doxygen/dox/DDLBNF200.dox | 667 ++ doxygen/dox/IntroHDF5.dox | 2 +- doxygen/dox/LearnBasics1.dox | 4 +- doxygen/dox/PredefinedDatatypeTables.dox | 4 + doxygen/dox/Specifications.dox | 1 + doxygen/examples/H5.format.html | 133 + .../examples/tables/predefinedDatatypes.dox | 47 + fortran/src/H5Tf.c | 15 +- fortran/src/H5Tff.F90 | 6 +- fortran/src/H5_f.c | 1 + fortran/src/H5_ff.F90 | 3 +- fortran/src/H5f90global.F90 | 2 + hl/src/H5LT.c | 43 + hl/src/H5LTanalyze.c | 525 +- hl/src/H5LTanalyze.l | 11 + hl/src/H5LTparse.c | 896 +- hl/src/H5LTparse.h | 56 +- hl/src/H5LTparse.y | 20 + hl/test/test_lite.c | 223 + hl/tools/h5watch/h5watch.c | 34 +- java/src/hdf/hdf5lib/H5.java | 29 + java/src/hdf/hdf5lib/HDF5Constants.java | 40 + java/src/jni/h5Constants.c | 50 + java/src/jni/h5aImp.c | 42 +- java/src/jni/h5dImp.c | 42 +- java/src/jni/h5tImp.c | 19 + java/src/jni/h5tImp.h | 7 + java/src/jni/h5util.c | 282 + java/test/TestH5T.java | 54 + java/test/testfiles/JUnit-TestH5T.txt | 3 +- release_docs/RELEASE.txt | 194 + src/CMakeLists.txt | 13 +- src/H5Fmodule.h | 2 +- src/H5Gmodule.h | 2 +- src/H5Odtype.c | 99 + src/H5Pfapl.c | 6 +- src/H5Plapl.c | 6 +- src/H5S.c | 10 +- src/H5Spublic.h | 4 +- src/H5Sselect.c | 18 +- src/H5T.c | 638 +- src/H5Tbit.c | 2 +- src/H5Tcomplex.c | 152 + src/H5Tcompound.c | 2 + src/H5Tconv.c | 221 +- src/H5Tconv.h | 11 +- src/H5Tconv_bitfield.c | 7 +- src/H5Tconv_complex.c | 2315 +++++ src/H5Tconv_complex.h | 214 + src/H5Tconv_float.c | 2488 +++--- src/H5Tconv_float.h | 77 + src/H5Tconv_integer.c | 1464 ++- src/H5Tconv_integer.h | 127 + src/H5Tconv_macros.h | 623 +- src/H5Tconv_vlen.c | 3 +- src/H5Tdbg.c | 51 +- src/H5Tfields.c | 2 + src/H5Tfixed.c | 24 +- src/H5Tmodule.h | 206 +- src/H5Tnative.c | 138 +- src/H5Toffset.c | 2 + src/H5Tpkg.h | 92 +- src/H5Tprecis.c | 3 + src/H5Tpublic.h | 105 +- src/H5Tvisit.c | 11 +- src/H5Tvlen.c | 37 +- src/H5VL.c | 16 +- src/H5Znbit.c | 6 + src/H5Zscaleoffset.c | 1 + src/H5private.h | 42 + src/H5trace.c | 24 + src/H5win32defs.h | 18 + src/Makefile.am | 7 +- test/API/H5_api_dataset_test.c | 11 +- test/API/H5_api_test_util.c | 55 + test/dsets.c | 26 +- test/dt_arith.c | 7893 ++++++++++++----- test/dtypes.c | 2992 ++++++- test/ntypes.c | 131 + test/tarray.c | 166 +- test/tattr.c | 8 +- test/tfile.c | 48 +- tools/lib/h5diff_array.c | 1007 ++- tools/lib/h5diff_dset.c | 1 + tools/lib/h5diff_util.c | 4 + tools/lib/h5tools.c | 22 + tools/lib/h5tools.h | 119 +- tools/lib/h5tools_dump.c | 73 +- tools/lib/h5tools_str.c | 68 + tools/lib/h5tools_type.c | 18 + tools/src/h5dump/h5dump.c | 38 +- tools/src/h5dump/h5dump.h | 15 +- tools/src/h5dump/h5dump_ddl.c | 31 +- tools/src/h5dump/h5dump_extern.h | 1 + tools/src/h5dump/h5dump_xml.c | 269 +- tools/src/h5import/h5import.c | 4 + tools/src/h5ls/h5ls.c | 97 +- tools/src/h5repack/h5repack_opttable.c | 62 +- tools/test/h5diff/expected/h5diff_70.txt | 141 + tools/test/h5diff/expected/h5diff_700.txt | 147 +- tools/test/h5diff/expected/h5diff_701.txt | 156 +- tools/test/h5diff/expected/h5diff_702.txt | 147 +- tools/test/h5diff/expected/h5diff_703.txt | 156 +- tools/test/h5diff/expected/h5diff_80.txt | 50 + tools/test/h5diff/expected/h5diff_8639.txt | 6 + tools/test/h5diff/h5diffgentest.c | 140 +- tools/test/h5diff/testfiles/h5diff_attr1.h5 | Bin 27480 -> 29160 bytes tools/test/h5diff/testfiles/h5diff_attr2.h5 | Bin 27480 -> 29160 bytes tools/test/h5diff/testfiles/h5diff_attr3.h5 | Bin 27440 -> 29120 bytes tools/test/h5diff/testfiles/h5diff_dset1.h5 | Bin 23416 -> 24560 bytes tools/test/h5diff/testfiles/h5diff_dset2.h5 | Bin 23416 -> 24560 bytes tools/test/h5diff/testfiles/h5diff_dset3.h5 | Bin 23416 -> 24560 bytes tools/test/h5dump/CMakeTests.cmake | 27 + tools/test/h5dump/expected/tcomplex.ddl | 441 + tools/test/h5dump/expected/tcomplex_be.ddl | 441 + .../test/h5dump/expected/tcomplex_be_info.ddl | 103 + tools/test/h5dump/expected/tcomplex_info.ddl | 103 + tools/test/h5dump/expected/treference.ddl | 136 + tools/test/h5dump/h5dumpgentest.c | 609 +- tools/test/h5dump/testfiles/tattr2.h5 | Bin 33840 -> 38920 bytes tools/test/h5dump/testfiles/tcomplex.h5 | Bin 0 -> 15552 bytes tools/test/h5dump/testfiles/tcomplex_be.h5 | Bin 0 -> 15552 bytes tools/test/h5dump/testh5dump.sh.in | 23 + tools/test/h5ls/CMakeTests.cmake | 44 + tools/test/h5ls/expected/tattr2.ls | 48 +- tools/test/h5ls/expected/tcomplex.ls | 40 + tools/test/h5ls/expected/tcomplex_be.ls | 40 + .../h5ls/expected/tcomplex_be_nosupport.ls | 46 + .../test/h5ls/expected/tcomplex_nosupport.ls | 46 + tools/test/h5ls/testh5ls.sh.in | 22 + tools/test/h5repack/h5repacktst.c | 60 +- 141 files changed, 24772 insertions(+), 4934 deletions(-) create mode 100644 HDF5Examples/C/H5T/200/h5ex_t_complex.c create mode 100644 HDF5Examples/C/H5T/200/h5ex_t_complex_custom.c create mode 100644 HDF5Examples/C/H5T/200/h5ex_t_complex_msvc.c create mode 100644 doxygen/dox/DDLBNF200.dox create mode 100644 src/H5Tcomplex.c create mode 100644 src/H5Tconv_complex.c create mode 100644 src/H5Tconv_complex.h create mode 100644 tools/test/h5dump/expected/tcomplex.ddl create mode 100644 tools/test/h5dump/expected/tcomplex_be.ddl create mode 100644 tools/test/h5dump/expected/tcomplex_be_info.ddl create mode 100644 tools/test/h5dump/expected/tcomplex_info.ddl create mode 100644 tools/test/h5dump/testfiles/tcomplex.h5 create mode 100644 tools/test/h5dump/testfiles/tcomplex_be.h5 create mode 100644 tools/test/h5ls/expected/tcomplex.ls create mode 100644 tools/test/h5ls/expected/tcomplex_be.ls create mode 100644 tools/test/h5ls/expected/tcomplex_be_nosupport.ls create mode 100644 tools/test/h5ls/expected/tcomplex_nosupport.ls diff --git a/HDF5Examples/C/H5T/200/h5ex_t_complex.c b/HDF5Examples/C/H5T/200/h5ex_t_complex.c new file mode 100644 index 00000000000..4e59f0a6efc --- /dev/null +++ b/HDF5Examples/C/H5T/200/h5ex_t_complex.c @@ -0,0 +1,137 @@ +/************************************************************ + + This example shows how to read and write complex number + datatypes to a dataset. The program first writes float + complex values to a dataset with a dataspace of DIM0xDIM1, + then closes the file. Next, it reopens the file, reads + back the data, and outputs it to the screen. This example + assumes the C99 complex number types are supported. For an + example that uses MSVC's complex number types, see the + h5ex_t_complex_msvc.c example file. + + ************************************************************/ + +#include "hdf5.h" +#include +#include +#include + +#define FILE "h5ex_t_complex.h5" +#define DATASET "DS1" +#define DIM0 4 +#define DIM1 7 + +int +main(void) +{ + float _Complex wdata[DIM0][DIM1]; /* Write buffer */ + float _Complex **rdata; /* Read buffer */ + hid_t file, space, dset; /* Handles */ + herr_t status; + hsize_t dims[2] = {DIM0, DIM1}; + int ndims; + hsize_t i, j; + + /* + * Initialize data. + */ + for (i = 0; i < DIM0; i++) + for (j = 0; j < DIM1; j++) { + float real = (float)i / (j + 0.5) + j; + float imaginary = (float)i / (j + 0.5) + j + 1; + wdata[i][j] = real + imaginary * I; + } + + /* + * Create a new file using the default properties. + */ + file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* + * Create dataspace. Setting maximum size to NULL sets the maximum + * size to be the current size. + */ + space = H5Screate_simple(2, dims, NULL); + + /* + * Create the dataset and write the complex number data to it. In + * this example we will save the data as complex numbers of 2 64-bit + * little endian IEEE floating point numbers, regardless of the native + * type. The HDF5 library automatically converts between different + * complex number types. + */ + dset = H5Dcreate(file, DATASET, H5T_COMPLEX_IEEE_F64LE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + status = H5Dwrite(dset, H5T_NATIVE_FLOAT_COMPLEX, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata[0]); + + /* + * Close and release resources. + */ + status = H5Dclose(dset); + status = H5Sclose(space); + status = H5Fclose(file); + + /* + * Now we begin the read section of this example. Here we assume + * the dataset has the same name and rank, but can have any size. + * Therefore we must allocate a new array to read in data using + * malloc(). + */ + + /* + * Open file and dataset. + */ + file = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT); + dset = H5Dopen(file, DATASET, H5P_DEFAULT); + + /* + * Get dataspace and allocate memory for read buffer. This is a + * two dimensional dataset so the dynamic allocation must be done + * in steps. + */ + space = H5Dget_space(dset); + ndims = H5Sget_simple_extent_dims(space, dims, NULL); + + /* + * Allocate array of pointers to rows. + */ + rdata = malloc(dims[0] * sizeof(float _Complex *)); + + /* + * Allocate space for complex number data. + */ + rdata[0] = malloc(dims[0] * dims[1] * sizeof(float _Complex)); + + /* + * Set the rest of the pointers to rows to the correct addresses. + */ + for (i = 1; i < dims[0]; i++) + rdata[i] = rdata[0] + i * dims[1]; + + /* + * Read the data. + */ + status = H5Dread(dset, H5T_NATIVE_FLOAT_COMPLEX, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata[0]); + + /* + * Output the data to the screen. + */ + printf("%s:\n", DATASET); + for (i = 0; i < dims[0]; i++) { + printf(" ["); + for (j = 0; j < dims[1]; j++) { + printf(" %6.4f%+6.4fi", crealf(rdata[i][j]), cimagf(rdata[i][j])); + } + printf("]\n"); + } + + /* + * Close and release resources. + */ + free(rdata[0]); + free(rdata); + status = H5Dclose(dset); + status = H5Sclose(space); + status = H5Fclose(file); + + return 0; +} diff --git a/HDF5Examples/C/H5T/200/h5ex_t_complex_custom.c b/HDF5Examples/C/H5T/200/h5ex_t_complex_custom.c new file mode 100644 index 00000000000..6c36a2578d8 --- /dev/null +++ b/HDF5Examples/C/H5T/200/h5ex_t_complex_custom.c @@ -0,0 +1,145 @@ +/************************************************************ + + This example shows how to read and write complex number + datatypes to a dataset. The program first writes float + complex values to a dataset with a dataspace of DIM0xDIM1, + then closes the file. Next, it reopens the file, reads + back the data, and outputs it to the screen. This example + assumes the C99 complex number types are supported. For an + example that uses MSVC's complex number types, see the + h5ex_t_complex_msvc.c example file. + + ************************************************************/ + +#include "hdf5.h" +#include +#include +#include + +#define FILE "h5ex_t_complex_custom.h5" +#define DATASET "DS1" +#define DIM0 4 +#define DIM1 7 + +int +main(void) +{ + float _Complex wdata[DIM0][DIM1]; /* Write buffer */ + float _Complex **rdata; /* Read buffer */ + hid_t file, space, dset, dtype; /* Handles */ + herr_t status; + hsize_t dims[2] = {DIM0, DIM1}; + int ndims; + hsize_t i, j; + + /* + * Initialize data. + */ + for (i = 0; i < DIM0; i++) + for (j = 0; j < DIM1; j++) { + float real = (float)i / (j + 0.5) + j; + float imaginary = (float)i / (j + 0.5) + j + 1; + wdata[i][j] = real + imaginary * I; + } + + /* + * Create a new file using the default properties. + */ + file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* + * Create dataspace. Setting maximum size to NULL sets the maximum + * size to be the current size. + */ + space = H5Screate_simple(2, dims, NULL); + + /* + * Create the dataset and write the complex number data to it. In + * this example we will save the data as complex numbers of 2 64-bit + * little endian IEEE floating point numbers, regardless of the native + * type. The HDF5 library automatically converts between different + * complex number types. + */ + dset = H5Dcreate(file, DATASET, H5T_COMPLEX_IEEE_F64LE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + + /* + * Create a datatype for writing to the dataset. This datatype is a + * complex number equivalent to the H5T_NATIVE_FLOAT_COMPLEX type. + */ + dtype = H5Tcomplex_create(H5T_NATIVE_FLOAT); + + status = H5Dwrite(dset, dtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata[0]); + + /* + * Close and release resources. + */ + status = H5Dclose(dset); + status = H5Sclose(space); + status = H5Fclose(file); + + /* + * Now we begin the read section of this example. Here we assume + * the dataset has the same name and rank, but can have any size. + * Therefore we must allocate a new array to read in data using + * malloc(). + */ + + /* + * Open file and dataset. + */ + file = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT); + dset = H5Dopen(file, DATASET, H5P_DEFAULT); + + /* + * Get dataspace and allocate memory for read buffer. This is a + * two dimensional dataset so the dynamic allocation must be done + * in steps. + */ + space = H5Dget_space(dset); + ndims = H5Sget_simple_extent_dims(space, dims, NULL); + + /* + * Allocate array of pointers to rows. + */ + rdata = malloc(dims[0] * sizeof(float _Complex *)); + + /* + * Allocate space for complex number data. + */ + rdata[0] = malloc(dims[0] * dims[1] * sizeof(float _Complex)); + + /* + * Set the rest of the pointers to rows to the correct addresses. + */ + for (i = 1; i < dims[0]; i++) + rdata[i] = rdata[0] + i * dims[1]; + + /* + * Read the data. + */ + status = H5Dread(dset, dtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata[0]); + + /* + * Output the data to the screen. + */ + printf("%s:\n", DATASET); + for (i = 0; i < dims[0]; i++) { + printf(" ["); + for (j = 0; j < dims[1]; j++) { + printf(" %6.4f%+6.4fi", crealf(rdata[i][j]), cimagf(rdata[i][j])); + } + printf("]\n"); + } + + /* + * Close and release resources. + */ + free(rdata[0]); + free(rdata); + status = H5Dclose(dset); + status = H5Sclose(space); + status = H5Tclose(dtype); + status = H5Fclose(file); + + return 0; +} diff --git a/HDF5Examples/C/H5T/200/h5ex_t_complex_msvc.c b/HDF5Examples/C/H5T/200/h5ex_t_complex_msvc.c new file mode 100644 index 00000000000..2059380a76b --- /dev/null +++ b/HDF5Examples/C/H5T/200/h5ex_t_complex_msvc.c @@ -0,0 +1,138 @@ +/************************************************************ + + This example shows how to read and write complex number + datatypes to a dataset. The program first writes float + complex values to a dataset with a dataspace of DIM0xDIM1, + then closes the file. Next, it reopens the file, reads + back the data, and outputs it to the screen. This example + assumes MSVC's complex number types are supported rather + than the C99 complex number types. For an example that uses + the C99 complex number types, see the h5ex_t_complex.c + example file. + + ************************************************************/ + +#include "hdf5.h" +#include +#include +#include + +#define FILE "h5ex_t_complex_msvc.h5" +#define DATASET "DS1" +#define DIM0 4 +#define DIM1 7 + +int +main(void) +{ + _Fcomplex wdata[DIM0][DIM1]; /* Write buffer */ + _Fcomplex **rdata; /* Read buffer */ + hid_t file, space, dset; /* Handles */ + herr_t status; + hsize_t dims[2] = {DIM0, DIM1}; + int ndims; + hsize_t i, j; + + /* + * Initialize data. + */ + for (i = 0; i < DIM0; i++) + for (j = 0; j < DIM1; j++) { + float real = (float)i / (j + 0.5) + j; + float imaginary = (float)i / (j + 0.5) + j + 1; + wdata[i][j] = _FCbuild(real, imaginary); + } + + /* + * Create a new file using the default properties. + */ + file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* + * Create dataspace. Setting maximum size to NULL sets the maximum + * size to be the current size. + */ + space = H5Screate_simple(2, dims, NULL); + + /* + * Create the dataset and write the complex number data to it. In + * this example we will save the data as complex numbers of 2 64-bit + * little endian IEEE floating point numbers, regardless of the native + * type. The HDF5 library automatically converts between different + * complex number types. + */ + dset = H5Dcreate(file, DATASET, H5T_COMPLEX_IEEE_F64LE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + status = H5Dwrite(dset, H5T_NATIVE_FLOAT_COMPLEX, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata[0]); + + /* + * Close and release resources. + */ + status = H5Dclose(dset); + status = H5Sclose(space); + status = H5Fclose(file); + + /* + * Now we begin the read section of this example. Here we assume + * the dataset has the same name and rank, but can have any size. + * Therefore we must allocate a new array to read in data using + * malloc(). + */ + + /* + * Open file and dataset. + */ + file = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT); + dset = H5Dopen(file, DATASET, H5P_DEFAULT); + + /* + * Get dataspace and allocate memory for read buffer. This is a + * two dimensional dataset so the dynamic allocation must be done + * in steps. + */ + space = H5Dget_space(dset); + ndims = H5Sget_simple_extent_dims(space, dims, NULL); + + /* + * Allocate array of pointers to rows. + */ + rdata = malloc(dims[0] * sizeof(_Fcomplex *)); + + /* + * Allocate space for complex number data. + */ + rdata[0] = malloc(dims[0] * dims[1] * sizeof(_Fcomplex)); + + /* + * Set the rest of the pointers to rows to the correct addresses. + */ + for (i = 1; i < dims[0]; i++) + rdata[i] = rdata[0] + i * dims[1]; + + /* + * Read the data. + */ + status = H5Dread(dset, H5T_NATIVE_FLOAT_COMPLEX, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata[0]); + + /* + * Output the data to the screen. + */ + printf("%s:\n", DATASET); + for (i = 0; i < dims[0]; i++) { + printf(" ["); + for (j = 0; j < dims[1]; j++) { + printf(" %6.4f%+6.4fi", crealf(rdata[i][j]), cimagf(rdata[i][j])); + } + printf("]\n"); + } + + /* + * Close and release resources. + */ + free(rdata[0]); + free(rdata); + status = H5Dclose(dset); + status = H5Sclose(space); + status = H5Fclose(file); + + return 0; +} diff --git a/HDF5Examples/JAVA/H5T/H5Ex_T_Commit.java b/HDF5Examples/JAVA/H5T/H5Ex_T_Commit.java index efeba28be37..6d9966725bc 100644 --- a/HDF5Examples/JAVA/H5T/H5Ex_T_Commit.java +++ b/HDF5Examples/JAVA/H5T/H5Ex_T_Commit.java @@ -47,7 +47,8 @@ enum H5T_class { H5T_ENUM(HDF5Constants.H5T_ENUM), // enumeration types H5T_VLEN(HDF5Constants.H5T_VLEN), // Variable-Length types H5T_ARRAY(HDF5Constants.H5T_ARRAY), // Array types - H5T_NCLASSES(11); // this must be last + H5T_COMPLEX(HDF5Constants.H5T_COMPLEX), // Complex number types + H5T_NCLASSES(12); // this must be last private static final Map lookup = new HashMap(); diff --git a/c++/test/tattr.cpp b/c++/test/tattr.cpp index 750e8bb6a7e..dec33972599 100644 --- a/c++/test/tattr.cpp +++ b/c++/test/tattr.cpp @@ -632,7 +632,7 @@ test_attr_compound_write(FileAccPropList &fapl) hsize_t dims2[] = {ATTR4_DIM1, ATTR4_DIM2}; DataSpace sid2(ATTR4_RANK, dims2); - // Create complex attribute for the dataset + // Create compound attribute for the dataset Attribute attr = dataset.createAttribute(ATTR4_NAME, comp_type, sid2); // Try to create the same attribute again (should fail) @@ -643,7 +643,7 @@ test_attr_compound_write(FileAccPropList &fapl) { } // do nothing, exception expected - // Write complex attribute data + // Write compound attribute data attr.write(comp_type, attr_data4); PASSED(); @@ -2001,8 +2001,8 @@ test_attr(const void *params) test_attr_rename(curr_fapl); // Test renaming attribute test_attr_basic_read(curr_fapl); // Test basic H5A reading code - test_attr_compound_write(curr_fapl); // Test complex datatype H5A writing code - test_attr_compound_read(curr_fapl); // Test complex datatype H5A reading code + test_attr_compound_write(curr_fapl); // Test compound datatype H5A writing code + test_attr_compound_read(curr_fapl); // Test compound datatype H5A reading code test_attr_scalar_write(curr_fapl); // Test scalar dataspace H5A writing code test_attr_scalar_read(curr_fapl); // Test scalar dataspace H5A reading code diff --git a/config/cmake/ConfigureChecks.cmake b/config/cmake/ConfigureChecks.cmake index ed53feae60b..c992756829e 100644 --- a/config/cmake/ConfigureChecks.cmake +++ b/config/cmake/ConfigureChecks.cmake @@ -21,6 +21,7 @@ include (CheckTypeSize) include (CheckVariableExists) include (TestBigEndian) include (CheckStructHasMember) +include (CMakePushCheckState) set (HDF_PREFIX "H5") @@ -828,6 +829,71 @@ macro (H5ConversionTests TEST def msg) endif () endmacro () +#----------------------------------------------------------------------------- +# Check for complex number support +#----------------------------------------------------------------------------- +message (STATUS "Checking if complex number support is available") +CHECK_INCLUDE_FILE (complex.h ${HDF_PREFIX}_HAVE_COMPLEX_H) +if (${HDF_PREFIX}_HAVE_COMPLEX_H) + set (H5_HAVE_C99_COMPLEX_NUMBERS 1) + + HDF_CHECK_TYPE_SIZE ("float _Complex" ${HDF_PREFIX}_SIZEOF_FLOAT_COMPLEX) + HDF_CHECK_TYPE_SIZE ("double _Complex" ${HDF_PREFIX}_SIZEOF_DOUBLE_COMPLEX) + HDF_CHECK_TYPE_SIZE ("long double _Complex" ${HDF_PREFIX}_SIZEOF_LONG_DOUBLE_COMPLEX) + + if (MSVC AND NOT ${HDF_PREFIX}_SIZEOF_FLOAT_COMPLEX AND NOT ${HDF_PREFIX}_SIZEOF_DOUBLE_COMPLEX + AND NOT ${HDF_PREFIX}_SIZEOF_LONG_DOUBLE_COMPLEX) + # If using MSVC, the _Complex types (if available) are _Fcomplex, _Dcomplex and _Lcomplex. + # The standard types are checked for first in case MSVC uses them in the future or in case + # the compiler used is simulating MSVC and uses the standard types. + cmake_push_check_state() + list (APPEND CMAKE_EXTRA_INCLUDE_FILES complex.h) + HDF_CHECK_TYPE_SIZE ("_Fcomplex" ${HDF_PREFIX}_SIZEOF__FCOMPLEX) + HDF_CHECK_TYPE_SIZE ("_Dcomplex" ${HDF_PREFIX}_SIZEOF__DCOMPLEX) + HDF_CHECK_TYPE_SIZE ("_Lcomplex" ${HDF_PREFIX}_SIZEOF__LCOMPLEX) + cmake_pop_check_state() + if (${HDF_PREFIX}_SIZEOF__FCOMPLEX AND ${HDF_PREFIX}_SIZEOF__DCOMPLEX AND + ${HDF_PREFIX}_SIZEOF__FCOMPLEX) + set (${HDF_PREFIX}_SIZEOF_FLOAT_COMPLEX ${${HDF_PREFIX}_SIZEOF__FCOMPLEX} + CACHE INTERNAL "SizeOf for float _Complex" FORCE) + set (${HDF_PREFIX}_SIZEOF_DOUBLE_COMPLEX ${${HDF_PREFIX}_SIZEOF__DCOMPLEX} + CACHE INTERNAL "SizeOf for double _Complex" FORCE) + set (${HDF_PREFIX}_SIZEOF_LONG_DOUBLE_COMPLEX ${${HDF_PREFIX}_SIZEOF__LCOMPLEX} + CACHE INTERNAL "SizeOf for long double _Complex" FORCE) + + unset (H5_HAVE_C99_COMPLEX_NUMBERS) + endif () + endif () + + if (${HDF_PREFIX}_SIZEOF_FLOAT_COMPLEX AND ${HDF_PREFIX}_SIZEOF_DOUBLE_COMPLEX AND + ${HDF_PREFIX}_SIZEOF_LONG_DOUBLE_COMPLEX) + # Check if __STDC_NO_COMPLEX__ macro is defined, in which case complex number + # support is not available + HDF_FUNCTION_TEST (HAVE_STDC_NO_COMPLEX) + + if (NOT H5_HAVE_STDC_NO_COMPLEX) + # Compile simple test program with complex numbers + HDF_FUNCTION_TEST (HAVE_COMPLEX_NUMBERS) + + if (H5_HAVE_COMPLEX_NUMBERS) + if (H5_HAVE_C99_COMPLEX_NUMBERS) + message (STATUS "Using C99 complex number types") + else () + message (STATUS "Using MSVC complex number types") + endif () + else () + message (STATUS "Complex number support has been disabled since a simple test program couldn't be compiled and linked") + endif () + else () + message (STATUS "Complex number support has been disabled since __STDC_NO_COMPLEX__ is defined") + endif () + else () + message (STATUS "Complex number support has been disabled since the C types were not found") + endif () +else () + message (STATUS "Complex number support has been disabled since the complex.h header was not found") +endif () + #----------------------------------------------------------------------------- # Check various conversion capabilities #----------------------------------------------------------------------------- diff --git a/config/cmake/H5pubconf.h.in b/config/cmake/H5pubconf.h.in index 36ab096f546..9d495ceac1e 100644 --- a/config/cmake/H5pubconf.h.in +++ b/config/cmake/H5pubconf.h.in @@ -104,9 +104,15 @@ /* Define if the __attribute__(()) extension is present */ #cmakedefine H5_HAVE_ATTRIBUTE @H5_HAVE_ATTRIBUTE@ +/* Define if C99 complex number types are present */ +#cmakedefine H5_HAVE_C99_COMPLEX_NUMBERS @H5_HAVE_C99_COMPLEX_NUMBERS@ + /* Define to 1 if you have the `clock_gettime' function. */ #cmakedefine H5_HAVE_CLOCK_GETTIME @H5_HAVE_CLOCK_GETTIME@ +/* Define if complex number support is available */ +#cmakedefine H5_HAVE_COMPLEX_NUMBERS @H5_HAVE_COMPLEX_NUMBERS@ + /* Define to 1 if you have the header file. */ #cmakedefine H5_HAVE_CURL_CURL_H @H5_HAVE_CURL_H@ @@ -445,9 +451,15 @@ /* The size of `double', as computed by sizeof. */ #cmakedefine H5_SIZEOF_DOUBLE @H5_SIZEOF_DOUBLE@ +/* The size of `double _Complex', as computed by sizeof. */ +#cmakedefine H5_SIZEOF_DOUBLE_COMPLEX @H5_SIZEOF_DOUBLE_COMPLEX@ + /* The size of `float', as computed by sizeof. */ #cmakedefine H5_SIZEOF_FLOAT @H5_SIZEOF_FLOAT@ +/* The size of `float _Complex', as computed by sizeof. */ +#cmakedefine H5_SIZEOF_FLOAT_COMPLEX @H5_SIZEOF_FLOAT_COMPLEX@ + /* The size of `int', as computed by sizeof. */ #cmakedefine H5_SIZEOF_INT @H5_SIZEOF_INT@ @@ -501,6 +513,9 @@ /* The size of `long double', as computed by sizeof. */ #cmakedefine H5_SIZEOF_LONG_DOUBLE @H5_SIZEOF_LONG_DOUBLE@ +/* The size of `long double _Complex', as computed by sizeof. */ +#cmakedefine H5_SIZEOF_LONG_DOUBLE_COMPLEX @H5_SIZEOF_LONG_DOUBLE_COMPLEX@ + #else /* On Apple, to support Universal Binaries (where multiple CPU @@ -520,10 +535,13 @@ # if defined(__i386__) || defined(__x86_64__) #define H5_SIZEOF_LONG_DOUBLE 16 + #define H5_SIZEOF_LONG_DOUBLE_COMPLEX 32 # elif defined(__aarch64__) #define H5_SIZEOF_LONG_DOUBLE 8 + #define H5_SIZEOF_LONG_DOUBLE_COMPLEX 16 # else #cmakedefine H5_SIZEOF_LONG_DOUBLE @H5_SIZEOF_LONG_DOUBLE@ + #cmakedefine H5_SIZEOF_LONG_DOUBLE_COMPLEX @H5_SIZEOF_LONG_DOUBLE_COMPLEX@ # endif #endif diff --git a/config/cmake/HDFTests.c b/config/cmake/HDFTests.c index f55555c6138..4026a5ae006 100644 --- a/config/cmake/HDFTests.c +++ b/config/cmake/HDFTests.c @@ -128,3 +128,65 @@ main(void) #endif } #endif + +#ifdef HAVE_STDC_NO_COMPLEX +#ifndef __STDC_NO_COMPLEX__ +#error "__STDC_NO_COMPLEX__ not defined" +#else +int +main(void) +{ + return 0; +} +#endif +#endif + +#ifdef HAVE_COMPLEX_NUMBERS +#include + +#if defined(_MSC_VER) && !defined(__llvm__) && !defined(__INTEL_LLVM_COMPILER) + +typedef _Fcomplex H5_float_complex; +typedef _Dcomplex H5_double_complex; +typedef _Lcomplex H5_ldouble_complex; +#define H5_make_fcomplex _FCbuild +#define H5_make_dcomplex _Cbuild +#define H5_make_lcomplex _LCbuild + +#else + +typedef float _Complex H5_float_complex; +typedef double _Complex H5_double_complex; +typedef long double _Complex H5_ldouble_complex; +static float _Complex +H5_make_fcomplex(float real, float imaginary) +{ + return real + imaginary * (float _Complex)_Complex_I; +} +static double _Complex +H5_make_dcomplex(double real, double imaginary) +{ + return real + imaginary * (double _Complex)_Complex_I; +} +static long double _Complex +H5_make_lcomplex(long double real, long double imaginary) +{ + return real + imaginary * (long double _Complex)_Complex_I; +} +#endif + +int +main(void) +{ + H5_float_complex z1 = H5_make_fcomplex(1.0f, 1.0f); + H5_double_complex z2 = H5_make_dcomplex(2.0, 4.0); + H5_ldouble_complex z3 = H5_make_lcomplex(3.0L, 5.0L); + float r1 = crealf(z1); + float i1 = cimagf(z1); + double r2 = creal(z2); + double i2 = cimag(z2); + long double r3 = creall(z3); + long double i3 = cimagl(z3); + return 0; +} +#endif diff --git a/configure.ac b/configure.ac index 0ddb77000c3..845424cc2a1 100644 --- a/configure.ac +++ b/configure.ac @@ -574,6 +574,58 @@ AC_CHECK_SIZEOF([float]) AC_CHECK_SIZEOF([double]) AC_CHECK_SIZEOF([long double]) +## ---------------------------------------------------------------------- +## Check if complex number support is available +## +HAVE_COMPLEX_NUMBERS="no" +AC_CHECK_SIZEOF([float complex], [], [#include ]) +AC_CHECK_SIZEOF([double complex], [], [#include ]) +AC_CHECK_SIZEOF([long double complex], [], [#include ]) + +if test "$ac_cv_sizeof_float_complex" != 0 && + test "$ac_cv_sizeof_double_complex" != 0 && + test "$ac_cv_sizeof_long_double_complex" != 0; then + # Check if __STDC_NO_COMPLEX__ macro is defined, in which case complex number + # support is not available + AC_MSG_CHECKING([if __STDC_NO_COMPLEX__ is defined]) + TEST_SRC="`(echo \"#define HAVE_STDC_NO_COMPLEX 1\"; cat $srcdir/config/cmake/HDFTests.c)`" + AC_CACHE_VAL([hdf5_cv_have_stdc_no_complex], + [AC_RUN_IFELSE( + [AC_LANG_SOURCE([$TEST_SRC])], + [hdf5_cv_have_stdc_no_complex=yes], + [hdf5_cv_have_stdc_no_complex=no], + [hdf5_cv_have_stdc_no_complex=maybe])]) + AC_MSG_RESULT(${hdf5_cv_have_stdc_no_complex}) + + if test "X$hdf5_cv_have_stdc_no_complex" == "Xno"; then + # Compile simple test program with complex numbers + AC_MSG_CHECKING([if complex number test program can be compiled and linked]) + TEST_SRC="`(echo \"#define HAVE_COMPLEX_NUMBERS 1\"; cat $srcdir/config/cmake/HDFTests.c)`" + AC_CACHE_VAL([hdf5_cv_have_complex_numbers], + [AC_RUN_IFELSE( + [AC_LANG_SOURCE([$TEST_SRC])], + [hdf5_cv_have_complex_numbers=yes], + [hdf5_cv_have_complex_numbers=no], + [hdf5_cv_have_complex_numbers=maybe])]) + AC_MSG_RESULT(${hdf5_cv_have_complex_numbers}) + + if test "X$hdf5_cv_have_complex_numbers" == "Xyes"; then + HAVE_COMPLEX_NUMBERS="yes" + + # Define HAVE_COMPLEX_NUMBERS macro for H5pubconf.h. + AC_DEFINE([HAVE_COMPLEX_NUMBERS], [1], [Determine if complex number support is available]) + AC_DEFINE([HAVE_C99_COMPLEX_NUMBERS], [1], [Determine if C99 complex number types are present]) + fi + fi +fi + +# Define HAVE_COMPLEX_NUMBERS value to substitute into other files for conditional testing +AC_SUBST([HAVE_COMPLEX_NUMBERS]) +AC_SUBST([HAVE_C99_COMPLEX_NUMBERS]) + +AC_MSG_CHECKING([if complex number support is available]) +AC_MSG_RESULT([$HAVE_COMPLEX_NUMBERS]) + #----------------------------------------------------------------------------- # Option for enabling/disabling support for non-standard features, datatypes, # etc. These features should still be checked for at configure time, but these diff --git a/doxygen/aliases b/doxygen/aliases index 3c79b179df0..ba073c6f3a8 100644 --- a/doxygen/aliases +++ b/doxygen/aliases @@ -377,7 +377,7 @@ ALIASES += ref_rfc20040811="Conve ALIASES += click4more="(Click on a enumerator, field, or type for more information.)" ALIASES += csets="
#H5T_CSET_ASCIIUS ASCII
#H5T_CSET_UTF8UTF-8 Unicode encoding
" -ALIASES += datatype_class=" \li #H5T_INTEGER \li #H5T_FLOAT \li #H5T_STRING \li #H5T_BITFIELD \li #H5T_OPAQUE \li #H5T_COMPOUND \li #H5T_REFERENCE \li #H5T_ENUM \li #H5T_VLEN \li #H5T_ARRAY" +ALIASES += datatype_class=" \li #H5T_INTEGER \li #H5T_FLOAT \li #H5T_STRING \li #H5T_BITFIELD \li #H5T_OPAQUE \li #H5T_COMPOUND \li #H5T_REFERENCE \li #H5T_ENUM \li #H5T_VLEN \li #H5T_ARRAY \li #H5T_COMPLEX" ALIASES += file_access="
#H5F_ACC_RDWRFile was opened with read/write access.
#H5F_ACC_RDONLYFile was opened with read-only access.
#H5F_ACC_SWMR_WRITEFile was opened with read/write access for a single-writer/multiple-reader (SWMR) scenario. Note that the writer process must also open the file with the #H5F_ACC_RDWR flag.
#H5F_ACC_SWMR_READFile was opened with read-only access for a single-writer/multiple-reader (SWMR) scenario. Note that the reader process must also open the file with the #H5F_ACC_RDONLY flag.
" ALIASES += id_types="
#H5I_FILEFile
#H5I_GROUPGroup
#H5I_DATATYPEDatatype
#H5I_DATASPACEDataspace
#H5I_DATASETDataset
#H5I_ATTRAttribute
" ALIASES += indexes="
#H5_INDEX_NAMELexicographic order on name
#H5_INDEX_CRT_ORDERIndex on creation order
" diff --git a/doxygen/dox/DDLBNF200.dox b/doxygen/dox/DDLBNF200.dox new file mode 100644 index 00000000000..8ce4c89df9f --- /dev/null +++ b/doxygen/dox/DDLBNF200.dox @@ -0,0 +1,667 @@ +/** \page DDLBNF200 DDL in BNF for HDF5 2.0.0 and above + +\todo Revise this & break it up! + +\section intro200 Introduction + +This document contains the data description language (DDL) for an HDF5 file. The +description is in Backus-Naur Form (BNF). + +\section expo200 Explanation of Symbols + +This section contains a brief explanation of the symbols used in the DDL. + +\code{.unparsed} +::= defined as + a token with the name tname +
| one of or + opt zero or one occurrence of + * zero or more occurrence of + + one or more occurrence of + [0-9] an element in the range between 0 and 9 + '[' the token within the quotes (used for special characters) + TBD To Be Decided +\endcode + +\section ddl200 The DDL + +\code{.unparsed} + ::= HDF5 { opt } + + ::= + + ::= SUPER_BLOCK { + SUPERBLOCK_VERSION + FREELIST_VERSION + SYMBOLTABLE_VERSION + OBJECTHEADER_VERSION + OFFSET_SIZE + LENGTH_SIZE + BTREE_RANK + BTREE_LEAF + ISTORE_K + + USER_BLOCK { + USERBLOCK_SIZE + } + } + + ::= FILE_SPACE_STRATEGY + FREE_SPACE_PERSIST + FREE_SPACE_SECTION_THRESHOLD + FILE_SPACE_PAGE_SIZE + + ::= H5F_FSPACE_STRATEGY_FSM_AGGR | H5F_FSPACE_STRATEGY_PAGE | + H5F_FSPACE_STRATEGY_AGGR | H5F_FSPACE_STRATEGY_NONE | + Unknown strategy + + ::= GROUP "/" { + * + opt + opt + * + * + } + + ::= | | | | + + + ::= DATATYPE { + + } + + ::= the assigned name for anonymous named type is + in the form of #oid, where oid is the object id + of the type + + ::= | |
* \snippet{doc} tables/predefinedDatatypes.dox predefined_std_datatypes_table diff --git a/doxygen/dox/Specifications.dox b/doxygen/dox/Specifications.dox index f2ba467d7bb..77bb0a8f407 100644 --- a/doxygen/dox/Specifications.dox +++ b/doxygen/dox/Specifications.dox @@ -5,6 +5,7 @@ \li \ref DDLBNF110 \li \ref DDLBNF112 \li \ref DDLBNF114 +\li \ref DDLBNF200 \section File Format diff --git a/doxygen/examples/H5.format.html b/doxygen/examples/H5.format.html index 0876c56c007..2272a2b5eff 100644 --- a/doxygen/examples/H5.format.html +++ b/doxygen/examples/H5.format.html @@ -476,6 +476,16 @@ and do not represent any values or padding in the file.

+
+

I.B. Changes for HDF5 2.0

+

The following sections have been + changed or added for the 2.0 release:

+
    +
  • Under “The Datatype Message”, + in the Description for “Fields:Datatype Message”, + version 5 was added, as well as the new Complex class (11).
  • +
+

I.B. Changes for HDF5 1.12

The following sections have been @@ -9685,6 +9695,11 @@

IV.A.2.d. The Datatype Message

Used to encode the revised reference datatype. + + 5 + Used when a complex number datatype needs to be encoded. + +

The class of the datatype determines the format for the class @@ -9752,6 +9767,11 @@

IV.A.2.d. The Datatype Message

10 Array + + + 11 + Complex +

@@ -11525,6 +11545,119 @@

IV.A.2.d. The Datatype Message

+
+
+ +

Class specific information for the Complex class (Class 11):

+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Bits: Complex Bit Field Description +
BitsMeaning

0

Homogeneous. If zero, each part of the complex number + datatype is a different floating point datatype (heterogeneous). + Otherwise, each part of the complex number datatype is the same + floating point datatype (homogeneous). Currently, only homogeneous + complex number datatypes are supported.

1,2

Complex number form. This two-bit value contains the type of + complex number datatype described. The values defined are: + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueDescription
0Rectangular +
1Polar +
2Exponential +
3Reserved +

+ +

Currently, only rectangular complex number datatypes are supported.

+

3-23

Reserved (zero).

+
+ +
+
+ + + + + + + + + + + + + +
+ Layout: Complex Property Description +
ByteByteByteByte

Parent Type Message

+
+ +
+
+ + + + + + + + + + + +
+ Fields: Complex Property Description +
Field NameDescription

Parent Type Message

+

Each complex number type is based on a parent floating point type. + This field contains the datatype message describing that parent type. +

+
+

IV.A.2.e. The Data Storage - diff --git a/doxygen/examples/tables/predefinedDatatypes.dox b/doxygen/examples/tables/predefinedDatatypes.dox index 6cf044af5d4..f73382ab865 100644 --- a/doxygen/examples/tables/predefinedDatatypes.dox +++ b/doxygen/examples/tables/predefinedDatatypes.dox @@ -35,6 +35,41 @@ //! [predefined_ieee_datatypes_table] * * +//! [predefined_complex_datatypes_table] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Predefined Complex Number Datatypes
DatatypeDescription
#H5T_COMPLEX_IEEE_F16BEComplex number of 2 16-bit big-endian IEEE floating point numbers
#H5T_COMPLEX_IEEE_F16LEComplex number of 2 16-bit little-endian IEEE floating point numbers
#H5T_COMPLEX_IEEE_F32BEComplex number of 2 32-bit big-endian IEEE floating point numbers
#H5T_COMPLEX_IEEE_F32LEComplex number of 2 32-bit little-endian IEEE floating point numbers
#H5T_COMPLEX_IEEE_F64BEComplex number of 2 64-bit big-endian IEEE floating point numbers
#H5T_COMPLEX_IEEE_F64LEComplex number of 2 64-bit little-endian IEEE floating point numbers
+//! [predefined_complex_datatypes_table] + * + * //! [predefined_std_datatypes_table] @@ -489,6 +524,18 @@ + + + + + + + + + + + + diff --git a/fortran/src/H5Tf.c b/fortran/src/H5Tf.c index d4b8363688e..f6992f91712 100644 --- a/fortran/src/H5Tf.c +++ b/fortran/src/H5Tf.c @@ -212,11 +212,12 @@ h5tequal_c(hid_t_f *type1_id, hid_t_f *type2_id, int_f *c_flag) * H5T_STRING_F (3) * H5T_BITFIELD_F (4) * H5T_OPAQUE_F (5) - * H5T_COMPOUNDF (6) + * H5T_COMPOUND_F (6) * H5T_REFERENCE_F (7) * H5T_ENUM_F (8) * H5T_VLEN_F (9) * H5T_ARRAY_F (10) + * H5T_COMPLEX_F (11) * RETURNS * 0 on success, -1 on failure * SOURCE @@ -239,17 +240,7 @@ h5tget_class_c(hid_t_f *type_id, int_f *classtype) return ret_value; } *classtype = c_classtype; - /* - if (c_classtype == H5T_INTEGER) *classtype = H5T_INTEGER_F; - if (c_classtype == H5T_FLOAT) *classtype = H5T_FLOAT_F; - if (c_classtype == H5T_TIME) *classtype = H5T_TIME_F; - if (c_classtype == H5T_STRING) *classtype = H5T_STRING_F; - if (c_classtype == H5T_BITFIELD) *classtype = H5T_BITFIELD_F; - if (c_classtype == H5T_OPAQUE) *classtype = H5T_OPAQUE_F; - if (c_classtype == H5T_COMPOUND) *classtype = H5T_COMPOUND_F; - if (c_classtype == H5T_REFERENCE) *classtype = H5T_REFERENCE_F; - if (c_classtype == H5T_ENUM) *classtype = H5T_ENUM_F; - */ + return ret_value; } diff --git a/fortran/src/H5Tff.F90 b/fortran/src/H5Tff.F90 index ff1b84af34f..1416493e4d7 100644 --- a/fortran/src/H5Tff.F90 +++ b/fortran/src/H5Tff.F90 @@ -267,6 +267,7 @@ END SUBROUTINE h5tclose_f !! \li H5T_ENUM_F !! \li H5T_VLEN_F !! \li H5T_ARRAY_F +!! \li H5T_COMPLEX_F !! \param hdferr \fortran_error !! !! See C API: @ref H5Tget_class() @@ -1726,9 +1727,9 @@ END SUBROUTINE h5tis_variable_str_f !! !! \brief Returns datatype class of compound datatype member. !! -!! \param type_id Datartpe identifier. +!! \param type_id Datatype identifier. !! \param member_no Index of compound datatype member. -!! \param class Class type for compound dadtype member. Valid classes: +!! \param class Class type for compound datatype member. Valid classes: !! \li H5T_NO_CLASS_F (error) !! \li H5T_INTEGER_F !! \li H5T_FLOAT_F @@ -1741,6 +1742,7 @@ END SUBROUTINE h5tis_variable_str_f !! \li H5T_ENUM_F !! \li H5T_VLEN_F !! \li H5T_ARRAY_F +!! \li H5T_COMPLEX_F !! \param hdferr \fortran_error !! !! See C API: @ref H5Tget_member_class() diff --git a/fortran/src/H5_f.c b/fortran/src/H5_f.c index 37706118a3e..53410f63e77 100644 --- a/fortran/src/H5_f.c +++ b/fortran/src/H5_f.c @@ -848,6 +848,7 @@ h5init_flags_c(int_f *h5d_flags, size_t_f *h5d_size_flags, int_f *h5e_flags, hid h5t_flags[32] = (int_f)H5T_ARRAY; h5t_flags[33] = (int_f)H5T_DIR_ASCEND; h5t_flags[34] = (int_f)H5T_DIR_DESCEND; + h5t_flags[35] = (int_f)H5T_COMPLEX; /* * H5VL flags diff --git a/fortran/src/H5_ff.F90 b/fortran/src/H5_ff.F90 index 79c3cbcd3d9..fd871829f4f 100644 --- a/fortran/src/H5_ff.F90 +++ b/fortran/src/H5_ff.F90 @@ -144,7 +144,7 @@ MODULE H5LIB ! ! H5T flags declaration ! - INTEGER, PARAMETER :: H5T_FLAGS_LEN = 35 + INTEGER, PARAMETER :: H5T_FLAGS_LEN = 36 INTEGER, DIMENSION(1:H5T_FLAGS_LEN) :: H5T_flags ! ! H5VL flags declaration @@ -705,6 +705,7 @@ END FUNCTION h5init1_flags_c H5T_ARRAY_F = H5T_flags(33) H5T_DIR_ASCEND_F = H5T_flags(34) H5T_DIR_DESCEND_F = H5T_flags(35) + H5T_COMPLEX_F = H5T_flags(36) ! ! H5VL flags ! diff --git a/fortran/src/H5f90global.F90 b/fortran/src/H5f90global.F90 index 9c973126290..7e486cffdfe 100644 --- a/fortran/src/H5f90global.F90 +++ b/fortran/src/H5f90global.F90 @@ -863,6 +863,7 @@ MODULE H5GLOBAL !DEC$ATTRIBUTES DLLEXPORT :: H5T_ENUM_F !DEC$ATTRIBUTES DLLEXPORT :: H5T_VLEN_F !DEC$ATTRIBUTES DLLEXPORT :: H5T_ARRAY_F + !DEC$ATTRIBUTES DLLEXPORT :: H5T_COMPLEX_F !DEC$ATTRIBUTES DLLEXPORT :: H5T_ORDER_LE_F !DEC$ATTRIBUTES DLLEXPORT :: H5T_ORDER_BE_F !DEC$ATTRIBUTES DLLEXPORT :: H5T_ORDER_VAX_F @@ -901,6 +902,7 @@ MODULE H5GLOBAL INTEGER :: H5T_ENUM_F !< H5T_ENUM INTEGER :: H5T_VLEN_F !< H5T_VLEN INTEGER :: H5T_ARRAY_F !< H5T_ARRAY + INTEGER :: H5T_COMPLEX_F !< H5T_COMPLEX INTEGER :: H5T_ORDER_LE_F !< H5T_ORDER_LE INTEGER :: H5T_ORDER_BE_F !< H5T_ORDER_BE INTEGER :: H5T_ORDER_VAX_F !< H5T_ORDER_VAX diff --git a/hl/src/H5LT.c b/hl/src/H5LT.c index b064947b919..6457d8844d3 100644 --- a/hl/src/H5LT.c +++ b/hl/src/H5LT.c @@ -2753,6 +2753,49 @@ H5LT_dtype_to_text(hid_t dtype, char *dt_str, H5LT_lang_t lang, size_t *slen, bo break; } + case H5T_COMPLEX: { + hid_t super; + size_t super_len; + char *stmp = NULL; + + /* Print lead-in */ + snprintf(dt_str, *slen, "H5T_COMPLEX {\n"); + indent += COL; + if (!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen))) + goto out; + + if ((super = H5Tget_super(dtype)) < 0) + goto out; + if (H5LTdtype_to_text(super, NULL, lang, &super_len) < 0) + goto out; + stmp = (char *)calloc(super_len, sizeof(char)); + if (H5LTdtype_to_text(super, stmp, lang, &super_len) < 0) { + free(stmp); + goto out; + } + if (!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, stmp))) { + free(stmp); + goto out; + } + + if (stmp) + free(stmp); + stmp = NULL; + snprintf(tmp_str, TMP_LEN, "\n"); + if (!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str))) + goto out; + H5Tclose(super); + + /* Print closing */ + indent -= COL; + if (!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen))) + goto out; + snprintf(tmp_str, TMP_LEN, "}"); + if (!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str))) + goto out; + + break; + } case H5T_TIME: snprintf(dt_str, *slen, "H5T_TIME: not yet implemented"); break; diff --git a/hl/src/H5LTanalyze.c b/hl/src/H5LTanalyze.c index 1b7355b130f..5ee4a2c3d47 100644 --- a/hl/src/H5LTanalyze.c +++ b/hl/src/H5LTanalyze.c @@ -645,8 +645,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 67 -#define YY_END_OF_BUFFER 68 +#define YY_NUM_RULES 77 +#define YY_END_OF_BUFFER 78 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -654,39 +654,45 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[283] = +static const flex_int16_t yy_accept[335] = { 0, - 66, 66, 68, 67, 66, 67, 58, 64, 65, 67, - 67, 67, 67, 62, 63, 60, 61, 66, 0, 58, - 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, - 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, + 76, 76, 78, 77, 76, 77, 68, 74, 75, 77, + 77, 77, 77, 72, 73, 70, 71, 76, 0, 68, + 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, + 0, 50, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 57, 39, 0, 0, 0, 48, 52, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 56, 53, 0, + 0, 67, 48, 0, 0, 0, 57, 61, 0, 0, + 0, 0, 0, 0, 0, 0, 63, 66, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, - 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, + 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 9, 10, 0, 0, 59, 0, 0, + 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 2, 0, 0, 0, 0, 0, 0, 9, - 10, 0, 0, 50, 0, 47, 0, 0, 0, 0, + 0, 3, 4, 5, 6, 7, 8, 11, 12, 13, + 14, 15, 16, 0, 0, 0, 0, 55, 58, 28, + 29, 30, 31, 32, 33, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 0, 0, 0, 24, 0, + 0, 0, 23, 0, 0, 0, 53, 0, 0, 0, + 0, 35, 0, 26, 18, 20, 19, 0, 25, 0, + 52, 54, 0, 36, 0, 0, 0, 27, 21, 0, + 0, 34, 0, 37, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3, 4, 5, 6, - 7, 8, 11, 12, 13, 14, 15, 16, 0, 0, - 0, 46, 49, 28, 29, 30, 31, 32, 33, 0, - 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 24, 0, 0, 0, 23, 0, 0, 0, 44, - 0, 0, 0, 35, 0, 26, 18, 20, 19, 0, - 25, 0, 43, 45, 36, 0, 0, 27, 21, 34, - 37, 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 38, 39, 40, 41, 42, + 43, 0, 0, 0, 0, 0, 0, 0, 44, 0, + 45, 0, 46, 0 } ; static const YY_CHAR yy_ec[256] = @@ -699,12 +705,12 @@ static const YY_CHAR yy_ec[256] = 7, 8, 9, 10, 4, 11, 4, 12, 13, 1, 1, 1, 1, 1, 14, 15, 16, 17, 18, 19, 20, 21, 22, 1, 1, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 1, 1, 34, 35, - 36, 1, 37, 1, 38, 1, 1, 1, 1, 1, + 28, 29, 30, 31, 32, 33, 1, 34, 35, 36, + 37, 1, 38, 1, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 39, 1, 40, 1, 1, 1, 1, 1, + 1, 1, 40, 1, 41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -721,166 +727,193 @@ static const YY_CHAR yy_ec[256] = 1, 1, 1, 1, 1 } ; -static const YY_CHAR yy_meta[41] = +static const YY_CHAR yy_meta[42] = { 0, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1 } ; -static const flex_int16_t yy_base[285] = +static const flex_int16_t yy_base[337] = { 0, - 0, 0, 307, 308, 304, 0, 0, 308, 308, 11, - 296, 277, 272, 308, 308, 308, 308, 300, 298, 0, - 282, 265, 267, 269, 267, 308, 264, 267, 255, 254, - 16, 308, 273, 33, 14, 276, 267, 308, 259, 24, - 262, 260, 267, 270, 256, 251, 34, 259, 266, 262, - 243, 248, 252, 257, 244, 241, 243, 253, 239, 255, - 36, 239, 249, 231, 245, 308, 246, 249, 235, 230, - 255, 235, 227, 239, 234, 227, 216, 34, 231, 227, - 233, 308, 308, 216, 223, 210, 308, 308, 218, 208, - 212, 212, 38, 218, 39, 228, 308, 308, 308, 209, - - 47, 226, 220, 220, 219, 66, 73, 216, 203, 207, - 218, 207, 201, 199, 204, 80, 190, 308, 217, 220, - 217, 52, 214, 217, 214, 59, 308, 198, 206, 196, - 201, 201, 197, 177, 204, 207, 204, 75, 66, 73, - 78, 193, 192, 80, 85, 87, 191, 190, 184, 190, - 187, 308, 182, 192, 172, 89, 91, 94, 180, 174, - 176, 173, 96, 95, 102, 179, 178, 177, 176, 175, - 174, 308, 308, 173, 172, 171, 170, 169, 168, 308, - 308, 96, 167, 308, 162, 308, 178, 164, 163, 162, - 161, 160, 159, 162, 143, 148, 142, 146, 145, 145, - - 148, 142, 146, 141, 103, 144, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 150, 145, - 135, 308, 308, 308, 308, 308, 308, 308, 308, 132, - 145, 145, 308, 126, 132, 136, 141, 125, 139, 121, - 125, 125, 123, 131, 118, 132, 308, 122, 113, 128, - 122, 308, 112, 109, 110, 308, 113, 117, 107, 308, - 110, 114, 112, 123, 98, 308, 308, 308, 308, 100, - 308, 84, 308, 308, 308, 89, 68, 308, 308, 308, - 308, 308, 132, 65 + 0, 0, 360, 361, 357, 0, 0, 361, 361, 12, + 349, 330, 325, 361, 361, 361, 361, 353, 351, 0, + 335, 317, 320, 322, 320, 361, 317, 320, 307, 306, + 17, 361, 326, 34, 15, 329, 320, 361, 312, 31, + 315, 313, 320, 323, 309, 304, 35, 312, 319, 315, + 295, 301, 305, 310, 297, 294, 296, 306, 292, 308, + 34, 292, 302, 283, 298, 361, 299, 302, 288, 283, + 308, 288, 280, 292, 287, 280, 268, 32, 284, 280, + 286, 361, 361, 268, 39, 263, 361, 361, 272, 261, + 266, 266, 44, 272, 43, 282, 361, 361, 361, 277, + + 262, 55, 279, 273, 273, 272, 67, 74, 269, 256, + 260, 271, 251, 259, 253, 251, 256, 81, 241, 361, + 269, 272, 269, 60, 266, 269, 266, 67, 361, 250, + 258, 248, 231, 252, 252, 248, 227, 255, 258, 255, + 76, 74, 79, 81, 244, 243, 86, 88, 90, 242, + 241, 235, 241, 238, 233, 361, 232, 242, 222, 92, + 95, 97, 230, 224, 226, 223, 99, 98, 101, 229, + 228, 227, 226, 225, 224, 361, 361, 223, 222, 221, + 220, 219, 218, 361, 361, 99, 217, 361, 216, 211, + 361, 227, 213, 212, 211, 210, 209, 208, 211, 192, + + 197, 191, 195, 194, 194, 197, 191, 195, 190, 106, + 193, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 361, 361, 361, 199, 194, 184, 192, 361, 361, 361, + 361, 361, 361, 361, 361, 180, 193, 193, 361, 174, + 180, 184, 189, 173, 187, 169, 173, 173, 171, 179, + 166, 180, 175, 361, 169, 160, 175, 169, 361, 159, + 156, 157, 361, 160, 164, 154, 361, 158, 164, 141, + 161, 95, 155, 361, 361, 361, 361, 157, 361, 145, + 361, 361, 156, 135, 163, 156, 153, 361, 361, 128, + 154, 361, 143, 129, 157, 160, 157, 138, 139, 146, + + 113, 122, 124, 137, 133, 133, 140, 139, 138, 137, + 136, 135, 125, 128, 125, 361, 361, 361, 361, 361, + 361, 123, 126, 116, 124, 107, 117, 93, 361, 103, + 361, 46, 361, 361, 147, 52 } ; -static const flex_int16_t yy_def[285] = +static const flex_int16_t yy_def[337] = { 0, - 282, 1, 282, 282, 282, 283, 284, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 283, 284, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 0, 282, 282 + 334, 1, 334, 334, 334, 335, 336, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 335, 336, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 0, 334, 334 } ; -static const flex_int16_t yy_nxt[349] = +static const flex_int16_t yy_nxt[403] = { 0, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 9, 4, 4, 10, 4, 4, 4, 4, 11, 4, 4, 4, 4, 12, 4, 4, 4, 13, - 4, 4, 4, 4, 4, 14, 15, 4, 16, 17, - 21, 22, 36, 48, 49, 37, 39, 62, 40, 53, - 41, 42, 77, 54, 43, 94, 63, 44, 45, 106, - 113, 55, 46, 109, 78, 47, 142, 20, 110, 107, - 119, 95, 120, 147, 143, 121, 122, 123, 114, 124, - 166, 148, 125, 126, 135, 281, 136, 168, 167, 137, - 159, 160, 170, 161, 174, 169, 162, 163, 280, 176, - - 171, 178, 175, 188, 164, 190, 165, 177, 192, 179, - 201, 189, 198, 191, 279, 202, 193, 203, 199, 278, - 277, 200, 219, 204, 205, 241, 220, 276, 242, 275, - 274, 206, 19, 273, 19, 272, 271, 270, 269, 268, - 267, 266, 265, 264, 263, 262, 261, 260, 259, 258, - 257, 256, 255, 254, 253, 252, 251, 250, 249, 248, - 247, 246, 245, 244, 243, 240, 239, 238, 237, 236, - 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, - 225, 224, 223, 222, 221, 218, 217, 216, 215, 214, - 213, 212, 211, 210, 209, 208, 207, 197, 196, 195, - - 194, 187, 186, 185, 184, 183, 182, 181, 180, 173, - 172, 158, 157, 156, 155, 154, 153, 152, 151, 150, - 149, 146, 145, 144, 141, 140, 139, 138, 134, 133, - 132, 131, 130, 129, 128, 127, 118, 117, 116, 115, - 112, 111, 108, 105, 104, 103, 102, 101, 100, 99, - 98, 97, 96, 93, 92, 91, 90, 89, 88, 87, - 86, 85, 84, 83, 82, 81, 80, 79, 76, 75, - 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, - 64, 61, 60, 59, 58, 57, 56, 52, 51, 50, - 38, 35, 34, 33, 32, 31, 30, 29, 28, 27, - - 26, 18, 25, 24, 23, 18, 282, 3, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282 + 4, 4, 4, 4, 4, 4, 14, 15, 4, 16, + 17, 21, 22, 36, 48, 49, 37, 39, 62, 40, + 77, 41, 42, 94, 20, 43, 53, 63, 44, 45, + 54, 100, 78, 46, 101, 107, 47, 110, 115, 55, + 95, 121, 111, 122, 145, 108, 123, 124, 125, 333, + 126, 150, 146, 127, 128, 138, 116, 139, 170, 151, + 140, 163, 164, 172, 165, 174, 171, 166, 167, 285, + + 178, 173, 180, 175, 182, 168, 193, 169, 179, 195, + 181, 197, 183, 206, 194, 203, 208, 196, 207, 198, + 332, 204, 209, 210, 205, 224, 331, 307, 247, 225, + 211, 248, 295, 286, 296, 308, 309, 297, 311, 330, + 329, 328, 327, 326, 310, 325, 312, 19, 324, 19, + 323, 322, 321, 320, 319, 318, 317, 316, 315, 314, + 313, 306, 305, 304, 303, 302, 301, 300, 299, 298, + 294, 293, 292, 291, 290, 289, 288, 287, 284, 283, + 282, 281, 280, 279, 278, 277, 276, 275, 274, 273, + 272, 271, 270, 269, 268, 267, 266, 265, 264, 263, + + 262, 261, 260, 259, 258, 257, 256, 255, 254, 253, + 252, 251, 250, 249, 246, 245, 244, 243, 242, 241, + 240, 239, 238, 237, 236, 235, 234, 233, 232, 231, + 230, 229, 228, 227, 226, 223, 222, 221, 220, 219, + 218, 217, 216, 215, 214, 213, 212, 202, 201, 200, + 199, 192, 191, 190, 189, 188, 187, 186, 185, 184, + 177, 176, 162, 161, 160, 159, 158, 157, 156, 155, + 154, 153, 152, 149, 148, 147, 144, 143, 142, 141, + 137, 136, 135, 134, 133, 132, 131, 130, 129, 120, + 119, 118, 117, 114, 113, 112, 109, 106, 105, 104, + + 103, 102, 99, 98, 97, 96, 93, 92, 91, 90, + 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, + 79, 76, 75, 74, 73, 72, 71, 70, 69, 68, + 67, 66, 65, 64, 61, 60, 59, 58, 57, 56, + 52, 51, 50, 38, 35, 34, 33, 32, 31, 30, + 29, 28, 27, 26, 18, 25, 24, 23, 18, 334, + 3, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + + 334, 334 } ; -static const flex_int16_t yy_chk[349] = +static const flex_int16_t yy_chk[403] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 10, 10, 31, 35, 35, 31, 34, 47, 34, 40, - 34, 34, 61, 40, 34, 78, 47, 34, 34, 93, - 101, 40, 34, 95, 61, 34, 122, 284, 95, 93, - 106, 78, 106, 126, 122, 106, 106, 107, 101, 107, - 139, 126, 107, 107, 116, 277, 116, 140, 139, 116, - 138, 138, 141, 138, 144, 140, 138, 138, 276, 145, - - 141, 146, 144, 156, 138, 157, 138, 145, 158, 146, - 164, 156, 163, 157, 272, 164, 158, 165, 163, 270, - 265, 163, 182, 165, 165, 205, 182, 264, 205, 263, - 262, 165, 283, 261, 283, 259, 258, 257, 255, 254, - 253, 251, 250, 249, 248, 246, 245, 244, 243, 242, - 241, 240, 239, 238, 237, 236, 235, 234, 232, 231, - 230, 221, 220, 219, 206, 204, 203, 202, 201, 200, - 199, 198, 197, 196, 195, 194, 193, 192, 191, 190, - 189, 188, 187, 185, 183, 179, 178, 177, 176, 175, - 174, 171, 170, 169, 168, 167, 166, 162, 161, 160, - - 159, 155, 154, 153, 151, 150, 149, 148, 147, 143, - 142, 137, 136, 135, 134, 133, 132, 131, 130, 129, - 128, 125, 124, 123, 121, 120, 119, 117, 115, 114, - 113, 112, 111, 110, 109, 108, 105, 104, 103, 102, - 100, 96, 94, 92, 91, 90, 89, 86, 85, 84, - 81, 80, 79, 77, 76, 75, 74, 73, 72, 71, - 70, 69, 68, 67, 65, 64, 63, 62, 60, 59, - 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, - 48, 46, 45, 44, 43, 42, 41, 39, 37, 36, - 33, 30, 29, 28, 27, 25, 24, 23, 22, 21, - - 19, 18, 13, 12, 11, 5, 3, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282 + 1, 10, 10, 31, 35, 35, 31, 34, 47, 34, + 61, 34, 34, 78, 336, 34, 40, 47, 34, 34, + 40, 85, 61, 34, 85, 93, 34, 95, 102, 40, + 78, 107, 95, 107, 124, 93, 107, 107, 108, 332, + 108, 128, 124, 108, 108, 118, 102, 118, 142, 128, + 118, 141, 141, 143, 141, 144, 142, 141, 141, 272, + + 147, 143, 148, 144, 149, 141, 160, 141, 147, 161, + 148, 162, 149, 168, 160, 167, 169, 161, 168, 162, + 330, 167, 169, 169, 167, 186, 328, 301, 210, 186, + 169, 210, 290, 272, 290, 301, 302, 290, 303, 327, + 326, 325, 324, 323, 302, 322, 303, 335, 315, 335, + 314, 313, 312, 311, 310, 309, 308, 307, 306, 305, + 304, 300, 299, 298, 297, 296, 295, 294, 293, 291, + 287, 286, 285, 284, 283, 280, 278, 273, 271, 270, + 269, 268, 266, 265, 264, 262, 261, 260, 258, 257, + 256, 255, 253, 252, 251, 250, 249, 248, 247, 246, + + 245, 244, 243, 242, 241, 240, 238, 237, 236, 227, + 226, 225, 224, 211, 209, 208, 207, 206, 205, 204, + 203, 202, 201, 200, 199, 198, 197, 196, 195, 194, + 193, 192, 190, 189, 187, 183, 182, 181, 180, 179, + 178, 175, 174, 173, 172, 171, 170, 166, 165, 164, + 163, 159, 158, 157, 155, 154, 153, 152, 151, 150, + 146, 145, 140, 139, 138, 137, 136, 135, 134, 133, + 132, 131, 130, 127, 126, 125, 123, 122, 121, 119, + 117, 116, 115, 114, 113, 112, 111, 110, 109, 106, + 105, 104, 103, 101, 100, 96, 94, 92, 91, 90, + + 89, 86, 84, 81, 80, 79, 77, 76, 75, 74, + 73, 72, 71, 70, 69, 68, 67, 65, 64, 63, + 62, 60, 59, 58, 57, 56, 55, 54, 53, 52, + 51, 50, 49, 48, 46, 45, 44, 43, 42, 41, + 39, 37, 36, 33, 30, 29, 28, 27, 25, 24, + 23, 22, 21, 19, 18, 13, 12, 11, 5, 3, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + + 334, 334 } ; static yy_state_type yy_last_accepting_state; @@ -939,8 +972,8 @@ static int my_yyinput(char *, int); extern char *myinput; extern size_t input_len; -#line 913 "hl/src//H5LTanalyze.c" -#line 914 "hl/src//H5LTanalyze.c" +#line 946 "hl/src//H5LTanalyze.c" +#line 947 "hl/src//H5LTanalyze.c" #define INITIAL 0 @@ -1152,7 +1185,7 @@ YY_DECL #line 53 "hl/src//H5LTanalyze.l" -#line 1126 "hl/src//H5LTanalyze.c" +#line 1159 "hl/src//H5LTanalyze.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -1179,13 +1212,13 @@ YY_DECL while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 283 ) + if ( yy_current_state >= 335 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 308 ); + while ( yy_base[yy_current_state] != 361 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1397,162 +1430,212 @@ YY_RULE_SETUP case 38: YY_RULE_SETUP #line 96 "hl/src//H5LTanalyze.l" -{return token(H5T_STRING_TOKEN);} +{return hid(H5T_COMPLEX_IEEE_F16BE_TOKEN);} YY_BREAK case 39: YY_RULE_SETUP #line 97 "hl/src//H5LTanalyze.l" -{return token(STRSIZE_TOKEN);} +{return hid(H5T_COMPLEX_IEEE_F16LE_TOKEN);} YY_BREAK case 40: YY_RULE_SETUP #line 98 "hl/src//H5LTanalyze.l" -{return token(STRPAD_TOKEN);} +{return hid(H5T_COMPLEX_IEEE_F32BE_TOKEN);} YY_BREAK case 41: YY_RULE_SETUP #line 99 "hl/src//H5LTanalyze.l" -{return token(CSET_TOKEN);} +{return hid(H5T_COMPLEX_IEEE_F32LE_TOKEN);} YY_BREAK case 42: YY_RULE_SETUP #line 100 "hl/src//H5LTanalyze.l" -{return token(CTYPE_TOKEN);} +{return hid(H5T_COMPLEX_IEEE_F64BE_TOKEN);} YY_BREAK case 43: YY_RULE_SETUP #line 101 "hl/src//H5LTanalyze.l" -{return token(H5T_STR_NULLTERM_TOKEN);} +{return hid(H5T_COMPLEX_IEEE_F64LE_TOKEN);} YY_BREAK case 44: YY_RULE_SETUP #line 102 "hl/src//H5LTanalyze.l" -{return token(H5T_STR_NULLPAD_TOKEN);} +{return hid(H5T_NATIVE_FLOAT_COMPLEX_TOKEN);} YY_BREAK case 45: YY_RULE_SETUP #line 103 "hl/src//H5LTanalyze.l" -{return token(H5T_STR_SPACEPAD_TOKEN);} +{return hid(H5T_NATIVE_DOUBLE_COMPLEX_TOKEN);} YY_BREAK case 46: YY_RULE_SETUP #line 104 "hl/src//H5LTanalyze.l" -{return token(H5T_CSET_ASCII_TOKEN);} +{return hid(H5T_NATIVE_LDOUBLE_COMPLEX_TOKEN);} YY_BREAK case 47: YY_RULE_SETUP -#line 105 "hl/src//H5LTanalyze.l" -{return token(H5T_CSET_UTF8_TOKEN);} +#line 106 "hl/src//H5LTanalyze.l" +{return token(H5T_STRING_TOKEN);} YY_BREAK case 48: YY_RULE_SETUP -#line 106 "hl/src//H5LTanalyze.l" -{return token(H5T_C_S1_TOKEN);} +#line 107 "hl/src//H5LTanalyze.l" +{return token(STRSIZE_TOKEN);} YY_BREAK case 49: YY_RULE_SETUP -#line 107 "hl/src//H5LTanalyze.l" -{return token(H5T_FORTRAN_S1_TOKEN);} +#line 108 "hl/src//H5LTanalyze.l" +{return token(STRPAD_TOKEN);} YY_BREAK case 50: YY_RULE_SETUP -#line 108 "hl/src//H5LTanalyze.l" -{return token(H5T_VARIABLE_TOKEN);} +#line 109 "hl/src//H5LTanalyze.l" +{return token(CSET_TOKEN);} YY_BREAK case 51: YY_RULE_SETUP #line 110 "hl/src//H5LTanalyze.l" -{return token(H5T_COMPOUND_TOKEN);} +{return token(CTYPE_TOKEN);} YY_BREAK case 52: YY_RULE_SETUP #line 111 "hl/src//H5LTanalyze.l" -{return token(H5T_ENUM_TOKEN);} +{return token(H5T_STR_NULLTERM_TOKEN);} YY_BREAK case 53: YY_RULE_SETUP #line 112 "hl/src//H5LTanalyze.l" -{return token(H5T_ARRAY_TOKEN);} +{return token(H5T_STR_NULLPAD_TOKEN);} YY_BREAK case 54: YY_RULE_SETUP #line 113 "hl/src//H5LTanalyze.l" -{return token(H5T_VLEN_TOKEN);} +{return token(H5T_STR_SPACEPAD_TOKEN);} YY_BREAK case 55: YY_RULE_SETUP -#line 115 "hl/src//H5LTanalyze.l" -{return token(H5T_OPAQUE_TOKEN);} +#line 114 "hl/src//H5LTanalyze.l" +{return token(H5T_CSET_ASCII_TOKEN);} YY_BREAK case 56: YY_RULE_SETUP -#line 116 "hl/src//H5LTanalyze.l" -{return token(OPQ_SIZE_TOKEN);} +#line 115 "hl/src//H5LTanalyze.l" +{return token(H5T_CSET_UTF8_TOKEN);} YY_BREAK case 57: YY_RULE_SETUP +#line 116 "hl/src//H5LTanalyze.l" +{return token(H5T_C_S1_TOKEN);} + YY_BREAK +case 58: +YY_RULE_SETUP #line 117 "hl/src//H5LTanalyze.l" +{return token(H5T_FORTRAN_S1_TOKEN);} + YY_BREAK +case 59: +YY_RULE_SETUP +#line 118 "hl/src//H5LTanalyze.l" +{return token(H5T_VARIABLE_TOKEN);} + YY_BREAK +case 60: +YY_RULE_SETUP +#line 120 "hl/src//H5LTanalyze.l" +{return token(H5T_COMPOUND_TOKEN);} + YY_BREAK +case 61: +YY_RULE_SETUP +#line 121 "hl/src//H5LTanalyze.l" +{return token(H5T_ENUM_TOKEN);} + YY_BREAK +case 62: +YY_RULE_SETUP +#line 122 "hl/src//H5LTanalyze.l" +{return token(H5T_ARRAY_TOKEN);} + YY_BREAK +case 63: +YY_RULE_SETUP +#line 123 "hl/src//H5LTanalyze.l" +{return token(H5T_VLEN_TOKEN);} + YY_BREAK +case 64: +YY_RULE_SETUP +#line 124 "hl/src//H5LTanalyze.l" +{return token(H5T_COMPLEX_TOKEN);} + YY_BREAK +case 65: +YY_RULE_SETUP +#line 126 "hl/src//H5LTanalyze.l" +{return token(H5T_OPAQUE_TOKEN);} + YY_BREAK +case 66: +YY_RULE_SETUP +#line 127 "hl/src//H5LTanalyze.l" +{return token(OPQ_SIZE_TOKEN);} + YY_BREAK +case 67: +YY_RULE_SETUP +#line 128 "hl/src//H5LTanalyze.l" {return token(OPQ_TAG_TOKEN);} YY_BREAK -case 58: +case 68: YY_RULE_SETUP -#line 119 "hl/src//H5LTanalyze.l" +#line 130 "hl/src//H5LTanalyze.l" { H5LTyylval.ival = atoi(yytext); return NUMBER; } YY_BREAK -case 59: -/* rule 59 can match eol */ +case 69: +/* rule 69 can match eol */ YY_RULE_SETUP -#line 124 "hl/src//H5LTanalyze.l" +#line 135 "hl/src//H5LTanalyze.l" { H5LTyylval.sval = trim_quotes(yytext); return STRING; } YY_BREAK -case 60: +case 70: YY_RULE_SETUP -#line 129 "hl/src//H5LTanalyze.l" +#line 140 "hl/src//H5LTanalyze.l" {return token('{');} YY_BREAK -case 61: +case 71: YY_RULE_SETUP -#line 130 "hl/src//H5LTanalyze.l" +#line 141 "hl/src//H5LTanalyze.l" {return token('}');} YY_BREAK -case 62: +case 72: YY_RULE_SETUP -#line 131 "hl/src//H5LTanalyze.l" +#line 142 "hl/src//H5LTanalyze.l" {return token('[');} YY_BREAK -case 63: +case 73: YY_RULE_SETUP -#line 132 "hl/src//H5LTanalyze.l" +#line 143 "hl/src//H5LTanalyze.l" {return token(']');} YY_BREAK -case 64: +case 74: YY_RULE_SETUP -#line 133 "hl/src//H5LTanalyze.l" +#line 144 "hl/src//H5LTanalyze.l" {return token(':');} YY_BREAK -case 65: +case 75: YY_RULE_SETUP -#line 134 "hl/src//H5LTanalyze.l" +#line 145 "hl/src//H5LTanalyze.l" {return token(';');} YY_BREAK -case 66: -/* rule 66 can match eol */ +case 76: +/* rule 76 can match eol */ YY_RULE_SETUP -#line 135 "hl/src//H5LTanalyze.l" +#line 146 "hl/src//H5LTanalyze.l" ; YY_BREAK -case 67: +case 77: YY_RULE_SETUP -#line 137 "hl/src//H5LTanalyze.l" +#line 148 "hl/src//H5LTanalyze.l" ECHO; YY_BREAK -#line 1526 "hl/src//H5LTanalyze.c" +#line 1609 "hl/src//H5LTanalyze.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -1849,7 +1932,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 283 ) + if ( yy_current_state >= 335 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -1877,11 +1960,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 283 ) + if ( yy_current_state >= 335 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 282); + yy_is_jam = (yy_current_state == 334); return yy_is_jam ? 0 : yy_current_state; } @@ -2557,7 +2640,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 137 "hl/src//H5LTanalyze.l" +#line 148 "hl/src//H5LTanalyze.l" /* Allocate a copy of `quoted` with the double quote character at diff --git a/hl/src/H5LTanalyze.l b/hl/src/H5LTanalyze.l index f78a4159567..84b0a61f03a 100644 --- a/hl/src/H5LTanalyze.l +++ b/hl/src/H5LTanalyze.l @@ -93,6 +93,16 @@ H5T_NATIVE_FLOAT {return hid(H5T_NATIVE_FLOAT_TOKEN);} H5T_NATIVE_DOUBLE {return hid(H5T_NATIVE_DOUBLE_TOKEN);} H5T_NATIVE_LDOUBLE {return hid(H5T_NATIVE_LDOUBLE_TOKEN);} +H5T_COMPLEX_IEEE_F16BE {return hid(H5T_COMPLEX_IEEE_F16BE_TOKEN);} +H5T_COMPLEX_IEEE_F16LE {return hid(H5T_COMPLEX_IEEE_F16LE_TOKEN);} +H5T_COMPLEX_IEEE_F32BE {return hid(H5T_COMPLEX_IEEE_F32BE_TOKEN);} +H5T_COMPLEX_IEEE_F32LE {return hid(H5T_COMPLEX_IEEE_F32LE_TOKEN);} +H5T_COMPLEX_IEEE_F64BE {return hid(H5T_COMPLEX_IEEE_F64BE_TOKEN);} +H5T_COMPLEX_IEEE_F64LE {return hid(H5T_COMPLEX_IEEE_F64LE_TOKEN);} +H5T_NATIVE_FLOAT_COMPLEX {return hid(H5T_NATIVE_FLOAT_COMPLEX_TOKEN);} +H5T_NATIVE_DOUBLE_COMPLEX {return hid(H5T_NATIVE_DOUBLE_COMPLEX_TOKEN);} +H5T_NATIVE_LDOUBLE_COMPLEX {return hid(H5T_NATIVE_LDOUBLE_COMPLEX_TOKEN);} + H5T_STRING {return token(H5T_STRING_TOKEN);} STRSIZE {return token(STRSIZE_TOKEN);} STRPAD {return token(STRPAD_TOKEN);} @@ -111,6 +121,7 @@ H5T_COMPOUND {return token(H5T_COMPOUND_TOKEN);} H5T_ENUM {return token(H5T_ENUM_TOKEN);} H5T_ARRAY {return token(H5T_ARRAY_TOKEN);} H5T_VLEN {return token(H5T_VLEN_TOKEN);} +H5T_COMPLEX {return token(H5T_COMPLEX_TOKEN);} H5T_OPAQUE {return token(H5T_OPAQUE_TOKEN);} OPQ_SIZE {return token(OPQ_SIZE_TOKEN);} diff --git a/hl/src/H5LTparse.c b/hl/src/H5LTparse.c index 46c3ae79b72..df2b4d04d25 100644 --- a/hl/src/H5LTparse.c +++ b/hl/src/H5LTparse.c @@ -221,77 +221,88 @@ enum yysymbol_kind_t YYSYMBOL_H5T_NATIVE_FLOAT_TOKEN = 37, /* H5T_NATIVE_FLOAT_TOKEN */ YYSYMBOL_H5T_NATIVE_DOUBLE_TOKEN = 38, /* H5T_NATIVE_DOUBLE_TOKEN */ YYSYMBOL_H5T_NATIVE_LDOUBLE_TOKEN = 39, /* H5T_NATIVE_LDOUBLE_TOKEN */ - YYSYMBOL_H5T_STRING_TOKEN = 40, /* H5T_STRING_TOKEN */ - YYSYMBOL_STRSIZE_TOKEN = 41, /* STRSIZE_TOKEN */ - YYSYMBOL_STRPAD_TOKEN = 42, /* STRPAD_TOKEN */ - YYSYMBOL_CSET_TOKEN = 43, /* CSET_TOKEN */ - YYSYMBOL_CTYPE_TOKEN = 44, /* CTYPE_TOKEN */ - YYSYMBOL_H5T_VARIABLE_TOKEN = 45, /* H5T_VARIABLE_TOKEN */ - YYSYMBOL_H5T_STR_NULLTERM_TOKEN = 46, /* H5T_STR_NULLTERM_TOKEN */ - YYSYMBOL_H5T_STR_NULLPAD_TOKEN = 47, /* H5T_STR_NULLPAD_TOKEN */ - YYSYMBOL_H5T_STR_SPACEPAD_TOKEN = 48, /* H5T_STR_SPACEPAD_TOKEN */ - YYSYMBOL_H5T_CSET_ASCII_TOKEN = 49, /* H5T_CSET_ASCII_TOKEN */ - YYSYMBOL_H5T_CSET_UTF8_TOKEN = 50, /* H5T_CSET_UTF8_TOKEN */ - YYSYMBOL_H5T_C_S1_TOKEN = 51, /* H5T_C_S1_TOKEN */ - YYSYMBOL_H5T_FORTRAN_S1_TOKEN = 52, /* H5T_FORTRAN_S1_TOKEN */ - YYSYMBOL_H5T_OPAQUE_TOKEN = 53, /* H5T_OPAQUE_TOKEN */ - YYSYMBOL_OPQ_SIZE_TOKEN = 54, /* OPQ_SIZE_TOKEN */ - YYSYMBOL_OPQ_TAG_TOKEN = 55, /* OPQ_TAG_TOKEN */ - YYSYMBOL_H5T_COMPOUND_TOKEN = 56, /* H5T_COMPOUND_TOKEN */ - YYSYMBOL_H5T_ENUM_TOKEN = 57, /* H5T_ENUM_TOKEN */ - YYSYMBOL_H5T_ARRAY_TOKEN = 58, /* H5T_ARRAY_TOKEN */ - YYSYMBOL_H5T_VLEN_TOKEN = 59, /* H5T_VLEN_TOKEN */ - YYSYMBOL_STRING = 60, /* STRING */ - YYSYMBOL_NUMBER = 61, /* NUMBER */ - YYSYMBOL_62_ = 62, /* '{' */ - YYSYMBOL_63_ = 63, /* '}' */ - YYSYMBOL_64_ = 64, /* '[' */ - YYSYMBOL_65_ = 65, /* ']' */ - YYSYMBOL_66_ = 66, /* ':' */ - YYSYMBOL_67_ = 67, /* ';' */ - YYSYMBOL_YYACCEPT = 68, /* $accept */ - YYSYMBOL_start = 69, /* start */ - YYSYMBOL_ddl_type = 70, /* ddl_type */ - YYSYMBOL_atomic_type = 71, /* atomic_type */ - YYSYMBOL_integer_type = 72, /* integer_type */ - YYSYMBOL_fp_type = 73, /* fp_type */ - YYSYMBOL_compound_type = 74, /* compound_type */ - YYSYMBOL_75_1 = 75, /* $@1 */ - YYSYMBOL_memb_list = 76, /* memb_list */ - YYSYMBOL_memb_def = 77, /* memb_def */ - YYSYMBOL_78_2 = 78, /* $@2 */ - YYSYMBOL_field_name = 79, /* field_name */ - YYSYMBOL_field_offset = 80, /* field_offset */ - YYSYMBOL_offset = 81, /* offset */ - YYSYMBOL_array_type = 82, /* array_type */ - YYSYMBOL_83_3 = 83, /* $@3 */ - YYSYMBOL_dim_list = 84, /* dim_list */ - YYSYMBOL_dim = 85, /* dim */ - YYSYMBOL_86_4 = 86, /* $@4 */ - YYSYMBOL_87_5 = 87, /* $@5 */ - YYSYMBOL_dimsize = 88, /* dimsize */ - YYSYMBOL_vlen_type = 89, /* vlen_type */ - YYSYMBOL_opaque_type = 90, /* opaque_type */ - YYSYMBOL_91_6 = 91, /* @6 */ - YYSYMBOL_92_7 = 92, /* $@7 */ - YYSYMBOL_opaque_size = 93, /* opaque_size */ - YYSYMBOL_opaque_tag = 94, /* opaque_tag */ - YYSYMBOL_string_type = 95, /* string_type */ - YYSYMBOL_96_8 = 96, /* $@8 */ - YYSYMBOL_97_9 = 97, /* $@9 */ - YYSYMBOL_98_10 = 98, /* $@10 */ - YYSYMBOL_99_11 = 99, /* @11 */ - YYSYMBOL_strsize = 100, /* strsize */ - YYSYMBOL_strpad = 101, /* strpad */ - YYSYMBOL_cset = 102, /* cset */ - YYSYMBOL_ctype = 103, /* ctype */ - YYSYMBOL_enum_type = 104, /* enum_type */ - YYSYMBOL_105_12 = 105, /* $@12 */ - YYSYMBOL_enum_list = 106, /* enum_list */ - YYSYMBOL_enum_def = 107, /* enum_def */ - YYSYMBOL_108_13 = 108, /* $@13 */ - YYSYMBOL_enum_symbol = 109, /* enum_symbol */ - YYSYMBOL_enum_val = 110 /* enum_val */ + YYSYMBOL_H5T_COMPLEX_IEEE_F16BE_TOKEN = 40, /* H5T_COMPLEX_IEEE_F16BE_TOKEN */ + YYSYMBOL_H5T_COMPLEX_IEEE_F16LE_TOKEN = 41, /* H5T_COMPLEX_IEEE_F16LE_TOKEN */ + YYSYMBOL_H5T_COMPLEX_IEEE_F32BE_TOKEN = 42, /* H5T_COMPLEX_IEEE_F32BE_TOKEN */ + YYSYMBOL_H5T_COMPLEX_IEEE_F32LE_TOKEN = 43, /* H5T_COMPLEX_IEEE_F32LE_TOKEN */ + YYSYMBOL_H5T_COMPLEX_IEEE_F64BE_TOKEN = 44, /* H5T_COMPLEX_IEEE_F64BE_TOKEN */ + YYSYMBOL_H5T_COMPLEX_IEEE_F64LE_TOKEN = 45, /* H5T_COMPLEX_IEEE_F64LE_TOKEN */ + YYSYMBOL_H5T_NATIVE_FLOAT_COMPLEX_TOKEN = 46, /* H5T_NATIVE_FLOAT_COMPLEX_TOKEN */ + YYSYMBOL_H5T_NATIVE_DOUBLE_COMPLEX_TOKEN = 47, /* H5T_NATIVE_DOUBLE_COMPLEX_TOKEN */ + YYSYMBOL_H5T_NATIVE_LDOUBLE_COMPLEX_TOKEN = 48, /* H5T_NATIVE_LDOUBLE_COMPLEX_TOKEN */ + YYSYMBOL_H5T_STRING_TOKEN = 49, /* H5T_STRING_TOKEN */ + YYSYMBOL_STRSIZE_TOKEN = 50, /* STRSIZE_TOKEN */ + YYSYMBOL_STRPAD_TOKEN = 51, /* STRPAD_TOKEN */ + YYSYMBOL_CSET_TOKEN = 52, /* CSET_TOKEN */ + YYSYMBOL_CTYPE_TOKEN = 53, /* CTYPE_TOKEN */ + YYSYMBOL_H5T_VARIABLE_TOKEN = 54, /* H5T_VARIABLE_TOKEN */ + YYSYMBOL_H5T_STR_NULLTERM_TOKEN = 55, /* H5T_STR_NULLTERM_TOKEN */ + YYSYMBOL_H5T_STR_NULLPAD_TOKEN = 56, /* H5T_STR_NULLPAD_TOKEN */ + YYSYMBOL_H5T_STR_SPACEPAD_TOKEN = 57, /* H5T_STR_SPACEPAD_TOKEN */ + YYSYMBOL_H5T_CSET_ASCII_TOKEN = 58, /* H5T_CSET_ASCII_TOKEN */ + YYSYMBOL_H5T_CSET_UTF8_TOKEN = 59, /* H5T_CSET_UTF8_TOKEN */ + YYSYMBOL_H5T_C_S1_TOKEN = 60, /* H5T_C_S1_TOKEN */ + YYSYMBOL_H5T_FORTRAN_S1_TOKEN = 61, /* H5T_FORTRAN_S1_TOKEN */ + YYSYMBOL_H5T_OPAQUE_TOKEN = 62, /* H5T_OPAQUE_TOKEN */ + YYSYMBOL_OPQ_SIZE_TOKEN = 63, /* OPQ_SIZE_TOKEN */ + YYSYMBOL_OPQ_TAG_TOKEN = 64, /* OPQ_TAG_TOKEN */ + YYSYMBOL_H5T_COMPOUND_TOKEN = 65, /* H5T_COMPOUND_TOKEN */ + YYSYMBOL_H5T_ENUM_TOKEN = 66, /* H5T_ENUM_TOKEN */ + YYSYMBOL_H5T_ARRAY_TOKEN = 67, /* H5T_ARRAY_TOKEN */ + YYSYMBOL_H5T_VLEN_TOKEN = 68, /* H5T_VLEN_TOKEN */ + YYSYMBOL_H5T_COMPLEX_TOKEN = 69, /* H5T_COMPLEX_TOKEN */ + YYSYMBOL_STRING = 70, /* STRING */ + YYSYMBOL_NUMBER = 71, /* NUMBER */ + YYSYMBOL_72_ = 72, /* '{' */ + YYSYMBOL_73_ = 73, /* '}' */ + YYSYMBOL_74_ = 74, /* '[' */ + YYSYMBOL_75_ = 75, /* ']' */ + YYSYMBOL_76_ = 76, /* ':' */ + YYSYMBOL_77_ = 77, /* ';' */ + YYSYMBOL_YYACCEPT = 78, /* $accept */ + YYSYMBOL_start = 79, /* start */ + YYSYMBOL_ddl_type = 80, /* ddl_type */ + YYSYMBOL_atomic_type = 81, /* atomic_type */ + YYSYMBOL_integer_type = 82, /* integer_type */ + YYSYMBOL_fp_type = 83, /* fp_type */ + YYSYMBOL_compound_type = 84, /* compound_type */ + YYSYMBOL_85_1 = 85, /* $@1 */ + YYSYMBOL_memb_list = 86, /* memb_list */ + YYSYMBOL_memb_def = 87, /* memb_def */ + YYSYMBOL_88_2 = 88, /* $@2 */ + YYSYMBOL_field_name = 89, /* field_name */ + YYSYMBOL_field_offset = 90, /* field_offset */ + YYSYMBOL_offset = 91, /* offset */ + YYSYMBOL_array_type = 92, /* array_type */ + YYSYMBOL_93_3 = 93, /* $@3 */ + YYSYMBOL_dim_list = 94, /* dim_list */ + YYSYMBOL_dim = 95, /* dim */ + YYSYMBOL_96_4 = 96, /* $@4 */ + YYSYMBOL_97_5 = 97, /* $@5 */ + YYSYMBOL_dimsize = 98, /* dimsize */ + YYSYMBOL_vlen_type = 99, /* vlen_type */ + YYSYMBOL_complex_type = 100, /* complex_type */ + YYSYMBOL_opaque_type = 101, /* opaque_type */ + YYSYMBOL_102_6 = 102, /* @6 */ + YYSYMBOL_103_7 = 103, /* $@7 */ + YYSYMBOL_opaque_size = 104, /* opaque_size */ + YYSYMBOL_opaque_tag = 105, /* opaque_tag */ + YYSYMBOL_string_type = 106, /* string_type */ + YYSYMBOL_107_8 = 107, /* $@8 */ + YYSYMBOL_108_9 = 108, /* $@9 */ + YYSYMBOL_109_10 = 109, /* $@10 */ + YYSYMBOL_110_11 = 110, /* @11 */ + YYSYMBOL_strsize = 111, /* strsize */ + YYSYMBOL_strpad = 112, /* strpad */ + YYSYMBOL_cset = 113, /* cset */ + YYSYMBOL_ctype = 114, /* ctype */ + YYSYMBOL_enum_type = 115, /* enum_type */ + YYSYMBOL_116_12 = 116, /* $@12 */ + YYSYMBOL_enum_list = 117, /* enum_list */ + YYSYMBOL_enum_def = 118, /* enum_def */ + YYSYMBOL_119_13 = 119, /* $@13 */ + YYSYMBOL_enum_symbol = 120, /* enum_symbol */ + YYSYMBOL_enum_val = 121 /* enum_val */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -617,21 +628,21 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 61 +#define YYFINAL 73 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 206 +#define YYLAST 239 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 68 +#define YYNTOKENS 78 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 43 +#define YYNNTS 44 /* YYNRULES -- Number of rules. */ -#define YYNRULES 95 +#define YYNRULES 106 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 137 +#define YYNSTATES 151 /* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 316 +#define YYMAXUTOK 326 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -650,14 +661,14 @@ static const yytype_int8 yytranslate[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 66, 67, + 2, 2, 2, 2, 2, 2, 2, 2, 76, 77, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 64, 2, 65, 2, 2, 2, 2, 2, 2, + 2, 74, 2, 75, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 62, 2, 63, 2, 2, 2, 2, + 2, 2, 2, 72, 2, 73, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -676,23 +687,25 @@ static const yytype_int8 yytranslate[] = 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61 + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 102, 102, 103, 105, 106, 107, 108, 110, 111, - 112, 113, 114, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 159, 158, 167, 168, 170, 170, 207, 215, 216, 219, - 221, 221, 230, 231, 233, 234, 233, 241, 244, 251, - 256, 248, 263, 265, 270, 277, 286, 293, 267, 317, - 318, 320, 321, 322, 324, 325, 327, 328, 332, 331, - 336, 337, 339, 339, 389, 391 + 0, 108, 108, 109, 111, 112, 113, 114, 115, 117, + 118, 119, 120, 121, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 166, 165, 174, 175, 177, 177, 214, 222, 223, + 226, 228, 228, 237, 238, 240, 241, 240, 248, 251, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 271, 276, 268, 283, 285, 290, 297, 306, 313, 287, + 337, 338, 340, 341, 342, 344, 345, 347, 348, 352, + 351, 356, 357, 359, 359, 409, 411 }; #endif @@ -724,18 +737,23 @@ static const char *const yytname[] = "H5T_IEEE_F64BE_TOKEN", "H5T_IEEE_F64LE_TOKEN", "H5T_NATIVE_FLOAT16_TOKEN", "H5T_NATIVE_FLOAT_TOKEN", "H5T_NATIVE_DOUBLE_TOKEN", "H5T_NATIVE_LDOUBLE_TOKEN", - "H5T_STRING_TOKEN", "STRSIZE_TOKEN", "STRPAD_TOKEN", "CSET_TOKEN", - "CTYPE_TOKEN", "H5T_VARIABLE_TOKEN", "H5T_STR_NULLTERM_TOKEN", - "H5T_STR_NULLPAD_TOKEN", "H5T_STR_SPACEPAD_TOKEN", - "H5T_CSET_ASCII_TOKEN", "H5T_CSET_UTF8_TOKEN", "H5T_C_S1_TOKEN", - "H5T_FORTRAN_S1_TOKEN", "H5T_OPAQUE_TOKEN", "OPQ_SIZE_TOKEN", - "OPQ_TAG_TOKEN", "H5T_COMPOUND_TOKEN", "H5T_ENUM_TOKEN", - "H5T_ARRAY_TOKEN", "H5T_VLEN_TOKEN", "STRING", "NUMBER", "'{'", "'}'", - "'['", "']'", "':'", "';'", "$accept", "start", "ddl_type", - "atomic_type", "integer_type", "fp_type", "compound_type", "$@1", - "memb_list", "memb_def", "$@2", "field_name", "field_offset", "offset", - "array_type", "$@3", "dim_list", "dim", "$@4", "$@5", "dimsize", - "vlen_type", "opaque_type", "@6", "$@7", "opaque_size", "opaque_tag", + "H5T_COMPLEX_IEEE_F16BE_TOKEN", "H5T_COMPLEX_IEEE_F16LE_TOKEN", + "H5T_COMPLEX_IEEE_F32BE_TOKEN", "H5T_COMPLEX_IEEE_F32LE_TOKEN", + "H5T_COMPLEX_IEEE_F64BE_TOKEN", "H5T_COMPLEX_IEEE_F64LE_TOKEN", + "H5T_NATIVE_FLOAT_COMPLEX_TOKEN", "H5T_NATIVE_DOUBLE_COMPLEX_TOKEN", + "H5T_NATIVE_LDOUBLE_COMPLEX_TOKEN", "H5T_STRING_TOKEN", "STRSIZE_TOKEN", + "STRPAD_TOKEN", "CSET_TOKEN", "CTYPE_TOKEN", "H5T_VARIABLE_TOKEN", + "H5T_STR_NULLTERM_TOKEN", "H5T_STR_NULLPAD_TOKEN", + "H5T_STR_SPACEPAD_TOKEN", "H5T_CSET_ASCII_TOKEN", "H5T_CSET_UTF8_TOKEN", + "H5T_C_S1_TOKEN", "H5T_FORTRAN_S1_TOKEN", "H5T_OPAQUE_TOKEN", + "OPQ_SIZE_TOKEN", "OPQ_TAG_TOKEN", "H5T_COMPOUND_TOKEN", + "H5T_ENUM_TOKEN", "H5T_ARRAY_TOKEN", "H5T_VLEN_TOKEN", + "H5T_COMPLEX_TOKEN", "STRING", "NUMBER", "'{'", "'}'", "'['", "']'", + "':'", "';'", "$accept", "start", "ddl_type", "atomic_type", + "integer_type", "fp_type", "compound_type", "$@1", "memb_list", + "memb_def", "$@2", "field_name", "field_offset", "offset", "array_type", + "$@3", "dim_list", "dim", "$@4", "$@5", "dimsize", "vlen_type", + "complex_type", "opaque_type", "@6", "$@7", "opaque_size", "opaque_tag", "string_type", "$@8", "$@9", "$@10", "@11", "strsize", "strpad", "cset", "ctype", "enum_type", "$@12", "enum_list", "enum_def", "$@13", "enum_symbol", "enum_val", YY_NULLPTR @@ -748,7 +766,7 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-25) +#define YYPACT_NINF (-24) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) @@ -762,20 +780,22 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int16 yypact[] = { - 120, -25, -25, -25, -25, -25, -25, -25, -25, -25, - -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, - -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, - -25, -25, -25, -25, -25, -25, -25, -25, -24, -22, - -25, -13, -25, -11, 52, -25, -25, -25, -25, -25, - -25, -25, -25, -25, -25, 18, 48, 41, 177, 42, - 120, -25, -4, 44, -25, 39, -25, 45, -25, -25, - 40, -25, 43, 59, -25, -3, -25, -25, -25, -25, - -25, -25, -25, -25, 46, -25, 69, 58, 54, -21, - 60, -25, 0, 101, -25, 53, -25, -25, -25, -25, - -25, -25, -25, -25, -25, 95, -25, 96, 103, 98, - 105, 55, -25, -25, -25, -25, -25, -25, 100, -25, - 125, 106, -25, -6, -25, -25, -25, 104, -25, 126, - 49, -25, -25, 107, -25, 109, -25 + 140, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -21, -15, -24, + -14, -24, -4, -2, 119, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, 70, 58, 51, 207, + 52, 140, 140, -24, 68, 54, -24, 49, -24, 55, + 56, -24, -24, 50, -24, 53, 69, -24, -3, -24, + -24, -24, -24, -24, -24, -24, -24, -24, 59, -24, + 82, 76, 71, -23, 120, -24, -1, 122, -24, 114, + -24, -24, -24, -24, -24, -24, -24, -24, -24, 116, + -24, 117, 124, 121, 125, 126, -24, -24, -24, -24, + -24, -24, 123, -24, 145, 130, -24, -10, -24, -24, + -24, 127, -24, 146, 0, -24, -24, 160, -24, 165, + -24 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -783,40 +803,42 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_int8 yydefact[] = { - 2, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 0, 0, - 50, 0, 60, 0, 0, 3, 4, 8, 9, 5, - 6, 7, 12, 10, 11, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 52, 0, 62, 0, 79, 80, - 0, 72, 0, 0, 88, 0, 68, 74, 69, 51, - 54, 53, 90, 64, 0, 63, 0, 0, 0, 0, - 0, 61, 0, 0, 56, 57, 94, 89, 91, 92, - 67, 65, 81, 82, 83, 0, 73, 0, 0, 0, - 0, 0, 75, 70, 59, 58, 55, 95, 0, 66, - 0, 0, 93, 0, 71, 84, 85, 0, 76, 0, - 0, 86, 87, 0, 77, 0, 78 + 2, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 74, 73, + 76, 75, 78, 77, 70, 71, 72, 0, 0, 51, + 0, 61, 0, 0, 0, 3, 4, 9, 10, 5, + 6, 7, 8, 13, 11, 12, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 53, 0, 63, 0, + 0, 90, 91, 0, 83, 0, 0, 99, 0, 69, + 79, 85, 80, 52, 55, 54, 101, 65, 0, 64, + 0, 0, 0, 0, 0, 62, 0, 0, 57, 58, + 105, 100, 102, 103, 68, 66, 92, 93, 94, 0, + 84, 0, 0, 0, 0, 0, 86, 81, 60, 59, + 56, 106, 0, 67, 0, 0, 104, 0, 82, 95, + 96, 0, 87, 0, 0, 97, 98, 0, 88, 0, + 89 }; /* YYPGOTO[NTERM-NUM]. */ -static const yytype_int8 yypgoto[] = +static const yytype_int16 yypgoto[] = { - -25, -25, -15, -25, 117, -25, -25, -25, -25, -25, - -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, - -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, - -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, - -25, -25, -25 + -24, -24, -19, -24, 170, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_uint8 yydefgoto[] = { - 0, 44, 45, 46, 47, 48, 49, 57, 73, 81, - 88, 95, 109, 115, 50, 59, 75, 85, 90, 111, - 101, 51, 52, 87, 121, 72, 107, 53, 86, 120, - 129, 135, 70, 105, 127, 133, 54, 82, 89, 98, - 110, 99, 118 + 0, 54, 55, 56, 57, 58, 59, 68, 86, 95, + 102, 109, 123, 129, 60, 70, 88, 99, 104, 125, + 115, 61, 62, 63, 101, 135, 85, 121, 64, 100, + 134, 143, 149, 83, 119, 141, 147, 65, 96, 103, + 112, 124, 113, 132 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -827,24 +849,27 @@ static const yytype_uint8 yytable[] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 55, 96, - 56, 68, 97, 125, 126, 67, 102, 103, 104, 58, - 39, 60, 61, 40, 41, 42, 43, 69, 80, 62, - 84, 83, 1, 2, 3, 4, 5, 6, 7, 8, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 110, 139, 140, + 111, 66, 79, 80, 116, 117, 118, 67, 69, 48, + 145, 146, 49, 50, 51, 52, 53, 94, 71, 98, + 72, 97, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 131, 132, 63, 64, 66, 71, 74, 77, 76, 91, - 78, 92, 39, 93, 94, 40, 41, 42, 43, 108, - 119, 100, 79, 1, 2, 3, 4, 5, 6, 7, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 73, + 74, 75, 81, 76, 78, 84, 87, 91, 89, 90, + 92, 48, 105, 106, 49, 50, 51, 52, 53, 82, + 107, 108, 93, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 106, 112, 113, 114, 116, 117, 122, 123, 124, - 130, 128, 136, 39, 134, 65, 40, 41, 42, 43, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 122, 114, 120, 126, 127, 128, 131, 137, 130, 144, + 136, 133, 48, 138, 142, 49, 50, 51, 52, 53, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27 + 21, 22, 23, 24, 25, 26, 27, 148, 150, 77 }; static const yytype_int8 yycheck[] = @@ -852,24 +877,27 @@ static const yytype_int8 yycheck[] = 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 62, 60, - 62, 45, 63, 49, 50, 60, 46, 47, 48, 62, - 53, 62, 0, 56, 57, 58, 59, 61, 73, 41, - 75, 64, 3, 4, 5, 6, 7, 8, 9, 10, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 70, 58, 59, + 73, 72, 71, 72, 55, 56, 57, 72, 72, 62, + 60, 61, 65, 66, 67, 68, 69, 86, 72, 88, + 72, 74, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 51, 52, 54, 62, 62, 61, 67, 67, 63, 63, - 67, 42, 53, 55, 60, 56, 57, 58, 59, 66, - 65, 61, 63, 3, 4, 5, 6, 7, 8, 9, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 0, + 50, 63, 54, 72, 72, 71, 77, 77, 73, 73, + 77, 62, 73, 51, 65, 66, 67, 68, 69, 71, + 64, 70, 73, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 60, 67, 67, 61, 67, 61, 67, 43, 63, - 44, 67, 63, 53, 67, 58, 56, 57, 58, 59, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 76, 71, 70, 77, 77, 71, 71, 52, 77, 53, + 77, 75, 62, 73, 77, 65, 66, 67, 68, 69, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29 + 23, 24, 25, 26, 27, 28, 29, 77, 73, 69 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of @@ -879,32 +907,35 @@ static const yytype_int8 yystos[] = 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 53, - 56, 57, 58, 59, 69, 70, 71, 72, 73, 74, - 82, 89, 90, 95, 104, 62, 62, 75, 62, 83, - 62, 0, 41, 54, 62, 72, 62, 70, 45, 61, - 100, 61, 93, 76, 67, 84, 63, 67, 67, 63, - 70, 77, 105, 64, 70, 85, 96, 91, 78, 106, - 86, 63, 42, 55, 60, 79, 60, 63, 107, 109, - 61, 88, 46, 47, 48, 101, 60, 94, 66, 80, - 108, 87, 67, 67, 61, 81, 67, 61, 110, 65, - 97, 92, 67, 43, 63, 49, 50, 102, 67, 98, - 44, 51, 52, 103, 67, 99, 63 + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 62, 65, + 66, 67, 68, 69, 79, 80, 81, 82, 83, 84, + 92, 99, 100, 101, 106, 115, 72, 72, 85, 72, + 93, 72, 72, 0, 50, 63, 72, 82, 72, 80, + 80, 54, 71, 111, 71, 104, 86, 77, 94, 73, + 73, 77, 77, 73, 80, 87, 116, 74, 80, 95, + 107, 102, 88, 117, 96, 73, 51, 64, 70, 89, + 70, 73, 118, 120, 71, 98, 55, 56, 57, 112, + 70, 105, 76, 90, 119, 97, 77, 77, 71, 91, + 77, 71, 121, 75, 108, 103, 77, 52, 73, 58, + 59, 113, 77, 109, 53, 60, 61, 114, 77, 110, + 73 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ static const yytype_int8 yyr1[] = { - 0, 68, 69, 69, 70, 70, 70, 70, 71, 71, - 71, 71, 71, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, - 75, 74, 76, 76, 78, 77, 79, 80, 80, 81, - 83, 82, 84, 84, 86, 87, 85, 88, 89, 91, - 92, 90, 93, 94, 96, 97, 98, 99, 95, 100, - 100, 101, 101, 101, 102, 102, 103, 103, 105, 104, - 106, 106, 108, 107, 109, 110 + 0, 78, 79, 79, 80, 80, 80, 80, 80, 81, + 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, + 82, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 85, 84, 86, 86, 88, 87, 89, 90, 90, + 91, 93, 92, 94, 94, 96, 97, 95, 98, 99, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 102, 103, 101, 104, 105, 107, 108, 109, 110, 106, + 111, 111, 112, 112, 112, 113, 113, 114, 114, 116, + 115, 117, 117, 119, 118, 120, 121 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ @@ -915,11 +946,12 @@ static const yytype_int8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 5, 0, 2, 0, 5, 1, 0, 2, 1, - 0, 6, 0, 2, 0, 0, 5, 1, 4, 0, - 0, 11, 1, 1, 0, 0, 0, 0, 19, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 7, - 0, 2, 0, 4, 1, 1 + 1, 0, 5, 0, 2, 0, 5, 1, 0, 2, + 1, 0, 6, 0, 2, 0, 0, 5, 1, 4, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, + 0, 0, 11, 1, 1, 0, 0, 0, 0, 19, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 7, 0, 2, 0, 4, 1, 1 }; @@ -1383,263 +1415,263 @@ yyparse (void) switch (yyn) { case 2: /* start: %empty */ -#line 102 "hl/src//H5LTparse.y" +#line 108 "hl/src//H5LTparse.y" { memset(arr_stack, 0, STACK_SIZE*sizeof(struct arr_info)); /*initialize here?*/ } -#line 1360 "hl/src//H5LTparse.c" +#line 1392 "hl/src//H5LTparse.c" break; case 3: /* start: ddl_type */ -#line 103 "hl/src//H5LTparse.y" +#line 109 "hl/src//H5LTparse.y" { return (yyval.hid);} -#line 1366 "hl/src//H5LTparse.c" +#line 1398 "hl/src//H5LTparse.c" break; - case 13: /* integer_type: H5T_STD_I8BE_TOKEN */ -#line 117 "hl/src//H5LTparse.y" + case 14: /* integer_type: H5T_STD_I8BE_TOKEN */ +#line 124 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_STD_I8BE); } -#line 1372 "hl/src//H5LTparse.c" +#line 1404 "hl/src//H5LTparse.c" break; - case 14: /* integer_type: H5T_STD_I8LE_TOKEN */ -#line 118 "hl/src//H5LTparse.y" + case 15: /* integer_type: H5T_STD_I8LE_TOKEN */ +#line 125 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_STD_I8LE); } -#line 1378 "hl/src//H5LTparse.c" +#line 1410 "hl/src//H5LTparse.c" break; - case 15: /* integer_type: H5T_STD_I16BE_TOKEN */ -#line 119 "hl/src//H5LTparse.y" + case 16: /* integer_type: H5T_STD_I16BE_TOKEN */ +#line 126 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_STD_I16BE); } -#line 1384 "hl/src//H5LTparse.c" +#line 1416 "hl/src//H5LTparse.c" break; - case 16: /* integer_type: H5T_STD_I16LE_TOKEN */ -#line 120 "hl/src//H5LTparse.y" + case 17: /* integer_type: H5T_STD_I16LE_TOKEN */ +#line 127 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_STD_I16LE); } -#line 1390 "hl/src//H5LTparse.c" +#line 1422 "hl/src//H5LTparse.c" break; - case 17: /* integer_type: H5T_STD_I32BE_TOKEN */ -#line 121 "hl/src//H5LTparse.y" + case 18: /* integer_type: H5T_STD_I32BE_TOKEN */ +#line 128 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_STD_I32BE); } -#line 1396 "hl/src//H5LTparse.c" +#line 1428 "hl/src//H5LTparse.c" break; - case 18: /* integer_type: H5T_STD_I32LE_TOKEN */ -#line 122 "hl/src//H5LTparse.y" + case 19: /* integer_type: H5T_STD_I32LE_TOKEN */ +#line 129 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_STD_I32LE); } -#line 1402 "hl/src//H5LTparse.c" +#line 1434 "hl/src//H5LTparse.c" break; - case 19: /* integer_type: H5T_STD_I64BE_TOKEN */ -#line 123 "hl/src//H5LTparse.y" + case 20: /* integer_type: H5T_STD_I64BE_TOKEN */ +#line 130 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_STD_I64BE); } -#line 1408 "hl/src//H5LTparse.c" +#line 1440 "hl/src//H5LTparse.c" break; - case 20: /* integer_type: H5T_STD_I64LE_TOKEN */ -#line 124 "hl/src//H5LTparse.y" + case 21: /* integer_type: H5T_STD_I64LE_TOKEN */ +#line 131 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_STD_I64LE); } -#line 1414 "hl/src//H5LTparse.c" +#line 1446 "hl/src//H5LTparse.c" break; - case 21: /* integer_type: H5T_STD_U8BE_TOKEN */ -#line 125 "hl/src//H5LTparse.y" + case 22: /* integer_type: H5T_STD_U8BE_TOKEN */ +#line 132 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_STD_U8BE); } -#line 1420 "hl/src//H5LTparse.c" +#line 1452 "hl/src//H5LTparse.c" break; - case 22: /* integer_type: H5T_STD_U8LE_TOKEN */ -#line 126 "hl/src//H5LTparse.y" + case 23: /* integer_type: H5T_STD_U8LE_TOKEN */ +#line 133 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_STD_U8LE); } -#line 1426 "hl/src//H5LTparse.c" +#line 1458 "hl/src//H5LTparse.c" break; - case 23: /* integer_type: H5T_STD_U16BE_TOKEN */ -#line 127 "hl/src//H5LTparse.y" + case 24: /* integer_type: H5T_STD_U16BE_TOKEN */ +#line 134 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_STD_U16BE); } -#line 1432 "hl/src//H5LTparse.c" +#line 1464 "hl/src//H5LTparse.c" break; - case 24: /* integer_type: H5T_STD_U16LE_TOKEN */ -#line 128 "hl/src//H5LTparse.y" + case 25: /* integer_type: H5T_STD_U16LE_TOKEN */ +#line 135 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_STD_U16LE); } -#line 1438 "hl/src//H5LTparse.c" +#line 1470 "hl/src//H5LTparse.c" break; - case 25: /* integer_type: H5T_STD_U32BE_TOKEN */ -#line 129 "hl/src//H5LTparse.y" + case 26: /* integer_type: H5T_STD_U32BE_TOKEN */ +#line 136 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_STD_U32BE); } -#line 1444 "hl/src//H5LTparse.c" +#line 1476 "hl/src//H5LTparse.c" break; - case 26: /* integer_type: H5T_STD_U32LE_TOKEN */ -#line 130 "hl/src//H5LTparse.y" + case 27: /* integer_type: H5T_STD_U32LE_TOKEN */ +#line 137 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_STD_U32LE); } -#line 1450 "hl/src//H5LTparse.c" +#line 1482 "hl/src//H5LTparse.c" break; - case 27: /* integer_type: H5T_STD_U64BE_TOKEN */ -#line 131 "hl/src//H5LTparse.y" + case 28: /* integer_type: H5T_STD_U64BE_TOKEN */ +#line 138 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_STD_U64BE); } -#line 1456 "hl/src//H5LTparse.c" +#line 1488 "hl/src//H5LTparse.c" break; - case 28: /* integer_type: H5T_STD_U64LE_TOKEN */ -#line 132 "hl/src//H5LTparse.y" + case 29: /* integer_type: H5T_STD_U64LE_TOKEN */ +#line 139 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_STD_U64LE); } -#line 1462 "hl/src//H5LTparse.c" +#line 1494 "hl/src//H5LTparse.c" break; - case 29: /* integer_type: H5T_NATIVE_CHAR_TOKEN */ -#line 133 "hl/src//H5LTparse.y" + case 30: /* integer_type: H5T_NATIVE_CHAR_TOKEN */ +#line 140 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_NATIVE_CHAR); } -#line 1468 "hl/src//H5LTparse.c" +#line 1500 "hl/src//H5LTparse.c" break; - case 30: /* integer_type: H5T_NATIVE_SCHAR_TOKEN */ -#line 134 "hl/src//H5LTparse.y" + case 31: /* integer_type: H5T_NATIVE_SCHAR_TOKEN */ +#line 141 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_NATIVE_SCHAR); } -#line 1474 "hl/src//H5LTparse.c" +#line 1506 "hl/src//H5LTparse.c" break; - case 31: /* integer_type: H5T_NATIVE_UCHAR_TOKEN */ -#line 135 "hl/src//H5LTparse.y" + case 32: /* integer_type: H5T_NATIVE_UCHAR_TOKEN */ +#line 142 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_NATIVE_UCHAR); } -#line 1480 "hl/src//H5LTparse.c" +#line 1512 "hl/src//H5LTparse.c" break; - case 32: /* integer_type: H5T_NATIVE_SHORT_TOKEN */ -#line 136 "hl/src//H5LTparse.y" + case 33: /* integer_type: H5T_NATIVE_SHORT_TOKEN */ +#line 143 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_NATIVE_SHORT); } -#line 1486 "hl/src//H5LTparse.c" +#line 1518 "hl/src//H5LTparse.c" break; - case 33: /* integer_type: H5T_NATIVE_USHORT_TOKEN */ -#line 137 "hl/src//H5LTparse.y" + case 34: /* integer_type: H5T_NATIVE_USHORT_TOKEN */ +#line 144 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_NATIVE_USHORT); } -#line 1492 "hl/src//H5LTparse.c" +#line 1524 "hl/src//H5LTparse.c" break; - case 34: /* integer_type: H5T_NATIVE_INT_TOKEN */ -#line 138 "hl/src//H5LTparse.y" + case 35: /* integer_type: H5T_NATIVE_INT_TOKEN */ +#line 145 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_NATIVE_INT); } -#line 1498 "hl/src//H5LTparse.c" +#line 1530 "hl/src//H5LTparse.c" break; - case 35: /* integer_type: H5T_NATIVE_UINT_TOKEN */ -#line 139 "hl/src//H5LTparse.y" + case 36: /* integer_type: H5T_NATIVE_UINT_TOKEN */ +#line 146 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_NATIVE_UINT); } -#line 1504 "hl/src//H5LTparse.c" +#line 1536 "hl/src//H5LTparse.c" break; - case 36: /* integer_type: H5T_NATIVE_LONG_TOKEN */ -#line 140 "hl/src//H5LTparse.y" + case 37: /* integer_type: H5T_NATIVE_LONG_TOKEN */ +#line 147 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_NATIVE_LONG); } -#line 1510 "hl/src//H5LTparse.c" +#line 1542 "hl/src//H5LTparse.c" break; - case 37: /* integer_type: H5T_NATIVE_ULONG_TOKEN */ -#line 141 "hl/src//H5LTparse.y" + case 38: /* integer_type: H5T_NATIVE_ULONG_TOKEN */ +#line 148 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_NATIVE_ULONG); } -#line 1516 "hl/src//H5LTparse.c" +#line 1548 "hl/src//H5LTparse.c" break; - case 38: /* integer_type: H5T_NATIVE_LLONG_TOKEN */ -#line 142 "hl/src//H5LTparse.y" + case 39: /* integer_type: H5T_NATIVE_LLONG_TOKEN */ +#line 149 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_NATIVE_LLONG); } -#line 1522 "hl/src//H5LTparse.c" +#line 1554 "hl/src//H5LTparse.c" break; - case 39: /* integer_type: H5T_NATIVE_ULLONG_TOKEN */ -#line 143 "hl/src//H5LTparse.y" + case 40: /* integer_type: H5T_NATIVE_ULLONG_TOKEN */ +#line 150 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_NATIVE_ULLONG); } -#line 1528 "hl/src//H5LTparse.c" +#line 1560 "hl/src//H5LTparse.c" break; - case 40: /* fp_type: H5T_IEEE_F16BE_TOKEN */ -#line 146 "hl/src//H5LTparse.y" + case 41: /* fp_type: H5T_IEEE_F16BE_TOKEN */ +#line 153 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_IEEE_F16BE); } -#line 1534 "hl/src//H5LTparse.c" +#line 1566 "hl/src//H5LTparse.c" break; - case 41: /* fp_type: H5T_IEEE_F16LE_TOKEN */ -#line 147 "hl/src//H5LTparse.y" + case 42: /* fp_type: H5T_IEEE_F16LE_TOKEN */ +#line 154 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_IEEE_F16LE); } -#line 1540 "hl/src//H5LTparse.c" +#line 1572 "hl/src//H5LTparse.c" break; - case 42: /* fp_type: H5T_IEEE_F32BE_TOKEN */ -#line 148 "hl/src//H5LTparse.y" + case 43: /* fp_type: H5T_IEEE_F32BE_TOKEN */ +#line 155 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_IEEE_F32BE); } -#line 1546 "hl/src//H5LTparse.c" +#line 1578 "hl/src//H5LTparse.c" break; - case 43: /* fp_type: H5T_IEEE_F32LE_TOKEN */ -#line 149 "hl/src//H5LTparse.y" + case 44: /* fp_type: H5T_IEEE_F32LE_TOKEN */ +#line 156 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_IEEE_F32LE); } -#line 1552 "hl/src//H5LTparse.c" +#line 1584 "hl/src//H5LTparse.c" break; - case 44: /* fp_type: H5T_IEEE_F64BE_TOKEN */ -#line 150 "hl/src//H5LTparse.y" + case 45: /* fp_type: H5T_IEEE_F64BE_TOKEN */ +#line 157 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_IEEE_F64BE); } -#line 1558 "hl/src//H5LTparse.c" +#line 1590 "hl/src//H5LTparse.c" break; - case 45: /* fp_type: H5T_IEEE_F64LE_TOKEN */ -#line 151 "hl/src//H5LTparse.y" + case 46: /* fp_type: H5T_IEEE_F64LE_TOKEN */ +#line 158 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_IEEE_F64LE); } -#line 1564 "hl/src//H5LTparse.c" +#line 1596 "hl/src//H5LTparse.c" break; - case 46: /* fp_type: H5T_NATIVE_FLOAT16_TOKEN */ -#line 152 "hl/src//H5LTparse.y" + case 47: /* fp_type: H5T_NATIVE_FLOAT16_TOKEN */ +#line 159 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_NATIVE_FLOAT16); } -#line 1570 "hl/src//H5LTparse.c" +#line 1602 "hl/src//H5LTparse.c" break; - case 47: /* fp_type: H5T_NATIVE_FLOAT_TOKEN */ -#line 153 "hl/src//H5LTparse.y" + case 48: /* fp_type: H5T_NATIVE_FLOAT_TOKEN */ +#line 160 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_NATIVE_FLOAT); } -#line 1576 "hl/src//H5LTparse.c" +#line 1608 "hl/src//H5LTparse.c" break; - case 48: /* fp_type: H5T_NATIVE_DOUBLE_TOKEN */ -#line 154 "hl/src//H5LTparse.y" + case 49: /* fp_type: H5T_NATIVE_DOUBLE_TOKEN */ +#line 161 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_NATIVE_DOUBLE); } -#line 1582 "hl/src//H5LTparse.c" +#line 1614 "hl/src//H5LTparse.c" break; - case 49: /* fp_type: H5T_NATIVE_LDOUBLE_TOKEN */ -#line 155 "hl/src//H5LTparse.y" + case 50: /* fp_type: H5T_NATIVE_LDOUBLE_TOKEN */ +#line 162 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tcopy(H5T_NATIVE_LDOUBLE); } -#line 1588 "hl/src//H5LTparse.c" +#line 1620 "hl/src//H5LTparse.c" break; - case 50: /* $@1: %empty */ -#line 159 "hl/src//H5LTparse.y" + case 51: /* $@1: %empty */ +#line 166 "hl/src//H5LTparse.y" { csindex++; cmpd_stack[csindex].id = H5Tcreate(H5T_COMPOUND, 1); /*temporarily set size to 1*/ } -#line 1594 "hl/src//H5LTparse.c" +#line 1626 "hl/src//H5LTparse.c" break; - case 51: /* compound_type: H5T_COMPOUND_TOKEN $@1 '{' memb_list '}' */ -#line 161 "hl/src//H5LTparse.y" + case 52: /* compound_type: H5T_COMPOUND_TOKEN $@1 '{' memb_list '}' */ +#line 168 "hl/src//H5LTparse.y" { (yyval.hid) = cmpd_stack[csindex].id; cmpd_stack[csindex].id = 0; cmpd_stack[csindex].first_memb = 1; csindex--; } -#line 1604 "hl/src//H5LTparse.c" +#line 1636 "hl/src//H5LTparse.c" break; - case 54: /* $@2: %empty */ -#line 170 "hl/src//H5LTparse.y" + case 55: /* $@2: %empty */ +#line 177 "hl/src//H5LTparse.y" { cmpd_stack[csindex].is_field = 1; /*notify lexer a compound member is parsed*/ } -#line 1610 "hl/src//H5LTparse.c" +#line 1642 "hl/src//H5LTparse.c" break; - case 55: /* memb_def: ddl_type $@2 field_name field_offset ';' */ -#line 172 "hl/src//H5LTparse.y" + case 56: /* memb_def: ddl_type $@2 field_name field_offset ';' */ +#line 179 "hl/src//H5LTparse.y" { size_t origin_size, new_size; hid_t dtype_id = cmpd_stack[csindex].id; @@ -1674,108 +1706,168 @@ yyparse (void) new_size = H5Tget_size(dtype_id); } -#line 1649 "hl/src//H5LTparse.c" +#line 1681 "hl/src//H5LTparse.c" break; - case 56: /* field_name: STRING */ -#line 208 "hl/src//H5LTparse.y" + case 57: /* field_name: STRING */ +#line 215 "hl/src//H5LTparse.y" { (yyval.sval) = strdup(yylval.sval); free(yylval.sval); yylval.sval = NULL; } -#line 1659 "hl/src//H5LTparse.c" +#line 1691 "hl/src//H5LTparse.c" break; - case 57: /* field_offset: %empty */ -#line 215 "hl/src//H5LTparse.y" + case 58: /* field_offset: %empty */ +#line 222 "hl/src//H5LTparse.y" { (yyval.ival) = 0; } -#line 1665 "hl/src//H5LTparse.c" +#line 1697 "hl/src//H5LTparse.c" break; - case 58: /* field_offset: ':' offset */ -#line 217 "hl/src//H5LTparse.y" + case 59: /* field_offset: ':' offset */ +#line 224 "hl/src//H5LTparse.y" { (yyval.ival) = yylval.ival; } -#line 1671 "hl/src//H5LTparse.c" +#line 1703 "hl/src//H5LTparse.c" break; - case 60: /* $@3: %empty */ -#line 221 "hl/src//H5LTparse.y" + case 61: /* $@3: %empty */ +#line 228 "hl/src//H5LTparse.y" { asindex++; /*pushd onto the stack*/ } -#line 1677 "hl/src//H5LTparse.c" +#line 1709 "hl/src//H5LTparse.c" break; - case 61: /* array_type: H5T_ARRAY_TOKEN $@3 '{' dim_list ddl_type '}' */ -#line 223 "hl/src//H5LTparse.y" + case 62: /* array_type: H5T_ARRAY_TOKEN $@3 '{' dim_list ddl_type '}' */ +#line 230 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tarray_create2((yyvsp[-1].hid), arr_stack[asindex].ndims, arr_stack[asindex].dims); arr_stack[asindex].ndims = 0; asindex--; H5Tclose((yyvsp[-1].hid)); } -#line 1688 "hl/src//H5LTparse.c" +#line 1720 "hl/src//H5LTparse.c" break; - case 64: /* $@4: %empty */ -#line 233 "hl/src//H5LTparse.y" + case 65: /* $@4: %empty */ +#line 240 "hl/src//H5LTparse.y" { arr_stack[asindex].is_dim = 1; /*notice lexer of dimension size*/ } -#line 1694 "hl/src//H5LTparse.c" +#line 1726 "hl/src//H5LTparse.c" break; - case 65: /* $@5: %empty */ -#line 234 "hl/src//H5LTparse.y" + case 66: /* $@5: %empty */ +#line 241 "hl/src//H5LTparse.y" { unsigned ndims = arr_stack[asindex].ndims; arr_stack[asindex].dims[ndims] = (hsize_t)yylval.ival; arr_stack[asindex].ndims++; arr_stack[asindex].is_dim = 0; } -#line 1704 "hl/src//H5LTparse.c" +#line 1736 "hl/src//H5LTparse.c" break; - case 68: /* vlen_type: H5T_VLEN_TOKEN '{' ddl_type '}' */ -#line 245 "hl/src//H5LTparse.y" + case 69: /* vlen_type: H5T_VLEN_TOKEN '{' ddl_type '}' */ +#line 252 "hl/src//H5LTparse.y" { (yyval.hid) = H5Tvlen_create((yyvsp[-1].hid)); H5Tclose((yyvsp[-1].hid)); } -#line 1710 "hl/src//H5LTparse.c" +#line 1742 "hl/src//H5LTparse.c" + break; + + case 70: /* complex_type: H5T_NATIVE_FLOAT_COMPLEX_TOKEN */ +#line 255 "hl/src//H5LTparse.y" + { (yyval.hid) = H5Tcopy(H5T_NATIVE_FLOAT_COMPLEX); } +#line 1748 "hl/src//H5LTparse.c" + break; + + case 71: /* complex_type: H5T_NATIVE_DOUBLE_COMPLEX_TOKEN */ +#line 256 "hl/src//H5LTparse.y" + { (yyval.hid) = H5Tcopy(H5T_NATIVE_DOUBLE_COMPLEX); } +#line 1754 "hl/src//H5LTparse.c" + break; + + case 72: /* complex_type: H5T_NATIVE_LDOUBLE_COMPLEX_TOKEN */ +#line 257 "hl/src//H5LTparse.y" + { (yyval.hid) = H5Tcopy(H5T_NATIVE_LDOUBLE_COMPLEX); } +#line 1760 "hl/src//H5LTparse.c" + break; + + case 73: /* complex_type: H5T_COMPLEX_IEEE_F16LE_TOKEN */ +#line 258 "hl/src//H5LTparse.y" + { (yyval.hid) = H5Tcopy(H5T_COMPLEX_IEEE_F16LE); } +#line 1766 "hl/src//H5LTparse.c" + break; + + case 74: /* complex_type: H5T_COMPLEX_IEEE_F16BE_TOKEN */ +#line 259 "hl/src//H5LTparse.y" + { (yyval.hid) = H5Tcopy(H5T_COMPLEX_IEEE_F16BE); } +#line 1772 "hl/src//H5LTparse.c" break; - case 69: /* @6: %empty */ -#line 251 "hl/src//H5LTparse.y" + case 75: /* complex_type: H5T_COMPLEX_IEEE_F32LE_TOKEN */ +#line 260 "hl/src//H5LTparse.y" + { (yyval.hid) = H5Tcopy(H5T_COMPLEX_IEEE_F32LE); } +#line 1778 "hl/src//H5LTparse.c" + break; + + case 76: /* complex_type: H5T_COMPLEX_IEEE_F32BE_TOKEN */ +#line 261 "hl/src//H5LTparse.y" + { (yyval.hid) = H5Tcopy(H5T_COMPLEX_IEEE_F32BE); } +#line 1784 "hl/src//H5LTparse.c" + break; + + case 77: /* complex_type: H5T_COMPLEX_IEEE_F64LE_TOKEN */ +#line 262 "hl/src//H5LTparse.y" + { (yyval.hid) = H5Tcopy(H5T_COMPLEX_IEEE_F64LE); } +#line 1790 "hl/src//H5LTparse.c" + break; + + case 78: /* complex_type: H5T_COMPLEX_IEEE_F64BE_TOKEN */ +#line 263 "hl/src//H5LTparse.y" + { (yyval.hid) = H5Tcopy(H5T_COMPLEX_IEEE_F64BE); } +#line 1796 "hl/src//H5LTparse.c" + break; + + case 79: /* complex_type: H5T_COMPLEX_TOKEN '{' ddl_type '}' */ +#line 265 "hl/src//H5LTparse.y" + { (yyval.hid) = H5Tcomplex_create((yyvsp[-1].hid)); H5Tclose((yyvsp[-1].hid)); } +#line 1802 "hl/src//H5LTparse.c" + break; + + case 80: /* @6: %empty */ +#line 271 "hl/src//H5LTparse.y" { size_t size = (size_t)yylval.ival; (yyval.hid) = H5Tcreate(H5T_OPAQUE, size); } -#line 1719 "hl/src//H5LTparse.c" +#line 1811 "hl/src//H5LTparse.c" break; - case 70: /* $@7: %empty */ -#line 256 "hl/src//H5LTparse.y" + case 81: /* $@7: %empty */ +#line 276 "hl/src//H5LTparse.y" { H5Tset_tag((yyvsp[-3].hid), yylval.sval); free(yylval.sval); yylval.sval = NULL; } -#line 1729 "hl/src//H5LTparse.c" +#line 1821 "hl/src//H5LTparse.c" break; - case 71: /* opaque_type: H5T_OPAQUE_TOKEN '{' OPQ_SIZE_TOKEN opaque_size ';' @6 OPQ_TAG_TOKEN opaque_tag ';' $@7 '}' */ -#line 261 "hl/src//H5LTparse.y" + case 82: /* opaque_type: H5T_OPAQUE_TOKEN '{' OPQ_SIZE_TOKEN opaque_size ';' @6 OPQ_TAG_TOKEN opaque_tag ';' $@7 '}' */ +#line 281 "hl/src//H5LTparse.y" { (yyval.hid) = (yyvsp[-5].hid); } -#line 1735 "hl/src//H5LTparse.c" +#line 1827 "hl/src//H5LTparse.c" break; - case 74: /* $@8: %empty */ -#line 270 "hl/src//H5LTparse.y" + case 85: /* $@8: %empty */ +#line 290 "hl/src//H5LTparse.y" { if((yyvsp[-1].ival) == H5T_VARIABLE_TOKEN) is_variable = 1; else str_size = yylval.ival; } -#line 1746 "hl/src//H5LTparse.c" +#line 1838 "hl/src//H5LTparse.c" break; - case 75: /* $@9: %empty */ -#line 277 "hl/src//H5LTparse.y" + case 86: /* $@9: %empty */ +#line 297 "hl/src//H5LTparse.y" { if((yyvsp[-1].ival) == H5T_STR_NULLTERM_TOKEN) str_pad = H5T_STR_NULLTERM; @@ -1784,33 +1876,33 @@ yyparse (void) else if((yyvsp[-1].ival) == H5T_STR_SPACEPAD_TOKEN) str_pad = H5T_STR_SPACEPAD; } -#line 1759 "hl/src//H5LTparse.c" +#line 1851 "hl/src//H5LTparse.c" break; - case 76: /* $@10: %empty */ -#line 286 "hl/src//H5LTparse.y" + case 87: /* $@10: %empty */ +#line 306 "hl/src//H5LTparse.y" { if((yyvsp[-1].ival) == H5T_CSET_ASCII_TOKEN) str_cset = H5T_CSET_ASCII; else if((yyvsp[-1].ival) == H5T_CSET_UTF8_TOKEN) str_cset = H5T_CSET_UTF8; } -#line 1770 "hl/src//H5LTparse.c" +#line 1862 "hl/src//H5LTparse.c" break; - case 77: /* @11: %empty */ -#line 293 "hl/src//H5LTparse.y" + case 88: /* @11: %empty */ +#line 313 "hl/src//H5LTparse.y" { if((yyvsp[-1].hid) == H5T_C_S1_TOKEN) (yyval.hid) = H5Tcopy(H5T_C_S1); else if((yyvsp[-1].hid) == H5T_FORTRAN_S1_TOKEN) (yyval.hid) = H5Tcopy(H5T_FORTRAN_S1); } -#line 1781 "hl/src//H5LTparse.c" +#line 1873 "hl/src//H5LTparse.c" break; - case 78: /* string_type: H5T_STRING_TOKEN '{' STRSIZE_TOKEN strsize ';' $@8 STRPAD_TOKEN strpad ';' $@9 CSET_TOKEN cset ';' $@10 CTYPE_TOKEN ctype ';' @11 '}' */ -#line 300 "hl/src//H5LTparse.y" + case 89: /* string_type: H5T_STRING_TOKEN '{' STRSIZE_TOKEN strsize ';' $@8 STRPAD_TOKEN strpad ';' $@9 CSET_TOKEN cset ';' $@10 CTYPE_TOKEN ctype ';' @11 '}' */ +#line 320 "hl/src//H5LTparse.y" { hid_t str_id = (yyvsp[-1].hid); @@ -1827,82 +1919,82 @@ yyparse (void) (yyval.hid) = str_id; } -#line 1802 "hl/src//H5LTparse.c" +#line 1894 "hl/src//H5LTparse.c" break; - case 79: /* strsize: H5T_VARIABLE_TOKEN */ -#line 317 "hl/src//H5LTparse.y" + case 90: /* strsize: H5T_VARIABLE_TOKEN */ +#line 337 "hl/src//H5LTparse.y" {(yyval.ival) = H5T_VARIABLE_TOKEN;} -#line 1808 "hl/src//H5LTparse.c" +#line 1900 "hl/src//H5LTparse.c" break; - case 81: /* strpad: H5T_STR_NULLTERM_TOKEN */ -#line 320 "hl/src//H5LTparse.y" + case 92: /* strpad: H5T_STR_NULLTERM_TOKEN */ +#line 340 "hl/src//H5LTparse.y" {(yyval.ival) = H5T_STR_NULLTERM_TOKEN;} -#line 1814 "hl/src//H5LTparse.c" +#line 1906 "hl/src//H5LTparse.c" break; - case 82: /* strpad: H5T_STR_NULLPAD_TOKEN */ -#line 321 "hl/src//H5LTparse.y" + case 93: /* strpad: H5T_STR_NULLPAD_TOKEN */ +#line 341 "hl/src//H5LTparse.y" {(yyval.ival) = H5T_STR_NULLPAD_TOKEN;} -#line 1820 "hl/src//H5LTparse.c" +#line 1912 "hl/src//H5LTparse.c" break; - case 83: /* strpad: H5T_STR_SPACEPAD_TOKEN */ -#line 322 "hl/src//H5LTparse.y" + case 94: /* strpad: H5T_STR_SPACEPAD_TOKEN */ +#line 342 "hl/src//H5LTparse.y" {(yyval.ival) = H5T_STR_SPACEPAD_TOKEN;} -#line 1826 "hl/src//H5LTparse.c" +#line 1918 "hl/src//H5LTparse.c" break; - case 84: /* cset: H5T_CSET_ASCII_TOKEN */ -#line 324 "hl/src//H5LTparse.y" + case 95: /* cset: H5T_CSET_ASCII_TOKEN */ +#line 344 "hl/src//H5LTparse.y" {(yyval.ival) = H5T_CSET_ASCII_TOKEN;} -#line 1832 "hl/src//H5LTparse.c" +#line 1924 "hl/src//H5LTparse.c" break; - case 85: /* cset: H5T_CSET_UTF8_TOKEN */ -#line 325 "hl/src//H5LTparse.y" + case 96: /* cset: H5T_CSET_UTF8_TOKEN */ +#line 345 "hl/src//H5LTparse.y" {(yyval.ival) = H5T_CSET_UTF8_TOKEN;} -#line 1838 "hl/src//H5LTparse.c" +#line 1930 "hl/src//H5LTparse.c" break; - case 86: /* ctype: H5T_C_S1_TOKEN */ -#line 327 "hl/src//H5LTparse.y" + case 97: /* ctype: H5T_C_S1_TOKEN */ +#line 347 "hl/src//H5LTparse.y" {(yyval.hid) = H5T_C_S1_TOKEN;} -#line 1844 "hl/src//H5LTparse.c" +#line 1936 "hl/src//H5LTparse.c" break; - case 87: /* ctype: H5T_FORTRAN_S1_TOKEN */ -#line 328 "hl/src//H5LTparse.y" + case 98: /* ctype: H5T_FORTRAN_S1_TOKEN */ +#line 348 "hl/src//H5LTparse.y" {(yyval.hid) = H5T_FORTRAN_S1_TOKEN;} -#line 1850 "hl/src//H5LTparse.c" +#line 1942 "hl/src//H5LTparse.c" break; - case 88: /* $@12: %empty */ -#line 332 "hl/src//H5LTparse.y" + case 99: /* $@12: %empty */ +#line 352 "hl/src//H5LTparse.y" { is_enum = 1; enum_id = H5Tenum_create((yyvsp[-1].hid)); H5Tclose((yyvsp[-1].hid)); } -#line 1856 "hl/src//H5LTparse.c" +#line 1948 "hl/src//H5LTparse.c" break; - case 89: /* enum_type: H5T_ENUM_TOKEN '{' integer_type ';' $@12 enum_list '}' */ -#line 334 "hl/src//H5LTparse.y" + case 100: /* enum_type: H5T_ENUM_TOKEN '{' integer_type ';' $@12 enum_list '}' */ +#line 354 "hl/src//H5LTparse.y" { is_enum = 0; /*reset*/ (yyval.hid) = enum_id; } -#line 1862 "hl/src//H5LTparse.c" +#line 1954 "hl/src//H5LTparse.c" break; - case 92: /* $@13: %empty */ -#line 339 "hl/src//H5LTparse.y" + case 103: /* $@13: %empty */ +#line 359 "hl/src//H5LTparse.y" { is_enum_memb = 1; /*indicate member of enum*/ enum_memb_symbol = strdup(yylval.sval); free(yylval.sval); yylval.sval = NULL; } -#line 1873 "hl/src//H5LTparse.c" +#line 1965 "hl/src//H5LTparse.c" break; - case 93: /* enum_def: enum_symbol $@13 enum_val ';' */ -#line 346 "hl/src//H5LTparse.y" + case 104: /* enum_def: enum_symbol $@13 enum_val ';' */ +#line 366 "hl/src//H5LTparse.y" { char char_val=(char)yylval.ival; short short_val=(short)yylval.ival; @@ -1945,11 +2037,11 @@ yyparse (void) H5Tclose(super); H5Tclose(native); } -#line 1920 "hl/src//H5LTparse.c" +#line 2012 "hl/src//H5LTparse.c" break; -#line 1924 "hl/src//H5LTparse.c" +#line 2016 "hl/src//H5LTparse.c" default: break; } diff --git a/hl/src/H5LTparse.h b/hl/src/H5LTparse.h index be3c91f7fdb..0ac873895c3 100644 --- a/hl/src/H5LTparse.h +++ b/hl/src/H5LTparse.h @@ -91,28 +91,38 @@ extern int H5LTyydebug; H5T_NATIVE_FLOAT_TOKEN = 292, /* H5T_NATIVE_FLOAT_TOKEN */ H5T_NATIVE_DOUBLE_TOKEN = 293, /* H5T_NATIVE_DOUBLE_TOKEN */ H5T_NATIVE_LDOUBLE_TOKEN = 294, /* H5T_NATIVE_LDOUBLE_TOKEN */ - H5T_STRING_TOKEN = 295, /* H5T_STRING_TOKEN */ - STRSIZE_TOKEN = 296, /* STRSIZE_TOKEN */ - STRPAD_TOKEN = 297, /* STRPAD_TOKEN */ - CSET_TOKEN = 298, /* CSET_TOKEN */ - CTYPE_TOKEN = 299, /* CTYPE_TOKEN */ - H5T_VARIABLE_TOKEN = 300, /* H5T_VARIABLE_TOKEN */ - H5T_STR_NULLTERM_TOKEN = 301, /* H5T_STR_NULLTERM_TOKEN */ - H5T_STR_NULLPAD_TOKEN = 302, /* H5T_STR_NULLPAD_TOKEN */ - H5T_STR_SPACEPAD_TOKEN = 303, /* H5T_STR_SPACEPAD_TOKEN */ - H5T_CSET_ASCII_TOKEN = 304, /* H5T_CSET_ASCII_TOKEN */ - H5T_CSET_UTF8_TOKEN = 305, /* H5T_CSET_UTF8_TOKEN */ - H5T_C_S1_TOKEN = 306, /* H5T_C_S1_TOKEN */ - H5T_FORTRAN_S1_TOKEN = 307, /* H5T_FORTRAN_S1_TOKEN */ - H5T_OPAQUE_TOKEN = 308, /* H5T_OPAQUE_TOKEN */ - OPQ_SIZE_TOKEN = 309, /* OPQ_SIZE_TOKEN */ - OPQ_TAG_TOKEN = 310, /* OPQ_TAG_TOKEN */ - H5T_COMPOUND_TOKEN = 311, /* H5T_COMPOUND_TOKEN */ - H5T_ENUM_TOKEN = 312, /* H5T_ENUM_TOKEN */ - H5T_ARRAY_TOKEN = 313, /* H5T_ARRAY_TOKEN */ - H5T_VLEN_TOKEN = 314, /* H5T_VLEN_TOKEN */ - STRING = 315, /* STRING */ - NUMBER = 316 /* NUMBER */ + H5T_COMPLEX_IEEE_F16BE_TOKEN = 295, /* H5T_COMPLEX_IEEE_F16BE_TOKEN */ + H5T_COMPLEX_IEEE_F16LE_TOKEN = 296, /* H5T_COMPLEX_IEEE_F16LE_TOKEN */ + H5T_COMPLEX_IEEE_F32BE_TOKEN = 297, /* H5T_COMPLEX_IEEE_F32BE_TOKEN */ + H5T_COMPLEX_IEEE_F32LE_TOKEN = 298, /* H5T_COMPLEX_IEEE_F32LE_TOKEN */ + H5T_COMPLEX_IEEE_F64BE_TOKEN = 299, /* H5T_COMPLEX_IEEE_F64BE_TOKEN */ + H5T_COMPLEX_IEEE_F64LE_TOKEN = 300, /* H5T_COMPLEX_IEEE_F64LE_TOKEN */ + H5T_NATIVE_FLOAT_COMPLEX_TOKEN = 301, /* H5T_NATIVE_FLOAT_COMPLEX_TOKEN */ + H5T_NATIVE_DOUBLE_COMPLEX_TOKEN = 302, /* H5T_NATIVE_DOUBLE_COMPLEX_TOKEN */ + H5T_NATIVE_LDOUBLE_COMPLEX_TOKEN = 303, /* H5T_NATIVE_LDOUBLE_COMPLEX_TOKEN */ + H5T_STRING_TOKEN = 304, /* H5T_STRING_TOKEN */ + STRSIZE_TOKEN = 305, /* STRSIZE_TOKEN */ + STRPAD_TOKEN = 306, /* STRPAD_TOKEN */ + CSET_TOKEN = 307, /* CSET_TOKEN */ + CTYPE_TOKEN = 308, /* CTYPE_TOKEN */ + H5T_VARIABLE_TOKEN = 309, /* H5T_VARIABLE_TOKEN */ + H5T_STR_NULLTERM_TOKEN = 310, /* H5T_STR_NULLTERM_TOKEN */ + H5T_STR_NULLPAD_TOKEN = 311, /* H5T_STR_NULLPAD_TOKEN */ + H5T_STR_SPACEPAD_TOKEN = 312, /* H5T_STR_SPACEPAD_TOKEN */ + H5T_CSET_ASCII_TOKEN = 313, /* H5T_CSET_ASCII_TOKEN */ + H5T_CSET_UTF8_TOKEN = 314, /* H5T_CSET_UTF8_TOKEN */ + H5T_C_S1_TOKEN = 315, /* H5T_C_S1_TOKEN */ + H5T_FORTRAN_S1_TOKEN = 316, /* H5T_FORTRAN_S1_TOKEN */ + H5T_OPAQUE_TOKEN = 317, /* H5T_OPAQUE_TOKEN */ + OPQ_SIZE_TOKEN = 318, /* OPQ_SIZE_TOKEN */ + OPQ_TAG_TOKEN = 319, /* OPQ_TAG_TOKEN */ + H5T_COMPOUND_TOKEN = 320, /* H5T_COMPOUND_TOKEN */ + H5T_ENUM_TOKEN = 321, /* H5T_ENUM_TOKEN */ + H5T_ARRAY_TOKEN = 322, /* H5T_ARRAY_TOKEN */ + H5T_VLEN_TOKEN = 323, /* H5T_VLEN_TOKEN */ + H5T_COMPLEX_TOKEN = 324, /* H5T_COMPLEX_TOKEN */ + STRING = 325, /* STRING */ + NUMBER = 326 /* NUMBER */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -127,7 +137,7 @@ union YYSTYPE char *sval; /*for name string*/ hid_t hid; /*for hid_t token*/ -#line 131 "hl/src//H5LTparse.h" +#line 141 "hl/src//H5LTparse.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/hl/src/H5LTparse.y b/hl/src/H5LTparse.y index 97132a1df66..2d36af73b0c 100644 --- a/hl/src/H5LTparse.y +++ b/hl/src/H5LTparse.y @@ -83,6 +83,11 @@ static char* enum_memb_symbol; /*enum member symbol string*/ %token H5T_IEEE_F32BE_TOKEN H5T_IEEE_F32LE_TOKEN H5T_IEEE_F64BE_TOKEN H5T_IEEE_F64LE_TOKEN %token H5T_NATIVE_FLOAT16_TOKEN H5T_NATIVE_FLOAT_TOKEN H5T_NATIVE_DOUBLE_TOKEN H5T_NATIVE_LDOUBLE_TOKEN +%token H5T_COMPLEX_IEEE_F16BE_TOKEN H5T_COMPLEX_IEEE_F16LE_TOKEN +%token H5T_COMPLEX_IEEE_F32BE_TOKEN H5T_COMPLEX_IEEE_F32LE_TOKEN +%token H5T_COMPLEX_IEEE_F64BE_TOKEN H5T_COMPLEX_IEEE_F64LE_TOKEN +%token H5T_NATIVE_FLOAT_COMPLEX_TOKEN H5T_NATIVE_DOUBLE_COMPLEX_TOKEN H5T_NATIVE_LDOUBLE_COMPLEX_TOKEN + %token H5T_STRING_TOKEN STRSIZE_TOKEN STRPAD_TOKEN CSET_TOKEN CTYPE_TOKEN H5T_VARIABLE_TOKEN %token H5T_STR_NULLTERM_TOKEN H5T_STR_NULLPAD_TOKEN H5T_STR_SPACEPAD_TOKEN %token H5T_CSET_ASCII_TOKEN H5T_CSET_UTF8_TOKEN H5T_C_S1_TOKEN H5T_FORTRAN_S1_TOKEN @@ -93,6 +98,7 @@ static char* enum_memb_symbol; /*enum member symbol string*/ %token H5T_ENUM_TOKEN %token H5T_ARRAY_TOKEN %token H5T_VLEN_TOKEN +%token H5T_COMPLEX_TOKEN %token STRING %token NUMBER @@ -106,6 +112,7 @@ ddl_type : atomic_type | compound_type | array_type | vlen_type + | complex_type ; atomic_type : integer_type | fp_type @@ -245,6 +252,19 @@ vlen_type : H5T_VLEN_TOKEN '{' ddl_type '}' { $$ = H5Tvlen_create($3); H5Tclose($3); } ; +complex_type : H5T_NATIVE_FLOAT_COMPLEX_TOKEN { $$ = H5Tcopy(H5T_NATIVE_FLOAT_COMPLEX); } + | H5T_NATIVE_DOUBLE_COMPLEX_TOKEN { $$ = H5Tcopy(H5T_NATIVE_DOUBLE_COMPLEX); } + | H5T_NATIVE_LDOUBLE_COMPLEX_TOKEN { $$ = H5Tcopy(H5T_NATIVE_LDOUBLE_COMPLEX); } + | H5T_COMPLEX_IEEE_F16LE_TOKEN { $$ = H5Tcopy(H5T_COMPLEX_IEEE_F16LE); } + | H5T_COMPLEX_IEEE_F16BE_TOKEN { $$ = H5Tcopy(H5T_COMPLEX_IEEE_F16BE); } + | H5T_COMPLEX_IEEE_F32LE_TOKEN { $$ = H5Tcopy(H5T_COMPLEX_IEEE_F32LE); } + | H5T_COMPLEX_IEEE_F32BE_TOKEN { $$ = H5Tcopy(H5T_COMPLEX_IEEE_F32BE); } + | H5T_COMPLEX_IEEE_F64LE_TOKEN { $$ = H5Tcopy(H5T_COMPLEX_IEEE_F64LE); } + | H5T_COMPLEX_IEEE_F64BE_TOKEN { $$ = H5Tcopy(H5T_COMPLEX_IEEE_F64BE); } + | H5T_COMPLEX_TOKEN '{' ddl_type '}' + { $$ = H5Tcomplex_create($3); H5Tclose($3); } + ; + opaque_type : H5T_OPAQUE_TOKEN '{' OPQ_SIZE_TOKEN opaque_size ';' diff --git a/hl/test/test_lite.c b/hl/test/test_lite.c index 7d40e3deed1..d17ca14870f 100644 --- a/hl/test/test_lite.c +++ b/hl/test/test_lite.c @@ -1893,6 +1893,226 @@ test_complicated_compound(void) return -1; } +/*------------------------------------------------------------------------- + * subroutine for test_text_dtype(): test complex number datatypes + *------------------------------------------------------------------------- + */ +static int +test_complex(void) +{ + hid_t dtype; + H5T_class_t type_class; + + HL_TESTING3(" text for complex number types"); + +#ifdef H5_HAVE_COMPLEX_NUMBERS + if ((dtype = H5LTtext_to_dtype("H5T_NATIVE_FLOAT_COMPLEX\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_NATIVE_FLOAT_COMPLEX)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + if ((dtype = H5LTtext_to_dtype("H5T_NATIVE_DOUBLE_COMPLEX\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_NATIVE_DOUBLE_COMPLEX)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + if ((dtype = H5LTtext_to_dtype("H5T_NATIVE_LDOUBLE_COMPLEX\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_NATIVE_LDOUBLE_COMPLEX)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + if ((dtype = H5LTtext_to_dtype("H5T_COMPLEX { H5T_NATIVE_FLOAT }\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_NATIVE_FLOAT_COMPLEX)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + if ((dtype = H5LTtext_to_dtype("H5T_COMPLEX { H5T_NATIVE_DOUBLE }\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_NATIVE_DOUBLE_COMPLEX)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + if ((dtype = H5LTtext_to_dtype("H5T_COMPLEX { H5T_NATIVE_LDOUBLE }\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_NATIVE_LDOUBLE_COMPLEX)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; +#endif + + if ((dtype = H5LTtext_to_dtype("H5T_COMPLEX_IEEE_F16LE\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_COMPLEX_IEEE_F16LE)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + if ((dtype = H5LTtext_to_dtype("H5T_COMPLEX_IEEE_F16BE\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_COMPLEX_IEEE_F16BE)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + if ((dtype = H5LTtext_to_dtype("H5T_COMPLEX_IEEE_F32LE\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_COMPLEX_IEEE_F32LE)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + if ((dtype = H5LTtext_to_dtype("H5T_COMPLEX_IEEE_F32BE\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_COMPLEX_IEEE_F32BE)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + if ((dtype = H5LTtext_to_dtype("H5T_COMPLEX_IEEE_F64LE\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_COMPLEX_IEEE_F64LE)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + if ((dtype = H5LTtext_to_dtype("H5T_COMPLEX_IEEE_F64BE\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_COMPLEX_IEEE_F64BE)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + if ((dtype = H5LTtext_to_dtype("H5T_COMPLEX { H5T_IEEE_F16LE }\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_COMPLEX_IEEE_F16LE)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + if ((dtype = H5LTtext_to_dtype("H5T_COMPLEX { H5T_IEEE_F16BE }\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_COMPLEX_IEEE_F16BE)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + if ((dtype = H5LTtext_to_dtype("H5T_COMPLEX { H5T_IEEE_F32LE }\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_COMPLEX_IEEE_F32LE)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + if ((dtype = H5LTtext_to_dtype("H5T_COMPLEX { H5T_IEEE_F32BE }\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_COMPLEX_IEEE_F32BE)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + if ((dtype = H5LTtext_to_dtype("H5T_COMPLEX { H5T_IEEE_F64LE }\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_COMPLEX_IEEE_F64LE)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + if ((dtype = H5LTtext_to_dtype("H5T_COMPLEX { H5T_IEEE_F64BE }\n", H5LT_DDL)) < 0) + goto out; + if ((type_class = H5Tget_class(dtype)) < 0) + goto out; + if (type_class != H5T_COMPLEX) + goto out; + if (!H5Tequal(dtype, H5T_COMPLEX_IEEE_F64BE)) + goto out; + if (H5Tclose(dtype) < 0) + goto out; + + PASSED(); + return 0; + +out: + H5_FAILED(); + return -1; +} + /*------------------------------------------------------------------------- * test H5LTtext_to_dtype function *------------------------------------------------------------------------- @@ -1933,6 +2153,9 @@ test_text_dtype(void) if (test_complicated_compound() < 0) goto out; + if (test_complex() < 0) + goto out; + return 0; out: diff --git a/hl/tools/h5watch/h5watch.c b/hl/tools/h5watch/h5watch.c index cfa6bae857d..594e8cbbcf7 100644 --- a/hl/tools/h5watch/h5watch.c +++ b/hl/tools/h5watch/h5watch.c @@ -94,17 +94,21 @@ static struct h5_long_options l_opts[] = {{"help", no_arg, 'h'}, {"hel", static herr_t doprint(hid_t did, const hsize_t *start, const hsize_t *block, int rank) { - h5tools_context_t ctx; /* print context */ - h5tool_format_t info; /* Format info for the tools library */ - static char fmt_ldouble[16]; /* Format info */ - static char fmt_double[16], fmt_float[16]; /* Format info */ - struct subset_t subset; /* Subsetting info */ - hsize_t ss_start[H5S_MAX_RANK]; /* Info for hyperslab */ - hsize_t ss_stride[H5S_MAX_RANK]; /* Info for hyperslab */ - hsize_t ss_block[H5S_MAX_RANK]; /* Info for hyperslab */ - hsize_t ss_count[H5S_MAX_RANK]; /* Info for hyperslab */ - int i; /* Local index variable */ - herr_t ret_value = SUCCEED; /* Return value */ + h5tools_context_t ctx; /* print context */ + h5tool_format_t info; /* Format info for the tools library */ + static char fmt_ldouble[16]; /* Format info */ + static char fmt_double[16]; /* Format info */ + static char fmt_float[16]; /* Format info */ + static char fmt_ldouble_complex[32]; /* Format info */ + static char fmt_double_complex[32]; /* Format info */ + static char fmt_float_complex[16]; /* Format info */ + struct subset_t subset; /* Subsetting info */ + hsize_t ss_start[H5S_MAX_RANK]; /* Info for hyperslab */ + hsize_t ss_stride[H5S_MAX_RANK]; /* Info for hyperslab */ + hsize_t ss_block[H5S_MAX_RANK]; /* Info for hyperslab */ + hsize_t ss_count[H5S_MAX_RANK]; /* Info for hyperslab */ + int i; /* Local index variable */ + herr_t ret_value = SUCCEED; /* Return value */ /* Subsetting information for the tools library printing routines */ subset.start.data = ss_start; @@ -176,8 +180,14 @@ doprint(hid_t did, const hsize_t *start, const hsize_t *block, int rank) info.fmt_float = fmt_float; snprintf(fmt_double, sizeof(fmt_double), "%%1.%dg", DBL_DIG); info.fmt_double = fmt_double; - snprintf(fmt_ldouble, sizeof(fmt_ldouble), "%%1.%dLg", DBL_DIG); + snprintf(fmt_ldouble, sizeof(fmt_ldouble), "%%1.%dLg", LDBL_DIG); info.fmt_ldouble = fmt_ldouble; + snprintf(fmt_float_complex, sizeof(fmt_float_complex), "%%1.%dg%%+1.%dgi", FLT_DIG, FLT_DIG); + info.fmt_float_complex = fmt_float_complex; + snprintf(fmt_double_complex, sizeof(fmt_double_complex), "%%1.%dg%%+1.%dgi", DBL_DIG, DBL_DIG); + info.fmt_double_complex = fmt_double_complex; + snprintf(fmt_ldouble_complex, sizeof(fmt_ldouble_complex), "%%1.%dLg%%+1.%dLgi", LDBL_DIG, LDBL_DIG); + info.fmt_ldouble_complex = fmt_ldouble_complex; info.dset_format = "DSET-%s "; info.dset_hidefileno = 0; diff --git a/java/src/hdf/hdf5lib/H5.java b/java/src/hdf/hdf5lib/H5.java index 53350eb7a87..fe475611bc8 100644 --- a/java/src/hdf/hdf5lib/H5.java +++ b/java/src/hdf/hdf5lib/H5.java @@ -13747,6 +13747,33 @@ public synchronized static native void H5Tcommit_anon(long loc_id, long type_id, public synchronized static native void H5Tcompiler_conv(long src_id, long dst_id) throws HDF5LibraryException; + /** + * @ingroup JH5T + * + * H5Tcomplex_create creates a new complex number datatype object. + * + * @param base_id + * IN: Datatype identifier for the complex number base datatype. + * Must be a floating-point datatype. + * + * @return a valid datatype identifier + * + * @exception HDF5LibraryException + * Error from the HDF5 Library. + **/ + public static long H5Tcomplex_create(long base_id) throws HDF5LibraryException + { + long id = _H5Tcomplex_create(base_id); + if (id > 0) { + log.trace("OPEN_IDS: H5Tcomplex_create add {}", id); + OPEN_IDS.add(id); + log.trace("OPEN_IDS: {}", OPEN_IDS.size()); + } + return id; + } + + private synchronized static native long _H5Tcomplex_create(long base_id) throws HDF5LibraryException; + /** * @ingroup JH5T * @@ -14250,6 +14277,8 @@ else if (HDF5Constants.H5T_VLEN == class_id) /* Variable-Length types */ retValue = "H5T_VLEN"; else if (HDF5Constants.H5T_ARRAY == class_id) /* Array types */ retValue = "H5T_ARRAY"; + else if (HDF5Constants.H5T_COMPLEX == class_id) /* Complex number types */ + retValue = "H5T_COMPLEX"; else retValue = "H5T_NO_CLASS"; diff --git a/java/src/hdf/hdf5lib/HDF5Constants.java b/java/src/hdf/hdf5lib/HDF5Constants.java index acc6d7d7b18..7ace14f8c2f 100644 --- a/java/src/hdf/hdf5lib/HDF5Constants.java +++ b/java/src/hdf/hdf5lib/HDF5Constants.java @@ -1041,6 +1041,8 @@ public class HDF5Constants { /** */ public static final long H5T_C_S1 = H5T_C_S1(); /** */ + public static final int H5T_COMPLEX = H5T_COMPLEX(); + /** */ public static final int H5T_COMPOUND = H5T_COMPOUND(); /** */ public static final int H5T_CONV_CONV = H5T_CONV_CONV(); @@ -1049,6 +1051,18 @@ public class HDF5Constants { /** */ public static final int H5T_CONV_INIT = H5T_CONV_INIT(); /** */ + public static final long H5T_COMPLEX_IEEE_F16BE = H5T_COMPLEX_IEEE_F16BE(); + /** */ + public static final long H5T_COMPLEX_IEEE_F16LE = H5T_COMPLEX_IEEE_F16LE(); + /** */ + public static final long H5T_COMPLEX_IEEE_F32BE = H5T_COMPLEX_IEEE_F32BE(); + /** */ + public static final long H5T_COMPLEX_IEEE_F32LE = H5T_COMPLEX_IEEE_F32LE(); + /** */ + public static final long H5T_COMPLEX_IEEE_F64BE = H5T_COMPLEX_IEEE_F64BE(); + /** */ + public static final long H5T_COMPLEX_IEEE_F64LE = H5T_COMPLEX_IEEE_F64LE(); + /** */ public static final int H5T_CSET_ERROR = H5T_CSET_ERROR(); /** */ public static final int H5T_CSET_ASCII = H5T_CSET_ASCII(); @@ -1177,10 +1191,14 @@ public class HDF5Constants { /** */ public static final long H5T_NATIVE_DOUBLE = H5T_NATIVE_DOUBLE(); /** */ + public static final long H5T_NATIVE_DOUBLE_COMPLEX = H5T_NATIVE_DOUBLE_COMPLEX(); + /** */ public static final long H5T_NATIVE_FLOAT = H5T_NATIVE_FLOAT(); /** */ public static final long H5T_NATIVE_FLOAT16 = H5T_NATIVE_FLOAT16(); /** */ + public static final long H5T_NATIVE_FLOAT_COMPLEX = H5T_NATIVE_FLOAT_COMPLEX(); + /** */ public static final long H5T_NATIVE_HADDR = H5T_NATIVE_HADDR(); /** */ public static final long H5T_NATIVE_HBOOL = H5T_NATIVE_HBOOL(); @@ -1223,6 +1241,8 @@ public class HDF5Constants { /** */ public static final long H5T_NATIVE_LONG = H5T_NATIVE_LONG(); /** */ + public static final long H5T_NATIVE_LDOUBLE_COMPLEX = H5T_NATIVE_LDOUBLE_COMPLEX(); + /** */ public static final long H5T_NATIVE_OPAQUE = H5T_NATIVE_OPAQUE(); /** */ public static final long H5T_NATIVE_SCHAR = H5T_NATIVE_SCHAR(); @@ -2532,6 +2552,8 @@ public class HDF5Constants { private static native final long H5T_C_S1(); + private static native final int H5T_COMPLEX(); + private static native final int H5T_COMPOUND(); private static native final int H5T_CONV_CONV(); @@ -2540,6 +2562,18 @@ public class HDF5Constants { private static native final int H5T_CONV_INIT(); + private static native final long H5T_COMPLEX_IEEE_F16BE(); + + private static native final long H5T_COMPLEX_IEEE_F16LE(); + + private static native final long H5T_COMPLEX_IEEE_F32BE(); + + private static native final long H5T_COMPLEX_IEEE_F32LE(); + + private static native final long H5T_COMPLEX_IEEE_F64BE(); + + private static native final long H5T_COMPLEX_IEEE_F64LE(); + private static native final int H5T_CSET_ERROR(); private static native final int H5T_CSET_ASCII(); @@ -2668,10 +2702,14 @@ public class HDF5Constants { private static native final long H5T_NATIVE_DOUBLE(); + private static native final long H5T_NATIVE_DOUBLE_COMPLEX(); + private static native final long H5T_NATIVE_FLOAT(); private static native final long H5T_NATIVE_FLOAT16(); + private static native final long H5T_NATIVE_FLOAT_COMPLEX(); + private static native final long H5T_NATIVE_HADDR(); private static native final long H5T_NATIVE_HBOOL(); @@ -2714,6 +2752,8 @@ public class HDF5Constants { private static native final long H5T_NATIVE_LONG(); + private static native final long H5T_NATIVE_LDOUBLE_COMPLEX(); + private static native final long H5T_NATIVE_OPAQUE(); private static native final long H5T_NATIVE_SCHAR(); diff --git a/java/src/jni/h5Constants.c b/java/src/jni/h5Constants.c index 984ed937967..c9fc5c142eb 100644 --- a/java/src/jni/h5Constants.c +++ b/java/src/jni/h5Constants.c @@ -2537,6 +2537,11 @@ Java_hdf_hdf5lib_HDF5Constants_H5T_1C_1S1(JNIEnv *env, jclass cls) return H5T_C_S1; } JNIEXPORT jint JNICALL +Java_hdf_hdf5lib_HDF5Constants_H5T_1COMPLEX(JNIEnv *env, jclass cls) +{ + return H5T_COMPLEX; +} +JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1COMPOUND(JNIEnv *env, jclass cls) { return H5T_COMPOUND; @@ -2556,6 +2561,36 @@ Java_hdf_hdf5lib_HDF5Constants_H5T_1CONV_1INIT(JNIEnv *env, jclass cls) { return H5T_CONV_INIT; } +JNIEXPORT jlong JNICALL +Java_hdf_hdf5lib_HDF5Constants_H5T_1COMPLEX_1IEEE_1F16BE(JNIEnv *env, jclass cls) +{ + return H5T_COMPLEX_IEEE_F16BE; +} +JNIEXPORT jlong JNICALL +Java_hdf_hdf5lib_HDF5Constants_H5T_1COMPLEX_1IEEE_1F16LE(JNIEnv *env, jclass cls) +{ + return H5T_COMPLEX_IEEE_F16LE; +} +JNIEXPORT jlong JNICALL +Java_hdf_hdf5lib_HDF5Constants_H5T_1COMPLEX_1IEEE_1F32BE(JNIEnv *env, jclass cls) +{ + return H5T_COMPLEX_IEEE_F32BE; +} +JNIEXPORT jlong JNICALL +Java_hdf_hdf5lib_HDF5Constants_H5T_1COMPLEX_1IEEE_1F32LE(JNIEnv *env, jclass cls) +{ + return H5T_COMPLEX_IEEE_F32LE; +} +JNIEXPORT jlong JNICALL +Java_hdf_hdf5lib_HDF5Constants_H5T_1COMPLEX_1IEEE_1F64BE(JNIEnv *env, jclass cls) +{ + return H5T_COMPLEX_IEEE_F64BE; +} +JNIEXPORT jlong JNICALL +Java_hdf_hdf5lib_HDF5Constants_H5T_1COMPLEX_1IEEE_1F64LE(JNIEnv *env, jclass cls) +{ + return H5T_COMPLEX_IEEE_F64LE; +} JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1ERROR(JNIEnv *env, jclass cls) { @@ -2877,6 +2912,11 @@ Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1DOUBLE(JNIEnv *env, jclass cls) return H5T_NATIVE_DOUBLE; } JNIEXPORT jlong JNICALL +Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1DOUBLE_1COMPLEX(JNIEnv *env, jclass cls) +{ + return H5T_NATIVE_DOUBLE_COMPLEX; +} +JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1FLOAT(JNIEnv *env, jclass cls) { return H5T_NATIVE_FLOAT; @@ -2887,6 +2927,11 @@ Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1FLOAT16(JNIEnv *env, jclass cls) return H5T_NATIVE_FLOAT16; } JNIEXPORT jlong JNICALL +Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1FLOAT_1COMPLEX(JNIEnv *env, jclass cls) +{ + return H5T_NATIVE_FLOAT_COMPLEX; +} +JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1HADDR(JNIEnv *env, jclass cls) { return H5T_NATIVE_HADDR; @@ -2992,6 +3037,11 @@ Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1LONG(JNIEnv *env, jclass cls) return H5T_NATIVE_LONG; } JNIEXPORT jlong JNICALL +Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1LDOUBLE_1COMPLEX(JNIEnv *env, jclass cls) +{ + return H5T_NATIVE_LDOUBLE_COMPLEX; +} +JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1OPAQUE(JNIEnv *env, jclass cls) { return H5T_NATIVE_OPAQUE; diff --git a/java/src/jni/h5aImp.c b/java/src/jni/h5aImp.c index 47388b1b884..b6447e51eea 100644 --- a/java/src/jni/h5aImp.c +++ b/java/src/jni/h5aImp.c @@ -1237,12 +1237,13 @@ Java_hdf_hdf5lib_H5_H5Aread_1VLStrings(JNIEnv *env, jclass clss, jlong attr_id, jobjectArray buf) { H5T_class_t type_class; - htri_t isStr = 0; - htri_t isVlenStr = 0; - htri_t isComplex = 0; - htri_t isComplex2 = 0; - hid_t nested_tid = H5I_INVALID_HID; - herr_t status = FAIL; + htri_t isStr = 0; + htri_t isVlenStr = 0; + htri_t isCompound = 0; + htri_t isVlen = 0; + hid_t nested_tid = H5I_INVALID_HID; + bool isComposite = false; + herr_t status = FAIL; UNUSED(clss); @@ -1266,13 +1267,13 @@ Java_hdf_hdf5lib_H5_H5Aread_1VLStrings(JNIEnv *env, jclass clss, jlong attr_id, if ((nested_tid = H5Tget_member_type((hid_t)mem_type_id, i)) < 0) H5_LIBRARY_ERROR(ENVONLY); - if ((isComplex = H5Tdetect_class((hid_t)nested_tid, H5T_COMPOUND)) < 0) + if ((isCompound = H5Tdetect_class((hid_t)nested_tid, H5T_COMPOUND)) < 0) H5_LIBRARY_ERROR(ENVONLY); - if ((isComplex2 = H5Tdetect_class((hid_t)nested_tid, H5T_VLEN)) < 0) + if ((isVlen = H5Tdetect_class((hid_t)nested_tid, H5T_VLEN)) < 0) H5_LIBRARY_ERROR(ENVONLY); - isComplex = isComplex || isComplex2; + isComposite = isCompound || isVlen; if (H5Tclose(nested_tid) < 0) H5_LIBRARY_ERROR(ENVONLY); @@ -1283,7 +1284,7 @@ Java_hdf_hdf5lib_H5_H5Aread_1VLStrings(JNIEnv *env, jclass clss, jlong attr_id, isVlenStr = 1; /* Strings created by H5Tvlen_create(H5T_C_S1) */ } - if (!isStr || isComplex || isVlenStr) { + if (!isStr || isComposite || isVlenStr) { if ((status = H5AreadVL_asstr(env, (hid_t)attr_id, (hid_t)mem_type_id, buf)) < 0) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); } @@ -1441,12 +1442,13 @@ Java_hdf_hdf5lib_H5_H5Awrite_1VLStrings(JNIEnv *env, jclass clss, jlong attr_id, jobjectArray buf) { H5T_class_t type_class; - htri_t isStr = 0; - htri_t isVlenStr = 0; - htri_t isComplex = 0; - htri_t isComplex2 = 0; - hid_t nested_tid = H5I_INVALID_HID; - herr_t status = FAIL; + htri_t isStr = 0; + htri_t isVlenStr = 0; + htri_t isCompound = 0; + htri_t isVlen = 0; + hid_t nested_tid = H5I_INVALID_HID; + bool isComposite = false; + herr_t status = FAIL; UNUSED(clss); @@ -1470,13 +1472,13 @@ Java_hdf_hdf5lib_H5_H5Awrite_1VLStrings(JNIEnv *env, jclass clss, jlong attr_id, if ((nested_tid = H5Tget_member_type((hid_t)mem_type_id, i)) < 0) H5_LIBRARY_ERROR(ENVONLY); - if ((isComplex = H5Tdetect_class((hid_t)nested_tid, H5T_COMPOUND)) < 0) + if ((isCompound = H5Tdetect_class((hid_t)nested_tid, H5T_COMPOUND)) < 0) H5_LIBRARY_ERROR(ENVONLY); - if ((isComplex2 = H5Tdetect_class((hid_t)nested_tid, H5T_VLEN)) < 0) + if ((isVlen = H5Tdetect_class((hid_t)nested_tid, H5T_VLEN)) < 0) H5_LIBRARY_ERROR(ENVONLY); - isComplex = isComplex || isComplex2; + isComposite = isCompound || isVlen; if (H5Tclose(nested_tid) < 0) H5_LIBRARY_ERROR(ENVONLY); @@ -1487,7 +1489,7 @@ Java_hdf_hdf5lib_H5_H5Awrite_1VLStrings(JNIEnv *env, jclass clss, jlong attr_id, isVlenStr = 1; /* Strings created by H5Tvlen_create(H5T_C_S1) */ } - if (!isStr || isComplex || isVlenStr) { + if (!isStr || isComposite || isVlenStr) { if ((status = H5AwriteVL_asstr(env, (hid_t)attr_id, (hid_t)mem_type_id, buf)) < 0) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); } diff --git a/java/src/jni/h5dImp.c b/java/src/jni/h5dImp.c index 405c471b9f9..5dba7a85d93 100644 --- a/java/src/jni/h5dImp.c +++ b/java/src/jni/h5dImp.c @@ -1253,12 +1253,13 @@ Java_hdf_hdf5lib_H5_H5Dread_1VLStrings(JNIEnv *env, jclass clss, jlong dataset_i jobjectArray buf) { H5T_class_t type_class; - htri_t isStr = 0; - htri_t isVlenStr = 0; - htri_t isComplex = 0; - htri_t isComplex2 = 0; - hid_t nested_tid = H5I_INVALID_HID; - herr_t status = FAIL; + htri_t isStr = 0; + htri_t isVlenStr = 0; + htri_t isCompound = 0; + htri_t isVlen = 0; + hid_t nested_tid = H5I_INVALID_HID; + bool isComposite = false; + herr_t status = FAIL; UNUSED(clss); @@ -1282,13 +1283,13 @@ Java_hdf_hdf5lib_H5_H5Dread_1VLStrings(JNIEnv *env, jclass clss, jlong dataset_i if ((nested_tid = H5Tget_member_type((hid_t)mem_type_id, i)) < 0) H5_LIBRARY_ERROR(ENVONLY); - if ((isComplex = H5Tdetect_class((hid_t)nested_tid, H5T_COMPOUND)) < 0) + if ((isCompound = H5Tdetect_class((hid_t)nested_tid, H5T_COMPOUND)) < 0) H5_LIBRARY_ERROR(ENVONLY); - if ((isComplex2 = H5Tdetect_class((hid_t)nested_tid, H5T_VLEN)) < 0) + if ((isVlen = H5Tdetect_class((hid_t)nested_tid, H5T_VLEN)) < 0) H5_LIBRARY_ERROR(ENVONLY); - isComplex = isComplex || isComplex2; + isComposite = isCompound || isVlen; if (H5Tclose(nested_tid) < 0) H5_LIBRARY_ERROR(ENVONLY); @@ -1299,7 +1300,7 @@ Java_hdf_hdf5lib_H5_H5Dread_1VLStrings(JNIEnv *env, jclass clss, jlong dataset_i isVlenStr = 1; /* Strings created by H5Tvlen_create(H5T_C_S1) */ } - if (!isStr || isComplex || isVlenStr) { + if (!isStr || isComposite || isVlenStr) { if ((status = H5DreadVL_asstr(env, (hid_t)dataset_id, (hid_t)mem_type_id, (hid_t)mem_space_id, (hid_t)file_space_id, (hid_t)xfer_plist_id, buf)) < 0) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); @@ -1478,12 +1479,13 @@ Java_hdf_hdf5lib_H5_H5Dwrite_1VLStrings(JNIEnv *env, jclass clss, jlong dataset_ jobjectArray buf) { H5T_class_t type_class; - htri_t isStr = 0; - htri_t isVlenStr = 0; - htri_t isComplex = 0; - htri_t isComplex2 = 0; - hid_t nested_tid = H5I_INVALID_HID; - herr_t status = FAIL; + htri_t isStr = 0; + htri_t isVlenStr = 0; + htri_t isCompound = 0; + htri_t isVlen = 0; + hid_t nested_tid = H5I_INVALID_HID; + bool isComposite = false; + herr_t status = FAIL; UNUSED(clss); @@ -1507,13 +1509,13 @@ Java_hdf_hdf5lib_H5_H5Dwrite_1VLStrings(JNIEnv *env, jclass clss, jlong dataset_ if ((nested_tid = H5Tget_member_type((hid_t)mem_type_id, i)) < 0) H5_LIBRARY_ERROR(ENVONLY); - if ((isComplex = H5Tdetect_class((hid_t)nested_tid, H5T_COMPOUND)) < 0) + if ((isCompound = H5Tdetect_class((hid_t)nested_tid, H5T_COMPOUND)) < 0) H5_LIBRARY_ERROR(ENVONLY); - if ((isComplex2 = H5Tdetect_class((hid_t)nested_tid, H5T_VLEN)) < 0) + if ((isVlen = H5Tdetect_class((hid_t)nested_tid, H5T_VLEN)) < 0) H5_LIBRARY_ERROR(ENVONLY); - isComplex = isComplex || isComplex2; + isComposite = isCompound || isVlen; if (H5Tclose(nested_tid) < 0) H5_LIBRARY_ERROR(ENVONLY); @@ -1524,7 +1526,7 @@ Java_hdf_hdf5lib_H5_H5Dwrite_1VLStrings(JNIEnv *env, jclass clss, jlong dataset_ isVlenStr = 1; /* Strings created by H5Tvlen_create(H5T_C_S1) */ } - if (!isStr || isComplex || isVlenStr) { + if (!isStr || isComposite || isVlenStr) { if ((status = H5DwriteVL_asstr(env, (hid_t)dataset_id, (hid_t)mem_type_id, (hid_t)mem_space_id, (hid_t)file_space_id, (hid_t)xfer_plist_id, buf)) < 0) CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); diff --git a/java/src/jni/h5tImp.c b/java/src/jni/h5tImp.c index 7512f8214b1..039db7b9053 100644 --- a/java/src/jni/h5tImp.c +++ b/java/src/jni/h5tImp.c @@ -1641,6 +1641,25 @@ Java_hdf_hdf5lib_H5_H5Tget_1array_1dims2(JNIEnv *env, jclass clss, jlong type_id return (jint)ndims; } /* end Java_hdf_hdf5lib_H5_H5Tget_1array_1dims2 */ +/* + * Class: hdf_hdf5lib_H5 + * Method: _H5Tcomplex_create + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL +Java_hdf_hdf5lib_H5__1H5Tcomplex_1create(JNIEnv *env, jclass clss, jlong base_id) +{ + hid_t retVal = H5I_INVALID_HID; + + UNUSED(clss); + + if ((retVal = H5Tcomplex_create((hid_t)base_id)) < 0) + H5_LIBRARY_ERROR(ENVONLY); + +done: + return (jlong)retVal; +} /* end Java_hdf_hdf5lib_H5__1H5Tcomplex_1create */ + /* * Class: hdf_hdf5lib_H5 * Method: H5Tconvert diff --git a/java/src/jni/h5tImp.h b/java/src/jni/h5tImp.h index 0d45cc10fa9..dc3f6f939f5 100644 --- a/java/src/jni/h5tImp.h +++ b/java/src/jni/h5tImp.h @@ -479,6 +479,13 @@ JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Tarray_1create2(JNIEnv *, jclass */ JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1array_1dims2(JNIEnv *, jclass, jlong, jlongArray); +/* + * Class: hdf_hdf5lib_H5 + * Method: _H5Tcomplex_create + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Tcomplex_1create(JNIEnv *, jclass, jlong); + /* * Class: hdf_hdf5lib_H5 * Method: H5Tconvert diff --git a/java/src/jni/h5util.c b/java/src/jni/h5util.c index 2ceb05258b5..cc08e33ab70 100644 --- a/java/src/jni/h5util.c +++ b/java/src/jni/h5util.c @@ -614,6 +614,43 @@ h5str_convert(JNIEnv *env, char **in_str, hid_t container, hid_t tid, void *out_ break; } + case H5T_COMPLEX: { + size_t baseTypeSize; + + if ((mtid = H5Tget_super(tid)) < 0) + H5_LIBRARY_ERROR(ENVONLY); + + if (!(baseTypeSize = H5Tget_size(mtid))) + H5_LIBRARY_ERROR(ENVONLY); + + if (NULL == (cptr = calloc(1, typeSize))) + H5_OUT_OF_MEMORY_ERROR(ENVONLY, "h5str_convert: failed to allocate array buffer"); + + /* Convert real part */ + if (!(h5str_convert(ENVONLY, &this_str, container, mtid, out_buf, 0))) { + CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); + goto done; + } + + /* Skip any whitespace */ + while (*this_str == ' ') + this_str++; + + /* Convert imaginary part */ + if (!(h5str_convert(ENVONLY, &this_str, container, mtid, out_buf, baseTypeSize))) { + CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); + goto done; + } + + if (H5Tclose(mtid) < 0) + H5_LIBRARY_ERROR(ENVONLY); + mtid = H5I_INVALID_HID; + + retVal = typeSize; + + break; + } + case H5T_NCLASSES: case H5T_NO_CLASS: { H5_BAD_ARGUMENT_ERROR(ENVONLY, "h5str_convert: invalid datatype class"); @@ -1476,6 +1513,48 @@ h5str_sprintf(JNIEnv *env, h5str_t *out_str, hid_t container, hid_t tid, void *i break; } + case H5T_COMPLEX: { + h5str_t real_part, imag_part; + size_t baseSize; + + h5str_new(&real_part, 128); + h5str_new(&imag_part, 128); + + /* Get the base datatype for the complex number type */ + if ((mtid = H5Tget_super(tid)) < 0) + H5_LIBRARY_ERROR(ENVONLY); + + if (!(baseSize = H5Tget_size(mtid))) + H5_LIBRARY_ERROR(ENVONLY); + + if (!h5str_sprintf(ENVONLY, &real_part, container, mtid, cptr, expand_data)) + CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); + if (!h5str_sprintf(ENVONLY, &imag_part, container, mtid, cptr + baseSize, expand_data)) + CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); + + if (!h5str_append(out_str, real_part.s)) + H5_ASSERTION_ERROR(ENVONLY, "Unable to append string."); + + if (NULL == strstr(imag_part.s, "-")) + if (!h5str_append(out_str, "+")) + H5_ASSERTION_ERROR(ENVONLY, "Unable to append string."); + + if (!h5str_append(out_str, imag_part.s)) + H5_ASSERTION_ERROR(ENVONLY, "Unable to append string."); + + if (!h5str_append(out_str, "i")) + H5_ASSERTION_ERROR(ENVONLY, "Unable to append string."); + + if (H5Tclose(mtid) < 0) + H5_LIBRARY_ERROR(ENVONLY); + mtid = H5I_INVALID_HID; + + h5str_free(&real_part); + h5str_free(&imag_part); + + break; + } + case H5T_NO_CLASS: case H5T_NCLASSES: { H5_BAD_ARGUMENT_ERROR(ENVONLY, "h5str_sprintf: invalid datatype class"); @@ -2110,6 +2189,17 @@ h5str_get_little_endian_type(hid_t tid) break; } + case H5T_COMPLEX: { + if (size == 4) + p_type = H5Tcopy(H5T_COMPLEX_IEEE_F16LE); + else if (size == 8) + p_type = H5Tcopy(H5T_COMPLEX_IEEE_F32LE); + else if (size == 16) + p_type = H5Tcopy(H5T_COMPLEX_IEEE_F64LE); + + break; + } + case H5T_NO_CLASS: case H5T_NCLASSES: { goto done; @@ -2206,6 +2296,17 @@ h5str_get_big_endian_type(hid_t tid) break; } + case H5T_COMPLEX: { + if (size == 4) + p_type = H5Tcopy(H5T_COMPLEX_IEEE_F16BE); + else if (size == 8) + p_type = H5Tcopy(H5T_COMPLEX_IEEE_F32BE); + else if (size == 16) + p_type = H5Tcopy(H5T_COMPLEX_IEEE_F64BE); + + break; + } + case H5T_NO_CLASS: case H5T_NCLASSES: { goto done; @@ -2462,6 +2563,32 @@ h5str_render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hs break; } + case H5T_COMPLEX: { + hid_t memb = H5I_INVALID_HID; + + if ((memb = H5Tget_super(tid)) < 0) { + ret_value = FAIL; + goto done; + } + + for (block_index = 0; block_index < block_nelmts; block_index++) { + mem = ((unsigned char *)_mem) + block_index * size; + + /* dump the complex number element */ + if (h5str_render_bin_output(stream, container, memb, mem, 2) < 0) { + ret_value = FAIL; + break; + } + } + + if (H5Tclose(memb) < 0) { + ret_value = FAIL; + goto done; + } + + break; + } + case H5T_NO_CLASS: case H5T_NCLASSES: { ret_value = FAIL; @@ -4306,6 +4433,39 @@ translate_atomic_rbuf(JNIEnv *env, jlong mem_type_id, H5T_class_t type_class, vo break; } /* H5T_STRING */ + case H5T_COMPLEX: { + H5T_class_t base_class; + size_t base_size, typeCount; + void *objBuf = NULL; + + if (!(typeSize = H5Tget_size(mem_type_id))) + H5_LIBRARY_ERROR(ENVONLY); + if ((memb = H5Tget_super(mem_type_id)) < 0) + H5_LIBRARY_ERROR(ENVONLY); + if (!(base_size = H5Tget_size(memb))) + H5_LIBRARY_ERROR(ENVONLY); + if ((base_class = H5Tget_class(memb)) < 0) + H5_LIBRARY_ERROR(ENVONLY); + + typeCount = typeSize / base_size; + + if (NULL == (objBuf = malloc(typeSize))) + H5_OUT_OF_MEMORY_ERROR(ENVONLY, "translate_atomic_rbuf: failed to allocate buffer"); + + memcpy((char *)objBuf, char_buf, typeSize); + + /* The list we're going to return */ + if (NULL == (jList = (jobjectArray)ENVPTR->NewObject(ENVONLY, arrCList, arrListMethod, 0))) + H5_OUT_OF_MEMORY_ERROR(ENVONLY, "translate_atomic_rbuf: failed to allocate list read buffer"); + + translate_rbuf(ENVONLY, jList, memb, base_class, (jsize)typeCount, objBuf); + jobj = jList; + + if (objBuf) + free(objBuf); + + break; + } case H5T_TIME: case H5T_NO_CLASS: case H5T_NCLASSES: @@ -4530,6 +4690,41 @@ translate_atomic_wbuf(JNIEnv *env, jobject in_obj, jlong mem_type_id, H5T_class_ } break; } /* H5T_STRING */ + case H5T_COMPLEX: { + H5T_class_t base_class; + size_t base_size; + void *objBuf = NULL; + + if (!(typeSize = H5Tget_size(mem_type_id))) + H5_LIBRARY_ERROR(ENVONLY); + if ((memb = H5Tget_super(mem_type_id)) < 0) + H5_LIBRARY_ERROR(ENVONLY); + if (!(base_size = H5Tget_size(memb))) + H5_LIBRARY_ERROR(ENVONLY); + if ((base_class = H5Tget_class(memb)) < 0) + H5_LIBRARY_ERROR(ENVONLY); + + /* Convert each array element - invoke the toArray method */ + if (mToArray == NULL) + CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); + jobjectArray array = (jobjectArray)ENVPTR->CallObjectMethod(ENVONLY, in_obj, mToArray); + jsize jnelmts = ENVPTR->GetArrayLength(ENVONLY, array); + + if (jnelmts < 0) + H5_BAD_ARGUMENT_ERROR(ENVONLY, "translate_atomic_wbuf: number of array elements < 0"); + + if (NULL == (objBuf = malloc((size_t)jnelmts * base_size))) + H5_OUT_OF_MEMORY_ERROR(ENVONLY, "translate_atomic_wbuf: failed to allocate buffer"); + + translate_wbuf(ENVONLY, array, memb, base_class, (jsize)jnelmts, objBuf); + + memcpy(char_buf, (char *)objBuf, base_size * (size_t)jnelmts); + + if (objBuf) + free(objBuf); + + break; + } case H5T_TIME: case H5T_NO_CLASS: case H5T_NCLASSES: @@ -4752,6 +4947,60 @@ translate_rbuf(JNIEnv *env, jobjectArray ret_buf, jlong mem_type_id, H5T_class_t } break; } + case H5T_COMPLEX: { + H5T_class_t base_class; + size_t base_size, typeCount; + void *objBuf = NULL; + + if (!(typeSize = H5Tget_size(mem_type_id))) + H5_LIBRARY_ERROR(ENVONLY); + if ((memb = H5Tget_super(mem_type_id)) < 0) + H5_LIBRARY_ERROR(ENVONLY); + if (!(base_size = H5Tget_size(memb))) + H5_LIBRARY_ERROR(ENVONLY); + if ((base_class = H5Tget_class(memb)) < 0) + H5_LIBRARY_ERROR(ENVONLY); + + typeCount = typeSize / base_size; + + if (NULL == (objBuf = malloc(typeSize))) + H5_OUT_OF_MEMORY_ERROR(ENVONLY, "translate_atomic_rbuf: failed to allocate buffer"); + + /* Convert each element to a list of 2 floating-point elements */ + for (i = 0; i < (size_t)count; i++) { + found_jList = JNI_TRUE; + jList = NULL; + + /* Get the object element */ + memcpy((char *)objBuf, char_buf + i * typeSize, typeSize); + + /* The list we're going to return: */ + if (i < (size_t)ret_buflen) { + if (NULL == + (jList = ENVPTR->GetObjectArrayElement(ENVONLY, (jobjectArray)ret_buf, (jsize)i))) + found_jList = JNI_FALSE; + } + if (NULL == jList) { + if (NULL == + (jList = (jobjectArray)ENVPTR->NewObject(ENVONLY, arrCList, arrListMethod, 0))) + H5_OUT_OF_MEMORY_ERROR(ENVONLY, + "translate_rbuf: failed to allocate list read buffer"); + } + + translate_rbuf(ENVONLY, jList, memb, base_class, (jsize)typeCount, objBuf); + if (found_jList == JNI_FALSE) + ENVPTR->CallBooleanMethod(ENVONLY, ret_buf, arrAddMethod, jList); + else + ENVPTR->SetObjectArrayElement(ENVONLY, ret_buf, (jsize)i, jList); + CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE); + ENVPTR->DeleteLocalRef(ENVONLY, jList); + } + + if (objBuf) + free(objBuf); + + break; + } case H5T_TIME: case H5T_NO_CLASS: case H5T_NCLASSES: @@ -4914,6 +5163,39 @@ translate_wbuf(JNIEnv *env, jobjectArray in_buf, jlong mem_type_id, H5T_class_t } break; } + case H5T_COMPLEX: { + H5T_class_t base_class; + size_t base_size; + + if ((memb = H5Tget_super(mem_type_id)) < 0) + H5_LIBRARY_ERROR(ENVONLY); + if (!(base_size = H5Tget_size(memb))) + H5_LIBRARY_ERROR(ENVONLY); + if ((base_class = H5Tget_class(memb)) < 0) + H5_LIBRARY_ERROR(ENVONLY); + + /* Convert each list to an array element */ + for (i = 0; i < (size_t)count; i++) { + if (NULL == (jList = ENVPTR->GetObjectArrayElement(ENVONLY, (jobjectArray)in_buf, (jsize)i))) + CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); + + /* invoke the toArray method */ + if (mToArray == NULL) + CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE); + jobjectArray array = (jobjectArray)ENVPTR->CallObjectMethod(ENVONLY, jList, mToArray); + jsize jnelmts = ENVPTR->GetArrayLength(ENVONLY, array); + + if (jnelmts < 0) + H5_BAD_ARGUMENT_ERROR(ENVONLY, "translate_wbuf: number of array elements < 0"); + + translate_wbuf(ENVONLY, array, memb, base_class, jnelmts, + char_buf + i * base_size * (size_t)jnelmts); + + ENVPTR->DeleteLocalRef(ENVONLY, jList); + } /* end for (i = 0; i < count; i++) */ + + break; + } case H5T_TIME: case H5T_NO_CLASS: case H5T_NCLASSES: diff --git a/java/test/TestH5T.java b/java/test/TestH5T.java index b861e80613b..d57ff354119 100644 --- a/java/test/TestH5T.java +++ b/java/test/TestH5T.java @@ -240,6 +240,60 @@ public void testH5Tget_array_dims() } } + @Test + public void testH5Tcomplex_create() + { + String class_name; + long[] fields1 = {0, 0, 0, 0, 0}; + long[] fields2 = {0, 0, 0, 0, 0}; + long filetype_id = HDF5Constants.H5I_INVALID_HID; + long dt_size = -1; + int typeclass = -1; + int typeorder = HDF5Constants.H5T_ORDER_ERROR; + int prec1 = 0; + int prec2 = 0; + + try { + filetype_id = H5.H5Tcomplex_create(HDF5Constants.H5T_IEEE_F32LE); + assertTrue("testH5Tcomplex_create:H5Tcomplex_create", filetype_id >= 0); + + typeclass = H5.H5Tget_class(filetype_id); + assertTrue("H5.H5Tget_class", typeclass > 0); + class_name = H5.H5Tget_class_name(typeclass); + assertTrue("H5.H5Tget_class_name", class_name.compareTo("H5T_COMPLEX") == 0); + + dt_size = H5.H5Tget_size(filetype_id); + assertTrue("H5.H5Tget_size", dt_size == 8); + + typeorder = H5.H5Tget_order(filetype_id); + assertTrue("H5.H5Tget_order", typeorder == HDF5Constants.H5T_ORDER_LE); + + prec1 = H5.H5Tget_precision(HDF5Constants.H5T_IEEE_F32LE); + prec2 = H5.H5Tget_precision(filetype_id); + assertTrue("H5.H5Tget_precision", prec1 == prec2); + + H5.H5Tget_fields(HDF5Constants.H5T_IEEE_F32LE, fields1); + H5.H5Tget_fields(filetype_id, fields2); + assertTrue("H5.H5Tget_fields[spos]", fields1[0] == fields2[0]); + assertTrue("H5.H5Tget_fields[epos]", fields1[1] == fields2[1]); + assertTrue("H5.H5Tget_fields[esize]", fields1[2] == fields2[2]); + assertTrue("H5.H5Tget_fields[mpos]", fields1[3] == fields2[3]); + assertTrue("H5.H5Tget_fields[msize]", fields1[4] == fields2[4]); + } + catch (Throwable err) { + err.printStackTrace(); + fail("testH5Tcomplex_create " + err); + } + finally { + if (filetype_id >= 0) + try { + H5.H5Tclose(filetype_id); + } + catch (Exception ex) { + } + } + } + @Test public void testH5Tenum_functions() { diff --git a/java/test/testfiles/JUnit-TestH5T.txt b/java/test/testfiles/JUnit-TestH5T.txt index 06e7a9cbb5b..039e8286f31 100644 --- a/java/test/testfiles/JUnit-TestH5T.txt +++ b/java/test/testfiles/JUnit-TestH5T.txt @@ -11,9 +11,10 @@ JUnit version 4.13.2 .testH5Tcompound_functions .testH5Tget_size .testH5Tarray_create +.testH5Tcomplex_create .testH5Topaque_functions Time: XXXX -OK (13 tests) +OK (14 tests) diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 5f8321daae9..86f894d3bea 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -151,6 +151,200 @@ New Features Library: -------- + - Added support for complex number datatypes + + Support for the C99 "float _Complex", "double _Complex" and "long double _Complex" + (with MSVC, "_Fcomplex", "_Dcomplex" and "_Lcomplex") types has been added for + platforms/compilers that support them. These types have been implemented with a + new datatype class, H5T_COMPLEX. Note that any datatypes of class H5T_COMPLEX + will not be readable with previous versions of HDF5. If a file is accessed with + a library version bounds "high" setting less than H5F_LIBVER_V200, an error will + occur if the application tries to create an object with a complex number datatype. + If compatibility with previous versions of HDF5 is desired, applications should + instead consider adopting one of the existing conventions at + https://nc-complex.readthedocs.io/en/latest/#conventions-used-in-applications. + + The following new macros have been added: + + - H5_HAVE_COMPLEX_NUMBERS + + This macro is defined in H5pubconf.h and will have the value 1 if native + support for complex numbers is available. It will not be defined otherwise. + + - H5_HAVE_C99_COMPLEX_NUMBERS + + This macro is defined in H5pubconf.h and will have the value 1 if native + support for C99 complex numbers is available. It will not be defined otherwise. + If this macro is not defined but H5_HAVE_COMPLEX_NUMBERS is defined, the + complex number types supported are the MSVC types. + + - H5_SIZEOF_FLOAT_COMPLEX + + This macro is defined in H5pubconf.h and will have a value corresponding + to the size of the native float complex datatype, as computed by sizeof(). + If C99 complex number support is available, this will be the size of the + "float _Complex" type. Otherwise, it will be the size of the "_Fcomplex" + type. It will have the value 0 if support for a native float complex datatype + is not available. + + - H5_SIZEOF_DOUBLE_COMPLEX + + This macro is defined in H5pubconf.h and will have a value corresponding + to the size of the native double complex datatype, as computed by sizeof(). + If C99 complex number support is available, this will be the size of the + "double _Complex" type. Otherwise, it will be the size of the "_Dcomplex" + type. It will have the value 0 if support for a native double complex datatype + is not available. + + - H5_SIZEOF_LONG_DOUBLE_COMPLEX + + This macro is defined in H5pubconf.h and will have a value corresponding + to the size of the native long double complex datatype, as computed by sizeof(). + If C99 complex number support is available, this will be the size of the + "long double _Complex" type. Otherwise, it will be the size of the "_Lcomplex" + type. It will have the value 0 if support for a native long double complex + datatype is not available. + + - H5T_NATIVE_FLOAT_COMPLEX + + This macro maps to the ID of an HDF5 datatype representing the native C + float complex datatype (either "float _Complex" or "_Fcomplex") for the + platform. If support for a native float complex datatype is not available + (H5_HAVE_COMPLEX_NUMBERS is not defined), the macro will map to + H5I_INVALID_HID and should not be used. + + - H5T_NATIVE_DOUBLE_COMPLEX + + This macro maps to the ID of an HDF5 datatype representing the native C + double complex datatype (either "double _Complex" or "_Dcomplex") for the + platform. If support for a native double complex datatype is not available + (H5_HAVE_COMPLEX_NUMBERS is not defined), the macro will map to + H5I_INVALID_HID and should not be used. + + - H5T_NATIVE_LDOUBLE_COMPLEX + + This macro maps to the ID of an HDF5 datatype representing the native C + long double complex datatype (either "long double _Complex" or "_Lcomplex") + for the platform. If support for a native long double complex datatype is + not available (H5_HAVE_COMPLEX_NUMBERS is not defined), the macro will map + to H5I_INVALID_HID and should not be used. + + - H5T_COMPLEX_IEEE_F16LE / H5T_COMPLEX_IEEE_F16BE + + These macros map to IDs of HDF5 datatypes representing a complex number of + two parts, each of which is an IEEE 754 16-bit floating-point datatype in + little- or big-endian order. These datatypes are available regardless of + whether complex number support is available or not. + + - H5T_COMPLEX_IEEE_F32LE / H5T_COMPLEX_IEEE_F32BE + + These macros map to IDs of HDF5 datatypes representing a complex number of + two parts, each of which is an IEEE 754 32-bit floating-point datatype in + little- or big-endian order. These datatypes are available regardless of + whether complex number support is available or not. + + - H5T_COMPLEX_IEEE_F64LE / H5T_COMPLEX_IEEE_F64BE + + These macros map to IDs of HDF5 datatypes representing a complex number of + two parts, each of which is an IEEE 754 64-bit floating-point datatype in + little- or big-endian order. These datatypes are available regardless of + whether complex number support is available or not. + + The following new API function has been added: + + hid_t H5Tcomplex_create(hid_t base_type_id); + + Creates a new complex number datatype from the base datatype specified + by the given HDF5 ID `base_type_id`. The base datatype must be a + floating-point datatype. + + The following new hard datatype conversion paths have been added, but + will only be used when complex number support is available: + + H5T_NATIVE_SCHAR <-> H5T_NATIVE_FLOAT_COMPLEX | H5T_NATIVE_UCHAR <-> H5T_NATIVE_FLOAT_COMPLEX + H5T_NATIVE_SHORT <-> H5T_NATIVE_FLOAT_COMPLEX | H5T_NATIVE_USHORT <-> H5T_NATIVE_FLOAT_COMPLEX + H5T_NATIVE_INT <-> H5T_NATIVE_FLOAT_COMPLEX | H5T_NATIVE_UINT <-> H5T_NATIVE_FLOAT_COMPLEX + H5T_NATIVE_LONG <-> H5T_NATIVE_FLOAT_COMPLEX | H5T_NATIVE_ULONG <-> H5T_NATIVE_FLOAT_COMPLEX + H5T_NATIVE_LLONG <-> H5T_NATIVE_FLOAT_COMPLEX | H5T_NATIVE_ULLONG <-> H5T_NATIVE_FLOAT_COMPLEX + H5T_NATIVE_FLOAT16 <-> H5T_NATIVE_FLOAT_COMPLEX | H5T_NATIVE_FLOAT <-> H5T_NATIVE_FLOAT_COMPLEX + H5T_NATIVE_DOUBLE <-> H5T_NATIVE_FLOAT_COMPLEX | H5T_NATIVE_LDOUBLE <-> H5T_NATIVE_FLOAT_COMPLEX + + H5T_NATIVE_SCHAR <-> H5T_NATIVE_DOUBLE_COMPLEX | H5T_NATIVE_UCHAR <-> H5T_NATIVE_DOUBLE_COMPLEX + H5T_NATIVE_SHORT <-> H5T_NATIVE_DOUBLE_COMPLEX | H5T_NATIVE_USHORT <-> H5T_NATIVE_DOUBLE_COMPLEX + H5T_NATIVE_INT <-> H5T_NATIVE_DOUBLE_COMPLEX | H5T_NATIVE_UINT <-> H5T_NATIVE_DOUBLE_COMPLEX + H5T_NATIVE_LONG <-> H5T_NATIVE_DOUBLE_COMPLEX | H5T_NATIVE_ULONG <-> H5T_NATIVE_DOUBLE_COMPLEX + H5T_NATIVE_LLONG <-> H5T_NATIVE_DOUBLE_COMPLEX | H5T_NATIVE_ULLONG <-> H5T_NATIVE_DOUBLE_COMPLEX + H5T_NATIVE_FLOAT16 <-> H5T_NATIVE_DOUBLE_COMPLEX | H5T_NATIVE_FLOAT <-> H5T_NATIVE_DOUBLE_COMPLEX + H5T_NATIVE_DOUBLE <-> H5T_NATIVE_DOUBLE_COMPLEX | H5T_NATIVE_LDOUBLE <-> H5T_NATIVE_DOUBLE_COMPLEX + + H5T_NATIVE_SCHAR <-> H5T_NATIVE_LDOUBLE_COMPLEX | H5T_NATIVE_UCHAR <-> H5T_NATIVE_LDOUBLE_COMPLEX + H5T_NATIVE_SHORT <-> H5T_NATIVE_LDOUBLE_COMPLEX | H5T_NATIVE_USHORT <-> H5T_NATIVE_LDOUBLE_COMPLEX + H5T_NATIVE_INT <-> H5T_NATIVE_LDOUBLE_COMPLEX | H5T_NATIVE_UINT <-> H5T_NATIVE_LDOUBLE_COMPLEX + H5T_NATIVE_LONG <-> H5T_NATIVE_LDOUBLE_COMPLEX | H5T_NATIVE_ULONG <-> H5T_NATIVE_LDOUBLE_COMPLEX + H5T_NATIVE_LLONG <-> H5T_NATIVE_LDOUBLE_COMPLEX | H5T_NATIVE_ULLONG <-> H5T_NATIVE_LDOUBLE_COMPLEX + H5T_NATIVE_FLOAT16 <-> H5T_NATIVE_LDOUBLE_COMPLEX | H5T_NATIVE_FLOAT <-> H5T_NATIVE_LDOUBLE_COMPLEX + H5T_NATIVE_DOUBLE <-> H5T_NATIVE_LDOUBLE_COMPLEX | H5T_NATIVE_LDOUBLE <-> H5T_NATIVE_LDOUBLE_COMPLEX + + H5T_NATIVE_FLOAT_COMPLEX <-> H5T_NATIVE_DOUBLE_COMPLEX + H5T_NATIVE_FLOAT_COMPLEX <-> H5T_NATIVE_LDOUBLE_COMPLEX + H5T_NATIVE_DOUBLE_COMPLEX <-> H5T_NATIVE_LDOUBLE_COMPLEX + + Alternative software implementation conversion paths have been added for all of + the above for use when native complex number support is not available. All of these + conversion paths follow the behavior outlined in the C standard for conversions of + complex number values. + + Additionally, a special datatype conversion path has been added between complex number + datatypes and array or compound datatypes where the in-memory layout of data is the + same between the datatypes and data can be directly converted. This conversion path + is subject to the following rules: + + - An array datatype must consist of exactly two elements where each element is of + the same floating-point datatype as the complex number datatype's base floating-point + datatype. + + - A compound datatype must consist of exactly two fields where each field is of the + same floating-point datatype as the complex number datatype's base floating-point + datatype. The compound datatype must not have any leading or trailing structure + padding or any padding between its two fields. The fields must also have compatible + names, must have compatible offsets within the datatype and must be in the order + of "real" part -> "imaginary" part, such that the compound datatype matches the + following representation: + + H5T_COMPOUND { + "r(e)(a)(l)"; OFFSET 0 + "i(m)(a)(g)(i)(n)(a)(r)(y)"; OFFSET SIZEOF("r(e)(a)(l)") + } + + where "r(e)(a)(l)" means the field may be named any substring of "real", such as + "r", or "re" and "i(m)(a)(g)(i)(n)(a)(r)(y)" means the field may be named any + substring of "imaginary", such as "im" or "imag". + + Support for complex numbers has been added to the h5dump, h5ls and h5diff/ph5diff + tools. The h5dump command-line option '-m' can be used to change the floating-point + printing format for the float complex and double complex datatypes, as well as + the long double complex datatype if it has the same size as a double complex + datatype. + + Support for the predefined complex number datatypes and the H5Tcomplex_create + function has been added to the Java wrappers. However, Java does not have + official types for complex numbers, so an application must be sure that + data is in an appropriate format in-memory when using these datatypes. + + Support for the Fortran wrappers has not yet been added. + + Support for the predefined complex number datatypes and the H5Tcomplex_create + function has been added to the high level library, allowing them to work + with the H5LTtext_to_dtype and H5LTdtype_to_text functions. + + Simple example programs showing how to use complex number datatypes have + been added in the following files: + + - HDF5Examples/C/H5T/200/h5ex_t_complex.c (Uses C99 complex number types) + - HDF5Examples/C/H5T/200/h5ex_t_complex_msvc.c (Uses MSVC complex number types) + - HDF5Examples/C/H5T/200/h5ex_t_complex_custom.c (Uses H5Tcomplex_create to create + a custom complex number type) + - The H5VLstart_lib_state / H5VLfinish_lib_state API routines for pass- through connector authors now require a parameter that can be used to store the library's context. diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 644539bfc00..2cdaa575c43 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -600,17 +600,19 @@ set (H5T_SOURCES ${HDF5_SRC_DIR}/H5Tarray.c ${HDF5_SRC_DIR}/H5Tbit.c ${HDF5_SRC_DIR}/H5Tcommit.c + ${HDF5_SRC_DIR}/H5Tcomplex.c ${HDF5_SRC_DIR}/H5Tcompound.c ${HDF5_SRC_DIR}/H5Tconv.c - ${HDF5_SRC_DIR}/H5Tconv_integer.c - ${HDF5_SRC_DIR}/H5Tconv_float.c - ${HDF5_SRC_DIR}/H5Tconv_string.c + ${HDF5_SRC_DIR}/H5Tconv_array.c ${HDF5_SRC_DIR}/H5Tconv_bitfield.c + ${HDF5_SRC_DIR}/H5Tconv_complex.c ${HDF5_SRC_DIR}/H5Tconv_compound.c - ${HDF5_SRC_DIR}/H5Tconv_reference.c ${HDF5_SRC_DIR}/H5Tconv_enum.c + ${HDF5_SRC_DIR}/H5Tconv_float.c + ${HDF5_SRC_DIR}/H5Tconv_integer.c + ${HDF5_SRC_DIR}/H5Tconv_reference.c + ${HDF5_SRC_DIR}/H5Tconv_string.c ${HDF5_SRC_DIR}/H5Tconv_vlen.c - ${HDF5_SRC_DIR}/H5Tconv_array.c ${HDF5_SRC_DIR}/H5Tcset.c ${HDF5_SRC_DIR}/H5Tdbg.c ${HDF5_SRC_DIR}/H5Tdeprec.c @@ -979,6 +981,7 @@ set (H5_PRIVATE_HEADERS ${HDF5_SRC_DIR}/H5Tconv.h ${HDF5_SRC_DIR}/H5Tconv_array.h ${HDF5_SRC_DIR}/H5Tconv_bitfield.h + ${HDF5_SRC_DIR}/H5Tconv_complex.h ${HDF5_SRC_DIR}/H5Tconv_compound.h ${HDF5_SRC_DIR}/H5Tconv_enum.h ${HDF5_SRC_DIR}/H5Tconv_float.h diff --git a/src/H5Fmodule.h b/src/H5Fmodule.h index ba9ab98f4dc..61d981b8394 100644 --- a/src/H5Fmodule.h +++ b/src/H5Fmodule.h @@ -240,7 +240,7 @@ * Tools * page under * Command-line Tools. - * The HDF5 DDL grammar is described in the document \ref DDLBNF114. + * The HDF5 DDL grammar is described in the document \ref DDLBNF200. * * \subsection subsec_file_summary File Function Summaries * General library (\ref H5 functions and macros), (\ref H5F functions), file related diff --git a/src/H5Gmodule.h b/src/H5Gmodule.h index 3457db90b03..901f3b5b640 100644 --- a/src/H5Gmodule.h +++ b/src/H5Gmodule.h @@ -344,7 +344,7 @@ * * h5dump is described on the “HDF5 Tools” page of the \ref RM. * - * The HDF5 DDL grammar is described in the @ref DDLBNF114. + * The HDF5 DDL grammar is described in the @ref DDLBNF200. * * \subsection subsec_group_function Group Function Summaries * Functions that can be used with groups (\ref H5G functions) and property list functions that can used diff --git a/src/H5Odtype.c b/src/H5Odtype.c index 86892288923..bd3871c23b6 100644 --- a/src/H5Odtype.c +++ b/src/H5Odtype.c @@ -830,6 +830,52 @@ H5O__dtype_decode_helper(unsigned *ioflags /*in,out*/, const uint8_t **pp, H5T_t dt->shared->force_conv = true; break; + case H5T_COMPLEX: { + bool homogeneous; + + /* + * Complex number datatypes... + */ + + /* Set whether the complex number datatype is homogeneous */ + homogeneous = (bool)(flags & 0x01); + + if (!homogeneous) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "heterogeneous complex number datatypes are currently unsupported"); + + /* Set the form of the complex number datatype */ + dt->shared->u.cplx.form = (H5T_complex_form_t)((flags >> 1) & 0x03); + + if (dt->shared->u.cplx.form != H5T_COMPLEX_RECTANGULAR) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "only complex number datatypes in rectangular form are currently supported"); + + /* Other bits of the flags beyond bits 0,1,2 should not be set */ + if ((flags >> 3) != 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_BADVALUE, FAIL, + "invalid flag bits set for complex number datatype"); + + /* Decode the base datatype of the complex number */ + if (NULL == (dt->shared->parent = H5T__alloc())) + HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, + "unable to allocate complex number base datatype"); + if (H5O__dtype_decode_helper(ioflags, pp, dt->shared->parent, skip, p_end) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, + "unable to decode complex number base datatype"); + + /* Check if the parent of this complex number type has a version greater + * than the type itself. + */ + H5O_DTYPE_CHECK_VERSION(dt, version, dt->shared->parent->shared->version, ioflags, "complex", + FAIL) + + /* There should be no complex number datatypes with version < 5. */ + H5O_DTYPE_CHECK_VERSION(dt, version, H5O_DTYPE_VERSION_5, ioflags, "complex", FAIL) + + break; + } + case H5T_NO_CLASS: case H5T_NCLASSES: default: @@ -1347,6 +1393,32 @@ H5O__dtype_encode_helper(uint8_t **pp, const H5T_t *dt) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, "unable to encode VL parent type"); break; + case H5T_COMPLEX: + /* Check that the version is valid */ + assert(dt->shared->version >= H5O_DTYPE_VERSION_5); + + /* Check that the version is at least as great as the parent */ + assert(dt->shared->version >= dt->shared->parent->shared->version); + + if (dt->shared->u.cplx.form != H5T_COMPLEX_RECTANGULAR) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, + "complex number datatypes not in rectangular form are currently unsupported"); + + /* Store that complex number is homogeneous in first flag bit; + * Currently, only homogeneous complex number datatypes are supported. + */ + flags |= 0x01; + + /* Store complex number form in next two bits */ + flags = (unsigned)(flags | (((unsigned)dt->shared->u.cplx.form & 0x03) << 1)); + + /* Encode the base datatype of the complex number */ + if (H5O__dtype_encode_helper(pp, dt->shared->parent) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, + "unable to encode complex number base datatype"); + + break; + case H5T_NO_CLASS: case H5T_NCLASSES: default: @@ -1644,6 +1716,10 @@ H5O__dtype_size(const H5F_t *f, const void *_mesg) ret_value += H5O__dtype_size(f, dt->shared->parent); break; + case H5T_COMPLEX: + ret_value += H5O__dtype_size(f, dt->shared->parent); + break; + case H5T_NO_CLASS: case H5T_STRING: case H5T_REFERENCE: @@ -2001,6 +2077,10 @@ H5O__dtype_debug(H5F_t *f, const void *mesg, FILE *stream, int indent, int fwidt s = "vlen"; break; + case H5T_COMPLEX: + s = "complex number"; + break; + case H5T_NO_CLASS: case H5T_NCLASSES: default: @@ -2244,6 +2324,25 @@ H5O__dtype_debug(H5F_t *f, const void *mesg, FILE *stream, int indent, int fwidt fprintf(stream, "%*s%s\n", indent, "", "Base type:"); H5O__dtype_debug(f, dt->shared->parent, stream, indent + 3, MAX(0, fwidth - 3)); } /* end else if */ + else if (H5T_COMPLEX == dt->shared->type) { + switch (dt->shared->u.cplx.form) { + case H5T_COMPLEX_RECTANGULAR: + fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Form:", "rectangular"); + break; + case H5T_COMPLEX_POLAR: + fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Form:", "polar"); + break; + case H5T_COMPLEX_EXPONENTIAL: + fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Form:", "exponential"); + break; + default: + fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, "Form:", "invalid"); + break; + } + + fprintf(stream, "%*s%s\n", indent, "", "Base type:"); + H5O__dtype_debug(f, dt->shared->parent, stream, indent + 3, MAX(0, fwidth - 3)); + } else { switch (dt->shared->u.atomic.order) { case H5T_ORDER_LE: diff --git a/src/H5Pfapl.c b/src/H5Pfapl.c index 807ee3d5cf3..a498b99db0b 100644 --- a/src/H5Pfapl.c +++ b/src/H5Pfapl.c @@ -1461,14 +1461,14 @@ H5Pget_driver(hid_t plist_id) H5P_genplist_t *plist; /* Property list pointer */ hid_t ret_value; /* Return value */ - FUNC_ENTER_API(FAIL) + FUNC_ENTER_API(H5I_INVALID_HID) if (NULL == (plist = (H5P_genplist_t *)H5I_object_verify(plist_id, H5I_GENPROP_LST))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list"); + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "not a property list"); /* Get the driver */ if ((ret_value = H5P_peek_driver(plist)) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get driver"); + HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, H5I_INVALID_HID, "can't get driver"); done: FUNC_LEAVE_API(ret_value) diff --git a/src/H5Plapl.c b/src/H5Plapl.c index 24c8c581ad9..c6ca851e62c 100644 --- a/src/H5Plapl.c +++ b/src/H5Plapl.c @@ -1035,14 +1035,14 @@ H5Pget_elink_fapl(hid_t lapl_id) H5P_genplist_t *plist; /* Property list pointer */ hid_t ret_value; /* Return value */ - FUNC_ENTER_API(FAIL) + FUNC_ENTER_API(H5I_INVALID_HID) /* Get the plist structure */ if (NULL == (plist = H5P_object_verify(lapl_id, H5P_LINK_ACCESS))) - HGOTO_ERROR(H5E_ID, H5E_BADID, FAIL, "can't find object for ID"); + HGOTO_ERROR(H5E_ID, H5E_BADID, H5I_INVALID_HID, "can't find object for ID"); if (H5P_get(plist, H5L_ACS_ELINK_FAPL_NAME, &ret_value) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get fapl for links"); + HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, H5I_INVALID_HID, "can't get fapl for links"); done: FUNC_LEAVE_API(ret_value) diff --git a/src/H5S.c b/src/H5S.c index ec07f74a73e..789ea606d69 100644 --- a/src/H5S.c +++ b/src/H5S.c @@ -373,23 +373,23 @@ H5Screate(H5S_class_t type) H5S_t *new_ds = NULL; /* New dataspace structure */ hid_t ret_value; /* Return value */ - FUNC_ENTER_API(FAIL) + FUNC_ENTER_API(H5I_INVALID_HID) /* Check args */ if (type <= H5S_NO_CLASS || type > H5S_NULL) /* don't allow complex dataspace yet */ - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid dataspace type"); + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "invalid dataspace type"); if (NULL == (new_ds = H5S_create(type))) - HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCREATE, FAIL, "unable to create dataspace"); + HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCREATE, H5I_INVALID_HID, "unable to create dataspace"); /* Register */ if ((ret_value = H5I_register(H5I_DATASPACE, new_ds, true)) < 0) - HGOTO_ERROR(H5E_ID, H5E_CANTREGISTER, FAIL, "unable to register dataspace ID"); + HGOTO_ERROR(H5E_ID, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to register dataspace ID"); done: if (ret_value < 0) if (new_ds && H5S_close(new_ds) < 0) - HDONE_ERROR(H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "unable to release dataspace"); + HDONE_ERROR(H5E_DATASPACE, H5E_CANTRELEASE, H5I_INVALID_HID, "unable to release dataspace"); FUNC_LEAVE_API(ret_value) } /* end H5Screate() */ diff --git a/src/H5Spublic.h b/src/H5Spublic.h index 80c64e91fad..57141a7c728 100644 --- a/src/H5Spublic.h +++ b/src/H5Spublic.h @@ -255,10 +255,10 @@ H5_DLL hid_t H5Scopy(hid_t space_id); * Further dataspace types may be added later. * * A scalar dataspace, #H5S_SCALAR, has a single element, though that - * element may be of a complex datatype, such as a compound or array + * element may be of a composite datatype, such as a compound or array * datatype. By convention, the rank of a scalar dataspace is always \p 0 * (zero); think of it geometrically as a single, dimensionless point, - * though that point can be complex. + * though that point can be composite. * * A simple dataspace, #H5S_SIMPLE, consists of a regular array of elements. * diff --git a/src/H5Sselect.c b/src/H5Sselect.c index 31d68a9ad21..88110be5f97 100644 --- a/src/H5Sselect.c +++ b/src/H5Sselect.c @@ -2655,39 +2655,39 @@ H5Sselect_project_intersection(hid_t src_space_id, hid_t dst_space_id, hid_t src H5S_t *proj_space = NULL; /* Output dataspace */ hid_t ret_value; /* Return value */ - FUNC_ENTER_API(FAIL) + FUNC_ENTER_API(H5I_INVALID_HID) /* Check args */ if (NULL == (src_space = (H5S_t *)H5I_object_verify(src_space_id, H5I_DATASPACE))) - HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL, "not a dataspace"); + HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, H5I_INVALID_HID, "not a dataspace"); if (NULL == (dst_space = (H5S_t *)H5I_object_verify(dst_space_id, H5I_DATASPACE))) - HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL, "not a dataspace"); + HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, H5I_INVALID_HID, "not a dataspace"); if (NULL == (src_intersect_space = (H5S_t *)H5I_object_verify(src_intersect_space_id, H5I_DATASPACE))) - HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL, "not a dataspace"); + HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, H5I_INVALID_HID, "not a dataspace"); /* Check numbers of points selected matches in source and destination */ if (H5S_GET_SELECT_NPOINTS(src_space) != H5S_GET_SELECT_NPOINTS(dst_space)) - HGOTO_ERROR(H5E_DATASPACE, H5E_BADVALUE, FAIL, + HGOTO_ERROR(H5E_DATASPACE, H5E_BADVALUE, H5I_INVALID_HID, "number of points selected in source space does not match that in destination space"); /* Check numbers of dimensions matches in source and source intersect spaces */ if (H5S_GET_EXTENT_NDIMS(src_space) != H5S_GET_EXTENT_NDIMS(src_intersect_space)) - HGOTO_ERROR(H5E_DATASPACE, H5E_BADVALUE, FAIL, + HGOTO_ERROR(H5E_DATASPACE, H5E_BADVALUE, H5I_INVALID_HID, "rank of source space does not match rank of source intersect space"); /* Perform operation */ if (H5S_select_project_intersection(src_space, dst_space, src_intersect_space, &proj_space, false) < 0) - HGOTO_ERROR(H5E_DATASET, H5E_CANTCLIP, FAIL, "can't project dataspace intersection"); + HGOTO_ERROR(H5E_DATASET, H5E_CANTCLIP, H5I_INVALID_HID, "can't project dataspace intersection"); /* Register */ if ((ret_value = H5I_register(H5I_DATASPACE, proj_space, true)) < 0) - HGOTO_ERROR(H5E_ID, H5E_CANTREGISTER, FAIL, "unable to register dataspace ID"); + HGOTO_ERROR(H5E_ID, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to register dataspace ID"); done: if (ret_value < 0) if (proj_space && H5S_close(proj_space) < 0) - HDONE_ERROR(H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "unable to release dataspace"); + HDONE_ERROR(H5E_DATASPACE, H5E_CANTRELEASE, H5I_INVALID_HID, "unable to release dataspace"); FUNC_LEAVE_API(ret_value) } /* end H5Sselect_project_intersection() */ diff --git a/src/H5T.c b/src/H5T.c index b2137e752c3..234e29d22c4 100644 --- a/src/H5T.c +++ b/src/H5T.c @@ -53,6 +53,7 @@ #include "H5Tconv_enum.h" #include "H5Tconv_vlen.h" #include "H5Tconv_array.h" +#include "H5Tconv_complex.h" /****************/ /* Local Macros */ @@ -432,6 +433,13 @@ hid_t H5T_IEEE_F32LE_g = H5I_INVALID_HID; hid_t H5T_IEEE_F64BE_g = H5I_INVALID_HID; hid_t H5T_IEEE_F64LE_g = H5I_INVALID_HID; +hid_t H5T_COMPLEX_IEEE_F16BE_g = H5I_INVALID_HID; +hid_t H5T_COMPLEX_IEEE_F16LE_g = H5I_INVALID_HID; +hid_t H5T_COMPLEX_IEEE_F32BE_g = H5I_INVALID_HID; +hid_t H5T_COMPLEX_IEEE_F32LE_g = H5I_INVALID_HID; +hid_t H5T_COMPLEX_IEEE_F64BE_g = H5I_INVALID_HID; +hid_t H5T_COMPLEX_IEEE_F64LE_g = H5I_INVALID_HID; + hid_t H5T_VAX_F32_g = H5I_INVALID_HID; hid_t H5T_VAX_F64_g = H5I_INVALID_HID; @@ -472,30 +480,33 @@ hid_t H5T_C_S1_g = H5I_INVALID_HID; hid_t H5T_FORTRAN_S1_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_SCHAR_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_UCHAR_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_SHORT_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_USHORT_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_INT_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_UINT_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_LONG_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_ULONG_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_LLONG_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_ULLONG_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_FLOAT16_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_FLOAT_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_DOUBLE_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_LDOUBLE_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_B8_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_B16_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_B32_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_B64_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_OPAQUE_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_HADDR_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_HSIZE_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_HSSIZE_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_HERR_g = H5I_INVALID_HID; -hid_t H5T_NATIVE_HBOOL_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_SCHAR_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_UCHAR_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_SHORT_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_USHORT_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_INT_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_UINT_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_LONG_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_ULONG_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_LLONG_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_ULLONG_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_FLOAT16_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_FLOAT_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_DOUBLE_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_LDOUBLE_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_FLOAT_COMPLEX_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_DOUBLE_COMPLEX_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_LDOUBLE_COMPLEX_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_B8_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_B16_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_B32_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_B64_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_OPAQUE_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_HADDR_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_HSIZE_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_HSSIZE_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_HERR_g = H5I_INVALID_HID; +hid_t H5T_NATIVE_HBOOL_g = H5I_INVALID_HID; hid_t H5T_NATIVE_INT8_g = H5I_INVALID_HID; hid_t H5T_NATIVE_UINT8_g = H5I_INVALID_HID; @@ -541,20 +552,23 @@ size_t H5T_HOBJREF_ALIGN_g = 0; size_t H5T_HDSETREGREF_ALIGN_g = 0; size_t H5T_REF_ALIGN_g = 0; -size_t H5T_NATIVE_SCHAR_ALIGN_g = 0; -size_t H5T_NATIVE_UCHAR_ALIGN_g = 0; -size_t H5T_NATIVE_SHORT_ALIGN_g = 0; -size_t H5T_NATIVE_USHORT_ALIGN_g = 0; -size_t H5T_NATIVE_INT_ALIGN_g = 0; -size_t H5T_NATIVE_UINT_ALIGN_g = 0; -size_t H5T_NATIVE_LONG_ALIGN_g = 0; -size_t H5T_NATIVE_ULONG_ALIGN_g = 0; -size_t H5T_NATIVE_LLONG_ALIGN_g = 0; -size_t H5T_NATIVE_ULLONG_ALIGN_g = 0; -size_t H5T_NATIVE_FLOAT16_ALIGN_g = 0; -size_t H5T_NATIVE_FLOAT_ALIGN_g = 0; -size_t H5T_NATIVE_DOUBLE_ALIGN_g = 0; -size_t H5T_NATIVE_LDOUBLE_ALIGN_g = 0; +size_t H5T_NATIVE_SCHAR_ALIGN_g = 0; +size_t H5T_NATIVE_UCHAR_ALIGN_g = 0; +size_t H5T_NATIVE_SHORT_ALIGN_g = 0; +size_t H5T_NATIVE_USHORT_ALIGN_g = 0; +size_t H5T_NATIVE_INT_ALIGN_g = 0; +size_t H5T_NATIVE_UINT_ALIGN_g = 0; +size_t H5T_NATIVE_LONG_ALIGN_g = 0; +size_t H5T_NATIVE_ULONG_ALIGN_g = 0; +size_t H5T_NATIVE_LLONG_ALIGN_g = 0; +size_t H5T_NATIVE_ULLONG_ALIGN_g = 0; +size_t H5T_NATIVE_FLOAT16_ALIGN_g = 0; +size_t H5T_NATIVE_FLOAT_ALIGN_g = 0; +size_t H5T_NATIVE_DOUBLE_ALIGN_g = 0; +size_t H5T_NATIVE_LDOUBLE_ALIGN_g = 0; +size_t H5T_NATIVE_FLOAT_COMPLEX_ALIGN_g = 0; +size_t H5T_NATIVE_DOUBLE_COMPLEX_ALIGN_g = 0; +size_t H5T_NATIVE_LDOUBLE_COMPLEX_ALIGN_g = 0; /* Alignment constraints for C99 types */ size_t H5T_NATIVE_INT8_ALIGN_g = 0; @@ -596,10 +610,20 @@ size_t H5T_NATIVE_UINT_FAST64_ALIGN_g = 0; H5__Float16 H5T_NATIVE_FLOAT16_POS_INF_g = 0.0f; H5__Float16 H5T_NATIVE_FLOAT16_NEG_INF_g = 0.0f; #endif -float H5T_NATIVE_FLOAT_POS_INF_g = 0.0F; -float H5T_NATIVE_FLOAT_NEG_INF_g = 0.0F; -double H5T_NATIVE_DOUBLE_POS_INF_g = 0.0; -double H5T_NATIVE_DOUBLE_NEG_INF_g = 0.0; +float H5T_NATIVE_FLOAT_POS_INF_g = 0.0F; +float H5T_NATIVE_FLOAT_NEG_INF_g = 0.0F; +double H5T_NATIVE_DOUBLE_POS_INF_g = 0.0; +double H5T_NATIVE_DOUBLE_NEG_INF_g = 0.0; +long double H5T_NATIVE_LDOUBLE_POS_INF_g = 0.0L; +long double H5T_NATIVE_LDOUBLE_NEG_INF_g = 0.0L; +#ifdef H5_HAVE_COMPLEX_NUMBERS +H5_float_complex H5T_NATIVE_FLOAT_COMPLEX_POS_INF_g; +H5_float_complex H5T_NATIVE_FLOAT_COMPLEX_NEG_INF_g; +H5_double_complex H5T_NATIVE_DOUBLE_COMPLEX_POS_INF_g; +H5_double_complex H5T_NATIVE_DOUBLE_COMPLEX_NEG_INF_g; +H5_ldouble_complex H5T_NATIVE_LDOUBLE_COMPLEX_POS_INF_g; +H5_ldouble_complex H5T_NATIVE_LDOUBLE_COMPLEX_NEG_INF_g; +#endif /* Declare the free list for H5T_t's and H5T_shared_t's */ H5FL_DEFINE(H5T_t); @@ -612,7 +636,7 @@ const unsigned H5O_dtype_ver_bounds[] = { H5O_DTYPE_VERSION_3, /* H5F_LIBVER_V110 */ H5O_DTYPE_VERSION_4, /* H5F_LIBVER_V112 */ H5O_DTYPE_VERSION_4, /* H5F_LIBVER_V114 */ - H5O_DTYPE_VERSION_4, /* H5F_LIBVER_V200 */ + H5O_DTYPE_VERSION_5, /* H5F_LIBVER_V200 */ H5O_DTYPE_VERSION_LATEST /* H5F_LIBVER_LATEST */ }; @@ -777,6 +801,47 @@ H5T__init_inf(void) } /* end for */ } /* end if */ + /* Get the long double datatype */ + if (NULL == (dst_p = (H5T_t *)H5I_object(H5T_NATIVE_LDOUBLE_g))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); + dst = &dst_p->shared->u.atomic; + + /* Check that we can re-order the bytes correctly */ + if (H5T_ORDER_LE != H5T_native_order_g && H5T_ORDER_BE != H5T_native_order_g) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order"); + + /* +Inf */ + d = (uint8_t *)&H5T_NATIVE_LDOUBLE_POS_INF_g; + H5T__bit_set(d, dst->u.f.sign, (size_t)1, false); + H5T__bit_set(d, dst->u.f.epos, dst->u.f.esize, true); + H5T__bit_set(d, dst->u.f.mpos, dst->u.f.msize, false); + + /* Swap the bytes if the machine architecture is big-endian */ + if (H5T_ORDER_BE == H5T_native_order_g) { + half_size = dst_p->shared->size / 2; + for (u = 0; u < half_size; u++) { + uint8_t tmp = d[dst_p->shared->size - (u + 1)]; + d[dst_p->shared->size - (u + 1)] = d[u]; + d[u] = tmp; + } /* end for */ + } /* end if */ + + /* -Inf */ + d = (uint8_t *)&H5T_NATIVE_LDOUBLE_NEG_INF_g; + H5T__bit_set(d, dst->u.f.sign, (size_t)1, true); + H5T__bit_set(d, dst->u.f.epos, dst->u.f.esize, true); + H5T__bit_set(d, dst->u.f.mpos, dst->u.f.msize, false); + + /* Swap the bytes if the machine architecture is big-endian */ + if (H5T_ORDER_BE == H5T_native_order_g) { + half_size = dst_p->shared->size / 2; + for (u = 0; u < half_size; u++) { + uint8_t tmp = d[dst_p->shared->size - (u + 1)]; + d[dst_p->shared->size - (u + 1)] = d[u]; + d[u] = tmp; + } /* end for */ + } /* end if */ + #ifdef H5_HAVE__FLOAT16 /* Get the _Float16 datatype */ if (NULL == (dst_p = (H5T_t *)H5I_object(H5T_NATIVE_FLOAT16_g))) @@ -820,6 +885,22 @@ H5T__init_inf(void) } /* end if */ #endif +#ifdef H5_HAVE_COMPLEX_NUMBERS + /* + * A complex number is considered to be infinite if any of its parts + * (real or imaginary) is infinite, so simply set the real part of + * the complex number positive/negative infinity values to the + * positive/negative infinity value for the base floating-point type. + * The imaginary part should be zeroed-out bits. + */ + memcpy(&H5T_NATIVE_FLOAT_COMPLEX_POS_INF_g, &H5T_NATIVE_FLOAT_POS_INF_g, sizeof(float)); + memcpy(&H5T_NATIVE_FLOAT_COMPLEX_NEG_INF_g, &H5T_NATIVE_FLOAT_NEG_INF_g, sizeof(float)); + memcpy(&H5T_NATIVE_DOUBLE_COMPLEX_POS_INF_g, &H5T_NATIVE_DOUBLE_POS_INF_g, sizeof(double)); + memcpy(&H5T_NATIVE_DOUBLE_COMPLEX_NEG_INF_g, &H5T_NATIVE_DOUBLE_NEG_INF_g, sizeof(double)); + memcpy(&H5T_NATIVE_LDOUBLE_COMPLEX_POS_INF_g, &H5T_NATIVE_LDOUBLE_POS_INF_g, sizeof(long double)); + memcpy(&H5T_NATIVE_LDOUBLE_COMPLEX_NEG_INF_g, &H5T_NATIVE_LDOUBLE_NEG_INF_g, sizeof(long double)); +#endif + done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5T__init_inf() */ @@ -859,6 +940,7 @@ H5T__init_package(void) H5T_t *std_u64le = NULL; /* Datatype structure for unsigned 64-bit little-endian integer */ H5T_t *std_u64be = NULL; /* Datatype structure for unsigned 64-bit big-endian integer */ H5T_t *dt = NULL; + H5T_t *tmp_float = NULL; H5T_t *fixedpt = NULL; /* Datatype structure for native int */ H5T_t *floatpt = NULL; /* Datatype structure for native float */ H5T_t *string = NULL; /* Datatype structure for C string */ @@ -867,6 +949,7 @@ H5T__init_package(void) H5T_t *enum_type = NULL; /* Datatype structure for enum objects */ H5T_t *vlen = NULL; /* Datatype structure for vlen objects */ H5T_t *array = NULL; /* Datatype structure for array objects */ + H5T_t *cplx = NULL; /* Datatype structure for complex number objects */ H5T_t *objref = NULL; /* Datatype structure for deprecated reference objects */ H5T_t *regref = NULL; /* Datatype structure for deprecated region references */ H5T_t *ref = NULL; /* Datatype structure for opaque references */ @@ -876,6 +959,12 @@ H5T__init_package(void) true; /* Flag to indicate whether datatype was copied or allocated (for error cleanup) */ #ifdef H5_HAVE__FLOAT16 H5T_t *native_float16 = NULL; /* Datatype structure for native _Float16 type */ +#endif +#ifdef H5_HAVE_COMPLEX_NUMBERS + H5T_t *native_float_complex = NULL; /* Datatype structure for native float _Complex / _Fcomplex type */ + H5T_t *native_double_complex = NULL; /* Datatype structure for native double _Complex / _Dcomplex type */ + H5T_t *native_ldouble_complex = + NULL; /* Datatype structure for native long double _Complex / _Lcomplex type */ #endif herr_t ret_value = SUCCEED; /* Return value */ @@ -893,6 +982,12 @@ H5T__init_package(void) if (H5T__init_native_float_types() < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize floating-point types"); +#ifdef H5_HAVE_COMPLEX_NUMBERS + /* Initialize native complex number datatypes */ + if (H5T__init_native_complex_types() < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize complex number types"); +#endif + /* Initialize all other native types */ if (H5T__init_native_internal() < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize integers"); @@ -928,6 +1023,14 @@ H5T__init_package(void) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object"); if (NULL == (native_ldouble = (H5T_t *)H5I_object(H5T_NATIVE_LDOUBLE_g))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object"); +#ifdef H5_HAVE_COMPLEX_NUMBERS + if (NULL == (native_float_complex = (H5T_t *)H5I_object(H5T_NATIVE_FLOAT_COMPLEX_g))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object"); + if (NULL == (native_double_complex = (H5T_t *)H5I_object(H5T_NATIVE_DOUBLE_COMPLEX_g))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object"); + if (NULL == (native_ldouble_complex = (H5T_t *)H5I_object(H5T_NATIVE_LDOUBLE_COMPLEX_g))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object"); +#endif /*------------------------------------------------------------ * Derived native types @@ -1151,6 +1254,59 @@ H5T__init_package(void) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid datatype location"); ref = dt; /* Keep type for later */ + /*------------------------------------------------------------ + * Complex Number Types + *------------------------------------------------------------ + */ + + /* Complex number of 2 IEEE 2-byte little-endian floats */ + if (NULL == (tmp_float = H5I_object(H5T_IEEE_F16LE))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object"); + if (NULL == (dt = H5T__complex_create(tmp_float))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "couldn't create complex number datatype"); + if ((H5T_COMPLEX_IEEE_F16LE_g = H5I_register(H5I_DATATYPE, dt, false)) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register datatype atom"); + + /* Complex number of 2 IEEE 2-byte big-endian floats */ + if (NULL == (tmp_float = H5I_object(H5T_IEEE_F16BE))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object"); + if (NULL == (dt = H5T__complex_create(tmp_float))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "couldn't create complex number datatype"); + if ((H5T_COMPLEX_IEEE_F16BE_g = H5I_register(H5I_DATATYPE, dt, false)) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register datatype atom"); + + /* Complex number of 2 IEEE 4-byte little-endian floats */ + if (NULL == (tmp_float = H5I_object(H5T_IEEE_F32LE))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object"); + if (NULL == (dt = H5T__complex_create(tmp_float))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "couldn't create complex number datatype"); + if ((H5T_COMPLEX_IEEE_F32LE_g = H5I_register(H5I_DATATYPE, dt, false)) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register datatype atom"); + + /* Complex number of 2 IEEE 4-byte big-endian floats */ + if (NULL == (tmp_float = H5I_object(H5T_IEEE_F32BE))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object"); + if (NULL == (dt = H5T__complex_create(tmp_float))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "couldn't create complex number datatype"); + if ((H5T_COMPLEX_IEEE_F32BE_g = H5I_register(H5I_DATATYPE, dt, false)) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register datatype atom"); + + /* Complex number of 2 IEEE 8-byte little-endian floats */ + if (NULL == (tmp_float = H5I_object(H5T_IEEE_F64LE))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object"); + if (NULL == (dt = H5T__complex_create(tmp_float))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "couldn't create complex number datatype"); + if ((H5T_COMPLEX_IEEE_F64LE_g = H5I_register(H5I_DATATYPE, dt, false)) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register datatype atom"); + + /* Complex number of 2 IEEE 8-byte big-endian floats */ + if (NULL == (tmp_float = H5I_object(H5T_IEEE_F64BE))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object"); + if (NULL == (dt = H5T__complex_create(tmp_float))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "couldn't create complex number datatype"); + if ((H5T_COMPLEX_IEEE_F64BE_g = H5I_register(H5I_DATATYPE, dt, false)) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register datatype atom"); + /* * Register conversion functions beginning with the most general and * ending with the most specific. @@ -1165,18 +1321,27 @@ H5T__init_package(void) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); if (NULL == (array = H5T__array_create(native_int, 1, dim))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); + if (NULL == (cplx = H5T__complex_create(native_float))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); status = 0; status |= H5T__register_int(H5T_PERS_SOFT, "i_i", fixedpt, fixedpt, H5T__conv_i_i); status |= H5T__register_int(H5T_PERS_SOFT, "i_f", fixedpt, floatpt, H5T__conv_i_f); + status |= H5T__register_int(H5T_PERS_SOFT, "i_complex", fixedpt, cplx, H5T__conv_i_complex); + status |= H5T__register_int(H5T_PERS_SOFT, "complex_i", cplx, fixedpt, H5T__conv_complex_i); status |= H5T__register_int(H5T_PERS_SOFT, "f_f", floatpt, floatpt, H5T__conv_f_f); status |= H5T__register_int(H5T_PERS_SOFT, "f_i", floatpt, fixedpt, H5T__conv_f_i); + status |= H5T__register_int(H5T_PERS_SOFT, "f_complex", floatpt, cplx, H5T__conv_f_complex); + status |= H5T__register_int(H5T_PERS_SOFT, "complex_f", cplx, floatpt, H5T__conv_complex_f); + status |= H5T__register_int(H5T_PERS_SOFT, "complex_complex", cplx, cplx, H5T__conv_complex); status |= H5T__register_int(H5T_PERS_SOFT, "s_s", string, string, H5T__conv_s_s); status |= H5T__register_int(H5T_PERS_SOFT, "b_b", bitfield, bitfield, H5T__conv_b_b); status |= H5T__register_int(H5T_PERS_SOFT, "ibo", fixedpt, fixedpt, H5T__conv_order); status |= H5T__register_int(H5T_PERS_SOFT, "ibo(opt)", fixedpt, fixedpt, H5T__conv_order_opt); status |= H5T__register_int(H5T_PERS_SOFT, "fbo", floatpt, floatpt, H5T__conv_order); status |= H5T__register_int(H5T_PERS_SOFT, "fbo(opt)", floatpt, floatpt, H5T__conv_order_opt); + status |= H5T__register_int(H5T_PERS_SOFT, "complexbo", cplx, cplx, H5T__conv_order); + status |= H5T__register_int(H5T_PERS_SOFT, "complexbo(opt)", cplx, cplx, H5T__conv_order_opt); status |= H5T__register_int(H5T_PERS_SOFT, "struct(no-opt)", compound, compound, H5T__conv_struct); status |= H5T__register_int(H5T_PERS_SOFT, "struct(opt)", compound, compound, H5T__conv_struct_opt); status |= H5T__register_int(H5T_PERS_SOFT, "enum", enum_type, enum_type, H5T__conv_enum); @@ -1189,6 +1354,12 @@ H5T__init_package(void) status |= H5T__register_int(H5T_PERS_SOFT, "ref", ref, ref, H5T__conv_ref); status |= H5T__register_int(H5T_PERS_SOFT, "objref_ref", objref, ref, H5T__conv_ref); status |= H5T__register_int(H5T_PERS_SOFT, "regref_ref", regref, ref, H5T__conv_ref); + status |= H5T__register_int(H5T_PERS_SOFT, "complex_array_compat", cplx, array, H5T__conv_complex_compat); + status |= H5T__register_int(H5T_PERS_SOFT, "array_complex_compat", array, cplx, H5T__conv_complex_compat); + status |= + H5T__register_int(H5T_PERS_SOFT, "complex_compound_compat", cplx, compound, H5T__conv_complex_compat); + status |= + H5T__register_int(H5T_PERS_SOFT, "compound_complex_compat", compound, cplx, H5T__conv_complex_compat); /* * Native conversions should be listed last since we can use hardware to @@ -1226,6 +1397,34 @@ H5T__init_package(void) status |= H5T__register_int(H5T_PERS_HARD, "ldbl_flt16", native_ldouble, native_float16, H5T__conv_ldouble__Float16); #endif +#endif +#ifdef H5_HAVE_COMPLEX_NUMBERS + status |= H5T__register_int(H5T_PERS_HARD, "flt_fcomplex", native_float, native_float_complex, + H5T__conv_float_fcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "flt_dcomplex", native_float, native_double_complex, + H5T__conv_float_dcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "flt_lcomplex", native_float, native_ldouble_complex, + H5T__conv_float_lcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "dbl_fcomplex", native_double, native_float_complex, + H5T__conv_double_fcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "dbl_dcomplex", native_double, native_double_complex, + H5T__conv_double_dcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "dbl_lcomplex", native_double, native_ldouble_complex, + H5T__conv_double_lcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "ldbl_fcomplex", native_ldouble, native_float_complex, + H5T__conv_ldouble_fcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "ldbl_dcomplex", native_ldouble, native_double_complex, + H5T__conv_ldouble_dcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "ldbl_lcomplex", native_ldouble, native_ldouble_complex, + H5T__conv_ldouble_lcomplex); +#ifdef H5_HAVE__FLOAT16 + status |= H5T__register_int(H5T_PERS_HARD, "flt16_fcomplex", native_float16, native_float_complex, + H5T__conv__Float16_fcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "flt16_dcomplex", native_float16, native_double_complex, + H5T__conv__Float16_dcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "flt16_lcomplex", native_float16, native_ldouble_complex, + H5T__conv__Float16_lcomplex); +#endif #endif /* from long long */ @@ -1389,6 +1588,14 @@ H5T__init_package(void) status |= H5T__register_int(H5T_PERS_HARD, "schar_flt16", native_schar, native_float16, H5T__conv_schar__Float16); #endif +#ifdef H5_HAVE_COMPLEX_NUMBERS + status |= H5T__register_int(H5T_PERS_HARD, "schar_fcomplex", native_schar, native_float_complex, + H5T__conv_schar_fcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "schar_dcomplex", native_schar, native_double_complex, + H5T__conv_schar_dcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "schar_lcomplex", native_schar, native_ldouble_complex, + H5T__conv_schar_lcomplex); +#endif /* From unsigned char to floats */ status |= @@ -1401,6 +1608,14 @@ H5T__init_package(void) status |= H5T__register_int(H5T_PERS_HARD, "uchar_flt16", native_uchar, native_float16, H5T__conv_uchar__Float16); #endif +#ifdef H5_HAVE_COMPLEX_NUMBERS + status |= H5T__register_int(H5T_PERS_HARD, "uchar_fcomplex", native_uchar, native_float_complex, + H5T__conv_uchar_fcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "uchar_dcomplex", native_uchar, native_double_complex, + H5T__conv_uchar_dcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "uchar_lcomplex", native_uchar, native_ldouble_complex, + H5T__conv_uchar_lcomplex); +#endif /* From short to floats */ status |= @@ -1413,6 +1628,14 @@ H5T__init_package(void) status |= H5T__register_int(H5T_PERS_HARD, "short_flt16", native_short, native_float16, H5T__conv_short__Float16); #endif +#ifdef H5_HAVE_COMPLEX_NUMBERS + status |= H5T__register_int(H5T_PERS_HARD, "short_fcomplex", native_short, native_float_complex, + H5T__conv_short_fcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "short_dcomplex", native_short, native_double_complex, + H5T__conv_short_dcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "short_lcomplex", native_short, native_ldouble_complex, + H5T__conv_short_lcomplex); +#endif /* From unsigned short to floats */ status |= @@ -1425,6 +1648,14 @@ H5T__init_package(void) status |= H5T__register_int(H5T_PERS_HARD, "ushort_flt16", native_ushort, native_float16, H5T__conv_ushort__Float16); #endif +#ifdef H5_HAVE_COMPLEX_NUMBERS + status |= H5T__register_int(H5T_PERS_HARD, "ushort_fcomplex", native_ushort, native_float_complex, + H5T__conv_ushort_fcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "ushort_dcomplex", native_ushort, native_double_complex, + H5T__conv_ushort_dcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "ushort_lcomplex", native_ushort, native_ldouble_complex, + H5T__conv_ushort_lcomplex); +#endif /* From int to floats */ status |= H5T__register_int(H5T_PERS_HARD, "int_flt", native_int, native_float, H5T__conv_int_float); @@ -1434,6 +1665,14 @@ H5T__init_package(void) status |= H5T__register_int(H5T_PERS_HARD, "int_flt16", native_int, native_float16, H5T__conv_int__Float16); #endif +#ifdef H5_HAVE_COMPLEX_NUMBERS + status |= H5T__register_int(H5T_PERS_HARD, "int_fcomplex", native_int, native_float_complex, + H5T__conv_int_fcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "int_dcomplex", native_int, native_double_complex, + H5T__conv_int_dcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "int_lcomplex", native_int, native_ldouble_complex, + H5T__conv_int_lcomplex); +#endif /* From unsigned int to floats */ status |= H5T__register_int(H5T_PERS_HARD, "uint_flt", native_uint, native_float, H5T__conv_uint_float); @@ -1444,6 +1683,14 @@ H5T__init_package(void) status |= H5T__register_int(H5T_PERS_HARD, "uint_flt16", native_uint, native_float16, H5T__conv_uint__Float16); #endif +#ifdef H5_HAVE_COMPLEX_NUMBERS + status |= H5T__register_int(H5T_PERS_HARD, "uint_fcomplex", native_uint, native_float_complex, + H5T__conv_uint_fcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "uint_dcomplex", native_uint, native_double_complex, + H5T__conv_uint_dcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "uint_lcomplex", native_uint, native_ldouble_complex, + H5T__conv_uint_lcomplex); +#endif /* From long to floats */ status |= H5T__register_int(H5T_PERS_HARD, "long_flt", native_long, native_float, H5T__conv_long_float); @@ -1454,6 +1701,14 @@ H5T__init_package(void) status |= H5T__register_int(H5T_PERS_HARD, "long_flt16", native_long, native_float16, H5T__conv_long__Float16); #endif +#ifdef H5_HAVE_COMPLEX_NUMBERS + status |= H5T__register_int(H5T_PERS_HARD, "long_fcomplex", native_long, native_float_complex, + H5T__conv_long_fcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "long_dcomplex", native_long, native_double_complex, + H5T__conv_long_dcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "long_lcomplex", native_long, native_ldouble_complex, + H5T__conv_long_lcomplex); +#endif /* From unsigned long to floats */ status |= @@ -1466,6 +1721,14 @@ H5T__init_package(void) status |= H5T__register_int(H5T_PERS_HARD, "ulong_flt16", native_ulong, native_float16, H5T__conv_ulong__Float16); #endif +#ifdef H5_HAVE_COMPLEX_NUMBERS + status |= H5T__register_int(H5T_PERS_HARD, "ulong_fcomplex", native_ulong, native_float_complex, + H5T__conv_ulong_fcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "ulong_dcomplex", native_ulong, native_double_complex, + H5T__conv_ulong_dcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "ulong_lcomplex", native_ulong, native_ldouble_complex, + H5T__conv_ulong_lcomplex); +#endif /* From long long to floats */ status |= @@ -1479,6 +1742,16 @@ H5T__init_package(void) #ifdef H5_HAVE__FLOAT16 status |= H5T__register_int(H5T_PERS_HARD, "llong_flt16", native_llong, native_float16, H5T__conv_llong__Float16); +#endif +#ifdef H5_HAVE_COMPLEX_NUMBERS + status |= H5T__register_int(H5T_PERS_HARD, "llong_fcomplex", native_llong, native_float_complex, + H5T__conv_llong_fcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "llong_dcomplex", native_llong, native_double_complex, + H5T__conv_llong_dcomplex); +#ifdef H5T_CONV_INTERNAL_LLONG_LDOUBLE + status |= H5T__register_int(H5T_PERS_HARD, "llong_lcomplex", native_llong, native_ldouble_complex, + H5T__conv_llong_lcomplex); +#endif #endif /* From unsigned long long to floats */ @@ -1493,6 +1766,16 @@ H5T__init_package(void) #ifdef H5_HAVE__FLOAT16 status |= H5T__register_int(H5T_PERS_HARD, "ullong_flt16", native_ullong, native_float16, H5T__conv_ullong__Float16); +#endif +#ifdef H5_HAVE_COMPLEX_NUMBERS + status |= H5T__register_int(H5T_PERS_HARD, "ullong_fcomplex", native_ullong, native_float_complex, + H5T__conv_ullong_fcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "ullong_dcomplex", native_ullong, native_double_complex, + H5T__conv_ullong_dcomplex); +#ifdef H5T_CONV_INTERNAL_ULLONG_LDOUBLE + status |= H5T__register_int(H5T_PERS_HARD, "ullong_lcomplex", native_ullong, native_ldouble_complex, + H5T__conv_ullong_lcomplex); +#endif #endif /* From floats to char */ @@ -1603,7 +1886,7 @@ H5T__init_package(void) H5T__register_int(H5T_PERS_HARD, "flt_ullong", native_float, native_ullong, H5T__conv_float_ullong); status |= H5T__register_int(H5T_PERS_HARD, "dbl_ullong", native_double, native_ullong, H5T__conv_double_ullong); -#if H5T_CONV_INTERNAL_LDOUBLE_ULLONG +#ifdef H5T_CONV_INTERNAL_LDOUBLE_ULLONG status |= H5T__register_int(H5T_PERS_HARD, "ldbl_ullong", native_ldouble, native_ullong, H5T__conv_ldouble_ullong); #endif /* H5T_CONV_INTERNAL_LDOUBLE_ULLONG */ @@ -1612,6 +1895,138 @@ H5T__init_package(void) H5T__conv__Float16_ullong); #endif +#ifdef H5_HAVE_COMPLEX_NUMBERS + /* From complex numbers to char */ + status |= H5T__register_int(H5T_PERS_HARD, "fcomplex_schar", native_float_complex, native_schar, + H5T__conv_fcomplex_schar); + status |= H5T__register_int(H5T_PERS_HARD, "dcomplex_schar", native_double_complex, native_schar, + H5T__conv_dcomplex_schar); + status |= H5T__register_int(H5T_PERS_HARD, "lcomplex_schar", native_ldouble_complex, native_schar, + H5T__conv_lcomplex_schar); + + /* From complex numbers to unsigned char */ + status |= H5T__register_int(H5T_PERS_HARD, "fcomplex_uchar", native_float_complex, native_uchar, + H5T__conv_fcomplex_uchar); + status |= H5T__register_int(H5T_PERS_HARD, "dcomplex_uchar", native_double_complex, native_uchar, + H5T__conv_dcomplex_uchar); + status |= H5T__register_int(H5T_PERS_HARD, "lcomplex_uchar", native_ldouble_complex, native_uchar, + H5T__conv_lcomplex_uchar); + + /* From complex numbers to short */ + status |= H5T__register_int(H5T_PERS_HARD, "fcomplex_short", native_float_complex, native_short, + H5T__conv_fcomplex_short); + status |= H5T__register_int(H5T_PERS_HARD, "dcomplex_short", native_double_complex, native_short, + H5T__conv_dcomplex_short); + status |= H5T__register_int(H5T_PERS_HARD, "lcomplex_short", native_ldouble_complex, native_short, + H5T__conv_lcomplex_short); + + /* From complex numbers to unsigned short */ + status |= H5T__register_int(H5T_PERS_HARD, "fcomplex_ushort", native_float_complex, native_ushort, + H5T__conv_fcomplex_ushort); + status |= H5T__register_int(H5T_PERS_HARD, "dcomplex_ushort", native_double_complex, native_ushort, + H5T__conv_dcomplex_ushort); + status |= H5T__register_int(H5T_PERS_HARD, "lcomplex_ushort", native_ldouble_complex, native_ushort, + H5T__conv_lcomplex_ushort); + + /* From complex numbers to int */ + status |= H5T__register_int(H5T_PERS_HARD, "fcomplex_int", native_float_complex, native_int, + H5T__conv_fcomplex_int); + status |= H5T__register_int(H5T_PERS_HARD, "dcomplex_int", native_double_complex, native_int, + H5T__conv_dcomplex_int); + status |= H5T__register_int(H5T_PERS_HARD, "lcomplex_int", native_ldouble_complex, native_int, + H5T__conv_lcomplex_int); + + /* From complex numbers to unsigned int */ + status |= H5T__register_int(H5T_PERS_HARD, "fcomplex_uint", native_float_complex, native_uint, + H5T__conv_fcomplex_uint); + status |= H5T__register_int(H5T_PERS_HARD, "dcomplex_uint", native_double_complex, native_uint, + H5T__conv_dcomplex_uint); + status |= H5T__register_int(H5T_PERS_HARD, "lcomplex_uint", native_ldouble_complex, native_uint, + H5T__conv_lcomplex_uint); + + /* From complex numbers to long */ + status |= H5T__register_int(H5T_PERS_HARD, "fcomplex_long", native_float_complex, native_long, + H5T__conv_fcomplex_long); + status |= H5T__register_int(H5T_PERS_HARD, "dcomplex_long", native_double_complex, native_long, + H5T__conv_dcomplex_long); + status |= H5T__register_int(H5T_PERS_HARD, "lcomplex_long", native_ldouble_complex, native_long, + H5T__conv_lcomplex_long); + + /* From complex numbers to unsigned long */ + status |= H5T__register_int(H5T_PERS_HARD, "fcomplex_ulong", native_float_complex, native_ulong, + H5T__conv_fcomplex_ulong); + status |= H5T__register_int(H5T_PERS_HARD, "dcomplex_ulong", native_double_complex, native_ulong, + H5T__conv_dcomplex_ulong); + status |= H5T__register_int(H5T_PERS_HARD, "lcomplex_ulong", native_ldouble_complex, native_ulong, + H5T__conv_lcomplex_ulong); + + /* From complex numbers to long long */ + status |= H5T__register_int(H5T_PERS_HARD, "fcomplex_llong", native_float_complex, native_llong, + H5T__conv_fcomplex_llong); + status |= H5T__register_int(H5T_PERS_HARD, "dcomplex_llong", native_double_complex, native_llong, + H5T__conv_dcomplex_llong); +#ifdef H5T_CONV_INTERNAL_LDOUBLE_LLONG + status |= H5T__register_int(H5T_PERS_HARD, "lcomplex_llong", native_ldouble_complex, native_llong, + H5T__conv_lcomplex_llong); +#endif + + /* From complex numbers to unsigned long long */ + status |= H5T__register_int(H5T_PERS_HARD, "fcomplex_ullong", native_float_complex, native_ullong, + H5T__conv_fcomplex_ullong); + status |= H5T__register_int(H5T_PERS_HARD, "dcomplex_ullong", native_double_complex, native_ullong, + H5T__conv_dcomplex_ullong); +#ifdef H5T_CONV_INTERNAL_LDOUBLE_ULLONG + status |= H5T__register_int(H5T_PERS_HARD, "lcomplex_ullong", native_ldouble_complex, native_ullong, + H5T__conv_lcomplex_ullong); +#endif + + /* From complex numbers to floats */ + status |= H5T__register_int(H5T_PERS_HARD, "fcomplex_flt", native_float_complex, native_float, + H5T__conv_fcomplex_float); + status |= H5T__register_int(H5T_PERS_HARD, "fcomplex_dbl", native_float_complex, native_double, + H5T__conv_fcomplex_double); + status |= H5T__register_int(H5T_PERS_HARD, "fcomplex_ldbl", native_float_complex, native_ldouble, + H5T__conv_fcomplex_ldouble); +#ifdef H5_HAVE__FLOAT16 + status |= H5T__register_int(H5T_PERS_HARD, "fcomplex_flt16", native_float_complex, native_float16, + H5T__conv_fcomplex__Float16); +#endif + status |= H5T__register_int(H5T_PERS_HARD, "dcomplex_flt", native_double_complex, native_float, + H5T__conv_dcomplex_float); + status |= H5T__register_int(H5T_PERS_HARD, "dcomplex_dbl", native_double_complex, native_double, + H5T__conv_dcomplex_double); + status |= H5T__register_int(H5T_PERS_HARD, "dcomplex_ldbl", native_double_complex, native_ldouble, + H5T__conv_dcomplex_ldouble); +#ifdef H5_HAVE__FLOAT16 + status |= H5T__register_int(H5T_PERS_HARD, "dcomplex_flt16", native_double_complex, native_float16, + H5T__conv_dcomplex__Float16); +#endif + status |= H5T__register_int(H5T_PERS_HARD, "lcomplex_flt", native_ldouble_complex, native_float, + H5T__conv_lcomplex_float); + status |= H5T__register_int(H5T_PERS_HARD, "lcomplex_dbl", native_ldouble_complex, native_double, + H5T__conv_lcomplex_double); + status |= H5T__register_int(H5T_PERS_HARD, "lcomplex_ldbl", native_ldouble_complex, native_ldouble, + H5T__conv_lcomplex_ldouble); +#if defined(H5_HAVE__FLOAT16) && defined(H5T_CONV_INTERNAL_LDOUBLE_FLOAT16) + status |= H5T__register_int(H5T_PERS_HARD, "lcomplex_flt16", native_ldouble_complex, native_float16, + H5T__conv_lcomplex__Float16); +#endif + + /* From complex numbers to complex numbers */ + status |= H5T__register_int(H5T_PERS_HARD, "fcomplex_dcomplex", native_float_complex, + native_double_complex, H5T__conv_fcomplex_dcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "fcomplex_lcomplex", native_float_complex, + native_ldouble_complex, H5T__conv_fcomplex_lcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "dcomplex_fcomplex", native_double_complex, + native_float_complex, H5T__conv_dcomplex_fcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "dcomplex_lcomplex", native_double_complex, + native_ldouble_complex, H5T__conv_dcomplex_lcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "lcomplex_fcomplex", native_ldouble_complex, + native_float_complex, H5T__conv_lcomplex_fcomplex); + status |= H5T__register_int(H5T_PERS_HARD, "lcomplex_dcomplex", native_ldouble_complex, + native_double_complex, H5T__conv_lcomplex_dcomplex); +#endif + /* * The special no-op conversion is the fastest, so we list it last. The * data types we use are not important as long as the source and @@ -1652,6 +2067,8 @@ H5T__init_package(void) (void)H5T_close_real(vlen); if (array != NULL) (void)H5T_close_real(array); + if (cplx != NULL) + (void)H5T_close_real(cplx); /* Error cleanup */ if (ret_value < 0) { @@ -1765,6 +2182,13 @@ H5T_top_term_package(void) H5T_IEEE_F64BE_g = H5I_INVALID_HID; H5T_IEEE_F64LE_g = H5I_INVALID_HID; + H5T_COMPLEX_IEEE_F16BE_g = H5I_INVALID_HID; + H5T_COMPLEX_IEEE_F16LE_g = H5I_INVALID_HID; + H5T_COMPLEX_IEEE_F32BE_g = H5I_INVALID_HID; + H5T_COMPLEX_IEEE_F32LE_g = H5I_INVALID_HID; + H5T_COMPLEX_IEEE_F64BE_g = H5I_INVALID_HID; + H5T_COMPLEX_IEEE_F64LE_g = H5I_INVALID_HID; + H5T_STD_I8BE_g = H5I_INVALID_HID; H5T_STD_I8LE_g = H5I_INVALID_HID; H5T_STD_I16BE_g = H5I_INVALID_HID; @@ -1802,30 +2226,33 @@ H5T_top_term_package(void) H5T_FORTRAN_S1_g = H5I_INVALID_HID; - H5T_NATIVE_SCHAR_g = H5I_INVALID_HID; - H5T_NATIVE_UCHAR_g = H5I_INVALID_HID; - H5T_NATIVE_SHORT_g = H5I_INVALID_HID; - H5T_NATIVE_USHORT_g = H5I_INVALID_HID; - H5T_NATIVE_INT_g = H5I_INVALID_HID; - H5T_NATIVE_UINT_g = H5I_INVALID_HID; - H5T_NATIVE_LONG_g = H5I_INVALID_HID; - H5T_NATIVE_ULONG_g = H5I_INVALID_HID; - H5T_NATIVE_LLONG_g = H5I_INVALID_HID; - H5T_NATIVE_ULLONG_g = H5I_INVALID_HID; - H5T_NATIVE_FLOAT16_g = H5I_INVALID_HID; - H5T_NATIVE_FLOAT_g = H5I_INVALID_HID; - H5T_NATIVE_DOUBLE_g = H5I_INVALID_HID; - H5T_NATIVE_LDOUBLE_g = H5I_INVALID_HID; - H5T_NATIVE_B8_g = H5I_INVALID_HID; - H5T_NATIVE_B16_g = H5I_INVALID_HID; - H5T_NATIVE_B32_g = H5I_INVALID_HID; - H5T_NATIVE_B64_g = H5I_INVALID_HID; - H5T_NATIVE_OPAQUE_g = H5I_INVALID_HID; - H5T_NATIVE_HADDR_g = H5I_INVALID_HID; - H5T_NATIVE_HSIZE_g = H5I_INVALID_HID; - H5T_NATIVE_HSSIZE_g = H5I_INVALID_HID; - H5T_NATIVE_HERR_g = H5I_INVALID_HID; - H5T_NATIVE_HBOOL_g = H5I_INVALID_HID; + H5T_NATIVE_SCHAR_g = H5I_INVALID_HID; + H5T_NATIVE_UCHAR_g = H5I_INVALID_HID; + H5T_NATIVE_SHORT_g = H5I_INVALID_HID; + H5T_NATIVE_USHORT_g = H5I_INVALID_HID; + H5T_NATIVE_INT_g = H5I_INVALID_HID; + H5T_NATIVE_UINT_g = H5I_INVALID_HID; + H5T_NATIVE_LONG_g = H5I_INVALID_HID; + H5T_NATIVE_ULONG_g = H5I_INVALID_HID; + H5T_NATIVE_LLONG_g = H5I_INVALID_HID; + H5T_NATIVE_ULLONG_g = H5I_INVALID_HID; + H5T_NATIVE_FLOAT16_g = H5I_INVALID_HID; + H5T_NATIVE_FLOAT_g = H5I_INVALID_HID; + H5T_NATIVE_DOUBLE_g = H5I_INVALID_HID; + H5T_NATIVE_LDOUBLE_g = H5I_INVALID_HID; + H5T_NATIVE_FLOAT_COMPLEX_g = H5I_INVALID_HID; + H5T_NATIVE_DOUBLE_COMPLEX_g = H5I_INVALID_HID; + H5T_NATIVE_LDOUBLE_COMPLEX_g = H5I_INVALID_HID; + H5T_NATIVE_B8_g = H5I_INVALID_HID; + H5T_NATIVE_B16_g = H5I_INVALID_HID; + H5T_NATIVE_B32_g = H5I_INVALID_HID; + H5T_NATIVE_B64_g = H5I_INVALID_HID; + H5T_NATIVE_OPAQUE_g = H5I_INVALID_HID; + H5T_NATIVE_HADDR_g = H5I_INVALID_HID; + H5T_NATIVE_HSIZE_g = H5I_INVALID_HID; + H5T_NATIVE_HSSIZE_g = H5I_INVALID_HID; + H5T_NATIVE_HERR_g = H5I_INVALID_HID; + H5T_NATIVE_HBOOL_g = H5I_INVALID_HID; H5T_NATIVE_INT8_g = H5I_INVALID_HID; H5T_NATIVE_UINT8_g = H5I_INVALID_HID; @@ -1968,19 +2395,19 @@ H5Tcreate(H5T_class_t type, size_t size) H5T_t *dt = NULL; /* New datatype constructed */ hid_t ret_value; /* Return value */ - FUNC_ENTER_API(FAIL) + FUNC_ENTER_API(H5I_INVALID_HID) /* check args. We support string (fixed-size or variable-length) now. */ if (size <= 0 && size != H5T_VARIABLE) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "size must be positive"); + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "size must be positive"); /* create the type */ if (NULL == (dt = H5T__create(type, size))) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to create type"); + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, H5I_INVALID_HID, "unable to create type"); /* Get an ID for the datatype */ if ((ret_value = H5I_register(H5I_DATATYPE, dt, true)) < 0) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register datatype ID"); + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to register datatype ID"); done: FUNC_LEAVE_API(ret_value) @@ -2390,7 +2817,7 @@ H5T_detect_class(const H5T_t *dt, H5T_class_t cls, bool from_api) HGOTO_DONE(true); /* Recurse if it's VL, compound, enum or array */ - if (H5T_IS_COMPLEX(dt->shared->u.compnd.memb[i].type->shared->type)) + if (H5T_IS_COMPOSITE(dt->shared->u.compnd.memb[i].type->shared->type)) if ((nested_ret = H5T_detect_class(dt->shared->u.compnd.memb[i].type, cls, from_api)) != false) HGOTO_DONE(nested_ret); @@ -2402,6 +2829,9 @@ H5T_detect_class(const H5T_t *dt, H5T_class_t cls, bool from_api) case H5T_ENUM: HGOTO_DONE(H5T_detect_class(dt->shared->parent, cls, from_api)); break; + case H5T_COMPLEX: + HGOTO_DONE(H5T_detect_class(dt->shared->parent, cls, from_api)); + break; case H5T_NO_CLASS: case H5T_INTEGER: case H5T_FLOAT: @@ -2537,7 +2967,9 @@ H5Tset_size(hid_t type_id, size_t size) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "only strings may be variable length"); if (H5T_ENUM == dt->shared->type && dt->shared->u.enumer.nmembs > 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not allowed after members are defined"); - if (H5T_REFERENCE == dt->shared->type) + if (H5T_ARRAY == dt->shared->type || H5T_REFERENCE == dt->shared->type || H5T_COMPLEX == dt->shared->type) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not defined for this datatype"); + if (H5T_VLEN == dt->shared->type && H5T_VLEN_STRING != dt->shared->u.vlen.type) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not defined for this datatype"); /* Modify the datatype */ @@ -3269,11 +3701,11 @@ H5Tdecode(const void *buf) H5T_t *dt; hid_t ret_value; /* Return value */ - FUNC_ENTER_API(FAIL) + FUNC_ENTER_API(H5I_INVALID_HID) /* Check args */ if (buf == NULL) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "empty buffer"); + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "empty buffer"); /* Create datatype by decoding buffer * There is no way to get the size of the buffer, so we pass in @@ -3282,11 +3714,11 @@ H5Tdecode(const void *buf) * takes a size parameter. */ if (NULL == (dt = H5T_decode(SIZE_MAX, (const unsigned char *)buf))) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "can't decode object"); + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, H5I_INVALID_HID, "can't decode object"); /* Register the type and return the ID */ if ((ret_value = H5I_register(H5I_DATATYPE, dt, true)) < 0) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register data type"); + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to register data type"); done: FUNC_LEAVE_API(ret_value) @@ -3492,6 +3924,9 @@ H5T__create(H5T_class_t type, size_t size) case H5T_ARRAY: /* Array datatype */ HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, NULL, "base type required - use H5Tarray_create2()"); + case H5T_COMPLEX: /* Complex number datatype */ + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, NULL, "base type required - use H5Tcomplex_create()"); + case H5T_NO_CLASS: case H5T_REFERENCE: case H5T_NCLASSES: @@ -3793,6 +4228,7 @@ H5T__complete_copy(H5T_t *new_dt, const H5T_t *old_dt, H5T_shared_t *reopened_fo case H5T_TIME: case H5T_STRING: case H5T_BITFIELD: + case H5T_COMPLEX: case H5T_NCLASSES: default: break; @@ -4162,6 +4598,7 @@ H5T__free(H5T_t *dt) case H5T_REFERENCE: case H5T_VLEN: case H5T_ARRAY: + case H5T_COMPLEX: case H5T_NCLASSES: default: break; @@ -4342,18 +4779,15 @@ H5T__set_size(H5T_t *dt, size_t size) assert(dt); assert(dt->shared); assert(size != 0); + assert(H5T_ARRAY != dt->shared->type); assert(H5T_REFERENCE != dt->shared->type); + assert(H5T_COMPLEX != dt->shared->type); + assert(H5T_VLEN != dt->shared->type || H5T_VLEN_STRING == dt->shared->u.vlen.type); assert(!(H5T_ENUM == dt->shared->type && 0 == dt->shared->u.enumer.nmembs)); if (dt->shared->parent) { if (H5T__set_size(dt->shared->parent, size) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to set size for parent data type"); - - /* Adjust size of datatype appropriately */ - if (dt->shared->type == H5T_ARRAY) - dt->shared->size = dt->shared->parent->shared->size * dt->shared->u.array.nelem; - else if (dt->shared->type != H5T_VLEN) - dt->shared->size = dt->shared->parent->shared->size; } else { if (H5T_IS_ATOMIC(dt->shared)) { @@ -4475,6 +4909,7 @@ H5T__set_size(H5T_t *dt, size_t size) case H5T_VLEN: case H5T_ARRAY: case H5T_REFERENCE: + case H5T_COMPLEX: assert("can't happen" && 0); break; @@ -4863,6 +5298,23 @@ H5T_cmp(const H5T_t *dt1, const H5T_t *dt2, bool superset) HGOTO_DONE(1); break; + case H5T_COMPLEX: + /* Make sure the complex number datatypes are both in the same form */ + tmp = (dt1->shared->u.cplx.form > dt2->shared->u.cplx.form) - + (dt1->shared->u.cplx.form < dt2->shared->u.cplx.form); + if (tmp < 0) + HGOTO_DONE(-1); + if (tmp > 0) + HGOTO_DONE(1); + + tmp = H5T_cmp(dt1->shared->parent, dt2->shared->parent, superset); + if (tmp < 0) + HGOTO_DONE(-1); + if (tmp > 0) + HGOTO_DONE(1); + + break; + case H5T_NO_CLASS: case H5T_INTEGER: case H5T_FLOAT: @@ -4993,6 +5445,7 @@ H5T_cmp(const H5T_t *dt1, const H5T_t *dt2, bool superset) case H5T_ENUM: case H5T_VLEN: case H5T_ARRAY: + case H5T_COMPLEX: case H5T_NCLASSES: default: assert("not implemented yet" && 0); @@ -5693,6 +6146,7 @@ H5T_path_match_find_type_with_volobj(const H5T_t *datatype, const H5VL_object_t case H5T_OPAQUE: case H5T_REFERENCE: /* Should have been determined by above check */ case H5T_ENUM: + case H5T_COMPLEX: case H5T_NO_CLASS: /* Error value, but simplify logic for a true/false return value */ case H5T_NCLASSES: /* Error value, but simplify logic for a true/false return value */ default: @@ -6243,6 +6697,7 @@ H5T_is_sensible(const H5T_t *dt) case H5T_REFERENCE: case H5T_VLEN: case H5T_ARRAY: + case H5T_COMPLEX: case H5T_NCLASSES: default: /* Assume all other datatype are sensible to store on disk */ @@ -6296,7 +6751,7 @@ H5T_set_loc(H5T_t *dt, H5VL_object_t *file, H5T_loc_t loc) /* Recurse if it's VL, compound, enum or array */ /* (If the force_conv flag is _not_ set, the type cannot change in size, so don't recurse) */ if (dt->shared->parent->shared->force_conv && - H5T_IS_COMPLEX(dt->shared->parent->shared->type)) { + H5T_IS_COMPOSITE(dt->shared->parent->shared->type)) { /* Keep the old base element size for later */ old_size = dt->shared->parent->shared->size; @@ -6337,7 +6792,7 @@ H5T_set_loc(H5T_t *dt, H5VL_object_t *file, H5T_loc_t loc) /* Recurse if it's VL, compound, enum or array */ /* (If the force_conv flag is _not_ set, the type cannot change in size, so don't recurse) */ - if (memb_type->shared->force_conv && H5T_IS_COMPLEX(memb_type->shared->type)) { + if (memb_type->shared->force_conv && H5T_IS_COMPOSITE(memb_type->shared->type)) { /* Keep the old field size for later */ old_size = memb_type->shared->size; @@ -6379,7 +6834,7 @@ H5T_set_loc(H5T_t *dt, H5VL_object_t *file, H5T_loc_t loc) * them as part of the same blob)*/ /* (If the force_conv flag is _not_ set, the type cannot change in size, so don't recurse) */ if (dt->shared->parent->shared->force_conv && - H5T_IS_COMPLEX(dt->shared->parent->shared->type) && + H5T_IS_COMPOSITE(dt->shared->parent->shared->type) && (dt->shared->parent->shared->type != H5T_REFERENCE)) { if ((changed = H5T_set_loc(dt->shared->parent, file, loc)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "Unable to set VL location"); @@ -6408,6 +6863,7 @@ H5T_set_loc(H5T_t *dt, H5VL_object_t *file, H5T_loc_t loc) case H5T_BITFIELD: case H5T_OPAQUE: case H5T_ENUM: + case H5T_COMPLEX: case H5T_NCLASSES: default: break; @@ -6504,6 +6960,7 @@ H5T__detect_vlen_ref(const H5T_t *dt) case H5T_BITFIELD: case H5T_OPAQUE: case H5T_REFERENCE: + case H5T_COMPLEX: case H5T_NCLASSES: default: break; @@ -6589,6 +7046,11 @@ H5T__upgrade_version_cb(H5T_t *dt, void *op_value) dt->shared->version = dt->shared->parent->shared->version; break; + case H5T_COMPLEX: + if (dt->shared->parent->shared->version > dt->shared->version) + dt->shared->version = dt->shared->parent->shared->version; + break; + case H5T_NO_CLASS: case H5T_INTEGER: case H5T_FLOAT: @@ -6627,7 +7089,7 @@ H5T__upgrade_version(H5T_t *dt, unsigned new_version) assert(dt); /* Iterate over entire datatype, upgrading the version of components, if it's useful */ - if (H5T__visit(dt, (H5T_VISIT_SIMPLE | H5T_VISIT_COMPLEX_LAST), H5T__upgrade_version_cb, &new_version) < + if (H5T__visit(dt, (H5T_VISIT_SIMPLE | H5T_VISIT_COMPOSITE_LAST), H5T__upgrade_version_cb, &new_version) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_BADITER, FAIL, "iteration to upgrade datatype encoding version failed"); diff --git a/src/H5Tbit.c b/src/H5Tbit.c index 47f46614f5f..06fd1a34d0e 100644 --- a/src/H5Tbit.c +++ b/src/H5Tbit.c @@ -231,7 +231,7 @@ H5T__bit_shift(uint8_t *buf, ssize_t shift_dist, size_t offset, size_t size) *------------------------------------------------------------------------- */ uint64_t -H5T__bit_get_d(uint8_t *buf, size_t offset, size_t size) +H5T__bit_get_d(const uint8_t *buf, size_t offset, size_t size) { uint64_t val = 0; size_t i, hs; diff --git a/src/H5Tcomplex.c b/src/H5Tcomplex.c new file mode 100644 index 00000000000..c073ddadbf8 --- /dev/null +++ b/src/H5Tcomplex.c @@ -0,0 +1,152 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the COPYING file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* + * Module Info: This module contains the functionality for complex number + * datatypes in the H5T interface. + */ + +/****************/ +/* Module Setup */ +/****************/ + +#include "H5Tmodule.h" /* This source code file is part of the H5T module */ + +/***********/ +/* Headers */ +/***********/ +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5Iprivate.h" /* IDs */ +#include "H5Tpkg.h" /* Datatypes */ + +/****************/ +/* Local Macros */ +/****************/ + +/******************/ +/* Local Typedefs */ +/******************/ + +/********************/ +/* Package Typedefs */ +/********************/ + +/********************/ +/* Local Prototypes */ +/********************/ + +/*********************/ +/* Public Variables */ +/*********************/ + +/*********************/ +/* Package Variables */ +/*********************/ + +/*****************************/ +/* Library Private Variables */ +/*****************************/ + +/*******************/ +/* Local Variables */ +/*******************/ + +/*------------------------------------------------------------------------- + * Function: H5Tcomplex_create + * + * Purpose: Create a new complex number datatype based on the specified + * base datatype ID. + * + * Return: Success: ID of new complex number datatype + * Failure: H5I_INVALID_HID + * + *------------------------------------------------------------------------- + */ +hid_t +H5Tcomplex_create(hid_t base_type_id) +{ + H5T_t *base = NULL; /* base datatype */ + H5T_t *dt = NULL; /* new datatype */ + hid_t ret_value = H5I_INVALID_HID; /* return value */ + + FUNC_ENTER_API(H5I_INVALID_HID) + + if (NULL == (base = (H5T_t *)H5I_object_verify(base_type_id, H5I_DATATYPE))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid base datatype ID"); + + if (NULL == (dt = H5T__complex_create(base))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, H5I_INVALID_HID, + "can't create complex number datatype from base datatype"); + + if ((ret_value = H5I_register(H5I_DATATYPE, dt, true)) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to register datatype"); + +done: + FUNC_LEAVE_API(ret_value); +} + +/*------------------------------------------------------------------------- + * Function: H5T__complex_create + * + * Purpose: Create a new complex number datatype based on the specified + * base datatype. + * + * Return: Success: new complex number datatype + * Failure: NULL + * + *------------------------------------------------------------------------- + */ +H5T_t * +H5T__complex_create(const H5T_t *base) +{ + H5T_t *dt = NULL; /* New complex number datatype */ + H5T_t *ret_value = NULL; /* Return value */ + + FUNC_ENTER_PACKAGE + + /* Check args */ + assert(base); + + /* Currently, only floating-point base datatypes are supported. */ + if (base->shared->type != H5T_FLOAT) + HGOTO_ERROR(H5E_DATATYPE, H5E_BADVALUE, NULL, "base datatype is not a H5T_FLOAT datatype"); + if (base->shared->size == 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_BADVALUE, NULL, "invalid base datatype size"); + if (base->shared->size > SIZE_MAX / 2) + HGOTO_ERROR(H5E_DATATYPE, H5E_BADVALUE, NULL, + "base datatype size too large - new datatype size would overflow"); + + /* Build new type */ + if (NULL == (dt = H5T__alloc())) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTALLOC, NULL, "memory allocation failed"); + dt->shared->type = H5T_COMPLEX; + dt->shared->size = 2 * base->shared->size; + + if (NULL == (dt->shared->parent = H5T_copy(base, H5T_COPY_ALL))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCOPY, NULL, "can't copy base datatype"); + + /* Set complex number-specific fields */ + dt->shared->u.cplx.form = H5T_COMPLEX_RECTANGULAR; /* Only rectangular form is currently supported */ + + /* Complex number datatypes use a later version of the datatype object header message */ + dt->shared->version = MAX(base->shared->version, H5O_DTYPE_VERSION_5); + + ret_value = dt; + +done: + if (!ret_value) + if (dt && H5T_close(dt) < 0) + HDONE_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, NULL, "can't close datatype"); + + FUNC_LEAVE_NOAPI(ret_value) +} diff --git a/src/H5Tcompound.c b/src/H5Tcompound.c index cea7c03665c..4131c61e474 100644 --- a/src/H5Tcompound.c +++ b/src/H5Tcompound.c @@ -503,6 +503,8 @@ H5T__pack(const H5T_t *dt) /* Adjust size of datatype appropriately */ if (dt->shared->type == H5T_ARRAY) dt->shared->size = dt->shared->parent->shared->size * dt->shared->u.array.nelem; + else if (dt->shared->type == H5T_COMPLEX) + dt->shared->size = 2 * dt->shared->parent->shared->size; else if (dt->shared->type != H5T_VLEN) dt->shared->size = dt->shared->parent->shared->size; } /* end if */ diff --git a/src/H5Tconv.c b/src/H5Tconv.c index 6d6d023a9c0..7ca3ca6ca3e 100644 --- a/src/H5Tconv.c +++ b/src/H5Tconv.c @@ -28,21 +28,13 @@ #include "H5private.h" /* Generic Functions */ #include "H5CXprivate.h" /* API Contexts */ #include "H5Eprivate.h" /* Error handling */ +#include "H5Tconv.h" /* Datatype Conversions */ #include "H5Tpkg.h" /* Datatypes */ /****************/ /* Local Macros */ /****************/ -/* Swap two elements (I & J) of an array using a temporary variable */ -#define H5_SWAP_BYTES(ARRAY, I, J) \ - do { \ - uint8_t _tmp; \ - _tmp = ARRAY[I]; \ - ARRAY[I] = ARRAY[J]; \ - ARRAY[J] = _tmp; \ - } while (0) - /******************/ /* Local Typedefs */ /******************/ @@ -185,27 +177,47 @@ H5T_get_force_conv(const H5T_t *dt) *------------------------------------------------------------------------- */ herr_t -H5T__reverse_order(uint8_t *rev, uint8_t *s, size_t size, H5T_order_t order) +H5T__reverse_order(uint8_t *rev, uint8_t *s, const H5T_t *dtype) { - size_t i; + H5T_order_t order; + size_t size; FUNC_ENTER_PACKAGE_NOERR assert(s); - assert(size); + assert(dtype); + assert(H5T_IS_ATOMIC(dtype->shared) || H5T_COMPLEX == dtype->shared->type); + + size = dtype->shared->size; + + if (H5T_IS_ATOMIC(dtype->shared)) + order = dtype->shared->u.atomic.order; + else + order = dtype->shared->parent->shared->u.atomic.order; if (H5T_ORDER_VAX == order) { - for (i = 0; i < size; i += 2) { + for (size_t i = 0; i < size; i += 2) { rev[i] = s[(size - 2) - i]; rev[i + 1] = s[(size - 1) - i]; } } else if (H5T_ORDER_BE == order) { - for (i = 0; i < size; i++) - rev[size - (i + 1)] = s[i]; + if (H5T_IS_ATOMIC(dtype->shared)) { + for (size_t i = 0; i < size; i++) + rev[size - (i + 1)] = s[i]; + } + else { + size_t part_size = size / 2; + for (size_t i = 0; i < part_size; i++) + rev[part_size - (i + 1)] = s[i]; + rev += part_size; + s += part_size; + for (size_t i = 0; i < part_size; i++) + rev[part_size - (i + 1)] = s[i]; + } } else { - for (i = 0; i < size; i++) + for (size_t i = 0; i < size; i++) rev[i] = s[i]; } @@ -255,12 +267,12 @@ H5T__conv_noop(const H5T_t H5_ATTR_UNUSED *src, const H5T_t H5_ATTR_UNUSED *dst, /*------------------------------------------------------------------------- * Function: H5T__conv_order * - * Purpose: Convert one type to another when byte order is the only - * difference. + * Purpose: Convert one type to another when byte order is the only + * difference. * - * Note: This is a soft conversion function. + * Note: This is a soft conversion function. * - * Return: Non-negative on success/Negative on failure + * Return: Non-negative on success/Negative on failure * *------------------------------------------------------------------------- */ @@ -269,10 +281,13 @@ H5T__conv_order(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t H5_ATTR_UNUSED *conv_ctx, size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *_buf, void H5_ATTR_UNUSED *background) { - uint8_t *buf = (uint8_t *)_buf; - size_t i; - size_t j, md; - herr_t ret_value = SUCCEED; /* Return value */ + H5T_order_t src_order, dst_order; + uint8_t *buf = (uint8_t *)_buf; + size_t src_offset, dst_offset; + size_t src_size, dst_size; + size_t i; + size_t j, md; + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -281,12 +296,38 @@ H5T__conv_order(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, /* Capability query */ if (NULL == src || NULL == dst) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); - if (src->shared->size != dst->shared->size || 0 != src->shared->u.atomic.offset || - 0 != dst->shared->u.atomic.offset || - !((H5T_ORDER_BE == src->shared->u.atomic.order && - H5T_ORDER_LE == dst->shared->u.atomic.order) || - (H5T_ORDER_LE == src->shared->u.atomic.order && - H5T_ORDER_BE == dst->shared->u.atomic.order))) + + src_size = src->shared->size; + dst_size = dst->shared->size; + if (src_size != dst_size) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported"); + + if (src->shared->parent) { + if (!H5T_IS_ATOMIC(src->shared->parent->shared)) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported"); + src_offset = src->shared->parent->shared->u.atomic.offset; + src_order = src->shared->parent->shared->u.atomic.order; + } + else { + src_offset = src->shared->u.atomic.offset; + src_order = src->shared->u.atomic.order; + } + if (dst->shared->parent) { + if (!H5T_IS_ATOMIC(dst->shared->parent->shared)) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported"); + dst_offset = dst->shared->parent->shared->u.atomic.offset; + dst_order = dst->shared->parent->shared->u.atomic.order; + } + else { + dst_offset = dst->shared->u.atomic.offset; + dst_order = dst->shared->u.atomic.order; + } + + if (0 != src_offset || 0 != dst_offset) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported"); + + if (!((H5T_ORDER_BE == src_order && H5T_ORDER_LE == dst_order) || + (H5T_ORDER_LE == src_order && H5T_ORDER_BE == dst_order))) HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported"); switch (src->shared->type) { case H5T_INTEGER: @@ -307,6 +348,23 @@ H5T__conv_order(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, } /* end if */ break; + case H5T_COMPLEX: { + const H5T_shared_t *src_base_sh = src->shared->parent->shared; + const H5T_shared_t *dst_base_sh = dst->shared->parent->shared; + + if (src_base_sh->u.atomic.u.f.sign != dst_base_sh->u.atomic.u.f.sign || + src_base_sh->u.atomic.u.f.epos != dst_base_sh->u.atomic.u.f.epos || + src_base_sh->u.atomic.u.f.esize != dst_base_sh->u.atomic.u.f.esize || + src_base_sh->u.atomic.u.f.ebias != dst_base_sh->u.atomic.u.f.ebias || + src_base_sh->u.atomic.u.f.mpos != dst_base_sh->u.atomic.u.f.mpos || + src_base_sh->u.atomic.u.f.msize != dst_base_sh->u.atomic.u.f.msize || + src_base_sh->u.atomic.u.f.norm != dst_base_sh->u.atomic.u.f.norm || + src_base_sh->u.atomic.u.f.pad != dst_base_sh->u.atomic.u.f.pad) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported"); + + break; + } + case H5T_NO_CLASS: case H5T_TIME: case H5T_STRING: @@ -328,11 +386,41 @@ H5T__conv_order(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, if (NULL == src) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); - buf_stride = buf_stride ? buf_stride : src->shared->size; - md = src->shared->size / 2; - for (i = 0; i < nelmts; i++, buf += buf_stride) - for (j = 0; j < md; j++) - H5_SWAP_BYTES(buf, j, src->shared->size - (j + 1)); + src_size = src->shared->size; + buf_stride = buf_stride ? buf_stride : src_size; + md = src_size / 2; + + /* Complex number types are composed of two floating-point + * elements, each of which is half the size of the datatype + * and have to be converted separately. While halving the + * source datatype size and doubling the number elements to + * be converted works in some cases, structure padding can + * cause issues with that approach, so we special-case + * conversions on complex numbers here. + */ + if (H5T_COMPLEX == src->shared->type) { + size_t part_size = src_size / 2; + + md = part_size / 2; + for (i = 0; i < nelmts; i++, buf += buf_stride) { + uint8_t *cur_part = buf; + + /* Convert real part of complex number element */ + for (j = 0; j < md; j++) + H5_SWAP_BYTES(cur_part, j, part_size - (j + 1)); + + /* Convert imaginary part of complex number element */ + cur_part += part_size; + for (j = 0; j < md; j++) + H5_SWAP_BYTES(cur_part, j, part_size - (j + 1)); + } + } + else { + for (i = 0; i < nelmts; i++, buf += buf_stride) + for (j = 0; j < md; j++) + H5_SWAP_BYTES(buf, j, src_size - (j + 1)); + } + break; case H5T_CONV_FREE: @@ -350,13 +438,13 @@ H5T__conv_order(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, /*------------------------------------------------------------------------- * Function: H5T__conv_order_opt * - * Purpose: Convert one type to another when byte order is the only - * difference. This is the optimized version of H5T__conv_order() - * for a handful of different sizes. + * Purpose: Convert one type to another when byte order is the only + * difference. This is the optimized version of + * H5T__conv_order() for a handful of different sizes. * - * Note: This is a soft conversion function. + * Note: This is a soft conversion function. * - * Return: Non-negative on success/Negative on failure + * Return: Non-negative on success/Negative on failure * *------------------------------------------------------------------------- */ @@ -365,9 +453,12 @@ H5T__conv_order_opt(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t H5_ATTR_UNUSED *conv_ctx, size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *_buf, void H5_ATTR_UNUSED *background) { - uint8_t *buf = (uint8_t *)_buf; - size_t i; - herr_t ret_value = SUCCEED; /* Return value */ + H5T_order_t src_order, dst_order; + uint8_t *buf = (uint8_t *)_buf; + size_t src_offset, dst_offset; + size_t src_size, dst_size; + size_t i; + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -376,19 +467,43 @@ H5T__conv_order_opt(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, /* Capability query */ if (NULL == src || NULL == dst) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); - if (src->shared->size != dst->shared->size || 0 != src->shared->u.atomic.offset || - 0 != dst->shared->u.atomic.offset) + + src_size = src->shared->size; + dst_size = dst->shared->size; + if (src_size != dst_size) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported"); + + if (src->shared->parent) { + if (!H5T_IS_ATOMIC(src->shared->parent->shared)) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported"); + src_offset = src->shared->parent->shared->u.atomic.offset; + src_order = src->shared->parent->shared->u.atomic.order; + } + else { + src_offset = src->shared->u.atomic.offset; + src_order = src->shared->u.atomic.order; + } + if (dst->shared->parent) { + if (!H5T_IS_ATOMIC(dst->shared->parent->shared)) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported"); + dst_offset = dst->shared->parent->shared->u.atomic.offset; + dst_order = dst->shared->parent->shared->u.atomic.order; + } + else { + dst_offset = dst->shared->u.atomic.offset; + dst_order = dst->shared->u.atomic.order; + } + + if (0 != src_offset || 0 != dst_offset) HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported"); if ((src->shared->type == H5T_REFERENCE && dst->shared->type != H5T_REFERENCE) || (dst->shared->type == H5T_REFERENCE && src->shared->type != H5T_REFERENCE)) HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported"); - if (src->shared->type != H5T_REFERENCE && !((H5T_ORDER_BE == src->shared->u.atomic.order && - H5T_ORDER_LE == dst->shared->u.atomic.order) || - (H5T_ORDER_LE == src->shared->u.atomic.order && - H5T_ORDER_BE == dst->shared->u.atomic.order))) + if (src->shared->type != H5T_REFERENCE && + !((H5T_ORDER_BE == src_order && H5T_ORDER_LE == dst_order) || + (H5T_ORDER_LE == src_order && H5T_ORDER_BE == dst_order))) HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported"); - if (src->shared->size != 1 && src->shared->size != 2 && src->shared->size != 4 && - src->shared->size != 8 && src->shared->size != 16) + if (src_size != 1 && src_size != 2 && src_size != 4 && src_size != 8 && src_size != 16) HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported"); switch (src->shared->type) { case H5T_INTEGER: @@ -417,6 +532,10 @@ H5T__conv_order_opt(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, case H5T_ENUM: case H5T_VLEN: case H5T_ARRAY: + /* Complex numbers require some special-case logic for + * proper handling. Defer to H5T__conv_order for these types. + */ + case H5T_COMPLEX: case H5T_NCLASSES: default: HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported"); diff --git a/src/H5Tconv.h b/src/H5Tconv.h index be822247b6e..fb9ba26e311 100644 --- a/src/H5Tconv.h +++ b/src/H5Tconv.h @@ -25,6 +25,15 @@ /* Length of debugging name buffer */ #define H5T_NAMELEN 32 +/* Swap two elements (I & J) of an array using a temporary variable */ +#define H5_SWAP_BYTES(ARRAY, I, J) \ + do { \ + uint8_t _tmp; \ + _tmp = ARRAY[I]; \ + ARRAY[I] = ARRAY[J]; \ + ARRAY[J] = _tmp; \ + } while (0) + /****************************/ /* Library Private Typedefs */ /****************************/ @@ -184,7 +193,7 @@ H5_DLL herr_t H5T__conv_order_opt(const H5T_t *src, const H5T_t *dst, H5T_cdata_ size_t bkg_stride, void *_buf, void *bkg); /* Utility functions */ -H5_DLL herr_t H5T__reverse_order(uint8_t *rev, uint8_t *s, size_t size, H5T_order_t order); +H5_DLL herr_t H5T__reverse_order(uint8_t *rev, uint8_t *s, const H5T_t *dtype); /* Debugging functions */ H5_DLL herr_t H5T__print_path_stats(H5T_path_t *path, int *nprint /*in,out*/); diff --git a/src/H5Tconv_bitfield.c b/src/H5Tconv_bitfield.c index f9b227196f4..8b46c75c5c5 100644 --- a/src/H5Tconv_bitfield.c +++ b/src/H5Tconv_bitfield.c @@ -106,7 +106,9 @@ H5T__conv_b_b(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_ } /* Allocate space for order-reversed source buffer */ - src_rev = (uint8_t *)H5MM_calloc(src->shared->size); + if (conv_ctx->u.conv.cb_struct.func) + if (NULL == (src_rev = H5MM_calloc(src->shared->size))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTALLOC, FAIL, "unable to allocate temporary buffer"); /* The conversion loop */ H5_CHECK_OVERFLOW(buf_stride, size_t, ssize_t); @@ -162,8 +164,7 @@ H5T__conv_b_b(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_ if (src->shared->u.atomic.prec > dst->shared->u.atomic.prec) { /*overflow*/ if (conv_ctx->u.conv.cb_struct.func) { /*If user's exception handler is present, use it*/ - H5T__reverse_order(src_rev, s, src->shared->size, - src->shared->u.atomic.order); /*reverse order first*/ + H5T__reverse_order(src_rev, s, src); /*reverse order first*/ except_ret = (conv_ctx->u.conv.cb_struct.func)( H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, src_rev, d, conv_ctx->u.conv.cb_struct.user_data); diff --git a/src/H5Tconv_complex.c b/src/H5Tconv_complex.c new file mode 100644 index 00000000000..cdd2402cb0f --- /dev/null +++ b/src/H5Tconv_complex.c @@ -0,0 +1,2315 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the COPYING file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* + * Purpose: Datatype conversion functions for complex number datatypes + */ + +/****************/ +/* Module Setup */ +/****************/ +#include "H5Tmodule.h" /* This source code file is part of the H5T module */ + +/***********/ +/* Headers */ +/***********/ +#include "H5Eprivate.h" +#include "H5Tconv.h" +#include "H5Tconv_macros.h" +#include "H5Tconv_complex.h" +#include "H5Tconv_integer.h" +#include "H5Tconv_float.h" + +/******************/ +/* Local Typedefs */ +/******************/ + +/********************/ +/* Local Prototypes */ +/********************/ + +static herr_t H5T__conv_complex_loop(const H5T_t *src_p, const H5T_t *dst_p, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, void *buf); +static herr_t H5T__conv_complex_part(const H5T_t *src_p, const H5T_t *dst_p, uint8_t *s, uint8_t *d, + const H5T_conv_ctx_t *conv_ctx, uint8_t *src_rev, + bool *exception_handled); + +/*------------------------------------------------------------------------- + * Function: H5T__conv_complex + * + * Purpose: Convert one complex number type to another. This is the + * catch-all function for complex number conversions and is + * probably not particularly fast. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_complex(const H5T_t *src_p, const H5T_t *dst_p, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + herr_t ret_value = SUCCEED; + + FUNC_ENTER_PACKAGE + + switch (cdata->command) { + case H5T_CONV_INIT: { + H5T_atomic_t src_atomic; /* source datatype atomic info */ + H5T_atomic_t dst_atomic; /* destination datatype atomic info */ + + if (!src_p || !dst_p) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); + if (!H5T_IS_ATOMIC(src_p->shared->parent->shared)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid source complex number datatype"); + if (!H5T_IS_ATOMIC(dst_p->shared->parent->shared)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid destination complex number datatype"); + src_atomic = src_p->shared->parent->shared->u.atomic; + dst_atomic = dst_p->shared->parent->shared->u.atomic; + if (H5T_ORDER_LE != src_atomic.order && H5T_ORDER_BE != src_atomic.order && + H5T_ORDER_VAX != src_atomic.order) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "unsupported byte order for source datatype"); + if (H5T_ORDER_LE != dst_atomic.order && H5T_ORDER_BE != dst_atomic.order && + H5T_ORDER_VAX != src_atomic.order) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "unsupported byte order for destination datatype"); + if (dst_p->shared->size > 2 * TEMP_FLOAT_CONV_BUFFER_SIZE) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "destination datatype size is too large"); + if (8 * sizeof(int64_t) - 1 < src_atomic.u.f.esize || + 8 * sizeof(int64_t) - 1 < dst_atomic.u.f.esize) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "exponent field is too large"); + cdata->need_bkg = H5T_BKG_NO; + + break; + } + + case H5T_CONV_FREE: + break; + + case H5T_CONV_CONV: + if (!src_p || !dst_p) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); + if (NULL == conv_ctx) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid datatype conversion context pointer"); + + if (H5T__conv_complex_loop(src_p, dst_p, conv_ctx, nelmts, buf_stride, buf) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "unable to convert data values"); + + break; + + default: + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command"); + } + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5T__conv_complex() */ + +/*------------------------------------------------------------------------- + * Function: H5T__conv_complex_loop + * + * Purpose: Implements the body of the conversion loop when converting + * complex number values to another complex number type. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +static herr_t +H5T__conv_complex_loop(const H5T_t *src_p, const H5T_t *dst_p, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, + size_t buf_stride, void *buf) +{ + H5T_conv_float_specval_t realval_type; /* floating-point value type (regular, +/-Inf, +/-0, NaN) */ + H5T_conv_float_specval_t imagval_type; /* floating-point value type (regular, +/-Inf, +/-0, NaN) */ + H5T_conv_ret_t except_ret; /* return of conversion exception callback function */ + H5T_atomic_t src_atomic; /* source datatype atomic info */ + H5T_atomic_t dst_atomic; /* destination datatype atomic info */ + ssize_t src_delta, dst_delta; /* source & destination stride */ + uint8_t *s, *sp, *d, *dp; /* source and dest traversal ptrs */ + uint8_t *src_rev = NULL; /* order-reversed source buffer */ + uint8_t dbuf[2 * TEMP_FLOAT_CONV_BUFFER_SIZE]; /* temp destination buffer */ + size_t src_part_size; /* size of each complex number part */ + size_t dst_part_size; /* size of each complex number part */ + size_t olap; /* num overlapping elements */ + int direction; /* forward or backward traversal */ + herr_t ret_value = SUCCEED; + + assert(src_p); + assert(src_p->shared->type == H5T_COMPLEX); + assert(dst_p); + assert(dst_p->shared->type == H5T_COMPLEX); + assert(conv_ctx); + assert(buf); + + FUNC_ENTER_PACKAGE + + src_atomic = src_p->shared->parent->shared->u.atomic; + dst_atomic = dst_p->shared->parent->shared->u.atomic; + src_part_size = src_p->shared->size / 2; + dst_part_size = dst_p->shared->size / 2; + + /* + * Do we process the values from beginning to end or vice versa? Also, + * how many of the elements have the source and destination areas + * overlapping? + */ + if (src_p->shared->size == dst_p->shared->size || buf_stride) { + sp = dp = (uint8_t *)buf; + direction = 1; + olap = nelmts; + } + else if (src_p->shared->size >= dst_p->shared->size) { + double olap_d = + ceil((double)(dst_p->shared->size) / (double)(src_p->shared->size - dst_p->shared->size)); + olap = (size_t)olap_d; + sp = dp = (uint8_t *)buf; + direction = 1; + } + else { + double olap_d = + ceil((double)(src_p->shared->size) / (double)(dst_p->shared->size - src_p->shared->size)); + olap = (size_t)olap_d; + sp = (uint8_t *)buf + (nelmts - 1) * src_p->shared->size; + dp = (uint8_t *)buf + (nelmts - 1) * dst_p->shared->size; + direction = -1; + } + + /* Direction & size of buffer traversal */ + H5_CHECK_OVERFLOW(buf_stride, size_t, ssize_t); + H5_CHECK_OVERFLOW(src_p->shared->size, size_t, ssize_t); + H5_CHECK_OVERFLOW(dst_p->shared->size, size_t, ssize_t); + src_delta = (ssize_t)direction * (ssize_t)(buf_stride ? buf_stride : src_p->shared->size); + dst_delta = (ssize_t)direction * (ssize_t)(buf_stride ? buf_stride : dst_p->shared->size); + + /* Allocate space for order-reversed source buffer */ + if (conv_ctx->u.conv.cb_struct.func) + if (NULL == (src_rev = H5MM_calloc(src_p->shared->size))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTALLOC, FAIL, "couldn't allocate temporary buffer"); + + /* The conversion loop */ + for (size_t elmtno = 0; elmtno < nelmts; elmtno++) { + bool reverse = true; /* if reversed the order of destination */ + bool real_zero = false; /* if real part is +/-0 */ + bool imag_zero = false; /* if imaginary part is +/-0 */ + bool real_except = false; /* if an exception happened for the real part */ + bool imag_except = false; /* if an exception happened for the imaginary part */ + + /* + * If the source and destination buffers overlap then use a + * temporary buffer for the destination. + */ + s = sp; + if (direction > 0) + d = elmtno < olap ? dbuf : dp; + else + d = elmtno + olap >= nelmts ? dbuf : dp; + if (d == dbuf) + memset(dbuf, 0, sizeof(dbuf)); + +#ifndef NDEBUG + if (d == dbuf) { + assert((dp >= sp && dp < sp + src_p->shared->size) || + (sp >= dp && sp < dp + dst_p->shared->size)); + } + else { + assert((dp < sp && dp + dst_p->shared->size <= sp) || + (sp < dp && sp + src_p->shared->size <= dp)); + } +#endif + + /* + * Put the data in little endian order so our loops aren't so + * complicated. We'll do all the conversion stuff assuming + * little endian and then we'll fix the order at the end. + */ + if (H5T_ORDER_BE == src_atomic.order) { + uint8_t *cur_part = s; + /* Swap real part of complex number element */ + for (size_t j = 0; j < src_part_size / 2; j++) + H5_SWAP_BYTES(cur_part, j, src_part_size - (j + 1)); + /* Swap imaginary part of complex number element */ + cur_part += src_part_size; + for (size_t j = 0; j < src_part_size / 2; j++) + H5_SWAP_BYTES(cur_part, j, src_part_size - (j + 1)); + } + else if (H5T_ORDER_VAX == src_atomic.order) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "VAX byte ordering is unsupported for complex number type conversions"); + + /* Check for special cases: +0, -0, +Inf, -Inf, NaN */ + realval_type = H5T__conv_float_find_special(s, &src_atomic, NULL); + imagval_type = H5T__conv_float_find_special(s + (src_p->shared->size / 2), &src_atomic, NULL); + + real_zero = (realval_type == H5T_CONV_FLOAT_SPECVAL_POSZERO || + realval_type == H5T_CONV_FLOAT_SPECVAL_NEGZERO); + imag_zero = (imagval_type == H5T_CONV_FLOAT_SPECVAL_POSZERO || + imagval_type == H5T_CONV_FLOAT_SPECVAL_NEGZERO); + real_except = + (realval_type == H5T_CONV_FLOAT_SPECVAL_POSINF || realval_type == H5T_CONV_FLOAT_SPECVAL_NEGINF || + realval_type == H5T_CONV_FLOAT_SPECVAL_NAN); + imag_except = + (imagval_type == H5T_CONV_FLOAT_SPECVAL_POSINF || imagval_type == H5T_CONV_FLOAT_SPECVAL_NEGINF || + imagval_type == H5T_CONV_FLOAT_SPECVAL_NAN); + + /* A complex number is zero if both parts are +/-0 */ + if (real_zero && imag_zero) { + H5T__bit_copy(d, dst_atomic.u.f.sign, s, src_atomic.u.f.sign, (size_t)1); + H5T__bit_copy(d + dst_part_size, dst_atomic.u.f.sign, s + src_part_size, src_atomic.u.f.sign, + (size_t)1); + H5T__bit_set(d, dst_atomic.u.f.epos, dst_atomic.u.f.esize, false); + H5T__bit_set(d + dst_part_size, dst_atomic.u.f.epos, dst_atomic.u.f.esize, false); + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + H5T__bit_set(d + dst_part_size, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + goto padding; + } + else if (real_except || imag_except) { + except_ret = H5T_CONV_UNHANDLED; + + /* If user's exception handler is present, use it */ + if (conv_ctx->u.conv.cb_struct.func) { + H5T_conv_except_t except_type; /* type of conversion exception that occurred */ + + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src_p); + + /* + * A complex number is infinity if either part is infinity, + * even if the other part is NaN. If a part is infinity, + * since we can only throw one type of conversion exception, + * arbitrarily choose the exception type to throw based + * on the infinity type for the real part (if it's infinity), + * followed by the infinity type for the imaginary part. For + * now, it will be assumed that the conversion exception + * callback will inspect and handle both parts of the complex + * number value. + */ + if (realval_type == H5T_CONV_FLOAT_SPECVAL_POSINF) + except_type = H5T_CONV_EXCEPT_PINF; + else if (realval_type == H5T_CONV_FLOAT_SPECVAL_NEGINF) + except_type = H5T_CONV_EXCEPT_NINF; + else if (imagval_type == H5T_CONV_FLOAT_SPECVAL_POSINF) + except_type = H5T_CONV_EXCEPT_PINF; + else if (imagval_type == H5T_CONV_FLOAT_SPECVAL_NEGINF) + except_type = H5T_CONV_EXCEPT_NINF; + else { + assert(realval_type == H5T_CONV_FLOAT_SPECVAL_NAN || + imagval_type == H5T_CONV_FLOAT_SPECVAL_NAN); + except_type = H5T_CONV_EXCEPT_NAN; + } + + except_ret = (conv_ctx->u.conv.cb_struct.func)(except_type, conv_ctx->u.conv.src_type_id, + conv_ctx->u.conv.dst_type_id, src_rev, d, + conv_ctx->u.conv.cb_struct.user_data); + } + + if (except_ret == H5T_CONV_UNHANDLED) { + if (realval_type == H5T_CONV_FLOAT_SPECVAL_POSINF || + realval_type == H5T_CONV_FLOAT_SPECVAL_NEGINF || + imagval_type == H5T_CONV_FLOAT_SPECVAL_POSINF || + imagval_type == H5T_CONV_FLOAT_SPECVAL_NEGINF) { + H5T__bit_copy(d, dst_atomic.u.f.sign, s, src_atomic.u.f.sign, (size_t)1); + H5T__bit_copy(d + dst_part_size, dst_atomic.u.f.sign, s + src_part_size, + src_atomic.u.f.sign, (size_t)1); + + if (realval_type == H5T_CONV_FLOAT_SPECVAL_POSINF || + realval_type == H5T_CONV_FLOAT_SPECVAL_NEGINF) { + H5T__bit_set(d, dst_atomic.u.f.epos, dst_atomic.u.f.esize, true); + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + /* If the destination has no implied mantissa bit, we'll need to set + * the 1st bit of mantissa to 1. The Intel-Linux "long double" is + * this case. */ + if (H5T_NORM_NONE == dst_atomic.u.f.norm) + H5T__bit_set(d, dst_atomic.u.f.mpos + dst_atomic.u.f.msize - 1, (size_t)1, true); + } + if (imagval_type == H5T_CONV_FLOAT_SPECVAL_POSINF || + imagval_type == H5T_CONV_FLOAT_SPECVAL_NEGINF) { + H5T__bit_set(d + dst_part_size, dst_atomic.u.f.epos, dst_atomic.u.f.esize, true); + H5T__bit_set(d + dst_part_size, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + /* If the destination has no implied mantissa bit, we'll need to set + * the 1st bit of mantissa to 1. The Intel-Linux "long double" is + * this case. */ + if (H5T_NORM_NONE == dst_atomic.u.f.norm) + H5T__bit_set(d + dst_part_size, dst_atomic.u.f.mpos + dst_atomic.u.f.msize - 1, + (size_t)1, true); + } + } + else { + /* There are many NaN values, so we just set all bits of the significand. */ + if (realval_type == H5T_CONV_FLOAT_SPECVAL_NAN) { + H5T__bit_copy(d, dst_atomic.u.f.sign, s, src_atomic.u.f.sign, (size_t)1); + H5T__bit_set(d, dst_atomic.u.f.epos, dst_atomic.u.f.esize, true); + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, true); + } + if (imagval_type == H5T_CONV_FLOAT_SPECVAL_NAN) { + H5T__bit_copy(d + dst_part_size, dst_atomic.u.f.sign, s + src_part_size, + src_atomic.u.f.sign, (size_t)1); + H5T__bit_set(d + dst_part_size, dst_atomic.u.f.epos, dst_atomic.u.f.esize, true); + H5T__bit_set(d + dst_part_size, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, true); + } + } + } + else if (except_ret == H5T_CONV_HANDLED) { + /* No need to reverse the order of destination because user handles it */ + reverse = false; + goto next; + } + else if (except_ret == H5T_CONV_ABORT) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); + + goto padding; + } + + if (real_zero) { + H5T__bit_copy(d, dst_atomic.u.f.sign, s, src_atomic.u.f.sign, (size_t)1); + H5T__bit_set(d, dst_atomic.u.f.epos, dst_atomic.u.f.esize, false); + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + } + else { + bool exception_handled = false; + + if (H5T__conv_complex_part(src_p, dst_p, s, d, conv_ctx, src_rev, &exception_handled) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't convert real part of complex number"); + + /* If an exception was handled, go to the next element */ + if (exception_handled) { + reverse = false; + goto next; + } + } + + if (imag_zero) { + H5T__bit_copy(d + dst_part_size, dst_atomic.u.f.sign, s + src_part_size, src_atomic.u.f.sign, + (size_t)1); + H5T__bit_set(d + dst_part_size, dst_atomic.u.f.epos, dst_atomic.u.f.esize, false); + H5T__bit_set(d + dst_part_size, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + } + else { + bool exception_handled = false; + + if (H5T__conv_complex_part(src_p, dst_p, s + src_part_size, d + dst_part_size, conv_ctx, src_rev, + &exception_handled) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, + "can't convert imaginary part of complex number"); + + /* If an exception was handled, go to the next element */ + if (exception_handled) { + reverse = false; + goto next; + } + } + +padding: + /* + * Set external padding areas + */ + if (dst_atomic.offset > 0) { + assert(H5T_PAD_ZERO == dst_atomic.lsb_pad || H5T_PAD_ONE == dst_atomic.lsb_pad); + H5T__bit_set(d, (size_t)0, dst_atomic.offset, (bool)(H5T_PAD_ONE == dst_atomic.lsb_pad)); + H5T__bit_set(d + dst_part_size, (size_t)0, dst_atomic.offset, + (bool)(H5T_PAD_ONE == dst_atomic.lsb_pad)); + } + { + size_t type_size = dst_p->shared->parent->shared->size; + + if (dst_atomic.offset + dst_atomic.prec != 8 * type_size) { + assert(H5T_PAD_ZERO == dst_atomic.msb_pad || H5T_PAD_ONE == dst_atomic.msb_pad); + H5T__bit_set(d, dst_atomic.offset + dst_atomic.prec, + 8 * type_size - (dst_atomic.offset + dst_atomic.prec), + (bool)(H5T_PAD_ONE == dst_atomic.msb_pad)); + H5T__bit_set(d + dst_part_size, dst_atomic.offset + dst_atomic.prec, + 8 * type_size - (dst_atomic.offset + dst_atomic.prec), + (bool)(H5T_PAD_ONE == dst_atomic.msb_pad)); + } + } + + /* Put the destination in the correct byte order. See note at beginning of loop. */ + if (H5T_ORDER_BE == dst_atomic.order && reverse) { + uint8_t *cur_part = d; + /* Swap real part of complex number element */ + for (size_t j = 0; j < dst_part_size / 2; j++) + H5_SWAP_BYTES(cur_part, j, dst_part_size - (j + 1)); + /* Swap imaginary part of complex number element */ + cur_part += dst_part_size; + for (size_t j = 0; j < dst_part_size / 2; j++) + H5_SWAP_BYTES(cur_part, j, dst_part_size - (j + 1)); + } + else if (H5T_ORDER_VAX == dst_atomic.order) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "VAX byte ordering is unsupported for complex number type conversions"); + +next: + /* + * If we had used a temporary buffer for the destination then we + * should copy the value to the true destination buffer. + */ + if (d == dbuf) + H5MM_memcpy(dp, d, dst_p->shared->size); + + /* Advance source & destination pointers by delta amounts */ + sp += src_delta; + dp += dst_delta; + } /* end conversion loop */ + +done: + H5MM_free(src_rev); + + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5T__conv_complex_loop() */ + +/*------------------------------------------------------------------------- + * Function: H5T__conv_complex_part + * + * Purpose: Helper function to convert a single part (real or + * imaginary) of a complex number. + * + * NOTE: The conversion logic in this function is essentially + * identical to the logic in the H5T__conv_f_f_loop function. + * However, conversion has to be performed on both the real + * and imaginary parts of each complex number element. Since + * complex numbers have the same representation as an array + * of two elements of the base floating-point type, this could + * be simulated in some cases with the H5T__conv_f_f_loop + * function by doubling the number of elements to be converted + * and halving the sizes involved. However, overlapping + * elements or a non-zero `buf_stride` value would complicate + * the buffer pointer advancements since each part of the + * complex number value has to be processed before advancing + * the buffer pointer. Conversion exceptions also pose a + * problem since both parts of the complex number have to be + * taken into account when determining if an exception + * occurred. Application conversion exception callbacks would + * also expect to receive an entire complex number rather than + * part of one. Therefore, the H5T__conv_f_f_loop logic is + * mostly duplicated here and fixes to one function should be + * made to the other, if appropriate. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +static herr_t +H5T__conv_complex_part(const H5T_t *src_p, const H5T_t *dst_p, uint8_t *s, uint8_t *d, + const H5T_conv_ctx_t *conv_ctx, uint8_t *src_rev, bool *exception_handled) +{ + H5T_conv_ret_t except_ret = H5T_CONV_UNHANDLED; /* return of conversion exception callback function */ + H5T_atomic_t src_atomic; /* source datatype atomic info */ + H5T_atomic_t dst_atomic; /* destination datatype atomic info */ + hssize_t expo_max; /* maximum possible dst exponent */ + ssize_t mant_msb = 0; /* most significant bit set in mantissa */ + int64_t expo; /* exponent */ + size_t msize = 0; /* useful size of mantissa in src */ + size_t mpos; /* offset to useful mant in src */ + size_t mrsh; /* amount to right shift mantissa */ + size_t implied; /* destination implied bits */ + bool denormalized = false; /* is either source or destination denormalized? */ + bool carry = false; /* carry after rounding mantissa */ + herr_t ret_value = SUCCEED; + + FUNC_ENTER_PACKAGE + + assert(src_p); + assert(dst_p); + assert(s); + assert(d); + assert(conv_ctx); + assert(exception_handled); + + if (conv_ctx->u.conv.cb_struct.func) + assert(src_rev); + + *exception_handled = false; + + src_atomic = src_p->shared->parent->shared->u.atomic; + dst_atomic = dst_p->shared->parent->shared->u.atomic; + expo_max = ((hssize_t)1 << dst_atomic.u.f.esize) - 1; + + /* + * Get the exponent as an unsigned quantity from the section of + * the source bit field where it's located. Don't worry about + * the exponent bias yet. + */ + expo = (int64_t)H5T__bit_get_d(s, src_atomic.u.f.epos, src_atomic.u.f.esize); + + if (expo == 0) + denormalized = true; + + /* Determine size of mantissa */ + if (0 == expo || H5T_NORM_NONE == src_atomic.u.f.norm) { + if ((mant_msb = H5T__bit_find(s, src_atomic.u.f.mpos, src_atomic.u.f.msize, H5T_BIT_MSB, true)) > 0) + msize = (size_t)mant_msb; + else if (0 == mant_msb) { + msize = 1; + H5T__bit_set(s, src_atomic.u.f.mpos, (size_t)1, false); + } + } + else if (H5T_NORM_IMPLIED == src_atomic.u.f.norm) + msize = src_atomic.u.f.msize; + else + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "normalization method not implemented yet"); + + /* + * The sign for the destination is the same as the sign for the + * source in all cases. + */ + H5T__bit_copy(d, dst_atomic.u.f.sign, s, src_atomic.u.f.sign, (size_t)1); + + /* + * Calculate the true source exponent by adjusting according to + * the source exponent bias. + */ + if (0 == expo || H5T_NORM_NONE == src_atomic.u.f.norm) { + assert(mant_msb >= 0); + expo -= (int64_t)((src_atomic.u.f.ebias - 1) + (src_atomic.u.f.msize - (size_t)mant_msb)); + } + else if (H5T_NORM_IMPLIED == src_atomic.u.f.norm) + expo -= (int64_t)src_atomic.u.f.ebias; + else + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "normalization method not implemented yet"); + + /* + * If the destination is not normalized then right shift the + * mantissa by one. + */ + mrsh = 0; + if (H5T_NORM_NONE == dst_atomic.u.f.norm) + mrsh++; + + /* + * Calculate the destination exponent by adding the destination + * bias and clipping by the minimum and maximum possible + * destination exponent values. + */ + expo += (int64_t)dst_atomic.u.f.ebias; + + if (expo < -(hssize_t)(dst_atomic.u.f.msize)) { + /* The exponent is way too small. Result is zero. */ + expo = 0; + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + msize = 0; + } + else if (expo <= 0) { + /* + * The exponent is too small to fit in the exponent field, + * but by shifting the mantissa to the right we can + * accommodate that value. The mantissa of course is no + * longer normalized. + */ + mrsh += (size_t)(1 - expo); + expo = 0; + denormalized = true; + } + else if (expo >= expo_max) { + /* + * The exponent is too large to fit in the available region + * or it results in the maximum possible value. Use positive + * or negative infinity instead unless the application + * specifies something else. Before calling the overflow + * handler make sure the source buffer we hand it is in the + * original byte order. + */ + if (conv_ctx->u.conv.cb_struct.func) { /* If user's exception handler is present, use it */ + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src_p); + + except_ret = (conv_ctx->u.conv.cb_struct.func)( + H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, src_rev, + d, conv_ctx->u.conv.cb_struct.user_data); + } + + if (except_ret == H5T_CONV_UNHANDLED) { + expo = expo_max; + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + msize = 0; + } + else if (except_ret == H5T_CONV_HANDLED) { + *exception_handled = true; + goto done; + } + else if (except_ret == H5T_CONV_ABORT) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); + } + + /* + * If the destination mantissa is smaller than the source + * mantissa then round the source mantissa. Rounding may cause a + * carry in which case the exponent has to be re-evaluated for + * overflow. That is, if `carry' is clear then the implied + * mantissa bit is `1', else it is `10' binary. + */ + implied = 1; + mpos = src_atomic.u.f.mpos; + if (msize > 0 && mrsh <= dst_atomic.u.f.msize && mrsh + msize > dst_atomic.u.f.msize) { + mant_msb = (ssize_t)(mrsh + msize - dst_atomic.u.f.msize); + assert(mant_msb >= 0 && (size_t)mant_msb <= msize); + /* If the 1st bit being cut off is set and source isn't denormalized. */ + if (H5T__bit_get_d(s, (mpos + (size_t)mant_msb) - 1, (size_t)1) && !denormalized) { + /* Don't do rounding if exponent is 111...110 and mantissa is 111...11. + * To do rounding and increment exponent in this case will create an infinity value. */ + if ((H5T__bit_find(s, mpos + (size_t)mant_msb, msize - (size_t)mant_msb, H5T_BIT_LSB, false) >= + 0 || + expo < expo_max - 1)) { + carry = H5T__bit_inc(s, mpos + (size_t)mant_msb - 1, 1 + msize - (size_t)mant_msb); + if (carry) + implied = 2; + } + } + else if (H5T__bit_get_d(s, (mpos + (size_t)mant_msb) - 1, (size_t)1) && denormalized) + /* For either source or destination, denormalized value doesn't increment carry. */ + H5T__bit_inc(s, mpos + (size_t)mant_msb - 1, 1 + msize - (size_t)mant_msb); + } + else + carry = false; + + /* Write the mantissa to the destination */ + if (mrsh > dst_atomic.u.f.msize + 1) { + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + } + else if (mrsh == dst_atomic.u.f.msize + 1) { + H5T__bit_set(d, dst_atomic.u.f.mpos + 1, dst_atomic.u.f.msize - 1, false); + H5T__bit_set(d, dst_atomic.u.f.mpos, (size_t)1, true); + } + else if (mrsh == dst_atomic.u.f.msize) { + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + H5T__bit_set_d(d, dst_atomic.u.f.mpos, MIN(2, dst_atomic.u.f.msize), (hsize_t)implied); + } + else { + if (mrsh > 0) { + H5T__bit_set(d, dst_atomic.u.f.mpos + dst_atomic.u.f.msize - mrsh, mrsh, false); + H5T__bit_set_d(d, dst_atomic.u.f.mpos + dst_atomic.u.f.msize - mrsh, (size_t)2, (hsize_t)implied); + } + if (mrsh + msize >= dst_atomic.u.f.msize) { + H5T__bit_copy(d, dst_atomic.u.f.mpos, s, (mpos + msize + mrsh - dst_atomic.u.f.msize), + dst_atomic.u.f.msize - mrsh); + } + else { + H5T__bit_copy(d, dst_atomic.u.f.mpos + dst_atomic.u.f.msize - (mrsh + msize), s, mpos, msize); + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize - (mrsh + msize), false); + } + } + + /* Write the exponent */ + if (carry) { + expo++; + if (expo >= expo_max) { + /* + * The exponent is too large to fit in the available + * region or it results in the maximum possible value. + * Use positive or negative infinity instead unless the + * application specifies something else. Before calling + * the overflow handler make sure the source buffer we + * hand it is in the original byte order. + */ + if (conv_ctx->u.conv.cb_struct.func) { /* If user's exception handler is present, use it */ + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src_p); + + except_ret = (conv_ctx->u.conv.cb_struct.func)( + H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, + src_rev, d, conv_ctx->u.conv.cb_struct.user_data); + } + + if (except_ret == H5T_CONV_UNHANDLED) { + expo = expo_max; + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + } + else if (except_ret == H5T_CONV_HANDLED) { + *exception_handled = true; + goto done; + } + else if (except_ret == H5T_CONV_ABORT) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); + } + } + + H5_CHECK_OVERFLOW(expo, hssize_t, hsize_t); + H5T__bit_set_d(d, dst_atomic.u.f.epos, dst_atomic.u.f.esize, (hsize_t)expo); + +done: + FUNC_LEAVE_NOAPI(ret_value) +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_complex_i + * + * Purpose: Convert complex number values to integer values. This is + * the catch-all function for complex number -> integer + * conversions and is probably not particularly fast. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_complex_i(const H5T_t *src_p, const H5T_t *dst_p, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + herr_t ret_value = SUCCEED; + + FUNC_ENTER_PACKAGE + + switch (cdata->command) { + case H5T_CONV_INIT: { + H5T_atomic_t src_atomic; /* source datatype atomic info */ + H5T_atomic_t dst_atomic; /* destination datatype atomic info */ + + if (!src_p || !dst_p) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); + if (!H5T_IS_ATOMIC(src_p->shared->parent->shared)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid complex number datatype"); + src_atomic = src_p->shared->parent->shared->u.atomic; + dst_atomic = dst_p->shared->u.atomic; + if (H5T_ORDER_LE != src_atomic.order && H5T_ORDER_BE != src_atomic.order && + H5T_ORDER_VAX != src_atomic.order) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "unsupported byte order for source datatype"); + if (H5T_ORDER_LE != dst_atomic.order && H5T_ORDER_BE != dst_atomic.order && + H5T_ORDER_VAX != dst_atomic.order) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "unsupported byte order for destination datatype"); + if (dst_p->shared->size > TEMP_INT_CONV_BUFFER_SIZE) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "destination datatype size is too large"); + if (8 * sizeof(hssize_t) - 1 < src_atomic.u.f.esize) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "exponent field is too large"); + cdata->need_bkg = H5T_BKG_NO; + + break; + } + + case H5T_CONV_FREE: + break; + + case H5T_CONV_CONV: + if (!src_p || !dst_p) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); + if (NULL == conv_ctx) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid datatype conversion context pointer"); + + if (H5T__conv_f_i_loop(src_p, dst_p, conv_ctx, nelmts, buf_stride, buf) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "unable to convert data values"); + + break; + + default: + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command"); + } + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5T__conv_complex_i() */ + +/*------------------------------------------------------------------------- + * Function: H5T__conv_complex_f + * + * Purpose: Convert complex number values to floating-point values. + * This is the catch-all function for complex number -> float + * conversions and is probably not particularly fast. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_complex_f(const H5T_t *src_p, const H5T_t *dst_p, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + bool equal_cplx_conv = false; /* if converting between complex and matching float */ + herr_t ret_value = SUCCEED; + + FUNC_ENTER_PACKAGE + + switch (cdata->command) { + case H5T_CONV_INIT: { + H5T_atomic_t src_atomic; /* source datatype atomic info */ + H5T_atomic_t dst_atomic; /* destination datatype atomic info */ + + if (!src_p || !dst_p) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); + if (!H5T_IS_ATOMIC(src_p->shared->parent->shared)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid complex number datatype"); + src_atomic = src_p->shared->parent->shared->u.atomic; + dst_atomic = dst_p->shared->u.atomic; + if (H5T_ORDER_LE != src_atomic.order && H5T_ORDER_BE != src_atomic.order && + H5T_ORDER_VAX != src_atomic.order) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "unsupported byte order for source datatype"); + if (H5T_ORDER_LE != dst_atomic.order && H5T_ORDER_BE != dst_atomic.order && + H5T_ORDER_VAX != dst_atomic.order) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "unsupported byte order for destination datatype"); + if (dst_p->shared->size > TEMP_FLOAT_CONV_BUFFER_SIZE) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "destination datatype size is too large"); + if (8 * sizeof(int64_t) - 1 < src_atomic.u.f.esize || + 8 * sizeof(int64_t) - 1 < dst_atomic.u.f.esize) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "exponent field is too large"); + cdata->need_bkg = H5T_BKG_NO; + + break; + } + + case H5T_CONV_FREE: + break; + + case H5T_CONV_CONV: + if (!src_p || !dst_p) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); + if (NULL == conv_ctx) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid datatype conversion context pointer"); + + /* Are we converting between a floating-point type and a complex number + * type consisting of the same floating-point type? + */ + equal_cplx_conv = (0 == H5T_cmp(src_p->shared->parent, dst_p, false)); + if (!equal_cplx_conv) { + /* If floating-point types differ, use generic f_f loop */ + if (H5T__conv_f_f_loop(src_p, dst_p, conv_ctx, nelmts, buf_stride, buf) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "unable to convert data values"); + } + else { + /* If floating-point types are the same, use specialized loop */ + if (H5T__conv_complex_f_matched(src_p, dst_p, conv_ctx, nelmts, buf_stride, buf) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "unable to convert data values"); + } + + break; + + default: + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command"); + } + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5T__conv_complex_f() */ + +/*------------------------------------------------------------------------- + * Function: H5T__conv_complex_f_matched + * + * Purpose: Implements the body of the conversion loop when converting + * between a floating-point type and a complex number type + * consisting of the same floating-point type. Encapsulates + * common code that is shared between the H5T__conv_complex_f + * and H5T__conv_f_complex functions. Values can be directly + * converted between the types after checking for conversion + * exceptions. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_complex_f_matched(const H5T_t *src_p, const H5T_t *dst_p, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, void *buf) +{ + H5T_conv_float_specval_t specval_type; /* floating-point value type (regular, +/-Inf, +/-0, NaN) */ + H5T_atomic_t src_atomic; /* source datatype atomic info */ + H5T_atomic_t dst_atomic; /* destination datatype atomic info */ + ssize_t src_delta, dst_delta; /* source & destination stride */ + uint8_t *s, *sp, *d, *dp; /* source and dest traversal ptrs */ + uint8_t *src_rev = NULL; /* order-reversed source buffer */ + uint8_t dbuf[TEMP_FLOAT_CONV_BUFFER_SIZE]; /* temp destination buffer */ + size_t olap; /* num overlapping elements */ + int direction; /* forward or backward traversal */ + herr_t ret_value = SUCCEED; + + assert(src_p); + assert(src_p->shared->type == H5T_FLOAT || src_p->shared->type == H5T_COMPLEX); + assert(dst_p); + assert(dst_p->shared->type == H5T_FLOAT || dst_p->shared->type == H5T_COMPLEX); + assert(conv_ctx); + assert(buf); + + FUNC_ENTER_PACKAGE + + if (src_p->shared->type == H5T_COMPLEX) + src_atomic = src_p->shared->parent->shared->u.atomic; + else + src_atomic = src_p->shared->u.atomic; + if (dst_p->shared->type == H5T_COMPLEX) + dst_atomic = dst_p->shared->parent->shared->u.atomic; + else + dst_atomic = dst_p->shared->u.atomic; + +#ifndef NDEBUG + { + /* Make sure the floating-point types match */ + const H5T_t *src_base = (src_p->shared->type == H5T_FLOAT) ? src_p : src_p->shared->parent; + const H5T_t *dst_base = (dst_p->shared->type == H5T_FLOAT) ? dst_p : dst_p->shared->parent; + assert(0 == (H5T_cmp(src_base, dst_base, false))); + } +#endif + + /* + * Do we process the values from beginning to end or vice versa? Also, + * how many of the elements have the source and destination areas + * overlapping? + */ + if (src_p->shared->size == dst_p->shared->size || buf_stride) { + sp = dp = (uint8_t *)buf; + direction = 1; + olap = nelmts; + } + else if (src_p->shared->size >= dst_p->shared->size) { + double olap_d = + ceil((double)(dst_p->shared->size) / (double)(src_p->shared->size - dst_p->shared->size)); + olap = (size_t)olap_d; + sp = dp = (uint8_t *)buf; + direction = 1; + } + else { + double olap_d = + ceil((double)(src_p->shared->size) / (double)(dst_p->shared->size - src_p->shared->size)); + olap = (size_t)olap_d; + sp = (uint8_t *)buf + (nelmts - 1) * src_p->shared->size; + dp = (uint8_t *)buf + (nelmts - 1) * dst_p->shared->size; + direction = -1; + } + + /* Direction & size of buffer traversal */ + H5_CHECK_OVERFLOW(buf_stride, size_t, ssize_t); + H5_CHECK_OVERFLOW(src_p->shared->size, size_t, ssize_t); + H5_CHECK_OVERFLOW(dst_p->shared->size, size_t, ssize_t); + src_delta = (ssize_t)direction * (ssize_t)(buf_stride ? buf_stride : src_p->shared->size); + dst_delta = (ssize_t)direction * (ssize_t)(buf_stride ? buf_stride : dst_p->shared->size); + + /* Allocate space for order-reversed source buffer */ + if (conv_ctx->u.conv.cb_struct.func) + if (NULL == (src_rev = H5MM_calloc(src_p->shared->size))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTALLOC, FAIL, "couldn't allocate temporary buffer"); + + /* The conversion loop */ + for (size_t elmtno = 0; elmtno < nelmts; elmtno++) { + H5T_conv_ret_t except_ret = H5T_CONV_UNHANDLED; /* return of conversion exception callback function */ + bool reverse = true; /* if reversed the order of destination */ + + /* + * If the source and destination buffers overlap then use a + * temporary buffer for the destination. + */ + s = sp; + if (direction > 0) + d = elmtno < olap ? dbuf : dp; + else + d = elmtno + olap >= nelmts ? dbuf : dp; + if (d == dbuf) + memset(dbuf, 0, sizeof(dbuf)); + +#ifndef NDEBUG + if (d == dbuf) { + assert((dp >= sp && dp < sp + src_p->shared->size) || + (sp >= dp && sp < dp + dst_p->shared->size)); + } + else { + assert((dp < sp && dp + dst_p->shared->size <= sp) || + (sp < dp && sp + src_p->shared->size <= dp)); + } +#endif + + /* + * Put the data in little endian order so our loops aren't so + * complicated. We'll do all the conversion stuff assuming + * little endian and then we'll fix the order at the end. + */ + if (H5T_ORDER_BE == src_atomic.order) { + size_t half_size = src_p->shared->size / 2; + + if (H5T_FLOAT == src_p->shared->type) { + for (size_t j = 0; j < half_size; j++) + H5_SWAP_BYTES(s, j, src_p->shared->size - (j + 1)); + } + else { + uint8_t *cur_part = s; + /* Swap real part of complex number element */ + for (size_t j = 0; j < half_size / 2; j++) + H5_SWAP_BYTES(cur_part, j, half_size - (j + 1)); + /* Swap imaginary part of complex number element */ + cur_part += half_size; + for (size_t j = 0; j < half_size / 2; j++) + H5_SWAP_BYTES(cur_part, j, half_size - (j + 1)); + } + } + else if (H5T_ORDER_VAX == src_atomic.order) { + if (H5T_FLOAT == src_p->shared->type) { + uint8_t tmp1, tmp2; + size_t tsize = src_p->shared->size; + assert(0 == tsize % 2); + + for (size_t i = 0; i < tsize; i += 4) { + tmp1 = s[i]; + tmp2 = s[i + 1]; + + s[i] = s[(tsize - 2) - i]; + s[i + 1] = s[(tsize - 1) - i]; + + s[(tsize - 2) - i] = tmp1; + s[(tsize - 1) - i] = tmp2; + } + } + else + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "VAX byte ordering is unsupported for complex number type conversions"); + } + + /* Check for special cases: +0, -0, +Inf, -Inf, NaN */ + specval_type = H5T__conv_float_find_special(s, &src_atomic, NULL); + if (specval_type == H5T_CONV_FLOAT_SPECVAL_POSZERO || + specval_type == H5T_CONV_FLOAT_SPECVAL_NEGZERO) { + H5T__bit_copy(d, dst_atomic.u.f.sign, s, src_atomic.u.f.sign, (size_t)1); + H5T__bit_set(d, dst_atomic.u.f.epos, dst_atomic.u.f.esize, false); + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + goto padding; + } + else if (specval_type != H5T_CONV_FLOAT_SPECVAL_REGULAR) { + /* If user's exception handler is present, use it */ + if (conv_ctx->u.conv.cb_struct.func) { + H5T_conv_except_t except_type; /* type of conversion exception that occurred */ + + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src_p); + + if (specval_type == H5T_CONV_FLOAT_SPECVAL_POSINF) + except_type = H5T_CONV_EXCEPT_PINF; + else if (specval_type == H5T_CONV_FLOAT_SPECVAL_NEGINF) + except_type = H5T_CONV_EXCEPT_NINF; + else + except_type = H5T_CONV_EXCEPT_NAN; + + except_ret = (conv_ctx->u.conv.cb_struct.func)(except_type, conv_ctx->u.conv.src_type_id, + conv_ctx->u.conv.dst_type_id, src_rev, d, + conv_ctx->u.conv.cb_struct.user_data); + } + + if (except_ret == H5T_CONV_UNHANDLED) { + H5T__bit_copy(d, dst_atomic.u.f.sign, s, src_atomic.u.f.sign, (size_t)1); + H5T__bit_set(d, dst_atomic.u.f.epos, dst_atomic.u.f.esize, true); + if (specval_type == H5T_CONV_FLOAT_SPECVAL_NAN) + /* There are many NaN values, so we just set all bits of the significand. */ + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, true); + else { + /* +/-Inf */ + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + /* If the destination has no implied mantissa bit, we'll need to set + * the 1st bit of mantissa to 1. The Intel-Linux "long double" is + * this case. */ + if (H5T_NORM_NONE == dst_atomic.u.f.norm) + H5T__bit_set(d, dst_atomic.u.f.mpos + dst_atomic.u.f.msize - 1, (size_t)1, true); + } + } + else if (except_ret == H5T_CONV_HANDLED) { + /* No need to reverse the order of destination because user handles it */ + reverse = false; + goto next; + } + else if (except_ret == H5T_CONV_ABORT) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); + + goto padding; + } + + /* Direct copy between complex number and floating-point type */ + if (H5T_FLOAT == src_p->shared->type) + memcpy(d, s, src_p->shared->size); + else + memcpy(d, s, src_p->shared->size / 2); + +padding: + /* + * Set external padding areas + */ + if (dst_atomic.offset > 0) { + assert(H5T_PAD_ZERO == dst_atomic.lsb_pad || H5T_PAD_ONE == dst_atomic.lsb_pad); + H5T__bit_set(d, (size_t)0, dst_atomic.offset, (bool)(H5T_PAD_ONE == dst_atomic.lsb_pad)); + } + { + size_t type_size; + + if (dst_p->shared->type == H5T_FLOAT) + type_size = dst_p->shared->size; + else + type_size = dst_p->shared->parent->shared->size; + + if (dst_atomic.offset + dst_atomic.prec != 8 * type_size) { + assert(H5T_PAD_ZERO == dst_atomic.msb_pad || H5T_PAD_ONE == dst_atomic.msb_pad); + H5T__bit_set(d, dst_atomic.offset + dst_atomic.prec, + 8 * type_size - (dst_atomic.offset + dst_atomic.prec), + (bool)(H5T_PAD_ONE == dst_atomic.msb_pad)); + } + } + + /* + * Put the destination in the correct byte order. See note at + * beginning of loop. Only the "real" part of a complex number + * element is swapped. By the C standard, the "imaginary" part + * should just be zeroed when converting a real value to a + * complex value. + */ + if (H5T_ORDER_BE == dst_atomic.order && reverse) { + size_t half_size = dst_p->shared->size / 2; + + if (H5T_FLOAT == dst_p->shared->type) { + for (size_t j = 0; j < half_size; j++) + H5_SWAP_BYTES(d, j, dst_p->shared->size - (j + 1)); + } + else { + for (size_t j = 0; j < half_size / 2; j++) + H5_SWAP_BYTES(d, j, half_size - (j + 1)); + } + } + else if (H5T_ORDER_VAX == dst_atomic.order && reverse) { + if (H5T_FLOAT == dst_p->shared->type) { + uint8_t tmp1, tmp2; + size_t tsize = dst_p->shared->size / 2; + assert(0 == tsize % 2); + + for (size_t i = 0; i < tsize; i += 4) { + tmp1 = d[i]; + tmp2 = d[i + 1]; + + d[i] = d[(tsize - 2) - i]; + d[i + 1] = d[(tsize - 1) - i]; + + d[(tsize - 2) - i] = tmp1; + d[(tsize - 1) - i] = tmp2; + } + } + else + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "VAX byte ordering is unsupported for complex number type conversions"); + } + +next: + /* + * If we had used a temporary buffer for the destination then we + * should copy the value to the true destination buffer. + */ + if (d == dbuf) { + if (H5T_FLOAT == dst_p->shared->type) + H5MM_memcpy(dp, d, dst_p->shared->size); + else + H5MM_memcpy(dp, d, dst_p->shared->size / 2); + } + + /* Ensure imaginary part of complex number is zeroed */ + if (H5T_COMPLEX == dst_p->shared->type) + memset(dp + (dst_p->shared->size / 2), 0, dst_p->shared->size / 2); + + /* Advance source & destination pointers by delta amounts */ + sp += src_delta; + dp += dst_delta; + } /* end conversion loop */ + +done: + H5MM_free(src_rev); + + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5T__conv_complex_f_matched() */ + +/*------------------------------------------------------------------------- + * Function: H5T__conv_complex_compat + * + * Purpose: Performs a no-op conversion between a complex number type + * and an equivalent datatype. Complex number types are + * considered equivalent to the following: + * + * - An array datatype consisting of two elements where each + * element is of the same floating-point datatype as the + * complex number type's base floating-point datatype + * + * - A compound datatype consisting of two fields where each + * field is of the same floating-point datatype as the + * complex number type's base floating-point datatype. The + * compound datatype must not have any leading or trailing + * structure padding or any padding between its two fields. + * The fields must also have compatible names, must have + * compatible offsets within the datatype and must be in + * the order of "real" part -> "imaginary" part, such that + * the compound datatype matches the following representation: + * + * H5T_COMPOUND { + * "r(e)(a)(l)"; OFFSET 0 + * "i(m)(a)(g)(i)(n)(a)(r)(y)"; OFFSET SIZEOF("r(e)(a)(l)") + * } + * + * where "r(e)(a)(l)" means the field may be named any + * substring of "real", such as "r", or "re" and + * "i(m)(a)(g)(i)(n)(a)(r)(y)" means the field may be named + * any substring of "imaginary", such as "im" or "imag". + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_complex_compat(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t H5_ATTR_UNUSED *conv_ctx, size_t H5_ATTR_UNUSED nelmts, + size_t H5_ATTR_UNUSED buf_stride, size_t H5_ATTR_UNUSED bkg_stride, + void H5_ATTR_UNUSED *_buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_t *compound_copy = NULL; + herr_t ret_value = SUCCEED; + + FUNC_ENTER_PACKAGE + + switch (cdata->command) { + case H5T_CONV_INIT: { + const H5T_t *complex_type; + const H5T_t *other_type; + + if (src->shared->type == H5T_COMPLEX) { + if (dst->shared->type != H5T_ARRAY && dst->shared->type != H5T_COMPOUND) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "unsupported destination datatype for conversion"); + complex_type = src; + other_type = dst; + } + else { + if (dst->shared->type != H5T_COMPLEX) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "unsupported destination datatype for conversion"); + complex_type = dst; + other_type = src; + } + + if (complex_type->shared->u.cplx.form != H5T_COMPLEX_RECTANGULAR) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "unsupported form of complex number datatype for conversion"); + + if (other_type->shared->type == H5T_ARRAY) { + if (other_type->shared->u.array.nelem != 2) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "array datatype doesn't have the correct number of elements for conversion"); + if (H5T_cmp(other_type->shared->parent, complex_type->shared->parent, false)) + HGOTO_ERROR( + H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "array datatype's base datatype doesn't match complex number type's base datatype"); + } + else { + H5T_cmemb_t *fields; + size_t name_len; + + assert(other_type->shared->type == H5T_COMPOUND); + + if (other_type->shared->u.compnd.nmembs != 2) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "compound datatype doesn't have the correct number of fields for conversion"); + if (!other_type->shared->u.compnd.packed) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "compound datatype fields aren't packed together"); + if (other_type->shared->u.compnd.memb_size != complex_type->shared->size) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "compound datatype size doesn't match size of complex number datatype"); + + /* Make sure members are unsorted or sorted according to + * their offsets before checking their names + */ + if (other_type->shared->u.compnd.sorted == H5T_SORT_NONE || + other_type->shared->u.compnd.sorted == H5T_SORT_VALUE) + fields = other_type->shared->u.compnd.memb; + else { + /* Make a copy so the sort order of the original type isn't disturbed */ + if (NULL == (compound_copy = H5T_copy(other_type, H5T_COPY_TRANSIENT))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCOPY, FAIL, "can't copy datatype"); + + H5T__sort_value(compound_copy, NULL); + fields = compound_copy->shared->u.compnd.memb; + } + + /* Check "real" part of compound datatype */ + if (fields[0].offset != 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "compound datatype's 'real' field is not at offset 0"); + if (fields[0].size != complex_type->shared->parent->shared->size) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "compound datatype's 'real' field is not the same size as the complex number " + "datatype's base datatype"); + + /* Match up to 5 characters (including the NUL terminator) from the + * field name to a substring of "real". + */ + name_len = strlen(fields[0].name); + if (strncmp(fields[0].name, "real", (name_len < 5) ? name_len : 5)) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "compound datatype's 'real' field name ('%s') didn't match an expected name " + "for conversion", + fields[0].name); + + if (H5T_cmp(fields[0].type, complex_type->shared->parent, false)) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "compound datatype's 'real' field is not the same datatype as the complex " + "number datatype's base datatype"); + + /* Check "imaginary" part of compound datatype */ + if (fields[1].offset != fields[0].size) + HGOTO_ERROR( + H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "compound datatype's 'imaginary' field is not at offset 'sizeof(real_field)'"); + if (fields[1].size != complex_type->shared->parent->shared->size) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "compound datatype's 'imaginary' field is not the same size as the complex " + "number datatype's base datatype"); + + /* Match up to 10 characters (including the NUL terminator) from the + * field name to a substring of "imaginary". + */ + name_len = strlen(fields[1].name); + if (strncmp(fields[1].name, "imaginary", (name_len < 10) ? name_len : 10)) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "compound datatype's 'imaginary' field name ('%s') didn't match an expected " + "name for conversion", + fields[1].name); + + if (H5T_cmp(fields[1].type, complex_type->shared->parent, false)) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "compound datatype's 'imaginary' field is not the same datatype as the " + "complex number datatype's base datatype"); + } + + cdata->need_bkg = H5T_BKG_NO; + + break; + } + + case H5T_CONV_FREE: + break; + + case H5T_CONV_CONV: + /* no-op as the types should be equivalent */ + break; + + default: + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command"); + } + +done: + if (compound_copy && H5T_close(compound_copy) < 0) + HDONE_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL, "can't close datatype"); + + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5T__conv_complex_compat() */ + +#ifdef H5_HAVE_COMPLEX_NUMBERS +/*------------------------------------------------------------------------- + * Function: H5T__conv_fcomplex_schar + * + * Purpose: Converts `float _Complex' / `_Fcomplex' to `signed char' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_fcomplex_schar(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(FLOAT_COMPLEX, SCHAR, H5_float_complex, signed char, SCHAR_MIN, SCHAR_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_fcomplex_uchar + * + * Purpose: Converts `float _Complex' / `_Fcomplex' to `unsigned char' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_fcomplex_uchar(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(FLOAT_COMPLEX, UCHAR, H5_float_complex, unsigned char, 0, UCHAR_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_fcomplex_short + * + * Purpose: Converts `float _Complex' / `_Fcomplex' to `short' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_fcomplex_short(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(FLOAT_COMPLEX, SHORT, H5_float_complex, short, SHRT_MIN, SHRT_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_fcomplex_ushort + * + * Purpose: Converts `float _Complex' / `_Fcomplex' to `unsigned short' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_fcomplex_ushort(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(FLOAT_COMPLEX, USHORT, H5_float_complex, unsigned short, 0, USHRT_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_fcomplex_int + * + * Purpose: Converts `float _Complex' / `_Fcomplex' to `int' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_fcomplex_int(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(FLOAT_COMPLEX, INT, H5_float_complex, int, INT_MIN, INT_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_fcomplex_uint + * + * Purpose: Converts `float _Complex' / `_Fcomplex' to `unsigned int' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_fcomplex_uint(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(FLOAT_COMPLEX, UINT, H5_float_complex, unsigned int, 0, UINT_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_fcomplex_long + * + * Purpose: Converts `float _Complex' / `_Fcomplex' to `long' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_fcomplex_long(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(FLOAT_COMPLEX, LONG, H5_float_complex, long, LONG_MIN, LONG_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_fcomplex_ulong + * + * Purpose: Converts `float _Complex' / `_Fcomplex' to `unsigned long' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_fcomplex_ulong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(FLOAT_COMPLEX, ULONG, H5_float_complex, unsigned long, 0, ULONG_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_fcomplex_llong + * + * Purpose: Converts `float _Complex' / `_Fcomplex' to `long long' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_fcomplex_llong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(FLOAT_COMPLEX, LLONG, H5_float_complex, long long, LLONG_MIN, LLONG_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_fcomplex_ullong + * + * Purpose: Converts `float _Complex' / `_Fcomplex' to + * `unsigned long long' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_fcomplex_ullong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(FLOAT_COMPLEX, ULLONG, H5_float_complex, unsigned long long, 0, ULLONG_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +#ifdef H5_HAVE__FLOAT16 +/*------------------------------------------------------------------------- + * Function: H5T__conv_fcomplex__Float16 + * + * Purpose: Converts `float _Complex' / `_Fcomplex' to `_Float16' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_fcomplex__Float16(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + /* Suppress warning about non-standard floating-point literal suffix */ + H5_GCC_CLANG_DIAG_OFF("pedantic") + H5T_CONV_Zf(FLOAT_COMPLEX, FLOAT16, H5_float_complex, H5__Float16, -FLT16_MAX, FLT16_MAX); + H5_GCC_CLANG_DIAG_ON("pedantic") +} +#endif + +/*------------------------------------------------------------------------- + * Function: H5T__conv_fcomplex_float + * + * Purpose: Converts `float _Complex' / `_Fcomplex' to `float' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_fcomplex_float(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_zf(FLOAT_COMPLEX, FLOAT, H5_float_complex, float, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_fcomplex_double + * + * Purpose: Converts `float _Complex' / `_Fcomplex' to `double' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_fcomplex_double(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_zF(FLOAT_COMPLEX, DOUBLE, H5_float_complex, double, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_fcomplex_ldouble + * + * Purpose: Converts `float _Complex' / `_Fcomplex' to `long double' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_fcomplex_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_zF(FLOAT_COMPLEX, LDOUBLE, H5_float_complex, long double, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_fcomplex_dcomplex + * + * Purpose: Converts `float _Complex' / `_Fcomplex' to + * `double _Complex' / `_Dcomplex' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_fcomplex_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_zZ(FLOAT_COMPLEX, DOUBLE_COMPLEX, H5_float_complex, H5_double_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_fcomplex_lcomplex + * + * Purpose: Converts `float _Complex' / `_Fcomplex' to + * `long double _Complex' / `_Lcomplex' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_fcomplex_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_zZ(FLOAT_COMPLEX, LDOUBLE_COMPLEX, H5_float_complex, H5_ldouble_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_dcomplex_schar + * + * Purpose: Converts `double _Complex' / `_Dcomplex' to `signed char' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_dcomplex_schar(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(DOUBLE_COMPLEX, SCHAR, H5_double_complex, signed char, SCHAR_MIN, SCHAR_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_dcomplex_uchar + * + * Purpose: Converts `double _Complex' / `_Dcomplex' to `unsigned char' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_dcomplex_uchar(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(DOUBLE_COMPLEX, UCHAR, H5_double_complex, unsigned char, 0, UCHAR_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_dcomplex_short + * + * Purpose: Converts `double _Complex' / `_Dcomplex' to `short' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_dcomplex_short(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(DOUBLE_COMPLEX, SHORT, H5_double_complex, short, SHRT_MIN, SHRT_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_dcomplex_ushort + * + * Purpose: Converts `double _Complex' / `_Dcomplex' to + * `unsigned short' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_dcomplex_ushort(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(DOUBLE_COMPLEX, USHORT, H5_double_complex, unsigned short, 0, USHRT_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_dcomplex_int + * + * Purpose: Converts `double _Complex' / `_Dcomplex' to `int' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_dcomplex_int(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(DOUBLE_COMPLEX, INT, H5_double_complex, int, INT_MIN, INT_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_dcomplex_uint + * + * Purpose: Converts `double _Complex' / `_Dcomplex' to `unsigned int' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_dcomplex_uint(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(DOUBLE_COMPLEX, UINT, H5_double_complex, unsigned int, 0, UINT_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_dcomplex_long + * + * Purpose: Converts `double _Complex' / `_Dcomplex' to `long' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_dcomplex_long(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(DOUBLE_COMPLEX, LONG, H5_double_complex, long, LONG_MIN, LONG_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_dcomplex_ulong + * + * Purpose: Converts `double _Complex' / `_Dcomplex' to `unsigned long' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_dcomplex_ulong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(DOUBLE_COMPLEX, ULONG, H5_double_complex, unsigned long, 0, ULONG_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_dcomplex_llong + * + * Purpose: Converts `double _Complex' / `_Dcomplex' to `long long' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_dcomplex_llong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(DOUBLE_COMPLEX, LLONG, H5_double_complex, long long, LLONG_MIN, LLONG_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_dcomplex_ullong + * + * Purpose: Converts `double _Complex' / `_Dcomplex' to + * `unsigned long long' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_dcomplex_ullong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(DOUBLE_COMPLEX, ULLONG, H5_double_complex, unsigned long long, 0, ULLONG_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +#ifdef H5_HAVE__FLOAT16 +/*------------------------------------------------------------------------- + * Function: H5T__conv_dcomplex__Float16 + * + * Purpose: Converts `double _Complex' / `_Dcomplex' to `_Float16' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_dcomplex__Float16(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + /* Suppress warning about non-standard floating-point literal suffix */ + H5_GCC_CLANG_DIAG_OFF("pedantic") + H5T_CONV_Zf(DOUBLE_COMPLEX, FLOAT16, H5_double_complex, H5__Float16, -FLT16_MAX, FLT16_MAX); + H5_GCC_CLANG_DIAG_ON("pedantic") +} +#endif + +/*------------------------------------------------------------------------- + * Function: H5T__conv_dcomplex_float + * + * Purpose: Converts `double _Complex' / `_Dcomplex' to `float' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_dcomplex_float(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_Zf(DOUBLE_COMPLEX, FLOAT, H5_double_complex, float, -FLT_MAX, FLT_MAX); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_dcomplex_double + * + * Purpose: Converts `double _Complex' / `_Dcomplex' to `double' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_dcomplex_double(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_zf(DOUBLE_COMPLEX, DOUBLE, H5_double_complex, double, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_dcomplex_ldouble + * + * Purpose: Converts `double _Complex' / `_Dcomplex' to `long double' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_dcomplex_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_zF(DOUBLE_COMPLEX, LDOUBLE, H5_double_complex, long double, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_dcomplex_fcomplex + * + * Purpose: Converts `double _Complex' / `_Dcomplex' to + * `float _Complex' / `_Fcomplex' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_dcomplex_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_Zz(DOUBLE_COMPLEX, FLOAT_COMPLEX, H5_double_complex, H5_float_complex, -FLT_MAX, FLT_MAX); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_dcomplex_lcomplex + * + * Purpose: Converts `double _Complex' / `_Dcomplex' to + * `long double _Complex' / `_Lcomplex' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_dcomplex_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_zZ(DOUBLE_COMPLEX, LDOUBLE_COMPLEX, H5_double_complex, H5_ldouble_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_lcomplex_schar + * + * Purpose: Converts `long double _Complex' / `_Lcomplex' to + * `signed char' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_lcomplex_schar(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(LDOUBLE_COMPLEX, SCHAR, H5_ldouble_complex, signed char, SCHAR_MIN, SCHAR_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_lcomplex_uchar + * + * Purpose: Converts `long double _Complex' / `_Lcomplex' to + * `unsigned char' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_lcomplex_uchar(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(LDOUBLE_COMPLEX, UCHAR, H5_ldouble_complex, unsigned char, 0, UCHAR_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_lcomplex_short + * + * Purpose: Converts `long double _Complex' / `_Lcomplex' to `short' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_lcomplex_short(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(LDOUBLE_COMPLEX, SHORT, H5_ldouble_complex, short, SHRT_MIN, SHRT_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_lcomplex_ushort + * + * Purpose: Converts `long double _Complex' / `_Lcomplex' to + * `unsigned short' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_lcomplex_ushort(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(LDOUBLE_COMPLEX, USHORT, H5_ldouble_complex, unsigned short, 0, USHRT_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_lcomplex_int + * + * Purpose: Converts `long double _Complex' / `_Lcomplex' to `int' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_lcomplex_int(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(LDOUBLE_COMPLEX, INT, H5_ldouble_complex, int, INT_MIN, INT_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_lcomplex_uint + * + * Purpose: Converts `long double _Complex' / `_Lcomplex' to + * `unsigned int' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_lcomplex_uint(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(LDOUBLE_COMPLEX, UINT, H5_ldouble_complex, unsigned int, 0, UINT_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_lcomplex_long + * + * Purpose: Converts `long double _Complex' / `_Lcomplex' to `long' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_lcomplex_long(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(LDOUBLE_COMPLEX, LONG, H5_ldouble_complex, long, LONG_MIN, LONG_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_lcomplex_ulong + * + * Purpose: Converts `long double _Complex' / `_Lcomplex' to + * `unsigned long' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_lcomplex_ulong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(LDOUBLE_COMPLEX, ULONG, H5_ldouble_complex, unsigned long, 0, ULONG_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_lcomplex_llong + * + * Purpose: Converts `long double _Complex' / `_Lcomplex' to + * `long long' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +#ifdef H5T_CONV_INTERNAL_LDOUBLE_LLONG +herr_t +H5T__conv_lcomplex_llong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(LDOUBLE_COMPLEX, LLONG, H5_ldouble_complex, long long, LLONG_MIN, LLONG_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} +#endif /* H5T_CONV_INTERNAL_LDOUBLE_LLONG */ + +/*------------------------------------------------------------------------- + * Function: H5T__conv_lcomplex_ullong + * + * Purpose: Converts `long double _Complex' / `_Lcomplex' to + * `unsigned long long' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +#ifdef H5T_CONV_INTERNAL_LDOUBLE_ULLONG +herr_t +H5T__conv_lcomplex_ullong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5_GCC_CLANG_DIAG_OFF("float-equal") + H5T_CONV_Zx(LDOUBLE_COMPLEX, ULLONG, H5_ldouble_complex, unsigned long long, 0, ULLONG_MAX); + H5_GCC_CLANG_DIAG_ON("float-equal") +} +#endif /* H5T_CONV_INTERNAL_LDOUBLE_ULLONG */ + +#ifdef H5_HAVE__FLOAT16 +#ifdef H5T_CONV_INTERNAL_LDOUBLE_FLOAT16 +/*------------------------------------------------------------------------- + * Function: H5T__conv_lcomplex__Float16 + * + * Purpose: Converts `long double _Complex' / `_Lcomplex' to `_Float16' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_lcomplex__Float16(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + /* Suppress warning about non-standard floating-point literal suffix */ + H5_GCC_CLANG_DIAG_OFF("pedantic") + H5T_CONV_Zf(LDOUBLE_COMPLEX, FLOAT16, H5_ldouble_complex, H5__Float16, -FLT16_MAX, FLT16_MAX); + H5_GCC_CLANG_DIAG_ON("pedantic") +} +#endif +#endif + +/*------------------------------------------------------------------------- + * Function: H5T__conv_lcomplex_float + * + * Purpose: Converts `long double _Complex' / `_Lcomplex' to `float' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_lcomplex_float(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_Zf(LDOUBLE_COMPLEX, FLOAT, H5_ldouble_complex, float, -FLT_MAX, FLT_MAX); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_lcomplex_double + * + * Purpose: Converts `long double _Complex' / `_Lcomplex' to `double' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_lcomplex_double(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_Zf(LDOUBLE_COMPLEX, DOUBLE, H5_ldouble_complex, double, -DBL_MAX, DBL_MAX); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_lcomplex_ldouble + * + * Purpose: Converts `long double _Complex' / `_Lcomplex' to + * `long double' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_lcomplex_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_zf(LDOUBLE_COMPLEX, LDOUBLE, H5_ldouble_complex, long double, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_lcomplex_fcomplex + * + * Purpose: Converts `long double _Complex' / `_Lcomplex' to + * `float _Complex' / `_Fcomplex' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_lcomplex_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_Zz(LDOUBLE_COMPLEX, FLOAT_COMPLEX, H5_ldouble_complex, H5_float_complex, -FLT_MAX, FLT_MAX); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_lcomplex_dcomplex + * + * Purpose: Converts `long double _Complex' / `_Lcomplex' to + * `double _Complex' / `_Dcomplex' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_lcomplex_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_Zz(LDOUBLE_COMPLEX, DOUBLE_COMPLEX, H5_ldouble_complex, H5_double_complex, -DBL_MAX, DBL_MAX); +} +#endif /* H5_HAVE_COMPLEX_NUMBERS */ diff --git a/src/H5Tconv_complex.h b/src/H5Tconv_complex.h new file mode 100644 index 00000000000..604f04576cc --- /dev/null +++ b/src/H5Tconv_complex.h @@ -0,0 +1,214 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the COPYING file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef H5Tconv_complex_H +#define H5Tconv_complex_H + +/* Private headers needed by this file */ +#include "H5Tpkg.h" + +/***********************/ +/* Function Prototypes */ +/***********************/ + +/* Helper functions shared between conversion modules */ +H5_DLL herr_t H5T__conv_complex_f_matched(const H5T_t *src_p, const H5T_t *dst_p, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + void *buf); + +/****************************************/ +/* Soft (emulated) conversion functions */ +/****************************************/ + +/* Conversion functions between complex number datatypes */ +H5_DLL herr_t H5T__conv_complex(const H5T_t *src_p, const H5T_t *dst_p, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); + +/* Conversion functions from complex number datatype to another datatype class */ +H5_DLL herr_t H5T__conv_complex_i(const H5T_t *src_p, const H5T_t *dst_p, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_complex_f(const H5T_t *src_p, const H5T_t *dst_p, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_complex_compat(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *_buf, void *bkg); + +/*********************************************/ +/* Hard (compiler cast) conversion functions */ +/*********************************************/ + +#ifdef H5_HAVE_COMPLEX_NUMBERS +/* Conversion functions for 'float _Complex' / '_Fcomplex' */ +H5_DLL herr_t H5T__conv_fcomplex_schar(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_fcomplex_uchar(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_fcomplex_short(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_fcomplex_ushort(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_fcomplex_int(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_fcomplex_uint(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_fcomplex_long(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_fcomplex_ulong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_fcomplex_llong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_fcomplex_ullong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#ifdef H5_HAVE__FLOAT16 +H5_DLL herr_t H5T__conv_fcomplex__Float16(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif +H5_DLL herr_t H5T__conv_fcomplex_float(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_fcomplex_double(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_fcomplex_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_fcomplex_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_fcomplex_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); + +/* Conversion functions for 'double _Complex' / '_Dcomplex' */ +H5_DLL herr_t H5T__conv_dcomplex_schar(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_dcomplex_uchar(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_dcomplex_short(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_dcomplex_ushort(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_dcomplex_int(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_dcomplex_uint(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_dcomplex_long(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_dcomplex_ulong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_dcomplex_llong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_dcomplex_ullong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#ifdef H5_HAVE__FLOAT16 +H5_DLL herr_t H5T__conv_dcomplex__Float16(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif +H5_DLL herr_t H5T__conv_dcomplex_float(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_dcomplex_double(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_dcomplex_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_dcomplex_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_dcomplex_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); + +/* Conversion functions for 'long double _Complex' / '_Lcomplex' */ +H5_DLL herr_t H5T__conv_lcomplex_schar(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_lcomplex_uchar(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_lcomplex_short(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_lcomplex_ushort(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_lcomplex_int(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_lcomplex_uint(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_lcomplex_long(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_lcomplex_ulong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#ifdef H5T_CONV_INTERNAL_LDOUBLE_LLONG +H5_DLL herr_t H5T__conv_lcomplex_llong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif +#ifdef H5T_CONV_INTERNAL_LDOUBLE_ULLONG +H5_DLL herr_t H5T__conv_lcomplex_ullong(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif +#if defined(H5_HAVE__FLOAT16) && defined(H5T_CONV_INTERNAL_LDOUBLE_FLOAT16) +H5_DLL herr_t H5T__conv_lcomplex__Float16(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif +H5_DLL herr_t H5T__conv_lcomplex_float(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_lcomplex_double(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_lcomplex_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_lcomplex_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_lcomplex_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif /* H5_HAVE_COMPLEX_NUMBERS */ + +#endif /* H5Tconv_complex_H */ diff --git a/src/H5Tconv_float.c b/src/H5Tconv_float.c index 165c360ac4b..b7231657281 100644 --- a/src/H5Tconv_float.c +++ b/src/H5Tconv_float.c @@ -25,6 +25,8 @@ #include "H5private.h" /* Generic Functions */ #include "H5Tconv.h" /* Datatype conversions */ #include "H5Tconv_macros.h" +#include "H5Tconv_complex.h" +#include "H5Tconv_integer.h" #include "H5Tconv_float.h" /*------------------------------------------------------------------------- @@ -43,54 +45,34 @@ H5T__conv_f_f(const H5T_t *src_p, const H5T_t *dst_p, H5T_cdata_t *cdata, const size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) { - /* Traversal-related variables */ - H5T_atomic_t src; /*atomic source info */ - H5T_atomic_t dst; /*atomic destination info */ - ssize_t src_delta, dst_delta; /*source & destination stride */ - int direction; /*forward or backward traversal */ - size_t elmtno; /*element number */ - size_t half_size; /*half the type size */ - size_t tsize; /*type size for swapping bytes */ - size_t olap; /*num overlapping elements */ - ssize_t bitno = 0; /*bit number */ - uint8_t *s, *sp, *d, *dp; /*source and dest traversal ptrs*/ - uint8_t *src_rev = NULL; /*order-reversed source buffer */ - uint8_t dbuf[64] = {0}; /*temp destination buffer */ - uint8_t tmp1, tmp2; /*temp variables for swapping bytes*/ - - /* Conversion-related variables */ - int64_t expo; /*exponent */ - hssize_t expo_max; /*maximum possible dst exponent */ - size_t msize = 0; /*useful size of mantissa in src*/ - size_t mpos; /*offset to useful mant is src */ - uint64_t sign; /*source sign bit value */ - size_t mrsh; /*amount to right shift mantissa*/ - bool carry = false; /*carry after rounding mantissa */ - size_t i; /*miscellaneous counters */ - size_t implied; /*destination implied bits */ - bool denormalized = false; /*is either source or destination denormalized?*/ - H5T_conv_ret_t except_ret; /*return of callback function */ - bool reverse; /*if reverse the order of destination */ - herr_t ret_value = SUCCEED; /*return value */ + herr_t ret_value = SUCCEED; FUNC_ENTER_PACKAGE switch (cdata->command) { - case H5T_CONV_INIT: + case H5T_CONV_INIT: { + H5T_atomic_t src_atomic; /* source datatype atomic info */ + H5T_atomic_t dst_atomic; /* destination datatype atomic info */ + if (NULL == src_p || NULL == dst_p) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); - src = src_p->shared->u.atomic; - dst = dst_p->shared->u.atomic; - if (H5T_ORDER_LE != src.order && H5T_ORDER_BE != src.order && H5T_ORDER_VAX != src.order) + src_atomic = src_p->shared->u.atomic; + dst_atomic = dst_p->shared->u.atomic; + if (H5T_ORDER_LE != src_atomic.order && H5T_ORDER_BE != src_atomic.order && + H5T_ORDER_VAX != src_atomic.order) HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order"); - if (H5T_ORDER_LE != dst.order && H5T_ORDER_BE != dst.order && H5T_ORDER_VAX != dst.order) + if (H5T_ORDER_LE != dst_atomic.order && H5T_ORDER_BE != dst_atomic.order && + H5T_ORDER_VAX != dst_atomic.order) HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order"); - if (dst_p->shared->size > sizeof(dbuf)) + if (dst_p->shared->size > TEMP_FLOAT_CONV_BUFFER_SIZE) HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "destination size is too large"); - if (8 * sizeof(expo) - 1 < src.u.f.esize || 8 * sizeof(expo) - 1 < dst.u.f.esize) + if (8 * sizeof(int64_t) - 1 < src_atomic.u.f.esize || + 8 * sizeof(int64_t) - 1 < dst_atomic.u.f.esize) HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "exponent field is too large"); cdata->need_bkg = H5T_BKG_NO; + break; + } case H5T_CONV_FREE: break; @@ -101,524 +83,629 @@ H5T__conv_f_f(const H5T_t *src_p, const H5T_t *dst_p, H5T_cdata_t *cdata, const if (NULL == conv_ctx) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid datatype conversion context pointer"); - src = src_p->shared->u.atomic; - dst = dst_p->shared->u.atomic; - expo_max = ((hssize_t)1 << dst.u.f.esize) - 1; - - /* - * Do we process the values from beginning to end or vice versa? Also, - * how many of the elements have the source and destination areas - * overlapping? - */ - if (src_p->shared->size == dst_p->shared->size || buf_stride) { - sp = dp = (uint8_t *)buf; - direction = 1; - olap = nelmts; - } - else if (src_p->shared->size >= dst_p->shared->size) { - double olap_d = - ceil((double)(dst_p->shared->size) / (double)(src_p->shared->size - dst_p->shared->size)); - olap = (size_t)olap_d; - sp = dp = (uint8_t *)buf; - direction = 1; - } - else { - double olap_d = - ceil((double)(src_p->shared->size) / (double)(dst_p->shared->size - src_p->shared->size)); - olap = (size_t)olap_d; - sp = (uint8_t *)buf + (nelmts - 1) * src_p->shared->size; - dp = (uint8_t *)buf + (nelmts - 1) * dst_p->shared->size; - direction = -1; - } + if (H5T__conv_f_f_loop(src_p, dst_p, conv_ctx, nelmts, buf_stride, buf) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "unable to convert data values"); - /* - * Direction & size of buffer traversal. - */ - H5_CHECK_OVERFLOW(buf_stride, size_t, ssize_t); - H5_CHECK_OVERFLOW(src_p->shared->size, size_t, ssize_t); - H5_CHECK_OVERFLOW(dst_p->shared->size, size_t, ssize_t); - src_delta = (ssize_t)direction * (ssize_t)(buf_stride ? buf_stride : src_p->shared->size); - dst_delta = (ssize_t)direction * (ssize_t)(buf_stride ? buf_stride : dst_p->shared->size); - - /* Allocate space for order-reversed source buffer */ - src_rev = (uint8_t *)H5MM_calloc(src_p->shared->size); - - /* The conversion loop */ - for (elmtno = 0; elmtno < nelmts; elmtno++) { - /* Set these variables to default */ - except_ret = H5T_CONV_UNHANDLED; - reverse = true; + break; - /* - * If the source and destination buffers overlap then use a - * temporary buffer for the destination. - */ - if (direction > 0) { - s = sp; - d = elmtno < olap ? dbuf : dp; - } - else { - s = sp; - d = elmtno + olap >= nelmts ? dbuf : dp; - } -#ifndef NDEBUG - /* I don't quite trust the overlap calculations yet */ - if (d == dbuf) { - assert((dp >= sp && dp < sp + src_p->shared->size) || - (sp >= dp && sp < dp + dst_p->shared->size)); - } - else { - assert((dp < sp && dp + dst_p->shared->size <= sp) || - (sp < dp && sp + src_p->shared->size <= dp)); - } -#endif + default: + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command"); + } - /* - * Put the data in little endian order so our loops aren't so - * complicated. We'll do all the conversion stuff assuming - * little endian and then we'll fix the order at the end. - */ - if (H5T_ORDER_BE == src.order) { - half_size = src_p->shared->size / 2; - for (i = 0; i < half_size; i++) { - tmp1 = s[src_p->shared->size - (i + 1)]; - s[src_p->shared->size - (i + 1)] = s[i]; - s[i] = tmp1; - } - } - else if (H5T_ORDER_VAX == src.order) { - tsize = src_p->shared->size; - assert(0 == tsize % 2); +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5T__conv_f_f() */ - for (i = 0; i < tsize; i += 4) { - tmp1 = s[i]; - tmp2 = s[i + 1]; +/*------------------------------------------------------------------------- + * Function: H5T__conv_f_f_loop + * + * Purpose: Implements the body of the conversion loop when converting + * floating-point values to another floating-point type + * (including complex number types). Encapsulates common + * code that is shared between the H5T__conv_f_f conversion + * function and other functions where the logic is nearly + * identical, such as H5T__conv_f_complex and + * H5T__conv_complex_f. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_f_f_loop(const H5T_t *src_p, const H5T_t *dst_p, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, + size_t buf_stride, void *buf) +{ + H5T_atomic_t src_atomic; /* source datatype atomic info */ + H5T_atomic_t dst_atomic; /* destination datatype atomic info */ + hssize_t expo_max; /* maximum possible dst exponent */ + ssize_t src_delta, dst_delta; /* source & destination stride */ + uint8_t *s, *sp, *d, *dp; /* source and dest traversal ptrs */ + uint8_t *src_rev = NULL; /* order-reversed source buffer */ + uint8_t dbuf[TEMP_FLOAT_CONV_BUFFER_SIZE]; /* temp destination buffer */ + size_t olap; /* num overlapping elements */ + int direction; /* forward or backward traversal */ + herr_t ret_value = SUCCEED; - s[i] = s[(tsize - 2) - i]; - s[i + 1] = s[(tsize - 1) - i]; + FUNC_ENTER_PACKAGE - s[(tsize - 2) - i] = tmp1; - s[(tsize - 1) - i] = tmp2; - } - } + assert(src_p); + assert(src_p->shared->type == H5T_FLOAT || src_p->shared->type == H5T_COMPLEX); + assert(dst_p); + assert(dst_p->shared->type == H5T_FLOAT || dst_p->shared->type == H5T_COMPLEX); + assert(conv_ctx); + assert(buf); - /* - * Find the sign bit value of the source. - */ - sign = H5T__bit_get_d(s, src.u.f.sign, (size_t)1); + if (src_p->shared->type == H5T_COMPLEX) + src_atomic = src_p->shared->parent->shared->u.atomic; + else + src_atomic = src_p->shared->u.atomic; + if (dst_p->shared->type == H5T_COMPLEX) + dst_atomic = dst_p->shared->parent->shared->u.atomic; + else + dst_atomic = dst_p->shared->u.atomic; - /* - * Check for special cases: +0, -0, +Inf, -Inf, NaN - */ - if (H5T__bit_find(s, src.u.f.mpos, src.u.f.msize, H5T_BIT_LSB, true) < 0) { - if (H5T__bit_find(s, src.u.f.epos, src.u.f.esize, H5T_BIT_LSB, true) < 0) { - /* +0 or -0 */ - H5T__bit_copy(d, dst.u.f.sign, s, src.u.f.sign, (size_t)1); - H5T__bit_set(d, dst.u.f.epos, dst.u.f.esize, false); - H5T__bit_set(d, dst.u.f.mpos, dst.u.f.msize, false); - goto padding; - } - else if (H5T__bit_find(s, src.u.f.epos, src.u.f.esize, H5T_BIT_LSB, false) < 0) { - /* +Inf or -Inf */ - if (conv_ctx->u.conv.cb_struct - .func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, - src_p->shared->u.atomic.order); - if (sign) - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_NINF, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, - conv_ctx->u.conv.cb_struct.user_data); - else - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_PINF, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, - conv_ctx->u.conv.cb_struct.user_data); - } - - if (except_ret == H5T_CONV_UNHANDLED) { - H5T__bit_copy(d, dst.u.f.sign, s, src.u.f.sign, (size_t)1); - H5T__bit_set(d, dst.u.f.epos, dst.u.f.esize, true); - H5T__bit_set(d, dst.u.f.mpos, dst.u.f.msize, false); - /*If the destination no implied mantissa bit, we'll need to set - *the 1st bit of mantissa to 1. The Intel-Linux long double is - *this case.*/ - if (H5T_NORM_NONE == dst.u.f.norm) - H5T__bit_set(d, dst.u.f.mpos + dst.u.f.msize - 1, (size_t)1, true); - } - else if (except_ret == H5T_CONV_HANDLED) { - /*No need to reverse the order of destination because user handles it*/ - reverse = false; - goto next; - } - else if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "can't handle conversion exception"); - - goto padding; - } - } - else if (H5T_NORM_NONE == src.u.f.norm && - H5T__bit_find(s, src.u.f.mpos, src.u.f.msize - 1, H5T_BIT_LSB, true) < 0 && - H5T__bit_find(s, src.u.f.epos, src.u.f.esize, H5T_BIT_LSB, false) < 0) { - /*This is a special case for the source of no implied mantissa bit. - *If the exponent bits are all 1s and only the 1st bit of mantissa - *is set to 1. It's infinity. The Intel-Linux "long double" is this case.*/ - /* +Inf or -Inf */ - if (conv_ctx->u.conv.cb_struct.func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, src_p->shared->u.atomic.order); - if (sign) - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_NINF, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, - conv_ctx->u.conv.cb_struct.user_data); - else - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_PINF, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, - conv_ctx->u.conv.cb_struct.user_data); - } + expo_max = ((hssize_t)1 << dst_atomic.u.f.esize) - 1; - if (except_ret == H5T_CONV_UNHANDLED) { - H5T__bit_copy(d, dst.u.f.sign, s, src.u.f.sign, (size_t)1); - H5T__bit_set(d, dst.u.f.epos, dst.u.f.esize, true); - H5T__bit_set(d, dst.u.f.mpos, dst.u.f.msize, false); - /*If the destination no implied mantissa bit, we'll need to set - *the 1st bit of mantissa to 1. The Intel-Linux long double is - *this case.*/ - if (H5T_NORM_NONE == dst.u.f.norm) - H5T__bit_set(d, dst.u.f.mpos + dst.u.f.msize - 1, (size_t)1, true); - } - else if (except_ret == H5T_CONV_HANDLED) { - /*No need to reverse the order of destination because user handles it*/ - reverse = false; - goto next; - } - else if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); +#ifndef NDEBUG + /* Are we converting between a floating-point type and a complex number + * type consisting of the same floating-point type? This function is + * only intended for converting between different floating-point types + * and will produce incorrect results otherwise. + */ + if ((src_p->shared->type == H5T_COMPLEX && dst_p->shared->type == H5T_FLOAT) || + (src_p->shared->type == H5T_FLOAT && dst_p->shared->type == H5T_COMPLEX)) { + const H5T_t *src_base = (src_p->shared->type == H5T_FLOAT) ? src_p : src_p->shared->parent; + const H5T_t *dst_base = (dst_p->shared->type == H5T_FLOAT) ? dst_p : dst_p->shared->parent; + assert(0 != (H5T_cmp(src_base, dst_base, false))); + } +#endif - goto padding; - /* Temporary solution to handle VAX special values. - * Note that even though we don't support VAX anymore, we - * still need to handle legacy VAX files so this code must - * remain in place. - */ - } - else if (H5T__bit_find(s, src.u.f.epos, src.u.f.esize, H5T_BIT_LSB, false) < 0) { - /* NaN */ - if (conv_ctx->u.conv.cb_struct.func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, src_p->shared->u.atomic.order); - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_NAN, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, - src_rev, d, conv_ctx->u.conv.cb_struct.user_data); - } + /* + * Do we process the values from beginning to end or vice versa? Also, + * how many of the elements have the source and destination areas + * overlapping? + */ + if (src_p->shared->size == dst_p->shared->size || buf_stride) { + sp = dp = (uint8_t *)buf; + direction = 1; + olap = nelmts; + } + else if (src_p->shared->size >= dst_p->shared->size) { + double olap_d = + ceil((double)(dst_p->shared->size) / (double)(src_p->shared->size - dst_p->shared->size)); + olap = (size_t)olap_d; + sp = dp = (uint8_t *)buf; + direction = 1; + } + else { + double olap_d = + ceil((double)(src_p->shared->size) / (double)(dst_p->shared->size - src_p->shared->size)); + olap = (size_t)olap_d; + sp = (uint8_t *)buf + (nelmts - 1) * src_p->shared->size; + dp = (uint8_t *)buf + (nelmts - 1) * dst_p->shared->size; + direction = -1; + } + + /* Direction & size of buffer traversal */ + H5_CHECK_OVERFLOW(buf_stride, size_t, ssize_t); + H5_CHECK_OVERFLOW(src_p->shared->size, size_t, ssize_t); + H5_CHECK_OVERFLOW(dst_p->shared->size, size_t, ssize_t); + src_delta = (ssize_t)direction * (ssize_t)(buf_stride ? buf_stride : src_p->shared->size); + dst_delta = (ssize_t)direction * (ssize_t)(buf_stride ? buf_stride : dst_p->shared->size); + + /* Allocate space for order-reversed source buffer */ + if (conv_ctx->u.conv.cb_struct.func) + if (NULL == (src_rev = H5MM_calloc(src_p->shared->size))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTALLOC, FAIL, "couldn't allocate temporary buffer"); + + /* The conversion loop */ + for (size_t elmtno = 0; elmtno < nelmts; elmtno++) { + H5T_conv_float_specval_t specval_type; /* floating-point value type (regular, +/-Inf, +/-0, NaN) */ + H5T_conv_ret_t except_ret = H5T_CONV_UNHANDLED; /* return of conversion exception callback function */ + ssize_t bitno = 0; /* bit number */ + int64_t expo; /* exponent */ + size_t implied; /* destination implied bits */ + size_t mpos; /* offset to useful mant in src */ + size_t msize = 0; /* useful size of mantissa in src */ + size_t mrsh; /* amount to right shift mantissa */ + bool reverse = true; /* if reversed the order of destination */ + bool denormalized = false; /* is either source or destination denormalized? */ + bool carry = false; /* carry after rounding mantissa */ + + /* + * If the source and destination buffers overlap then use a + * temporary buffer for the destination. + */ + s = sp; + if (direction > 0) + d = elmtno < olap ? dbuf : dp; + else + d = elmtno + olap >= nelmts ? dbuf : dp; + if (d == dbuf) + memset(dbuf, 0, sizeof(dbuf)); - if (except_ret == H5T_CONV_UNHANDLED) { - /* There are many NaN values, so we just set all bits of - * the significand. */ - H5T__bit_copy(d, dst.u.f.sign, s, src.u.f.sign, (size_t)1); - H5T__bit_set(d, dst.u.f.epos, dst.u.f.esize, true); - H5T__bit_set(d, dst.u.f.mpos, dst.u.f.msize, true); - } - else if (except_ret == H5T_CONV_HANDLED) { - /*No need to reverse the order of destination because user handles it*/ - reverse = false; - goto next; - } - else if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); +#ifndef NDEBUG + if (d == dbuf) { + assert((dp >= sp && dp < sp + src_p->shared->size) || + (sp >= dp && sp < dp + dst_p->shared->size)); + } + else { + assert((dp < sp && dp + dst_p->shared->size <= sp) || + (sp < dp && sp + src_p->shared->size <= dp)); + } +#endif - goto padding; + /* + * Put the data in little endian order so our loops aren't so + * complicated. We'll do all the conversion stuff assuming + * little endian and then we'll fix the order at the end. + */ + if (H5T_ORDER_BE == src_atomic.order) { + size_t half_size = src_p->shared->size / 2; + + if (H5T_FLOAT == src_p->shared->type) { + for (size_t j = 0; j < half_size; j++) + H5_SWAP_BYTES(s, j, src_p->shared->size - (j + 1)); + } + else { + uint8_t *cur_part = s; + /* Swap real part of complex number element */ + for (size_t j = 0; j < half_size / 2; j++) + H5_SWAP_BYTES(cur_part, j, half_size - (j + 1)); + /* Swap imaginary part of complex number element */ + cur_part += half_size; + for (size_t j = 0; j < half_size / 2; j++) + H5_SWAP_BYTES(cur_part, j, half_size - (j + 1)); + } + } + else if (H5T_ORDER_VAX == src_atomic.order) { + if (H5T_FLOAT == src_p->shared->type) { + uint8_t tmp1, tmp2; + size_t tsize = src_p->shared->size; + assert(0 == tsize % 2); + + for (size_t i = 0; i < tsize; i += 4) { + tmp1 = s[i]; + tmp2 = s[i + 1]; + + s[i] = s[(tsize - 2) - i]; + s[i + 1] = s[(tsize - 1) - i]; + + s[(tsize - 2) - i] = tmp1; + s[(tsize - 1) - i] = tmp2; } + } + else + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "VAX byte ordering is unsupported for complex number type conversions"); + } + + /* Check for special cases: +0, -0, +Inf, -Inf, NaN */ + specval_type = H5T__conv_float_find_special(s, &src_atomic, NULL); + if (specval_type == H5T_CONV_FLOAT_SPECVAL_POSZERO || + specval_type == H5T_CONV_FLOAT_SPECVAL_NEGZERO) { + H5T__bit_copy(d, dst_atomic.u.f.sign, s, src_atomic.u.f.sign, (size_t)1); + H5T__bit_set(d, dst_atomic.u.f.epos, dst_atomic.u.f.esize, false); + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + goto padding; + } + else if (specval_type != H5T_CONV_FLOAT_SPECVAL_REGULAR) { + /* If user's exception handler is present, use it */ + if (conv_ctx->u.conv.cb_struct.func) { + H5T_conv_except_t except_type; /* type of conversion exception that occurred */ + + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src_p); + + if (specval_type == H5T_CONV_FLOAT_SPECVAL_POSINF) + except_type = H5T_CONV_EXCEPT_PINF; + else if (specval_type == H5T_CONV_FLOAT_SPECVAL_NEGINF) + except_type = H5T_CONV_EXCEPT_NINF; + else + except_type = H5T_CONV_EXCEPT_NAN; - /* - * Get the exponent as an unsigned quantity from the section of - * the source bit field where it's located. Don't worry about - * the exponent bias yet. - */ - expo = (int64_t)H5T__bit_get_d(s, src.u.f.epos, src.u.f.esize); - - if (expo == 0) - denormalized = true; + except_ret = (conv_ctx->u.conv.cb_struct.func)(except_type, conv_ctx->u.conv.src_type_id, + conv_ctx->u.conv.dst_type_id, src_rev, d, + conv_ctx->u.conv.cb_struct.user_data); + } - /* - * Set markers for the source mantissa, excluding the leading `1' - * (might be implied). - */ - implied = 1; - mpos = src.u.f.mpos; - mrsh = 0; - if (0 == expo || H5T_NORM_NONE == src.u.f.norm) { - if ((bitno = H5T__bit_find(s, src.u.f.mpos, src.u.f.msize, H5T_BIT_MSB, true)) > 0) { - msize = (size_t)bitno; - } - else if (0 == bitno) { - msize = 1; - H5T__bit_set(s, src.u.f.mpos, (size_t)1, false); - } - } - else if (H5T_NORM_IMPLIED == src.u.f.norm) { - msize = src.u.f.msize; - } + if (except_ret == H5T_CONV_UNHANDLED) { + H5T__bit_copy(d, dst_atomic.u.f.sign, s, src_atomic.u.f.sign, (size_t)1); + H5T__bit_set(d, dst_atomic.u.f.epos, dst_atomic.u.f.esize, true); + if (specval_type == H5T_CONV_FLOAT_SPECVAL_NAN) + /* There are many NaN values, so we just set all bits of the significand. */ + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, true); else { - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "normalization method not implemented yet"); + /* +/-Inf */ + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + /* If the destination has no implied mantissa bit, we'll need to set + * the 1st bit of mantissa to 1. The Intel-Linux "long double" is + * this case. */ + if (H5T_NORM_NONE == dst_atomic.u.f.norm) + H5T__bit_set(d, dst_atomic.u.f.mpos + dst_atomic.u.f.msize - 1, (size_t)1, true); } + } + else if (except_ret == H5T_CONV_HANDLED) { + /* No need to reverse the order of destination because user handles it */ + reverse = false; + goto next; + } + else if (except_ret == H5T_CONV_ABORT) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); + + goto padding; + /* Temporary solution to handle VAX special values. + * Note that even though we don't support VAX anymore, we + * still need to handle legacy VAX files so this code must + * remain in place. + */ + } + + /* + * Get the exponent as an unsigned quantity from the section of + * the source bit field where it's located. Don't worry about + * the exponent bias yet. + */ + expo = (int64_t)H5T__bit_get_d(s, src_atomic.u.f.epos, src_atomic.u.f.esize); + + if (expo == 0) + denormalized = true; + + /* + * Set markers for the source mantissa, excluding the leading `1' + * (might be implied). + */ + implied = 1; + mpos = src_atomic.u.f.mpos; + mrsh = 0; + if (0 == expo || H5T_NORM_NONE == src_atomic.u.f.norm) { + if ((bitno = H5T__bit_find(s, src_atomic.u.f.mpos, src_atomic.u.f.msize, H5T_BIT_MSB, true)) > + 0) { + msize = (size_t)bitno; + } + else if (0 == bitno) { + msize = 1; + H5T__bit_set(s, src_atomic.u.f.mpos, (size_t)1, false); + } + } + else if (H5T_NORM_IMPLIED == src_atomic.u.f.norm) { + msize = src_atomic.u.f.msize; + } + else { + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "normalization method not implemented yet"); + } + + /* + * The sign for the destination is the same as the sign for the + * source in all cases. + */ + H5T__bit_copy(d, dst_atomic.u.f.sign, s, src_atomic.u.f.sign, (size_t)1); + + /* + * Calculate the true source exponent by adjusting according to + * the source exponent bias. + */ + if (0 == expo || H5T_NORM_NONE == src_atomic.u.f.norm) { + assert(bitno >= 0); + expo -= (int64_t)((src_atomic.u.f.ebias - 1) + (src_atomic.u.f.msize - (size_t)bitno)); + } + else if (H5T_NORM_IMPLIED == src_atomic.u.f.norm) { + expo -= (int64_t)src_atomic.u.f.ebias; + } + else { + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "normalization method not implemented yet"); + } + + /* + * If the destination is not normalized then right shift the + * mantissa by one. + */ + if (H5T_NORM_NONE == dst_atomic.u.f.norm) + mrsh++; + + /* + * Calculate the destination exponent by adding the destination + * bias and clipping by the minimum and maximum possible + * destination exponent values. + */ + expo += (int64_t)dst_atomic.u.f.ebias; + + if (expo < -(hssize_t)(dst_atomic.u.f.msize)) { + /* The exponent is way too small. Result is zero. */ + expo = 0; + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + msize = 0; + } + else if (expo <= 0) { + /* + * The exponent is too small to fit in the exponent field, + * but by shifting the mantissa to the right we can + * accommodate that value. The mantissa of course is no + * longer normalized. + */ + mrsh += (size_t)(1 - expo); + expo = 0; + denormalized = true; + } + else if (expo >= expo_max) { + /* + * The exponent is too large to fit in the available region + * or it results in the maximum possible value. Use positive + * or negative infinity instead unless the application + * specifies something else. Before calling the overflow + * handler make sure the source buffer we hand it is in the + * original byte order. + */ + if (conv_ctx->u.conv.cb_struct.func) { /* If user's exception handler is present, use it */ + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src_p); - /* - * The sign for the destination is the same as the sign for the - * source in all cases. - */ - H5T__bit_copy(d, dst.u.f.sign, s, src.u.f.sign, (size_t)1); + except_ret = (conv_ctx->u.conv.cb_struct.func)( + H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, + src_rev, d, conv_ctx->u.conv.cb_struct.user_data); + } - /* - * Calculate the true source exponent by adjusting according to - * the source exponent bias. - */ - if (0 == expo || H5T_NORM_NONE == src.u.f.norm) { - assert(bitno >= 0); - expo -= (int64_t)((src.u.f.ebias - 1) + (src.u.f.msize - (size_t)bitno)); - } - else if (H5T_NORM_IMPLIED == src.u.f.norm) { - expo -= (int64_t)src.u.f.ebias; - } - else { - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "normalization method not implemented yet"); + if (except_ret == H5T_CONV_UNHANDLED) { + expo = expo_max; + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + msize = 0; + } + else if (except_ret == H5T_CONV_HANDLED) { + reverse = false; + goto next; + } + else if (except_ret == H5T_CONV_ABORT) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); + } + + /* + * If the destination mantissa is smaller than the source + * mantissa then round the source mantissa. Rounding may cause a + * carry in which case the exponent has to be re-evaluated for + * overflow. That is, if `carry' is clear then the implied + * mantissa bit is `1', else it is `10' binary. + */ + if (msize > 0 && mrsh <= dst_atomic.u.f.msize && mrsh + msize > dst_atomic.u.f.msize) { + bitno = (ssize_t)(mrsh + msize - dst_atomic.u.f.msize); + assert(bitno >= 0 && (size_t)bitno <= msize); + /* If the 1st bit being cut off is set and source isn't denormalized. */ + if (H5T__bit_get_d(s, (mpos + (size_t)bitno) - 1, (size_t)1) && !denormalized) { + /* Don't do rounding if exponent is 111...110 and mantissa is 111...11. + * To do rounding and increment exponent in this case will create an infinity value. */ + if ((H5T__bit_find(s, mpos + (size_t)bitno, msize - (size_t)bitno, H5T_BIT_LSB, false) >= 0 || + expo < expo_max - 1)) { + carry = H5T__bit_inc(s, mpos + (size_t)bitno - 1, 1 + msize - (size_t)bitno); + if (carry) + implied = 2; } + } + else if (H5T__bit_get_d(s, (mpos + (size_t)bitno) - 1, (size_t)1) && denormalized) + /* For either source or destination, denormalized value doesn't increment carry. */ + H5T__bit_inc(s, mpos + (size_t)bitno - 1, 1 + msize - (size_t)bitno); + } + else + carry = false; + + /* + * Write the mantissa to the destination + */ + if (mrsh > dst_atomic.u.f.msize + 1) { + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + } + else if (mrsh == dst_atomic.u.f.msize + 1) { + H5T__bit_set(d, dst_atomic.u.f.mpos + 1, dst_atomic.u.f.msize - 1, false); + H5T__bit_set(d, dst_atomic.u.f.mpos, (size_t)1, true); + } + else if (mrsh == dst_atomic.u.f.msize) { + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); + H5T__bit_set_d(d, dst_atomic.u.f.mpos, MIN(2, dst_atomic.u.f.msize), (hsize_t)implied); + } + else { + if (mrsh > 0) { + H5T__bit_set(d, dst_atomic.u.f.mpos + dst_atomic.u.f.msize - mrsh, mrsh, false); + H5T__bit_set_d(d, dst_atomic.u.f.mpos + dst_atomic.u.f.msize - mrsh, (size_t)2, + (hsize_t)implied); + } + if (mrsh + msize >= dst_atomic.u.f.msize) { + H5T__bit_copy(d, dst_atomic.u.f.mpos, s, (mpos + msize + mrsh - dst_atomic.u.f.msize), + dst_atomic.u.f.msize - mrsh); + } + else { + H5T__bit_copy(d, dst_atomic.u.f.mpos + dst_atomic.u.f.msize - (mrsh + msize), s, mpos, msize); + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize - (mrsh + msize), false); + } + } + /* Write the exponent */ + if (carry) { + expo++; + if (expo >= expo_max) { /* - * If the destination is not normalized then right shift the - * mantissa by one. - */ - if (H5T_NORM_NONE == dst.u.f.norm) - mrsh++; - - /* - * Calculate the destination exponent by adding the destination - * bias and clipping by the minimum and maximum possible - * destination exponent values. + * The exponent is too large to fit in the available + * region or it results in the maximum possible value. + * Use positive or negative infinity instead unless the + * application specifies something else. Before calling + * the overflow handler make sure the source buffer we + * hand it is in the original byte order. */ - expo += (int64_t)dst.u.f.ebias; - - if (expo < -(hssize_t)(dst.u.f.msize)) { - /* The exponent is way too small. Result is zero. */ - expo = 0; - H5T__bit_set(d, dst.u.f.mpos, dst.u.f.msize, false); - msize = 0; - } - else if (expo <= 0) { - /* - * The exponent is too small to fit in the exponent field, - * but by shifting the mantissa to the right we can - * accommodate that value. The mantissa of course is no - * longer normalized. - */ - mrsh += (size_t)(1 - expo); - expo = 0; - denormalized = true; - } - else if (expo >= expo_max) { - /* - * The exponent is too large to fit in the available region - * or it results in the maximum possible value. Use positive - * or negative infinity instead unless the application - * specifies something else. Before calling the overflow - * handler make sure the source buffer we hand it is in the - * original byte order. - */ - if (conv_ctx->u.conv.cb_struct.func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, src_p->shared->u.atomic.order); - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, conv_ctx->u.conv.cb_struct.user_data); - } - - if (except_ret == H5T_CONV_UNHANDLED) { - expo = expo_max; - H5T__bit_set(d, dst.u.f.mpos, dst.u.f.msize, false); - msize = 0; - } - else if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); - else if (except_ret == H5T_CONV_HANDLED) { - reverse = false; - goto next; - } - } + if (conv_ctx->u.conv.cb_struct.func) { /* If user's exception handler is present, use it */ + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src_p); - /* - * If the destination mantissa is smaller than the source - * mantissa then round the source mantissa. Rounding may cause a - * carry in which case the exponent has to be re-evaluated for - * overflow. That is, if `carry' is clear then the implied - * mantissa bit is `1', else it is `10' binary. - */ - if (msize > 0 && mrsh <= dst.u.f.msize && mrsh + msize > dst.u.f.msize) { - bitno = (ssize_t)(mrsh + msize - dst.u.f.msize); - assert(bitno >= 0 && (size_t)bitno <= msize); - /* If the 1st bit being cut off is set and source isn't denormalized.*/ - if (H5T__bit_get_d(s, (mpos + (size_t)bitno) - 1, (size_t)1) && !denormalized) { - /* Don't do rounding if exponent is 111...110 and mantissa is 111...11. - * To do rounding and increment exponent in this case will create an infinity value.*/ - if ((H5T__bit_find(s, mpos + (size_t)bitno, msize - (size_t)bitno, H5T_BIT_LSB, - false) >= 0 || - expo < expo_max - 1)) { - carry = H5T__bit_inc(s, mpos + (size_t)bitno - 1, 1 + msize - (size_t)bitno); - if (carry) - implied = 2; - } - } - else if (H5T__bit_get_d(s, (mpos + (size_t)bitno) - 1, (size_t)1) && denormalized) - /* For either source or destination, denormalized value doesn't increment carry.*/ - H5T__bit_inc(s, mpos + (size_t)bitno - 1, 1 + msize - (size_t)bitno); + except_ret = (conv_ctx->u.conv.cb_struct.func)( + H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, + src_rev, d, conv_ctx->u.conv.cb_struct.user_data); } - else - carry = false; - /* - * Write the mantissa to the destination - */ - if (mrsh > dst.u.f.msize + 1) { - H5T__bit_set(d, dst.u.f.mpos, dst.u.f.msize, false); + if (except_ret == H5T_CONV_UNHANDLED) { + expo = expo_max; + H5T__bit_set(d, dst_atomic.u.f.mpos, dst_atomic.u.f.msize, false); } - else if (mrsh == dst.u.f.msize + 1) { - H5T__bit_set(d, dst.u.f.mpos + 1, dst.u.f.msize - 1, false); - H5T__bit_set(d, dst.u.f.mpos, (size_t)1, true); - } - else if (mrsh == dst.u.f.msize) { - H5T__bit_set(d, dst.u.f.mpos, dst.u.f.msize, false); - H5T__bit_set_d(d, dst.u.f.mpos, MIN(2, dst.u.f.msize), (hsize_t)implied); - } - else { - if (mrsh > 0) { - H5T__bit_set(d, dst.u.f.mpos + dst.u.f.msize - mrsh, mrsh, false); - H5T__bit_set_d(d, dst.u.f.mpos + dst.u.f.msize - mrsh, (size_t)2, (hsize_t)implied); - } - if (mrsh + msize >= dst.u.f.msize) { - H5T__bit_copy(d, dst.u.f.mpos, s, (mpos + msize + mrsh - dst.u.f.msize), - dst.u.f.msize - mrsh); - } - else { - H5T__bit_copy(d, dst.u.f.mpos + dst.u.f.msize - (mrsh + msize), s, mpos, msize); - H5T__bit_set(d, dst.u.f.mpos, dst.u.f.msize - (mrsh + msize), false); - } + else if (except_ret == H5T_CONV_HANDLED) { + reverse = false; + goto next; } + else if (except_ret == H5T_CONV_ABORT) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); + } + } - /* Write the exponent */ - if (carry) { - expo++; - if (expo >= expo_max) { - /* - * The exponent is too large to fit in the available - * region or it results in the maximum possible value. - * Use positive or negative infinity instead unless the - * application specifies something else. Before - * calling the overflow handler make sure the source - * buffer we hand it is in the original byte order. - */ - if (conv_ctx->u.conv.cb_struct - .func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, - src_p->shared->u.atomic.order); - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, - conv_ctx->u.conv.cb_struct.user_data); - } - - if (except_ret == H5T_CONV_UNHANDLED) { - expo = expo_max; - H5T__bit_set(d, dst.u.f.mpos, dst.u.f.msize, false); - } - else if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "can't handle conversion exception"); - else if (except_ret == H5T_CONV_HANDLED) { - reverse = false; - goto next; - } - } - } - /*reset CARRY*/ - carry = false; + carry = false; - H5_CHECK_OVERFLOW(expo, hssize_t, hsize_t); - H5T__bit_set_d(d, dst.u.f.epos, dst.u.f.esize, (hsize_t)expo); + H5_CHECK_OVERFLOW(expo, hssize_t, hsize_t); + H5T__bit_set_d(d, dst_atomic.u.f.epos, dst_atomic.u.f.esize, (hsize_t)expo); padding: + /* + * Set external padding areas + */ + if (dst_atomic.offset > 0) { + assert(H5T_PAD_ZERO == dst_atomic.lsb_pad || H5T_PAD_ONE == dst_atomic.lsb_pad); + H5T__bit_set(d, (size_t)0, dst_atomic.offset, (bool)(H5T_PAD_ONE == dst_atomic.lsb_pad)); + } + { + size_t type_size; + + if (dst_p->shared->type == H5T_FLOAT) + type_size = dst_p->shared->size; + else + type_size = dst_p->shared->parent->shared->size; - /* - * Set external padding areas - */ - if (dst.offset > 0) { - assert(H5T_PAD_ZERO == dst.lsb_pad || H5T_PAD_ONE == dst.lsb_pad); - H5T__bit_set(d, (size_t)0, dst.offset, (bool)(H5T_PAD_ONE == dst.lsb_pad)); - } - if (dst.offset + dst.prec != 8 * dst_p->shared->size) { - assert(H5T_PAD_ZERO == dst.msb_pad || H5T_PAD_ONE == dst.msb_pad); - H5T__bit_set(d, dst.offset + dst.prec, 8 * dst_p->shared->size - (dst.offset + dst.prec), - (bool)(H5T_PAD_ONE == dst.msb_pad)); - } - - /* - * Put the destination in the correct byte order. See note at - * beginning of loop. - */ - if (H5T_ORDER_BE == dst.order && reverse) { - half_size = dst_p->shared->size / 2; - for (i = 0; i < half_size; i++) { - uint8_t tmp = d[dst_p->shared->size - (i + 1)]; - d[dst_p->shared->size - (i + 1)] = d[i]; - d[i] = tmp; - } - } - else if (H5T_ORDER_VAX == dst.order && reverse) { - tsize = dst_p->shared->size; - assert(0 == tsize % 2); - - for (i = 0; i < tsize; i += 4) { - tmp1 = d[i]; - tmp2 = d[i + 1]; - - d[i] = d[(tsize - 2) - i]; - d[i + 1] = d[(tsize - 1) - i]; - - d[(tsize - 2) - i] = tmp1; - d[(tsize - 1) - i] = tmp2; - } + if (dst_atomic.offset + dst_atomic.prec != 8 * type_size) { + assert(H5T_PAD_ZERO == dst_atomic.msb_pad || H5T_PAD_ONE == dst_atomic.msb_pad); + H5T__bit_set(d, dst_atomic.offset + dst_atomic.prec, + 8 * type_size - (dst_atomic.offset + dst_atomic.prec), + (bool)(H5T_PAD_ONE == dst_atomic.msb_pad)); + } + } + + /* + * Put the destination in the correct byte order. See note at + * beginning of loop. Only the "real" part of a complex number + * element is swapped. By the C standard, the "imaginary" part + * should just be zeroed when converting a real value to a + * complex value. + */ + if (H5T_ORDER_BE == dst_atomic.order && reverse) { + size_t half_size = dst_p->shared->size / 2; + + if (H5T_FLOAT == dst_p->shared->type) { + for (size_t j = 0; j < half_size; j++) + H5_SWAP_BYTES(d, j, dst_p->shared->size - (j + 1)); + } + else { + for (size_t j = 0; j < half_size / 2; j++) + H5_SWAP_BYTES(d, j, half_size - (j + 1)); + } + } + else if (H5T_ORDER_VAX == dst_atomic.order && reverse) { + if (H5T_FLOAT == dst_p->shared->type) { + uint8_t tmp1, tmp2; + size_t tsize = dst_p->shared->size / 2; + assert(0 == tsize % 2); + + for (size_t i = 0; i < tsize; i += 4) { + tmp1 = d[i]; + tmp2 = d[i + 1]; + + d[i] = d[(tsize - 2) - i]; + d[i + 1] = d[(tsize - 1) - i]; + + d[(tsize - 2) - i] = tmp1; + d[(tsize - 1) - i] = tmp2; } + } + else + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "VAX byte ordering is unsupported for complex number type conversions"); + } - /* - * If we had used a temporary buffer for the destination then we - * should copy the value to the true destination buffer. - */ next: - if (d == dbuf) - H5MM_memcpy(dp, d, dst_p->shared->size); + /* + * If we had used a temporary buffer for the destination then we + * should copy the value to the true destination buffer. + */ + if (d == dbuf) { + if (H5T_FLOAT == dst_p->shared->type) + H5MM_memcpy(dp, d, dst_p->shared->size); + else + H5MM_memcpy(dp, d, dst_p->shared->size / 2); + } - /* Advance source & destination pointers by delta amounts */ - sp += src_delta; - dp += dst_delta; - } + /* Ensure imaginary part of complex number is zeroed */ + if (H5T_COMPLEX == dst_p->shared->type) + memset(dp + (dst_p->shared->size / 2), 0, dst_p->shared->size / 2); - break; - - default: - HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command"); - } /* end switch */ + /* Advance source & destination pointers by delta amounts */ + sp += src_delta; + dp += dst_delta; + } /* end conversion loop */ done: - if (src_rev) - H5MM_free(src_rev); + H5MM_free(src_rev); FUNC_LEAVE_NOAPI(ret_value) -} /* end H5T__conv_f_f() */ +} /* end H5T__conv_f_f_loop() */ + +/*------------------------------------------------------------------------- + * Function: H5T__conv_float_find_special + * + * Purpose: Helper function to inspect the bits of a floating-point + * value during data conversions and determine if that value + * is a special value (+/-Inf, +/-0, NaN). + * + * If `sign_out` is non-NULL, it is set to the value of the + * sign bit of the floating-point value. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +H5T_conv_float_specval_t +H5T__conv_float_find_special(const uint8_t *src_buf, const H5T_atomic_t *src_atomic, uint64_t *sign_out) +{ + uint64_t sign; /* sign bit value */ + H5T_conv_float_specval_t ret_value = H5T_CONV_FLOAT_SPECVAL_REGULAR; + + FUNC_ENTER_PACKAGE_NOERR + + assert(src_buf); + assert(src_atomic); + + /* Find the sign bit value of the source. */ + sign = H5T__bit_get_d(src_buf, src_atomic->u.f.sign, (size_t)1); + + /* Is the mantissa all 0 bits? */ + if (H5T__bit_find(src_buf, src_atomic->u.f.mpos, src_atomic->u.f.msize, H5T_BIT_LSB, true) < 0) { + /* Is the exponent all 0 bits? */ + if (H5T__bit_find(src_buf, src_atomic->u.f.epos, src_atomic->u.f.esize, H5T_BIT_LSB, true) < 0) + /* +0 or -0 */ + ret_value = sign ? H5T_CONV_FLOAT_SPECVAL_NEGZERO : H5T_CONV_FLOAT_SPECVAL_POSZERO; + /* Is the exponent all 1 bits? */ + else if (H5T__bit_find(src_buf, src_atomic->u.f.epos, src_atomic->u.f.esize, H5T_BIT_LSB, false) < 0) + /* +Inf or -Inf */ + ret_value = sign ? H5T_CONV_FLOAT_SPECVAL_NEGINF : H5T_CONV_FLOAT_SPECVAL_POSINF; + } + else { + bool exp_all_ones = + (H5T__bit_find(src_buf, src_atomic->u.f.epos, src_atomic->u.f.esize, H5T_BIT_LSB, false) < 0); + + /* For a source value with no implied mantissa bit, if the exponent bits + * are all 1s and only the 1st bit of the mantissa is set to 1, the value + * is infinity. The Intel-Linux "long double" is this case. + */ + if (H5T_NORM_NONE == src_atomic->u.f.norm && exp_all_ones && + H5T__bit_find(src_buf, src_atomic->u.f.mpos, src_atomic->u.f.msize - 1, H5T_BIT_LSB, true) < 0) + ret_value = sign ? H5T_CONV_FLOAT_SPECVAL_NEGINF : H5T_CONV_FLOAT_SPECVAL_POSINF; + else if (exp_all_ones) + ret_value = H5T_CONV_FLOAT_SPECVAL_NAN; + } + + if (sign_out) + *sign_out = sign; + + FUNC_LEAVE_NOAPI(ret_value); +} /* end H5T__conv_float_find_special() */ /*------------------------------------------------------------------------- * Function: H5T__conv_f_i @@ -636,49 +723,33 @@ H5T__conv_f_i(const H5T_t *src_p, const H5T_t *dst_p, H5T_cdata_t *cdata, const size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) { - /* Traversal-related variables */ - H5T_atomic_t src; /*atomic source info */ - H5T_atomic_t dst; /*atomic destination info */ - int direction; /*forward or backward traversal */ - size_t elmtno; /*element number */ - size_t half_size; /*half the type size */ - size_t tsize; /*type size for swapping bytes */ - size_t olap; /*num overlapping elements */ - uint8_t *s, *sp, *d, *dp; /*source and dest traversal ptrs*/ - uint8_t *src_rev = NULL; /*order-reversed source buffer */ - uint8_t dbuf[64] = {0}; /*temp destination buffer */ - uint8_t tmp1, tmp2; /*temp variables for swapping bytes*/ - - /* Conversion-related variables */ - hssize_t expo; /*source exponent */ - hssize_t sign; /*source sign bit value */ - uint8_t *int_buf = NULL; /*buffer for temporary value */ - size_t buf_size; /*buffer size for temporary value */ - size_t i; /*miscellaneous counters */ - ssize_t msb_pos_s; /*first bit(MSB) in an integer */ - ssize_t new_msb_pos; /*MSB position after shifting mantissa by exponent */ - hssize_t shift_val; /*shift value when shifting mantissa by exponent */ - bool truncated; /*if fraction value is dropped */ - bool reverse; /*if reverse order of destination at the end */ - H5T_conv_ret_t except_ret; /*return of callback function */ - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; FUNC_ENTER_PACKAGE switch (cdata->command) { - case H5T_CONV_INIT: + case H5T_CONV_INIT: { + H5T_atomic_t src_atomic; /* source datatype atomic info */ + H5T_atomic_t dst_atomic; /* destination datatype atomic info */ + if (NULL == src_p || NULL == dst_p) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); - src = src_p->shared->u.atomic; - dst = dst_p->shared->u.atomic; - if (H5T_ORDER_LE != src.order && H5T_ORDER_BE != src.order && H5T_ORDER_VAX != src.order) + src_atomic = src_p->shared->u.atomic; + dst_atomic = dst_p->shared->u.atomic; + if (H5T_ORDER_LE != src_atomic.order && H5T_ORDER_BE != src_atomic.order && + H5T_ORDER_VAX != src_atomic.order) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order"); + if (H5T_ORDER_LE != dst_atomic.order && H5T_ORDER_BE != dst_atomic.order && + H5T_ORDER_VAX != dst_atomic.order) HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order"); - if (dst_p->shared->size > sizeof(dbuf)) + if (dst_p->shared->size > TEMP_INT_CONV_BUFFER_SIZE) HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "destination size is too large"); - if (8 * sizeof(expo) - 1 < src.u.f.esize) + if (8 * sizeof(hssize_t) - 1 < src_atomic.u.f.esize) HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "exponent field is too large"); cdata->need_bkg = H5T_BKG_NO; + break; + } case H5T_CONV_FREE: break; @@ -689,602 +760,627 @@ H5T__conv_f_i(const H5T_t *src_p, const H5T_t *dst_p, H5T_cdata_t *cdata, const if (NULL == conv_ctx) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid datatype conversion context pointer"); - src = src_p->shared->u.atomic; - dst = dst_p->shared->u.atomic; + if (H5T__conv_f_i_loop(src_p, dst_p, conv_ctx, nelmts, buf_stride, buf) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "unable to convert data values"); - /* - * Do we process the values from beginning to end or vice versa? Also, - * how many of the elements have the source and destination areas - * overlapping? - */ - if (src_p->shared->size == dst_p->shared->size || buf_stride) { - sp = dp = (uint8_t *)buf; - direction = 1; - olap = nelmts; - } - else if (src_p->shared->size >= dst_p->shared->size) { - double olap_d = - ceil((double)(dst_p->shared->size) / (double)(src_p->shared->size - dst_p->shared->size)); - olap = (size_t)olap_d; - sp = dp = (uint8_t *)buf; - direction = 1; + break; + + default: + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command"); + } /* end switch */ + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5T__conv_f_i() */ + +/*------------------------------------------------------------------------- + * Function: H5T__conv_f_i_loop + * + * Purpose: Implements the body of the conversion loop when converting + * floating-point values (including complex number values) to + * integer values. Encapsulates common code that is shared + * between the H5T__conv_f_i conversion function and other + * functions where the logic is nearly identical, such as + * H5T__conv_complex_i. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_f_i_loop(const H5T_t *src_p, const H5T_t *dst_p, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, + size_t buf_stride, void *buf) +{ + H5T_atomic_t src_atomic; /* source datatype atomic info */ + H5T_atomic_t dst_atomic; /* destination datatype atomic info */ + ssize_t src_delta, dst_delta; /* source & destination stride */ + uint8_t *s, *sp, *d, *dp; /* source and dest traversal ptrs */ + uint8_t *int_buf = NULL; /* buffer for temporary value */ + uint8_t *src_rev = NULL; /* order-reversed source buffer */ + uint8_t dbuf[TEMP_INT_CONV_BUFFER_SIZE]; /* temp destination buffer */ + size_t int_buf_size; /* buffer size for temporary value */ + size_t src_base_size; /* size of source base datatype */ + size_t olap; /* num overlapping elements */ + int direction; /* forward or backward traversal */ + herr_t ret_value = SUCCEED; + + FUNC_ENTER_PACKAGE + + assert(src_p); + assert(src_p->shared->type == H5T_FLOAT || src_p->shared->type == H5T_COMPLEX); + assert(dst_p); + assert(dst_p->shared->type == H5T_INTEGER); + assert(conv_ctx); + assert(buf); + + if (src_p->shared->type == H5T_COMPLEX) + src_atomic = src_p->shared->parent->shared->u.atomic; + else + src_atomic = src_p->shared->u.atomic; + dst_atomic = dst_p->shared->u.atomic; + + /* + * Do we process the values from beginning to end or vice versa? Also, + * how many of the elements have the source and destination areas + * overlapping? + */ + if (src_p->shared->size == dst_p->shared->size || buf_stride) { + sp = dp = (uint8_t *)buf; + direction = 1; + olap = nelmts; + } + else if (src_p->shared->size >= dst_p->shared->size) { + double olap_d = + ceil((double)(dst_p->shared->size) / (double)(src_p->shared->size - dst_p->shared->size)); + olap = (size_t)olap_d; + sp = dp = (uint8_t *)buf; + direction = 1; + } + else { + double olap_d = + ceil((double)(src_p->shared->size) / (double)(dst_p->shared->size - src_p->shared->size)); + olap = (size_t)olap_d; + sp = (uint8_t *)buf + (nelmts - 1) * src_p->shared->size; + dp = (uint8_t *)buf + (nelmts - 1) * dst_p->shared->size; + direction = -1; + } + + /* Direction & size of buffer traversal */ + H5_CHECK_OVERFLOW(buf_stride, size_t, ssize_t); + H5_CHECK_OVERFLOW(src_p->shared->size, size_t, ssize_t); + H5_CHECK_OVERFLOW(dst_p->shared->size, size_t, ssize_t); + src_delta = (ssize_t)direction * (ssize_t)(buf_stride ? buf_stride : src_p->shared->size); + dst_delta = (ssize_t)direction * (ssize_t)(buf_stride ? buf_stride : dst_p->shared->size); + + /* Allocate enough space for the buffer holding temporary converted value */ + src_base_size = + (H5T_FLOAT == src_p->shared->type) ? src_p->shared->size : src_p->shared->parent->shared->size; + if (dst_atomic.prec / 8 > src_base_size) + int_buf_size = (dst_atomic.prec + 7) / 8; + else + int_buf_size = src_base_size; + if (NULL == (int_buf = H5MM_calloc(int_buf_size))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTALLOC, FAIL, "couldn't allocate temporary buffer"); + + /* Allocate space for order-reversed source buffer */ + if (conv_ctx->u.conv.cb_struct.func) + if (NULL == (src_rev = H5MM_calloc(src_p->shared->size))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTALLOC, FAIL, "couldn't allocate temporary buffer"); + + /* The conversion loop */ + for (size_t elmtno = 0; elmtno < nelmts; elmtno++) { + H5T_conv_float_specval_t specval_type; /* floating-point value type (regular, +/-Inf, +/-0, NaN) */ + H5T_conv_ret_t except_ret = H5T_CONV_UNHANDLED; /* return of conversion exception callback function */ + uint64_t sign; /* source sign bit value */ + hssize_t expo; /* source exponent */ + hssize_t shift_val; /* shift value when shifting mantissa by exponent */ + ssize_t msb_pos_s; /* first bit(MSB) in an integer */ + ssize_t new_msb_pos; /* MSB position after shifting mantissa by exponent */ + bool truncated = false; /* if fraction value is dropped */ + bool reverse = true; /* if reversed the order of destination */ + + /* + * If the source and destination buffers overlap then use a + * temporary buffer for the destination. + */ + s = sp; + if (direction > 0) + d = elmtno < olap ? dbuf : dp; + else + d = elmtno + olap >= nelmts ? dbuf : dp; + if (d == dbuf) + memset(dbuf, 0, sizeof(dbuf)); + +#ifndef NDEBUG + if (d == dbuf) { + assert((dp >= sp && dp < sp + src_p->shared->size) || + (sp >= dp && sp < dp + dst_p->shared->size)); + } + else { + assert((dp < sp && dp + dst_p->shared->size <= sp) || + (sp < dp && sp + src_p->shared->size <= dp)); + } +#endif + + /* + * Put the data in little endian order so our loops aren't so + * complicated. We'll do all the conversion stuff assuming + * little endian and then we'll fix the order at the end. + */ + if (H5T_ORDER_BE == src_atomic.order) { + size_t half_size = src_p->shared->size / 2; + + if (H5T_FLOAT == src_p->shared->type) { + for (size_t i = 0; i < half_size; i++) + H5_SWAP_BYTES(s, i, src_p->shared->size - (i + 1)); } else { - double olap_d = - ceil((double)(src_p->shared->size) / (double)(dst_p->shared->size - src_p->shared->size)); - olap = (size_t)olap_d; - sp = (uint8_t *)buf + (nelmts - 1) * src_p->shared->size; - dp = (uint8_t *)buf + (nelmts - 1) * dst_p->shared->size; - direction = -1; + uint8_t *cur_part = s; + /* Swap real part of complex number element */ + for (size_t i = 0; i < half_size / 2; i++) + H5_SWAP_BYTES(cur_part, i, half_size - (i + 1)); + /* Swap imaginary part of complex number element */ + cur_part += half_size; + for (size_t i = 0; i < half_size / 2; i++) + H5_SWAP_BYTES(cur_part, i, half_size - (i + 1)); + } + } + else if (H5T_ORDER_VAX == src_atomic.order) { + if (H5T_FLOAT == src_p->shared->type) { + uint8_t tmp1, tmp2; + size_t tsize = src_p->shared->size; + assert(0 == tsize % 2); + + for (size_t i = 0; i < tsize; i += 4) { + tmp1 = s[i]; + tmp2 = s[i + 1]; + + s[i] = s[(tsize - 2) - i]; + s[i + 1] = s[(tsize - 1) - i]; + + s[(tsize - 2) - i] = tmp1; + s[(tsize - 1) - i] = tmp2; + } } - - /* Allocate enough space for the buffer holding temporary - * converted value - */ - if (dst.prec / 8 > src_p->shared->size) - buf_size = (dst.prec + 7) / 8; else - buf_size = src_p->shared->size; - int_buf = (uint8_t *)H5MM_calloc(buf_size); - - /* Allocate space for order-reversed source buffer */ - src_rev = (uint8_t *)H5MM_calloc(src_p->shared->size); + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "VAX byte ordering is unsupported for complex number type conversions"); + } + + /* zero-set all destination bits */ + H5T__bit_set(d, dst_atomic.offset, dst_atomic.prec, false); + + /* Check for special cases: +0, -0, +Inf, -Inf, NaN */ + specval_type = H5T__conv_float_find_special(s, &src_atomic, &sign); + if (specval_type == H5T_CONV_FLOAT_SPECVAL_POSZERO || + specval_type == H5T_CONV_FLOAT_SPECVAL_NEGZERO) { + /* +0 or -0; Set all bits to zero */ + goto padding; + } + else if (specval_type != H5T_CONV_FLOAT_SPECVAL_REGULAR) { + /* If user's exception handler is present, use it */ + if (conv_ctx->u.conv.cb_struct.func) { + H5T_conv_except_t except_type; /* type of conversion exception that occurred */ + + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src_p); + + if (specval_type == H5T_CONV_FLOAT_SPECVAL_POSINF) + except_type = H5T_CONV_EXCEPT_PINF; + else if (specval_type == H5T_CONV_FLOAT_SPECVAL_NEGINF) + except_type = H5T_CONV_EXCEPT_NINF; + else + except_type = H5T_CONV_EXCEPT_NAN; - /* The conversion loop */ - for (elmtno = 0; elmtno < nelmts; elmtno++) { - /* Set these variables to default */ - except_ret = H5T_CONV_UNHANDLED; - truncated = false; - reverse = true; + except_ret = (conv_ctx->u.conv.cb_struct.func)(except_type, conv_ctx->u.conv.src_type_id, + conv_ctx->u.conv.dst_type_id, src_rev, d, + conv_ctx->u.conv.cb_struct.user_data); + } - /* - * If the source and destination buffers overlap then use a - * temporary buffer for the destination. - */ - if (direction > 0) { - s = sp; - d = elmtno < olap ? dbuf : dp; - } - else { - s = sp; - d = elmtno + olap >= nelmts ? dbuf : dp; + if (except_ret == H5T_CONV_UNHANDLED) { + if (specval_type == H5T_CONV_FLOAT_SPECVAL_NAN) + goto padding; /* Just set all bits to zero. */ + else if (specval_type == H5T_CONV_FLOAT_SPECVAL_POSINF) { + if (H5T_SGN_NONE == dst_atomic.u.i.sign) + H5T__bit_set(d, dst_atomic.offset, dst_atomic.prec, true); + else if (H5T_SGN_2 == dst_atomic.u.i.sign) + H5T__bit_set(d, dst_atomic.offset, dst_atomic.prec - 1, true); } -#ifndef NDEBUG - /* I don't quite trust the overlap calculations yet */ - if (d == dbuf) { - assert((dp >= sp && dp < sp + src_p->shared->size) || - (sp >= dp && sp < dp + dst_p->shared->size)); + else if (specval_type == H5T_CONV_FLOAT_SPECVAL_NEGINF) { + if (H5T_SGN_2 == dst_atomic.u.i.sign) + H5T__bit_set(d, dst_atomic.prec - 1, (size_t)1, true); } - else { - assert((dp < sp && dp + dst_p->shared->size <= sp) || - (sp < dp && sp + src_p->shared->size <= dp)); - } -#endif - /* - * Put the data in little endian order so our loops aren't so - * complicated. We'll do all the conversion stuff assuming - * little endian and then we'll fix the order at the end. - */ - if (H5T_ORDER_BE == src.order) { - half_size = src_p->shared->size / 2; - for (i = 0; i < half_size; i++) { - tmp1 = s[src_p->shared->size - (i + 1)]; - s[src_p->shared->size - (i + 1)] = s[i]; - s[i] = tmp1; + } + else if (except_ret == H5T_CONV_HANDLED) { + /* No need to reverse the order of destination because user handles it */ + reverse = false; + goto next; + } + else if (except_ret == H5T_CONV_ABORT) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); + + goto padding; + } + + /* + * Get the exponent as an unsigned quantity from the section of + * the source bit field where it's located. Not expecting + * exponent to be greater than the maximal value of hssize_t. + */ + expo = (hssize_t)H5T__bit_get_d(s, src_atomic.u.f.epos, src_atomic.u.f.esize); + + /* + * Calculate the true source exponent by adjusting according to + * the source exponent bias. + */ + if (0 == expo || H5T_NORM_NONE == src_atomic.u.f.norm) + expo -= (hssize_t)(src_atomic.u.f.ebias - 1); + else if (H5T_NORM_IMPLIED == src_atomic.u.f.norm) + expo -= (hssize_t)src_atomic.u.f.ebias; + else + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "normalization method not implemented yet"); + + /* + * Get the mantissa as bit vector from the section of + * the source bit field where it's located. + * Keep the little-endian order in the buffer. + * A sequence 0x01020304 will be like in the buffer, + * 04 03 02 01 + * | | | | + * V V V V + * buf[0] buf[1] buf[2] buf[3] + */ + H5T__bit_copy(int_buf, (size_t)0, s, src_atomic.u.f.mpos, src_atomic.u.f.msize); + + /* + * Restore the implicit bit for mantissa if it's implied. + * Equivalent to mantissa |= (hsize_t)1 << src_atomic.u.f.msize. + */ + if (H5T_NORM_IMPLIED == src_atomic.u.f.norm) + H5T__bit_inc(int_buf, src_atomic.u.f.msize, 8 * int_buf_size - src_atomic.u.f.msize); + + /* + * What is the bit position for the most significant bit(MSB) of S + * which is set? This is checked before shifting and before possibly + * converting to a negative integer. Note that later use of this value + * assumes that H5T__bit_shift will always shift in 0 during a right + * shift. + */ + msb_pos_s = H5T__bit_find(int_buf, (size_t)0, src_atomic.prec, H5T_BIT_MSB, true); + + /* The temporary buffer has no bits set and must therefore be zero; nothing to do. */ + if (msb_pos_s < 0) + goto padding; + + /* + * Shift mantissa part by exponent minus mantissa size(right shift), + * or by mantissa size minus exponent(left shift). Example: Sequence + * 10...010111, expo=20, expo-msize=-3. Right-shift the sequence, we get + * 00010...10. The last three bits were dropped. + */ + shift_val = expo - (ssize_t)src_atomic.u.f.msize; + H5T__bit_shift(int_buf, shift_val, (size_t)0, int_buf_size * 8); + + /* Calculate the new position of the MSB after shifting and + * skip to the padding section if we shifted exactly to 0 + * (MSB position is -1) + */ + new_msb_pos = msb_pos_s + shift_val; + if (new_msb_pos == -1) + goto padding; + + /* + * If expo is less than mantissa size, the fractional value is dropped off + * during conversion. Set exception type to be "truncate" + */ + if ((size_t)expo < src_atomic.u.f.msize && conv_ctx->u.conv.cb_struct.func) + truncated = true; + + if (H5T_SGN_NONE == dst_atomic.u.i.sign) { /* destination is unsigned */ + /* + * Destination is unsigned. Library's default way: If the source value + * is greater than the maximal destination value then it overflows, the + * destination will be set to the maximum possible value. When the + * source is negative, underflow happens. Set the destination to be + * zero (do nothing). If user's exception handler is set, call it and + * let user handle it. + */ + if (sign) { /* source is negative */ + /* If user's exception handler is present, use it */ + if (conv_ctx->u.conv.cb_struct.func) { + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src_p); + + except_ret = (conv_ctx->u.conv.cb_struct.func)( + H5T_CONV_EXCEPT_RANGE_LOW, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, + src_rev, d, conv_ctx->u.conv.cb_struct.user_data); + + if (except_ret == H5T_CONV_HANDLED) { + /* No need to reverse the order of destination because user handles it */ + reverse = false; + goto next; } + else if (except_ret == H5T_CONV_ABORT) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); } - else if (H5T_ORDER_VAX == src.order) { - tsize = src_p->shared->size; - assert(0 == tsize % 2); + } + else { /* source is positive */ + if (new_msb_pos >= (ssize_t)dst_atomic.prec) { + /* overflow - if user's exception handler is present, use it */ + if (conv_ctx->u.conv.cb_struct.func) { + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src_p); + + except_ret = (conv_ctx->u.conv.cb_struct.func)( + H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, + conv_ctx->u.conv.dst_type_id, src_rev, d, conv_ctx->u.conv.cb_struct.user_data); + } - for (i = 0; i < tsize; i += 4) { - tmp1 = s[i]; - tmp2 = s[i + 1]; + if (except_ret == H5T_CONV_UNHANDLED) + H5T__bit_set(d, dst_atomic.offset, dst_atomic.prec, true); + else if (except_ret == H5T_CONV_HANDLED) { + /* No need to reverse the order of destination because user handles it */ + reverse = false; + goto next; + } + else if (except_ret == H5T_CONV_ABORT) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); + } + else { + /* If user's exception handler is present, use it */ + if (truncated && conv_ctx->u.conv.cb_struct.func) { + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src_p); - s[i] = s[(tsize - 2) - i]; - s[i + 1] = s[(tsize - 1) - i]; + except_ret = (conv_ctx->u.conv.cb_struct.func)( + H5T_CONV_EXCEPT_TRUNCATE, conv_ctx->u.conv.src_type_id, + conv_ctx->u.conv.dst_type_id, src_rev, d, conv_ctx->u.conv.cb_struct.user_data); + } - s[(tsize - 2) - i] = tmp1; - s[(tsize - 1) - i] = tmp2; + if (except_ret == H5T_CONV_UNHANDLED) { + /* copy source value into it if case is ignored by user handler */ + if (new_msb_pos >= 0) + H5T__bit_copy(d, dst_atomic.offset, int_buf, (size_t)0, (size_t)new_msb_pos + 1); + } + else if (except_ret == H5T_CONV_HANDLED) { + /* No need to reverse the order of destination because user handles it */ + reverse = false; + goto next; } + else if (except_ret == H5T_CONV_ABORT) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); } + } + } + else if (H5T_SGN_2 == dst_atomic.u.i.sign) { /* Destination is signed */ + if (sign) { /* source is negative */ + if ((new_msb_pos >= 0) && ((size_t)new_msb_pos < dst_atomic.prec - 1)) { + /* If user's exception handler is present, use it */ + if (truncated && conv_ctx->u.conv.cb_struct.func) { + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src_p); - /*zero-set all destination bits*/ - H5T__bit_set(d, dst.offset, dst.prec, false); + except_ret = (conv_ctx->u.conv.cb_struct.func)( + H5T_CONV_EXCEPT_TRUNCATE, conv_ctx->u.conv.src_type_id, + conv_ctx->u.conv.dst_type_id, src_rev, d, conv_ctx->u.conv.cb_struct.user_data); + } - /* - * Find the sign bit value of the source. - */ - sign = (hssize_t)H5T__bit_get_d(s, src.u.f.sign, (size_t)1); + if (except_ret == H5T_CONV_UNHANDLED) { /* If this case ignored by user handler */ + /* Convert to integer representation. Equivalent to ~(value - 1). */ + H5T__bit_dec(int_buf, (size_t)0, dst_atomic.prec); + H5T__bit_neg(int_buf, (size_t)0, dst_atomic.prec); + + /* copy source value into destination */ + H5T__bit_copy(d, dst_atomic.offset, int_buf, (size_t)0, dst_atomic.prec - 1); + H5T__bit_set(d, (dst_atomic.offset + dst_atomic.prec - 1), (size_t)1, true); + } + else if (except_ret == H5T_CONV_HANDLED) { + /* No need to reverse the order of destination because user handles it */ + reverse = false; + goto next; + } + else if (except_ret == H5T_CONV_ABORT) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); + } + else { + /* if underflows and no callback, do nothing except turn on + * the sign bit because 0x80...00 is the biggest negative value. + * If user's exception handler is present, use it + */ + if (conv_ctx->u.conv.cb_struct.func) { + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src_p); - /* - * Check for special cases: +0, -0, +Inf, -Inf, NaN - */ - if (H5T__bit_find(s, src.u.f.mpos, src.u.f.msize, H5T_BIT_LSB, true) < 0) { - if (H5T__bit_find(s, src.u.f.epos, src.u.f.esize, H5T_BIT_LSB, true) < 0) { - /* +0 or -0 */ - /* Set all bits to zero */ - goto padding; + except_ret = (conv_ctx->u.conv.cb_struct.func)( + H5T_CONV_EXCEPT_RANGE_LOW, conv_ctx->u.conv.src_type_id, + conv_ctx->u.conv.dst_type_id, src_rev, d, conv_ctx->u.conv.cb_struct.user_data); } - else if (H5T__bit_find(s, src.u.f.epos, src.u.f.esize, H5T_BIT_LSB, false) < 0) { - /* +Infinity or -Infinity */ - if (sign) { /* -Infinity */ - if (conv_ctx->u.conv.cb_struct - .func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, - src_p->shared->u.atomic.order); - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_NINF, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, - conv_ctx->u.conv.cb_struct.user_data); - } - - if (except_ret == H5T_CONV_UNHANDLED) { - if (H5T_SGN_2 == dst.u.i.sign) - H5T__bit_set(d, dst.prec - 1, (size_t)1, true); - } - else if (except_ret == H5T_CONV_HANDLED) { - /*No need to reverse the order of destination because user handles it*/ - reverse = false; - goto next; - } - else if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "can't handle conversion exception"); - } - else { /* +Infinity */ - if (conv_ctx->u.conv.cb_struct - .func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, - src_p->shared->u.atomic.order); - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_PINF, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, - conv_ctx->u.conv.cb_struct.user_data); - } - - if (except_ret == H5T_CONV_UNHANDLED) { - if (H5T_SGN_NONE == dst.u.i.sign) - H5T__bit_set(d, dst.offset, dst.prec, true); - else if (H5T_SGN_2 == dst.u.i.sign) - H5T__bit_set(d, dst.offset, dst.prec - 1, true); - } - else if (except_ret == H5T_CONV_HANDLED) { - /*No need to reverse the order of destination because user handles it*/ - reverse = false; - goto next; - } - else if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "can't handle conversion exception"); - } - goto padding; + + if (except_ret == H5T_CONV_UNHANDLED) + H5T__bit_set(d, (dst_atomic.offset + dst_atomic.prec - 1), (size_t)1, true); + else if (except_ret == H5T_CONV_HANDLED) { + /* No need to reverse the order of destination because user handles it */ + reverse = false; + goto next; } + else if (except_ret == H5T_CONV_ABORT) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); } - else if (H5T_NORM_NONE == src.u.f.norm && - H5T__bit_find(s, src.u.f.mpos, src.u.f.msize - 1, H5T_BIT_LSB, true) < 0 && - H5T__bit_find(s, src.u.f.epos, src.u.f.esize, H5T_BIT_LSB, false) < 0) { - /*This is a special case for the source of no implied mantissa bit. - *If the exponent bits are all 1s and only the 1st bit of mantissa - *is set to 1. It's infinity. The Intel-Linux "long double" is this case.*/ - /* +Infinity or -Infinity */ - if (sign) { /* -Infinity */ - if (conv_ctx->u.conv.cb_struct - .func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, - src_p->shared->u.atomic.order); - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_NINF, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, - conv_ctx->u.conv.cb_struct.user_data); - } - - if (except_ret == H5T_CONV_UNHANDLED) { - if (H5T_SGN_2 == dst.u.i.sign) - H5T__bit_set(d, dst.prec - 1, (size_t)1, true); - } - else if (except_ret == H5T_CONV_HANDLED) { - /*No need to reverse the order of destination because user handles it*/ - reverse = false; - goto next; - } - else if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "can't handle conversion exception"); + } + else { /* source is positive */ + if (new_msb_pos >= (ssize_t)dst_atomic.prec - 1) { + /* overflow - if user's exception handler is present, use it */ + if (conv_ctx->u.conv.cb_struct.func) { + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src_p); + + except_ret = (conv_ctx->u.conv.cb_struct.func)( + H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, + conv_ctx->u.conv.dst_type_id, src_rev, d, conv_ctx->u.conv.cb_struct.user_data); } - else { /* +Infinity */ - if (conv_ctx->u.conv.cb_struct - .func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, - src_p->shared->u.atomic.order); - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_PINF, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, - conv_ctx->u.conv.cb_struct.user_data); - } - - if (except_ret == H5T_CONV_UNHANDLED) { - if (H5T_SGN_NONE == dst.u.i.sign) - H5T__bit_set(d, dst.offset, dst.prec, true); - else if (H5T_SGN_2 == dst.u.i.sign) - H5T__bit_set(d, dst.offset, dst.prec - 1, true); - } - else if (except_ret == H5T_CONV_HANDLED) { - /*No need to reverse the order of destination because user handles it*/ - reverse = false; - goto next; - } - else if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "can't handle conversion exception"); + + if (except_ret == H5T_CONV_UNHANDLED) + H5T__bit_set(d, dst_atomic.offset, dst_atomic.prec - 1, true); + else if (except_ret == H5T_CONV_HANDLED) { + /* No need to reverse the order of destination because user handles it */ + reverse = false; + goto next; } - goto padding; + else if (except_ret == H5T_CONV_ABORT) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); } - else if (H5T__bit_find(s, src.u.f.epos, src.u.f.esize, H5T_BIT_LSB, false) < 0) { - /* NaN */ - if (conv_ctx->u.conv.cb_struct.func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, src_p->shared->u.atomic.order); + else if (new_msb_pos < (ssize_t)dst_atomic.prec - 1) { + /* If user's exception handler is present, use it */ + if (truncated && conv_ctx->u.conv.cb_struct.func) { + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src_p); + except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_NAN, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, - src_rev, d, conv_ctx->u.conv.cb_struct.user_data); + H5T_CONV_EXCEPT_TRUNCATE, conv_ctx->u.conv.src_type_id, + conv_ctx->u.conv.dst_type_id, src_rev, d, conv_ctx->u.conv.cb_struct.user_data); } if (except_ret == H5T_CONV_UNHANDLED) { - /*Just set all bits to zero.*/ - goto padding; + /* copy source value into it if case is ignored by user handler */ + if (new_msb_pos >= 0) + H5T__bit_copy(d, dst_atomic.offset, int_buf, (size_t)0, (size_t)new_msb_pos + 1); } else if (except_ret == H5T_CONV_HANDLED) { - /*No need to reverse the order of destination because user handles it*/ + /* No need to reverse the order of destination because user handles it */ reverse = false; goto next; } else if (except_ret == H5T_CONV_ABORT) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); - - goto padding; } + } + } - /* - * Get the exponent as an unsigned quantity from the section of - * the source bit field where it's located. Not expecting - * exponent to be greater than the maximal value of hssize_t. - */ - expo = (hssize_t)H5T__bit_get_d(s, src.u.f.epos, src.u.f.esize); +padding: + /* Set padding areas in destination. */ + if (dst_atomic.offset > 0) { + assert(H5T_PAD_ZERO == dst_atomic.lsb_pad || H5T_PAD_ONE == dst_atomic.lsb_pad); + H5T__bit_set(d, (size_t)0, dst_atomic.offset, (bool)(H5T_PAD_ONE == dst_atomic.lsb_pad)); + } + if (dst_atomic.offset + dst_atomic.prec != 8 * dst_p->shared->size) { + assert(H5T_PAD_ZERO == dst_atomic.msb_pad || H5T_PAD_ONE == dst_atomic.msb_pad); + H5T__bit_set(d, dst_atomic.offset + dst_atomic.prec, + 8 * dst_p->shared->size - (dst_atomic.offset + dst_atomic.prec), + (bool)(H5T_PAD_ONE == dst_atomic.msb_pad)); + } + + /* + * Put the destination in the correct byte order. See note at + * beginning of loop. + */ + if (H5T_ORDER_BE == dst_atomic.order && reverse) + for (size_t i = 0; i < dst_p->shared->size / 2; i++) + H5_SWAP_BYTES(d, i, dst_p->shared->size - (i + 1)); - /* - * Calculate the true source exponent by adjusting according to - * the source exponent bias. - */ - if (0 == expo || H5T_NORM_NONE == src.u.f.norm) { - expo -= (hssize_t)(src.u.f.ebias - 1); - } - else if (H5T_NORM_IMPLIED == src.u.f.norm) { - expo -= (hssize_t)src.u.f.ebias; - } - else { - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "normalization method not implemented yet"); - } +next: + /* + * If we had used a temporary buffer for the destination then we + * should copy the value to the true destination buffer. + */ + if (d == dbuf) + H5MM_memcpy(dp, d, dst_p->shared->size); - /* - * Get the mantissa as bit vector from the section of - * the source bit field where it's located. - * Keep the little-endian order in the buffer. - * A sequence 0x01020304 will be like in the buffer, - * 04 03 02 01 - * | | | | - * V V V V - * buf[0] buf[1] buf[2] buf[3] - */ - H5T__bit_copy(int_buf, (size_t)0, s, src.u.f.mpos, src.u.f.msize); + /* Advance source & destination pointers by delta amounts */ + sp += src_delta; + dp += dst_delta; - /* - * Restore the implicit bit for mantissa if it's implied. - * Equivalent to mantissa |= (hsize_t)1<u.conv.cb_struct.func) - truncated = true; - - if (H5T_SGN_NONE == dst.u.i.sign) { /*destination is unsigned*/ - /* - * Destination is unsigned. Library's default way: If the source value - * is greater than the maximal destination value then it overflows, the - * destination will be set to the maximum possible value. When the - * source is negative, underflow happens. Set the destination to be - * zero(do nothing). If user's exception handler is set, call it and - * let user handle it. - */ - if (sign) { /*source is negative*/ - if (conv_ctx->u.conv.cb_struct - .func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, - src_p->shared->u.atomic.order); - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_RANGE_LOW, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, - conv_ctx->u.conv.cb_struct.user_data); - if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "can't handle conversion exception"); - else if (except_ret == H5T_CONV_HANDLED) { - /*No need to reverse the order of destination because user handles it*/ - reverse = false; - goto next; - } - } - } - else { /*source is positive*/ - if (new_msb_pos >= (ssize_t)dst.prec) { - /*overflow*/ - if (conv_ctx->u.conv.cb_struct - .func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, - src_p->shared->u.atomic.order); - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, - conv_ctx->u.conv.cb_struct.user_data); - } - - if (except_ret == H5T_CONV_UNHANDLED) - H5T__bit_set(d, dst.offset, dst.prec, true); - else if (except_ret == H5T_CONV_HANDLED) { - /*No need to reverse the order of destination because user handles it*/ - reverse = false; - goto next; - } - else if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "can't handle conversion exception"); - } - else { - if (truncated && conv_ctx->u.conv.cb_struct - .func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, - src_p->shared->u.atomic.order); - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_TRUNCATE, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, - conv_ctx->u.conv.cb_struct.user_data); - } - - if (except_ret == H5T_CONV_UNHANDLED) { - /*copy source value into it if case is ignored by user handler*/ - if (new_msb_pos >= 0) - H5T__bit_copy(d, dst.offset, int_buf, (size_t)0, (size_t)new_msb_pos + 1); - } - else if (except_ret == H5T_CONV_HANDLED) { - /*No need to reverse the order of destination because user handles it*/ - reverse = false; - goto next; - } - else if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "can't handle conversion exception"); - } - } - } - else if (H5T_SGN_2 == dst.u.i.sign) { /*Destination is signed*/ - if (sign) { /*source is negative*/ - if ((new_msb_pos >= 0) && ((size_t)new_msb_pos < dst.prec - 1)) { - if (truncated && conv_ctx->u.conv.cb_struct - .func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, - src_p->shared->u.atomic.order); - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_TRUNCATE, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, - conv_ctx->u.conv.cb_struct.user_data); - } - - if (except_ret == H5T_CONV_UNHANDLED) { /*If this case ignored by user handler*/ - /*Convert to integer representation. Equivalent to ~(value - 1).*/ - H5T__bit_dec(int_buf, (size_t)0, dst.prec); - H5T__bit_neg(int_buf, (size_t)0, dst.prec); - - /*copy source value into destination*/ - H5T__bit_copy(d, dst.offset, int_buf, (size_t)0, dst.prec - 1); - H5T__bit_set(d, (dst.offset + dst.prec - 1), (size_t)1, true); - } - else if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "can't handle conversion exception"); - else if (except_ret == H5T_CONV_HANDLED) { - /*No need to reverse the order of destination because user handles it*/ - reverse = false; - goto next; - } - } - else { - /* if underflows and no callback, do nothing except turn on - * the sign bit because 0x80...00 is the biggest negative value. - */ - if (conv_ctx->u.conv.cb_struct - .func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, - src_p->shared->u.atomic.order); - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_RANGE_LOW, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, - conv_ctx->u.conv.cb_struct.user_data); - } - - if (except_ret == H5T_CONV_UNHANDLED) - H5T__bit_set(d, (dst.offset + dst.prec - 1), (size_t)1, true); - else if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "can't handle conversion exception"); - else if (except_ret == H5T_CONV_HANDLED) { - /*No need to reverse the order of destination because user handles it*/ - reverse = false; - goto next; - } - } - } - else { /*source is positive*/ - if (new_msb_pos >= (ssize_t)dst.prec - 1) { - /*overflow*/ - if (conv_ctx->u.conv.cb_struct - .func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, - src_p->shared->u.atomic.order); - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, - conv_ctx->u.conv.cb_struct.user_data); - } - - if (except_ret == H5T_CONV_UNHANDLED) - H5T__bit_set(d, dst.offset, dst.prec - 1, true); - else if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "can't handle conversion exception"); - else if (except_ret == H5T_CONV_HANDLED) { - /*No need to reverse the order of destination because user handles it*/ - reverse = false; - goto next; - } - } - else if (new_msb_pos < (ssize_t)dst.prec - 1) { - if (truncated && conv_ctx->u.conv.cb_struct - .func) { /*If user's exception handler is present, use it*/ - /*reverse order first*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, - src_p->shared->u.atomic.order); - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_TRUNCATE, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, - conv_ctx->u.conv.cb_struct.user_data); - } - - if (except_ret == H5T_CONV_UNHANDLED) { - /*copy source value into it if case is ignored by user handler*/ - if (new_msb_pos >= 0) - H5T__bit_copy(d, dst.offset, int_buf, (size_t)0, (size_t)new_msb_pos + 1); - } - else if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "can't handle conversion exception"); - else if (except_ret == H5T_CONV_HANDLED) { - /*No need to reverse the order of destination because user handles it*/ - reverse = false; - goto next; - } - } - } - } + switch (cdata->command) { + case H5T_CONV_INIT: { + H5T_atomic_t src_atomic; /* source datatype atomic info */ + H5T_atomic_t dst_atomic; /* destination datatype atomic info */ -padding: - /* - * Set padding areas in destination. - */ - if (dst.offset > 0) { - assert(H5T_PAD_ZERO == dst.lsb_pad || H5T_PAD_ONE == dst.lsb_pad); - H5T__bit_set(d, (size_t)0, dst.offset, (bool)(H5T_PAD_ONE == dst.lsb_pad)); - } - if (dst.offset + dst.prec != 8 * dst_p->shared->size) { - assert(H5T_PAD_ZERO == dst.msb_pad || H5T_PAD_ONE == dst.msb_pad); - H5T__bit_set(d, dst.offset + dst.prec, 8 * dst_p->shared->size - (dst.offset + dst.prec), - (bool)(H5T_PAD_ONE == dst.msb_pad)); - } + if (!src_p || !dst_p) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); + if (!H5T_IS_ATOMIC(dst_p->shared->parent->shared)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid complex number datatype"); + src_atomic = src_p->shared->u.atomic; + dst_atomic = dst_p->shared->parent->shared->u.atomic; + if (H5T_ORDER_LE != src_atomic.order && H5T_ORDER_BE != src_atomic.order && + H5T_ORDER_VAX != src_atomic.order) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "unsupported byte order for source datatype"); + if (H5T_ORDER_LE != dst_atomic.order && H5T_ORDER_BE != dst_atomic.order) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "unsupported byte order for destination datatype"); + if (dst_p->shared->size > TEMP_FLOAT_CONV_BUFFER_SIZE) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "destination datatype size is too large"); + if (8 * sizeof(int64_t) - 1 < src_atomic.u.f.esize || + 8 * sizeof(int64_t) - 1 < dst_atomic.u.f.esize) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "exponent field is too large"); + cdata->need_bkg = H5T_BKG_NO; - /* - * Put the destination in the correct byte order. See note at - * beginning of loop. - */ - if (H5T_ORDER_BE == dst.order && reverse) { - half_size = dst_p->shared->size / 2; - for (i = 0; i < half_size; i++) { - tmp1 = d[dst_p->shared->size - (i + 1)]; - d[dst_p->shared->size - (i + 1)] = d[i]; - d[i] = tmp1; - } - } + break; + } -next: - /* - * If we had used a temporary buffer for the destination then we - * should copy the value to the true destination buffer. - */ - if (d == dbuf) - H5MM_memcpy(dp, d, dst_p->shared->size); - if (buf_stride) { - sp += direction * (ssize_t)buf_stride; - dp += direction * (ssize_t)buf_stride; - } - else { - sp += direction * (ssize_t)src_p->shared->size; - dp += direction * (ssize_t)dst_p->shared->size; - } + case H5T_CONV_FREE: + break; + + case H5T_CONV_CONV: + if (!src_p || !dst_p) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); + if (NULL == conv_ctx) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid datatype conversion context pointer"); - memset(int_buf, 0, buf_size); + /* Are we converting between a floating-point type and a complex number + * type consisting of the same floating-point type? + */ + equal_cplx_conv = (0 == H5T_cmp(src_p, dst_p->shared->parent, false)); + if (!equal_cplx_conv) { + /* If floating-point types differ, use generic f_f loop */ + if (H5T__conv_f_f_loop(src_p, dst_p, conv_ctx, nelmts, buf_stride, buf) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "unable to convert data values"); + } + else { + /* If floating-point types are the same, use specialized loop */ + if (H5T__conv_complex_f_matched(src_p, dst_p, conv_ctx, nelmts, buf_stride, buf) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "unable to convert data values"); } break; default: HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command"); - } /* end switch */ + } done: - if (int_buf) - H5MM_xfree(int_buf); - if (src_rev) - H5MM_free(src_rev); - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5T__conv_f_i() */ +} /* end H5T__conv_f_complex() */ #ifdef H5_HAVE__FLOAT16 /*------------------------------------------------------------------------- @@ -1513,6 +1609,59 @@ H5T__conv__Float16_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, { H5T_CONV_fF(FLOAT16, LDOUBLE, H5__Float16, long double, -, -); } + +#ifdef H5_HAVE_COMPLEX_NUMBERS +/*------------------------------------------------------------------------- + * Function: H5T__conv__Float16_fcomplex + * + * Purpose: Converts `_Float16' to `float _Complex' / `_Fcomplex' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv__Float16_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_fZ(FLOAT16, FLOAT_COMPLEX, H5__Float16, H5_float_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv__Float16_dcomplex + * + * Purpose: Converts `_Float16' to `double _Complex' / `_Dcomplex' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv__Float16_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_fZ(FLOAT16, DOUBLE_COMPLEX, H5__Float16, H5_double_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv__Float16_lcomplex + * + * Purpose: Converts `_Float16' to `long double _Complex' / `_Lcomplex' + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv__Float16_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_fZ(FLOAT16, LDOUBLE_COMPLEX, H5__Float16, H5_ldouble_complex, -, -); +} +#endif #endif /*------------------------------------------------------------------------- @@ -1774,6 +1923,65 @@ H5T__conv_float_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, co H5T_CONV_fF(FLOAT, LDOUBLE, float, long double, -, -); } +#ifdef H5_HAVE_COMPLEX_NUMBERS +/*------------------------------------------------------------------------- + * Function: H5T__conv_float_fcomplex + * + * Purpose: Convert native `float' to native + * `float _Complex' / `_Fcomplex' using hardware. This is a + * fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_float_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_fz(FLOAT, FLOAT_COMPLEX, float, H5_float_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_float_dcomplex + * + * Purpose: Convert native `float' to native + * `double _Complex' / `_Dcomplex' using hardware. This is a + * fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_float_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_fZ(FLOAT, DOUBLE_COMPLEX, float, H5_double_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_float_lcomplex + * + * Purpose: Convert native `float' to native + * `long double _Complex' / `_Lcomplex' using hardware. This + * is a fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_float_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_fZ(FLOAT, LDOUBLE_COMPLEX, float, H5_ldouble_complex, -, -); +} +#endif + /*------------------------------------------------------------------------- * Function: H5T__conv_double_schar * @@ -2033,6 +2241,65 @@ H5T__conv_double_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, c H5T_CONV_fF(DOUBLE, LDOUBLE, double, long double, -, -); } +#ifdef H5_HAVE_COMPLEX_NUMBERS +/*------------------------------------------------------------------------- + * Function: H5T__conv_double_fcomplex + * + * Purpose: Convert native `double' to native + * `float _Complex' / `_Fcomplex' using hardware. This is a + * fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_double_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_Fz(DOUBLE, FLOAT_COMPLEX, double, H5_float_complex, -FLT_MAX, FLT_MAX); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_double_dcomplex + * + * Purpose: Convert native `double' to native + * `double _Complex' / `_Dcomplex' using hardware. This is a + * fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_double_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_fz(DOUBLE, DOUBLE_COMPLEX, double, H5_double_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_double_lcomplex + * + * Purpose: Convert native `double' to native + * `long double _Complex' / `_Lcomplex' using hardware. This + * is a fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_double_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_fZ(DOUBLE, LDOUBLE_COMPLEX, double, H5_ldouble_complex, -, -); +} +#endif + /*------------------------------------------------------------------------- * Function: H5T__conv_ldouble_schar * @@ -2297,3 +2564,62 @@ H5T__conv_ldouble_double(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, c { H5T_CONV_Ff(LDOUBLE, DOUBLE, long double, double, -DBL_MAX, DBL_MAX); } + +#ifdef H5_HAVE_COMPLEX_NUMBERS +/*------------------------------------------------------------------------- + * Function: H5T__conv_ldouble_fcomplex + * + * Purpose: Convert native `long double' to native + * `float _Complex' / `_Fcomplex' using hardware. This is a + * fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_ldouble_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_Fz(LDOUBLE, FLOAT_COMPLEX, long double, H5_float_complex, -FLT_MAX, FLT_MAX); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_ldouble_dcomplex + * + * Purpose: Convert native `long double' to native + * `double _Complex' / `_Dcomplex' using hardware. This is a + * fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_ldouble_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_Fz(LDOUBLE, DOUBLE_COMPLEX, long double, H5_double_complex, -DBL_MAX, DBL_MAX); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_ldouble_lcomplex + * + * Purpose: Convert native `long double' to native + * `long double _Complex' / `_Lcomplex' using hardware. This + * is a fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_ldouble_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_fz(LDOUBLE, LDOUBLE_COMPLEX, long double, H5_ldouble_complex, -, -); +} +#endif diff --git a/src/H5Tconv_float.h b/src/H5Tconv_float.h index b5ec3062856..e5413fc0d22 100644 --- a/src/H5Tconv_float.h +++ b/src/H5Tconv_float.h @@ -16,10 +16,40 @@ /* Private headers needed by this file */ #include "H5Tpkg.h" +/*************************/ +/* Module private macros */ +/*************************/ + +#define TEMP_FLOAT_CONV_BUFFER_SIZE 64 + +/****************************/ +/* Library Private Typedefs */ +/****************************/ + +/* floating-point value type (regular, +/-0, +/-Inf, NaN) */ +typedef enum { + H5T_CONV_FLOAT_SPECVAL_REGULAR, + H5T_CONV_FLOAT_SPECVAL_POSZERO, + H5T_CONV_FLOAT_SPECVAL_NEGZERO, + H5T_CONV_FLOAT_SPECVAL_POSINF, + H5T_CONV_FLOAT_SPECVAL_NEGINF, + H5T_CONV_FLOAT_SPECVAL_NAN, +} H5T_conv_float_specval_t; + /***********************/ /* Function Prototypes */ /***********************/ +/* Helper functions shared between conversion modules */ +H5_DLL herr_t H5T__conv_f_f_loop(const H5T_t *src_p, const H5T_t *dst_p, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, void *buf); +H5_DLL herr_t H5T__conv_f_i_loop(const H5T_t *src_p, const H5T_t *dst_p, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, void *buf); + +H5_DLL H5T_conv_float_specval_t H5T__conv_float_find_special(const uint8_t *src_buf, + const H5T_atomic_t *src_atomic, + uint64_t *sign_out); + /****************************************/ /* Soft (emulated) conversion functions */ /****************************************/ @@ -33,6 +63,9 @@ H5_DLL herr_t H5T__conv_f_f(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cda H5_DLL herr_t H5T__conv_f_i(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, size_t bkg_stride, void *_buf, void *bkg); +H5_DLL herr_t H5T__conv_f_complex(const H5T_t *src_p, const H5T_t *dst_p, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); /*********************************************/ /* Hard (compiler cast) conversion functions */ @@ -79,6 +112,17 @@ H5_DLL herr_t H5T__conv__Float16_double(const H5T_t *st, const H5T_t *dt, H5T_cd H5_DLL herr_t H5T__conv__Float16_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf, void *bkg); +#ifdef H5_HAVE_COMPLEX_NUMBERS +H5_DLL herr_t H5T__conv__Float16_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv__Float16_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv__Float16_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif #endif /* Conversion functions for 'float' */ @@ -123,6 +167,17 @@ H5_DLL herr_t H5T__conv_float_double(const H5T_t *src, const H5T_t *dst, H5T_cda H5_DLL herr_t H5T__conv_float_ldouble(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf, void *bkg); +#ifdef H5_HAVE_COMPLEX_NUMBERS +H5_DLL herr_t H5T__conv_float_fcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_float_dcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_float_lcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif /* Conversion functions for 'double' */ H5_DLL herr_t H5T__conv_double_schar(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, @@ -166,6 +221,17 @@ H5_DLL herr_t H5T__conv_double_float(const H5T_t *src, const H5T_t *dst, H5T_cda H5_DLL herr_t H5T__conv_double_ldouble(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf, void *bkg); +#ifdef H5_HAVE_COMPLEX_NUMBERS +H5_DLL herr_t H5T__conv_double_fcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_double_dcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_double_lcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif /* Conversion functions for 'long double' */ H5_DLL herr_t H5T__conv_ldouble_schar(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, @@ -211,5 +277,16 @@ H5_DLL herr_t H5T__conv_ldouble_float(const H5T_t *src, const H5T_t *dst, H5T_cd H5_DLL herr_t H5T__conv_ldouble_double(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf, void *bkg); +#ifdef H5_HAVE_COMPLEX_NUMBERS +H5_DLL herr_t H5T__conv_ldouble_fcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_ldouble_dcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_ldouble_lcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif #endif /* H5Tconv_float_H */ diff --git a/src/H5Tconv_integer.c b/src/H5Tconv_integer.c index 01808ab5dd6..b2af085c064 100644 --- a/src/H5Tconv_integer.c +++ b/src/H5Tconv_integer.c @@ -119,7 +119,9 @@ H5T__conv_i_i(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_ dst_delta = (ssize_t)direction * (ssize_t)(buf_stride ? buf_stride : dst->shared->size); /* Allocate space for order-reversed source buffer */ - src_rev = (uint8_t *)H5MM_calloc(src->shared->size); + if (conv_ctx->u.conv.cb_struct.func) + if (NULL == (src_rev = H5MM_calloc(src->shared->size))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTALLOC, FAIL, "unable to allocate temporary buffer"); /* The conversion loop */ for (elmtno = 0; elmtno < nelmts; elmtno++) { @@ -199,8 +201,8 @@ H5T__conv_i_i(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_ /*overflow*/ if (conv_ctx->u.conv.cb_struct .func) { /*If user's exception handler is present, use it*/ - H5T__reverse_order(src_rev, s, src->shared->size, - src->shared->u.atomic.order); /*reverse order first*/ + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src); except_ret = (conv_ctx->u.conv.cb_struct.func)( H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, src_rev, d, @@ -235,8 +237,8 @@ H5T__conv_i_i(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_ /*overflow - source is negative*/ if (conv_ctx->u.conv.cb_struct .func) { /*If user's exception handler is present, use it*/ - H5T__reverse_order(src_rev, s, src->shared->size, - src->shared->u.atomic.order); /*reverse order first*/ + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src); except_ret = (conv_ctx->u.conv.cb_struct.func)( H5T_CONV_EXCEPT_RANGE_LOW, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, src_rev, d, @@ -263,8 +265,8 @@ H5T__conv_i_i(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_ /*overflow - source is positive*/ if (conv_ctx->u.conv.cb_struct .func) { /*If user's exception handler is present, use it*/ - H5T__reverse_order(src_rev, s, src->shared->size, - src->shared->u.atomic.order); /*reverse order first*/ + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src); except_ret = (conv_ctx->u.conv.cb_struct.func)( H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, src_rev, d, @@ -296,8 +298,8 @@ H5T__conv_i_i(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_ /*overflow*/ if (conv_ctx->u.conv.cb_struct .func) { /*If user's exception handler is present, use it*/ - H5T__reverse_order(src_rev, s, src->shared->size, - src->shared->u.atomic.order); /*reverse order first*/ + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src); except_ret = (conv_ctx->u.conv.cb_struct.func)( H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, src_rev, d, @@ -344,8 +346,8 @@ H5T__conv_i_i(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_ /*overflow*/ if (conv_ctx->u.conv.cb_struct .func) { /*If user's exception handler is present, use it*/ - H5T__reverse_order(src_rev, s, src->shared->size, - src->shared->u.atomic.order); /*reverse order first*/ + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src); except_ret = (conv_ctx->u.conv.cb_struct.func)( H5T_CONV_EXCEPT_RANGE_LOW, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, src_rev, d, @@ -387,8 +389,8 @@ H5T__conv_i_i(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_ /*overflow*/ if (conv_ctx->u.conv.cb_struct .func) { /*If user's exception handler is present, use it*/ - H5T__reverse_order(src_rev, s, src->shared->size, - src->shared->u.atomic.order); /*reverse order first*/ + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src); except_ret = (conv_ctx->u.conv.cb_struct.func)( H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, src_rev, d, @@ -476,425 +478,537 @@ H5T__conv_i_i(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_ } /* end H5T__conv_i_i() */ /*------------------------------------------------------------------------- - * Function: H5T__conv_i_f + * Function: H5T__conv_i_f_loop * - * Purpose: Convert one integer type to a floating-point type. This is - * the catch-all function for integer-float conversions and - * is probably not particularly fast. + * Purpose: Implements the body of the conversion loop when converting + * integer values to floating-point values (including complex + * number values). Encapsulates common code that is shared + * between the H5T__conv_i_f conversion function and other + * functions where the logic is nearly identical, such as + * H5T__conv_i_complex. * * Return: Non-negative on success/Negative on failure * *------------------------------------------------------------------------- */ herr_t -H5T__conv_i_f(const H5T_t *src_p, const H5T_t *dst_p, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, - size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, - void H5_ATTR_UNUSED *bkg) +H5T__conv_i_f_loop(const H5T_t *src_p, const H5T_t *dst_p, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, + size_t buf_stride, void *buf) { - /* Traversal-related variables */ - H5T_atomic_t src; /*atomic source info */ - H5T_atomic_t dst; /*atomic destination info */ - int direction; /*forward or backward traversal */ - size_t elmtno; /*element number */ - size_t half_size; /*half the type size */ - size_t tsize; /*type size for swapping bytes */ - size_t olap; /*num overlapping elements */ - uint8_t *s, *sp, *d, *dp; /*source and dest traversal ptrs*/ - uint8_t *src_rev = NULL; /*order-reversed source buffer */ - uint8_t dbuf[64] = {0}; /*temp destination buffer */ - uint8_t tmp1, tmp2; /*temp variables for swapping bytes*/ - - /* Conversion-related variables */ - hsize_t expo; /*destination exponent */ - hsize_t expo_max; /*maximal possible exponent value */ - size_t sign; /*source sign bit value */ - bool is_max_neg; /*source is maximal negative value*/ - bool do_round; /*whether there is roundup */ - uint8_t *int_buf = NULL; /*buffer for temporary value */ - size_t buf_size; /*buffer size for temporary value */ - size_t i; /*miscellaneous counters */ - size_t first; /*first bit(MSB) in an integer */ - ssize_t sfirst; /*a signed version of `first' */ - H5T_conv_ret_t except_ret; /*return of callback function */ - bool reverse; /*if reverse the order of destination */ - herr_t ret_value = SUCCEED; /* Return value */ + H5T_atomic_t src_atomic; /* source datatype atomic info */ + H5T_atomic_t dst_atomic; /* destination datatype atomic info */ + hsize_t expo_max; /* maximal possible exponent value */ + ssize_t src_delta, dst_delta; /* source & destination stride */ + uint8_t *s, *sp, *d, *dp; /* source and dest traversal ptrs */ + uint8_t *int_buf = NULL; /* buffer for temporary value */ + uint8_t *src_rev = NULL; /* order-reversed source buffer */ + size_t int_buf_size; /* buffer size for temporary value */ + size_t olap; /* num overlapping elements */ + int direction; /* forward or backward traversal */ + herr_t ret_value = SUCCEED; FUNC_ENTER_PACKAGE - switch (cdata->command) { - case H5T_CONV_INIT: - if (NULL == src_p || NULL == dst_p) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); - src = src_p->shared->u.atomic; - dst = dst_p->shared->u.atomic; - if (H5T_ORDER_LE != dst.order && H5T_ORDER_BE != dst.order && H5T_ORDER_VAX != dst.order) - HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order"); - if (dst_p->shared->size > sizeof(dbuf)) - HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "destination size is too large"); - if (8 * sizeof(expo) - 1 < src.u.f.esize) - HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "exponent field is too large"); - cdata->need_bkg = H5T_BKG_NO; - break; - - case H5T_CONV_FREE: - break; - - case H5T_CONV_CONV: - if (NULL == src_p || NULL == dst_p) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); - if (NULL == conv_ctx) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid datatype conversion context pointer"); - - src = src_p->shared->u.atomic; - dst = dst_p->shared->u.atomic; + assert(src_p); + assert(src_p->shared->type == H5T_INTEGER); + assert(dst_p); + assert(dst_p->shared->type == H5T_FLOAT || dst_p->shared->type == H5T_COMPLEX); + assert(conv_ctx); + assert(buf); + + src_atomic = src_p->shared->u.atomic; + if (dst_p->shared->type == H5T_COMPLEX) + dst_atomic = dst_p->shared->parent->shared->u.atomic; + else + dst_atomic = dst_p->shared->u.atomic; + + /* + * Do we process the values from beginning to end or vice versa? Also, + * how many of the elements have the source and destination areas + * overlapping? + */ + if (src_p->shared->size == dst_p->shared->size || buf_stride) { + sp = dp = (uint8_t *)buf; + direction = 1; + olap = nelmts; + } + else if (src_p->shared->size >= dst_p->shared->size) { + double olap_d = + ceil((double)(dst_p->shared->size) / (double)(src_p->shared->size - dst_p->shared->size)); + olap = (size_t)olap_d; + sp = dp = (uint8_t *)buf; + direction = 1; + } + else { + double olap_d = + ceil((double)(src_p->shared->size) / (double)(dst_p->shared->size - src_p->shared->size)); + olap = (size_t)olap_d; + sp = (uint8_t *)buf + (nelmts - 1) * src_p->shared->size; + dp = (uint8_t *)buf + (nelmts - 1) * dst_p->shared->size; + direction = -1; + } + + /* Direction & size of buffer traversal */ + H5_CHECK_OVERFLOW(buf_stride, size_t, ssize_t); + H5_CHECK_OVERFLOW(src_p->shared->size, size_t, ssize_t); + H5_CHECK_OVERFLOW(dst_p->shared->size, size_t, ssize_t); + src_delta = (ssize_t)direction * (ssize_t)(buf_stride ? buf_stride : src_p->shared->size); + dst_delta = (ssize_t)direction * (ssize_t)(buf_stride ? buf_stride : dst_p->shared->size); + + /* Allocate enough space for the buffer holding temporary converted value */ + int_buf_size = + ((src_atomic.prec > dst_atomic.u.f.msize ? src_atomic.prec : dst_atomic.u.f.msize) + 7) / 8; + if (NULL == (int_buf = H5MM_calloc(int_buf_size))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTALLOC, FAIL, "couldn't allocate temporary buffer"); + + /* Allocate space for order-reversed source buffer */ + if (conv_ctx->u.conv.cb_struct.func) + if (NULL == (src_rev = H5MM_calloc(src_p->shared->size))) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTALLOC, FAIL, "couldn't allocate temporary buffer"); + + /* The conversion loop */ + for (size_t elmtno = 0; elmtno < nelmts; elmtno++) { + H5T_conv_ret_t except_ret = H5T_CONV_UNHANDLED; /* return of conversion exception callback function */ + hsize_t expo; /* destination exponent */ + uint8_t dbuf[TEMP_INT_CONV_BUFFER_SIZE] = {0}; /* temp destination buffer */ + ssize_t sfirst = 0; /* a signed version of `first' */ + size_t first; /* first bit(MSB) in an integer */ + size_t sign = 0; /* source sign bit value */ + bool reverse = true; /* if reversed the order of destination */ + bool is_max_neg = false; /* source is maximal negative value? */ + bool do_round = false; /* whether there is roundup */ + + /* + * If the source and destination buffers overlap then use a + * temporary buffer for the destination. + */ + if (direction > 0) { + s = sp; + d = elmtno < olap ? dbuf : dp; + } + else { + s = sp; + d = elmtno + olap >= nelmts ? dbuf : dp; + } +#ifndef NDEBUG + if (d == dbuf) { + assert((dp >= sp && dp < sp + src_p->shared->size) || + (sp >= dp && sp < dp + dst_p->shared->size)); + } + else { + assert((dp < sp && dp + dst_p->shared->size <= sp) || + (sp < dp && sp + src_p->shared->size <= dp)); + } +#endif - /* - * Do we process the values from beginning to end or vice versa? Also, - * how many of the elements have the source and destination areas - * overlapping? - */ - if (src_p->shared->size == dst_p->shared->size || buf_stride) { - sp = dp = (uint8_t *)buf; - direction = 1; - olap = nelmts; - } - else if (src_p->shared->size >= dst_p->shared->size) { - double olap_d = - ceil((double)(dst_p->shared->size) / (double)(src_p->shared->size - dst_p->shared->size)); - olap = (size_t)olap_d; - sp = dp = (uint8_t *)buf; - direction = 1; + /* Put the data in little endian order so our loops aren't so + * complicated. We'll do all the conversion stuff assuming + * little endian and then we'll fix the order at the end. + */ + if (H5T_ORDER_BE == src_atomic.order) + for (size_t i = 0; i < src_p->shared->size / 2; i++) + H5_SWAP_BYTES(s, i, src_p->shared->size - (i + 1)); + + /* Zero-set all destination bits */ + H5T__bit_set(d, dst_atomic.offset, dst_atomic.prec, false); + + /* Copy source into a temporary buffer */ + H5T__bit_copy(int_buf, (size_t)0, s, src_atomic.offset, src_atomic.prec); + + /* Find the sign bit value of the source */ + if (H5T_SGN_2 == src_atomic.u.i.sign) + sign = (size_t)H5T__bit_get_d(int_buf, src_atomic.prec - 1, (size_t)1); + + /* What is the bit position(starting from 0 as first one) for the most significant + * bit(MSB) of S which is set? + */ + if (H5T_SGN_2 == src_atomic.u.i.sign) { + sfirst = H5T__bit_find(int_buf, (size_t)0, src_atomic.prec - 1, H5T_BIT_MSB, true); + if (sign && sfirst < 0) + /* The case 0x80...00, which is negative with maximal value */ + is_max_neg = 1; + } + else if (H5T_SGN_NONE == src_atomic.u.i.sign) + sfirst = H5T__bit_find(int_buf, (size_t)0, src_atomic.prec, H5T_BIT_MSB, true); + + /* Handle special cases here. Integer is zero */ + if (!sign && sfirst < 0) + goto padding; + + /* Convert source integer if it's negative */ + if (H5T_SGN_2 == src_atomic.u.i.sign && sign) { + if (!is_max_neg) { + /* Equivalent to ~(i - 1) */ + H5T__bit_dec(int_buf, (size_t)0, int_buf_size * 8); + H5T__bit_neg(int_buf, (size_t)0, int_buf_size * 8); + sfirst = H5T__bit_find(int_buf, (size_t)0, src_atomic.prec - 1, H5T_BIT_MSB, true); } else { - double olap_d = - ceil((double)(src_p->shared->size) / (double)(dst_p->shared->size - src_p->shared->size)); - olap = (size_t)olap_d; - sp = (uint8_t *)buf + (nelmts - 1) * src_p->shared->size; - dp = (uint8_t *)buf + (nelmts - 1) * dst_p->shared->size; - direction = -1; + /* If it's maximal negative number 0x80...000, treat it as if it overflowed + * (create a carry) to help conversion. i.e. a character type number 0x80 + * is treated as 0x100. + */ + sfirst = (ssize_t)(src_atomic.prec - 1); + is_max_neg = 0; } + if (sfirst < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "zero bit not found"); - /* Allocate enough space for the buffer holding temporary - * converted value + /* Sign bit has been negated if bit vector isn't 0x80...00. Set all bits in front of + * sign bit to 0 in the temporary buffer because they're all negated from the previous + * step. */ - buf_size = ((src.prec > dst.u.f.msize ? src.prec : dst.u.f.msize) + 7) / 8; - int_buf = (uint8_t *)H5MM_calloc(buf_size); - - /* Allocate space for order-reversed source buffer */ - src_rev = (uint8_t *)H5MM_calloc(src_p->shared->size); - - /* The conversion loop */ - for (elmtno = 0; elmtno < nelmts; elmtno++) { - /* Set these variables to default */ - except_ret = H5T_CONV_UNHANDLED; - reverse = true; + H5T__bit_set(int_buf, src_atomic.prec, (int_buf_size * 8) - src_atomic.prec, 0); + + /* Set sign bit in destination */ + H5T__bit_set_d(d, dst_atomic.u.f.sign, (size_t)1, (hsize_t)sign); + } + + first = (size_t)sfirst; + + /* Calculate the true destination exponent by adjusting according to + * the destination exponent bias. Implied and non-implied normalization + * should be the same. + */ + if (H5T_NORM_NONE == dst_atomic.u.f.norm || H5T_NORM_IMPLIED == dst_atomic.u.f.norm) + expo = first + dst_atomic.u.f.ebias; + else + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "normalization method not implemented yet"); + + /* Handle mantissa part here */ + if (H5T_NORM_IMPLIED == dst_atomic.u.f.norm) + H5T__bit_set(int_buf, first, (size_t)1, 0); /* Imply first bit */ + else if (H5T_NORM_NONE == dst_atomic.u.f.norm) + first++; + + /* Roundup for mantissa */ + if (first > dst_atomic.u.f.msize) { + /* If the bit sequence is bigger than the mantissa part, there'll be some + * precision loss. Let user's handler deal with the case if it's present + */ + if (conv_ctx->u.conv.cb_struct.func) { + /* reverse source buffer order first */ + H5T__reverse_order(src_rev, s, src_p); + except_ret = (conv_ctx->u.conv.cb_struct.func)( + H5T_CONV_EXCEPT_PRECISION, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, + src_rev, d, conv_ctx->u.conv.cb_struct.user_data); + } - /* Make sure these variables are reset to 0. */ - sign = 0; /*source sign bit value */ - is_max_neg = 0; /*source is maximal negative value*/ - do_round = 0; /*whether there is roundup */ - sfirst = 0; + if (except_ret == H5T_CONV_HANDLED) { + reverse = false; + goto padding; + } + else if (except_ret == H5T_CONV_ABORT) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); - /* - * If the source and destination buffers overlap then use a - * temporary buffer for the destination. - */ - if (direction > 0) { - s = sp; - d = elmtno < olap ? dbuf : dp; - } - else { - s = sp; - d = elmtno + olap >= nelmts ? dbuf : dp; - } -#ifndef NDEBUG - /* I don't quite trust the overlap calculations yet */ - if (d == dbuf) { - assert((dp >= sp && dp < sp + src_p->shared->size) || - (sp >= dp && sp < dp + dst_p->shared->size)); - } - else { - assert((dp < sp && dp + dst_p->shared->size <= sp) || - (sp < dp && sp + src_p->shared->size <= dp)); - } -#endif + /* If user's exception handler does deal with it, we do it by dropping off the + * extra bits at the end and do rounding. If we have .50...0(decimal) after radix + * point, we do roundup when the least significant digit before radix is odd, we do + * rounddown if it's even. + */ - /* Put the data in little endian order so our loops aren't so - * complicated. We'll do all the conversion stuff assuming - * little endian and then we'll fix the order at the end. - */ - if (H5T_ORDER_BE == src.order) { - half_size = src_p->shared->size / 2; - for (i = 0; i < half_size; i++) { - tmp1 = s[src_p->shared->size - (i + 1)]; - s[src_p->shared->size - (i + 1)] = s[i]; - s[i] = tmp1; - } + /* Check 1st dropoff bit, see if it's set. */ + if (H5T__bit_get_d(int_buf, ((first - dst_atomic.u.f.msize) - 1), (size_t)1)) { + /* Check all bits after 1st dropoff bit, see if any of them is set. */ + if (((first - dst_atomic.u.f.msize) - 1) > 0 && + H5T__bit_get_d(int_buf, (size_t)0, ((first - dst_atomic.u.f.msize) - 1))) + do_round = 1; + else { /* The .50...0 case */ + /* Check if the least significant bit is odd. */ + if (H5T__bit_get_d(int_buf, (first - dst_atomic.u.f.msize), (size_t)1)) + do_round = 1; } + } - /* Zero-set all destination bits*/ - H5T__bit_set(d, dst.offset, dst.prec, false); - - /* Copy source into a temporary buffer */ - H5T__bit_copy(int_buf, (size_t)0, s, src.offset, src.prec); + /* Right shift to drop off extra bits */ + H5T__bit_shift(int_buf, (ssize_t)(dst_atomic.u.f.msize - first), (size_t)0, int_buf_size * 8); - /* Find the sign bit value of the source */ - if (H5T_SGN_2 == src.u.i.sign) - sign = (size_t)H5T__bit_get_d(int_buf, src.prec - 1, (size_t)1); + if (do_round) { + H5T__bit_inc(int_buf, (size_t)0, int_buf_size * 8); + do_round = 0; - /* What is the bit position(starting from 0 as first one) for the most significant - * bit(MSB) of S which is set? + /* If integer is like 0x0ff...fff and we need to round up the + * last f, we get 0x100...000. Treat this special case here. */ - if (H5T_SGN_2 == src.u.i.sign) { - sfirst = H5T__bit_find(int_buf, (size_t)0, src.prec - 1, H5T_BIT_MSB, true); - if (sign && sfirst < 0) - /* The case 0x80...00, which is negative with maximal value */ - is_max_neg = 1; - } - else if (H5T_SGN_NONE == src.u.i.sign) - sfirst = H5T__bit_find(int_buf, (size_t)0, src.prec, H5T_BIT_MSB, true); - - /* Handle special cases here. Integer is zero */ - if (!sign && sfirst < 0) - goto padding; - - /* Convert source integer if it's negative */ - if (H5T_SGN_2 == src.u.i.sign && sign) { - if (!is_max_neg) { - /* Equivalent to ~(i - 1) */ - H5T__bit_dec(int_buf, (size_t)0, buf_size * 8); - H5T__bit_neg(int_buf, (size_t)0, buf_size * 8); - sfirst = H5T__bit_find(int_buf, (size_t)0, src.prec - 1, H5T_BIT_MSB, true); + if (H5T__bit_get_d(int_buf, dst_atomic.u.f.msize, (size_t)1)) { + if (H5T_NORM_IMPLIED == dst_atomic.u.f.norm) { + /* The bit at this 1's position was impled already, so this + * number should be 0x200...000. We need to increment the + * exponent in this case. + */ + expo++; } - else { - /* If it's maximal negative number 0x80...000, treat it as if it overflowed - * (create a carry) to help conversion. i.e. a character type number 0x80 - * is treated as 0x100. + else if (H5T_NORM_NONE == dst_atomic.u.f.norm) { + /* Right shift 1 bit to let the carried 1 fit in the mantissa, + * and increment exponent by 1. */ - sfirst = (ssize_t)(src.prec - 1); - is_max_neg = 0; + H5T__bit_shift(int_buf, (ssize_t)-1, (size_t)0, int_buf_size * 8); + expo++; } - if (sfirst < 0) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "zero bit not found"); + } + } + } + else { + /* The bit sequence can fit mantissa part. Left shift to fit in from high-order of + * bit position. */ + H5T__bit_shift(int_buf, (ssize_t)(dst_atomic.u.f.msize - first), (size_t)0, dst_atomic.u.f.msize); + } + + /* Check if the exponent is too big */ + expo_max = (hsize_t)(pow(2.0, (double)dst_atomic.u.f.esize) - 1); + + if (expo > expo_max) { /* overflows */ + if (conv_ctx->u.conv.cb_struct.func) { + /* user's exception handler. Reverse back source order */ + H5T__reverse_order(src_rev, s, src_p); + except_ret = (conv_ctx->u.conv.cb_struct.func)( + H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, + src_rev, d, conv_ctx->u.conv.cb_struct.user_data); + + if (except_ret == H5T_CONV_ABORT) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); + else if (except_ret == H5T_CONV_HANDLED) { + reverse = false; + goto padding; + } + } - /* Sign bit has been negated if bit vector isn't 0x80...00. Set all bits in front of - * sign bit to 0 in the temporary buffer because they're all negated from the previous - * step. - */ - H5T__bit_set(int_buf, src.prec, (buf_size * 8) - src.prec, 0); + if (!conv_ctx->u.conv.cb_struct.func || (except_ret == H5T_CONV_UNHANDLED)) { + /* Make destination infinity by setting exponent to maximal number and mantissa to zero. */ + expo = expo_max; + memset(int_buf, 0, int_buf_size); + } + } - /* Set sign bit in destination */ - H5T__bit_set_d(d, dst.u.f.sign, (size_t)1, (hsize_t)sign); - } /* end if */ + if (except_ret == H5T_CONV_UNHANDLED) { + /* Set exponent in destination */ + H5T__bit_set_d(d, dst_atomic.u.f.epos, dst_atomic.u.f.esize, expo); - first = (size_t)sfirst; + /* Copy mantissa into destination */ + H5T__bit_copy(d, dst_atomic.u.f.mpos, int_buf, (size_t)0, + (int_buf_size * 8) > dst_atomic.u.f.msize ? dst_atomic.u.f.msize + : int_buf_size * 8); + } - /* Calculate the true destination exponent by adjusting according to - * the destination exponent bias. Implied and non-implied normalization - * should be the same. - */ - if (H5T_NORM_NONE == dst.u.f.norm || H5T_NORM_IMPLIED == dst.u.f.norm) { - expo = first + dst.u.f.ebias; - } - else { - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "normalization method not implemented yet"); +padding: + /* Set padding areas in destination. */ + if (dst_atomic.offset > 0) { + assert(H5T_PAD_ZERO == dst_atomic.lsb_pad || H5T_PAD_ONE == dst_atomic.lsb_pad); + H5T__bit_set(d, (size_t)0, dst_atomic.offset, (bool)(H5T_PAD_ONE == dst_atomic.lsb_pad)); + } + { + size_t type_size; + + if (dst_p->shared->type == H5T_FLOAT) + type_size = dst_p->shared->size; + else + type_size = dst_p->shared->parent->shared->size; + + if (dst_atomic.offset + dst_atomic.prec != 8 * type_size) { + assert(H5T_PAD_ZERO == dst_atomic.msb_pad || H5T_PAD_ONE == dst_atomic.msb_pad); + H5T__bit_set(d, dst_atomic.offset + dst_atomic.prec, + 8 * type_size - (dst_atomic.offset + dst_atomic.prec), + (bool)(H5T_PAD_ONE == dst_atomic.msb_pad)); + } + } + + /* + * Put the destination in the correct byte order. See note at + * beginning of loop. Only the "real" part of a complex number + * element is swapped. By the C standard, the "imaginary" part + * should just be zeroed when converting a real value to a + * complex value. + */ + if (H5T_ORDER_BE == dst_atomic.order && reverse) { + size_t half_size = dst_p->shared->size / 2; + + if (H5T_FLOAT == dst_p->shared->type) { + for (size_t i = 0; i < half_size; i++) + H5_SWAP_BYTES(d, i, dst_p->shared->size - (i + 1)); + } + else { + for (size_t i = 0; i < half_size / 2; i++) + H5_SWAP_BYTES(d, i, half_size - (i + 1)); + } + } + else if (H5T_ORDER_VAX == dst_atomic.order && reverse) { + if (H5T_FLOAT == dst_p->shared->type) { + uint8_t tmp1, tmp2; + size_t tsize = dst_p->shared->size; + assert(0 == tsize % 2); + + for (size_t i = 0; i < tsize; i += 4) { + tmp1 = d[i]; + tmp2 = d[i + 1]; + + d[i] = d[(tsize - 2) - i]; + d[i + 1] = d[(tsize - 1) - i]; + + d[(tsize - 2) - i] = tmp1; + d[(tsize - 1) - i] = tmp2; } + } + else + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "VAX byte ordering is unsupported for complex number type conversions"); + } + + /* + * If we had used a temporary buffer for the destination then we + * should copy the value to the true destination buffer. + */ + if (d == dbuf) /* For complex number values, assume that dbuf was initialized to 0s */ + H5MM_memcpy(dp, d, dst_p->shared->size); + else if (dst_p->shared->type == H5T_COMPLEX) + /* Ensure imaginary part of complex number is zeroed */ + memset(dp + (dst_p->shared->size / 2), 0, dst_p->shared->size / 2); + + /* Advance source & destination pointers by delta amounts */ + sp += src_delta; + dp += dst_delta; + + memset(int_buf, 0, int_buf_size); + } /* end conversion loop */ - /* Handle mantissa part here */ - if (H5T_NORM_IMPLIED == dst.u.f.norm) { - /* Imply first bit */ - H5T__bit_set(int_buf, first, (size_t)1, 0); - } - else if (H5T_NORM_NONE == dst.u.f.norm) { - first++; - } +done: + H5MM_free(src_rev); + H5MM_free(int_buf); - /* Roundup for mantissa */ - if (first > dst.u.f.msize) { - /* If the bit sequence is bigger than the mantissa part, there'll be some - * precision loss. Let user's handler deal with the case if it's present - */ - if (conv_ctx->u.conv.cb_struct.func) { - H5T__reverse_order(src_rev, s, src_p->shared->size, - src_p->shared->u.atomic.order); /*reverse order first*/ - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_PRECISION, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, conv_ctx->u.conv.cb_struct.user_data); - } + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5T__conv_i_f_loop() */ - if (except_ret == H5T_CONV_HANDLED) { - reverse = false; - goto padding; - } - else if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); +/*------------------------------------------------------------------------- + * Function: H5T__conv_i_f + * + * Purpose: Convert one integer type to a floating-point type. This is + * the catch-all function for integer-float conversions and + * is probably not particularly fast. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_i_f(const H5T_t *src_p, const H5T_t *dst_p, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + herr_t ret_value = SUCCEED; /* Return value */ - /* If user's exception handler does deal with it, we do it by dropping off the - * extra bits at the end and do rounding. If we have .50...0(decimal) after radix - * point, we do roundup when the least significant digit before radix is odd, we do - * rounddown if it's even. - */ + FUNC_ENTER_PACKAGE - /* Check 1st dropoff bit, see if it's set. */ - if (H5T__bit_get_d(int_buf, ((first - dst.u.f.msize) - 1), (size_t)1)) { - /* Check all bits after 1st dropoff bit, see if any of them is set. */ - if (((first - dst.u.f.msize) - 1) > 0 && - H5T__bit_get_d(int_buf, (size_t)0, ((first - dst.u.f.msize) - 1))) - do_round = 1; - else { /* The .50...0 case */ - /* Check if the least significant bit is odd. */ - if (H5T__bit_get_d(int_buf, (first - dst.u.f.msize), (size_t)1)) - do_round = 1; - } - } + switch (cdata->command) { + case H5T_CONV_INIT: { + H5T_atomic_t src_atomic; /* source datatype atomic info */ + H5T_atomic_t dst_atomic; /* destination datatype atomic info */ - /* Right shift to drop off extra bits */ - H5T__bit_shift(int_buf, (ssize_t)(dst.u.f.msize - first), (size_t)0, buf_size * 8); + if (NULL == src_p || NULL == dst_p) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); + src_atomic = src_p->shared->u.atomic; + dst_atomic = dst_p->shared->u.atomic; + if (H5T_ORDER_LE != src_atomic.order && H5T_ORDER_BE != src_atomic.order) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order"); + if (H5T_ORDER_LE != dst_atomic.order && H5T_ORDER_BE != dst_atomic.order && + H5T_ORDER_VAX != dst_atomic.order) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order"); + if (dst_p->shared->size > TEMP_INT_CONV_BUFFER_SIZE) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "destination size is too large"); + if (8 * sizeof(hsize_t) - 1 < dst_atomic.u.f.esize) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "exponent field is too large"); + cdata->need_bkg = H5T_BKG_NO; - if (do_round) { - H5T__bit_inc(int_buf, (size_t)0, buf_size * 8); - do_round = 0; + break; + } - /* If integer is like 0x0ff...fff and we need to round up the - * last f, we get 0x100...000. Treat this special case here. - */ - if (H5T__bit_get_d(int_buf, dst.u.f.msize, (size_t)1)) { - if (H5T_NORM_IMPLIED == dst.u.f.norm) { - /* The bit at this 1's position was impled already, so this - * number should be 0x200...000. We need to increment the - * exponent in this case. - */ - expo++; - } - else if (H5T_NORM_NONE == dst.u.f.norm) { - /* Right shift 1 bit to let the carried 1 fit in the mantissa, - * and increment exponent by 1. - */ - H5T__bit_shift(int_buf, (ssize_t)-1, (size_t)0, buf_size * 8); - expo++; - } - } - } - } - else { - /* The bit sequence can fit mantissa part. Left shift to fit in from high-order of - * bit position. */ - H5T__bit_shift(int_buf, (ssize_t)(dst.u.f.msize - first), (size_t)0, dst.u.f.msize); - } + case H5T_CONV_FREE: + break; - /* Check if the exponent is too big */ - expo_max = (hsize_t)(pow(2.0, (double)dst.u.f.esize) - 1); + case H5T_CONV_CONV: + if (NULL == src_p || NULL == dst_p) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); + if (NULL == conv_ctx) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid datatype conversion context pointer"); - if (expo > expo_max) { /*overflows*/ - if (conv_ctx->u.conv.cb_struct - .func) { /*user's exception handler. Reverse back source order*/ - H5T__reverse_order(src_rev, s, src_p->shared->size, - src_p->shared->u.atomic.order); /*reverse order first*/ - except_ret = (conv_ctx->u.conv.cb_struct.func)( - H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, - conv_ctx->u.conv.dst_type_id, src_rev, d, conv_ctx->u.conv.cb_struct.user_data); + if (H5T__conv_i_f_loop(src_p, dst_p, conv_ctx, nelmts, buf_stride, buf) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "unable to convert data values"); - if (except_ret == H5T_CONV_ABORT) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, - "can't handle conversion exception"); - else if (except_ret == H5T_CONV_HANDLED) { - reverse = false; - goto padding; - } - } + break; - if (!conv_ctx->u.conv.cb_struct.func || (except_ret == H5T_CONV_UNHANDLED)) { - /*make destination infinity by setting exponent to maximal number and - *mantissa to zero.*/ - expo = expo_max; - memset(int_buf, 0, buf_size); - } - } + default: + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command"); + } - if (except_ret == H5T_CONV_UNHANDLED) { - /* Set exponent in destination */ - H5T__bit_set_d(d, dst.u.f.epos, dst.u.f.esize, expo); +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5T__conv_i_f() */ - /* Copy mantissa into destination */ - H5T__bit_copy(d, dst.u.f.mpos, int_buf, (size_t)0, - (buf_size * 8) > dst.u.f.msize ? dst.u.f.msize : buf_size * 8); - } +/*------------------------------------------------------------------------- + * Function: H5T__conv_i_complex + * + * Purpose: Convert integer values to complex number values. This is + * the catch-all function for integer -> complex number + * conversions and is probably not particularly fast. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_i_complex(const H5T_t *src_p, const H5T_t *dst_p, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + herr_t ret_value = SUCCEED; -padding: - /* - * Set padding areas in destination. - */ - if (dst.offset > 0) { - assert(H5T_PAD_ZERO == dst.lsb_pad || H5T_PAD_ONE == dst.lsb_pad); - H5T__bit_set(d, (size_t)0, dst.offset, (bool)(H5T_PAD_ONE == dst.lsb_pad)); - } - if (dst.offset + dst.prec != 8 * dst_p->shared->size) { - assert(H5T_PAD_ZERO == dst.msb_pad || H5T_PAD_ONE == dst.msb_pad); - H5T__bit_set(d, dst.offset + dst.prec, 8 * dst_p->shared->size - (dst.offset + dst.prec), - (bool)(H5T_PAD_ONE == dst.msb_pad)); - } + FUNC_ENTER_PACKAGE - /* - * Put the destination in the correct byte order. See note at - * beginning of loop. - */ - if (H5T_ORDER_BE == dst.order && reverse) { - half_size = dst_p->shared->size / 2; - for (i = 0; i < half_size; i++) { - uint8_t tmp = d[dst_p->shared->size - (i + 1)]; - d[dst_p->shared->size - (i + 1)] = d[i]; - d[i] = tmp; - } - } - else if (H5T_ORDER_VAX == dst.order && reverse) { - tsize = dst_p->shared->size; - assert(0 == tsize % 2); + switch (cdata->command) { + case H5T_CONV_INIT: { + H5T_atomic_t src_atomic; /* source datatype atomic info */ + H5T_atomic_t dst_atomic; /* destination datatype atomic info */ - for (i = 0; i < tsize; i += 4) { - tmp1 = d[i]; - tmp2 = d[i + 1]; + if (!src_p || !dst_p) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); + if (!H5T_IS_ATOMIC(dst_p->shared->parent->shared)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid complex number datatype"); + src_atomic = src_p->shared->u.atomic; + dst_atomic = dst_p->shared->parent->shared->u.atomic; + if (H5T_ORDER_LE != src_atomic.order && H5T_ORDER_BE != src_atomic.order) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "unsupported byte order for source datatype"); + if (H5T_ORDER_LE != dst_atomic.order && H5T_ORDER_BE != dst_atomic.order) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, + "unsupported byte order for destination datatype"); + if (dst_p->shared->size > TEMP_INT_CONV_BUFFER_SIZE) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "destination datatype size is too large"); + if (8 * sizeof(hsize_t) - 1 < dst_atomic.u.f.esize) + HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "exponent field is too large"); + cdata->need_bkg = H5T_BKG_NO; - d[i] = d[(tsize - 2) - i]; - d[i + 1] = d[(tsize - 1) - i]; + break; + } - d[(tsize - 2) - i] = tmp1; - d[(tsize - 1) - i] = tmp2; - } - } + case H5T_CONV_FREE: + break; - /* - * If we had used a temporary buffer for the destination then we - * should copy the value to the true destination buffer. - */ - if (d == dbuf) - H5MM_memcpy(dp, d, dst_p->shared->size); - if (buf_stride) { - sp += direction * (ssize_t)buf_stride; - dp += direction * (ssize_t)buf_stride; - } - else { - sp += direction * (ssize_t)src_p->shared->size; - dp += direction * (ssize_t)dst_p->shared->size; - } + case H5T_CONV_CONV: + if (!src_p || !dst_p) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype"); + if (NULL == conv_ctx) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid datatype conversion context pointer"); - memset(int_buf, 0, buf_size); - } + if (H5T__conv_i_f_loop(src_p, dst_p, conv_ctx, nelmts, buf_stride, buf) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "unable to convert data values"); break; default: HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command"); - } /* end switch */ + } done: - if (int_buf) - H5MM_xfree(int_buf); - if (src_rev) - H5MM_free(src_rev); - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5T__conv_i_f() */ +} /* end H5T__conv_i_complex() */ /*------------------------------------------------------------------------- * Function: H5T__conv_schar_uchar @@ -1122,6 +1236,65 @@ H5T__conv_schar_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, co H5T_CONV_xF(SCHAR, LDOUBLE, signed char, long double, -, -); } +#ifdef H5_HAVE_COMPLEX_NUMBERS +/*------------------------------------------------------------------------- + * Function: H5T__conv_schar_fcomplex + * + * Purpose: Convert native signed char to native + * float _Complex / _Fcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_schar_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(SCHAR, FLOAT_COMPLEX, signed char, H5_float_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_schar_dcomplex + * + * Purpose: Convert native signed char to native + * double _Complex / _Dcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_schar_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(SCHAR, DOUBLE_COMPLEX, signed char, H5_double_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_schar_lcomplex + * + * Purpose: Convert native signed char to native + * long double _Complex / _Lcomplex using hardware. This is a + * fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_schar_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(SCHAR, LDOUBLE_COMPLEX, signed char, H5_ldouble_complex, -, -); +} +#endif + /*------------------------------------------------------------------------- * Function: H5T__conv_uchar_schar * @@ -1348,6 +1521,65 @@ H5T__conv_uchar_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, co H5T_CONV_xF(UCHAR, LDOUBLE, unsigned char, long double, -, -); } +#ifdef H5_HAVE_COMPLEX_NUMBERS +/*------------------------------------------------------------------------- + * Function: H5T__conv_uchar_fcomplex + * + * Purpose: Convert native unsigned char to native + * float _Complex / _Fcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_uchar_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(UCHAR, FLOAT_COMPLEX, unsigned char, H5_float_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_uchar_dcomplex + * + * Purpose: Convert native unsigned char to native + * double _Complex / _Dcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_uchar_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(UCHAR, DOUBLE_COMPLEX, unsigned char, H5_double_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_uchar_lcomplex + * + * Purpose: Convert native unsigned char to native + * long double _Complex / _Lcomplex using hardware. This is a + * fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_uchar_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(UCHAR, LDOUBLE_COMPLEX, unsigned char, H5_ldouble_complex, -, -); +} +#endif + /*------------------------------------------------------------------------- * Function: H5T__conv_short_schar * @@ -1574,6 +1806,65 @@ H5T__conv_short_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, co H5T_CONV_xF(SHORT, LDOUBLE, short, long double, -, -); } +#ifdef H5_HAVE_COMPLEX_NUMBERS +/*------------------------------------------------------------------------- + * Function: H5T__conv_short_fcomplex + * + * Purpose: Convert native short to native + * float _Complex / _Fcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_short_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(SHORT, FLOAT_COMPLEX, short, H5_float_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_short_dcomplex + * + * Purpose: Convert native short to native + * double _Complex / _Dcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_short_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(SHORT, DOUBLE_COMPLEX, short, H5_double_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_short_lcomplex + * + * Purpose: Convert native short to native + * long double _Complex / _Lcomplex using hardware. This is a + * fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_short_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(SHORT, LDOUBLE_COMPLEX, short, H5_ldouble_complex, -, -); +} +#endif + /*------------------------------------------------------------------------- * Function: H5T__conv_ushort_schar * @@ -1782,26 +2073,85 @@ H5T__conv_ushort_double(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, co size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) { - H5T_CONV_xF(USHORT, DOUBLE, unsigned short, double, -, -); + H5T_CONV_xF(USHORT, DOUBLE, unsigned short, double, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_ushort_ldouble + * + * Purpose: Convert native unsigned short to native long double using + * hardware. This is a fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_ushort_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xF(USHORT, LDOUBLE, unsigned short, long double, -, -); +} + +#ifdef H5_HAVE_COMPLEX_NUMBERS +/*------------------------------------------------------------------------- + * Function: H5T__conv_ushort_fcomplex + * + * Purpose: Convert native unsigned short to native + * float _Complex / _Fcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_ushort_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(USHORT, FLOAT_COMPLEX, unsigned short, H5_float_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_ushort_dcomplex + * + * Purpose: Convert native unsigned short to native + * double _Complex / _Dcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_ushort_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(USHORT, DOUBLE_COMPLEX, unsigned short, H5_double_complex, -, -); } /*------------------------------------------------------------------------- - * Function: H5T__conv_ushort_ldouble + * Function: H5T__conv_ushort_lcomplex * - * Purpose: Convert native unsigned short to native long double using - * hardware. This is a fast special case. + * Purpose: Convert native unsigned short to native + * long double _Complex / _Lcomplex using hardware. This is a + * fast special case. * * Return: Non-negative on success/Negative on failure * *------------------------------------------------------------------------- */ herr_t -H5T__conv_ushort_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, - size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, - void H5_ATTR_UNUSED *bkg) +H5T__conv_ushort_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) { - H5T_CONV_xF(USHORT, LDOUBLE, unsigned short, long double, -, -); + H5T_CONV_xZ(USHORT, LDOUBLE_COMPLEX, unsigned short, H5_ldouble_complex, -, -); } +#endif /*------------------------------------------------------------------------- * Function: H5T__conv_int_schar @@ -2032,6 +2382,65 @@ H5T__conv_int_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, cons H5T_CONV_xF(INT, LDOUBLE, int, long double, -, -); } +#ifdef H5_HAVE_COMPLEX_NUMBERS +/*------------------------------------------------------------------------- + * Function: H5T__conv_int_fcomplex + * + * Purpose: Convert native integer to native + * float _Complex / _Fcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_int_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(INT, FLOAT_COMPLEX, int, H5_float_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_int_dcomplex + * + * Purpose: Convert native integer to native + * double _Complex / _Dcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_int_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(INT, DOUBLE_COMPLEX, int, H5_double_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_int_lcomplex + * + * Purpose: Convert native integer to native + * long double _Complex / _Lcomplex using hardware. This is a + * fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_int_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(INT, LDOUBLE_COMPLEX, int, H5_ldouble_complex, -, -); +} +#endif + /*------------------------------------------------------------------------- * Function: H5T__conv_uint_schar * @@ -2261,6 +2670,65 @@ H5T__conv_uint_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, con H5T_CONV_xF(UINT, LDOUBLE, unsigned int, long double, -, -); } +#ifdef H5_HAVE_COMPLEX_NUMBERS +/*------------------------------------------------------------------------- + * Function: H5T__conv_uint_fcomplex + * + * Purpose: Convert native unsigned integer to native + * float _Complex / _Fcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_uint_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(UINT, FLOAT_COMPLEX, unsigned int, H5_float_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_uint_dcomplex + * + * Purpose: Convert native unsigned integer to native + * double _Complex / _Dcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_uint_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(UINT, DOUBLE_COMPLEX, unsigned int, H5_double_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_uint_lcomplex + * + * Purpose: Convert native unsigned integer to native + * long double _Complex / _Lcomplex using hardware. This is a + * fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_uint_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(UINT, LDOUBLE_COMPLEX, unsigned int, H5_ldouble_complex, -, -); +} +#endif + /*------------------------------------------------------------------------- * Function: H5T__conv_long_schar * @@ -2490,6 +2958,65 @@ H5T__conv_long_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, con H5T_CONV_xF(LONG, LDOUBLE, long, long double, -, -); } +#ifdef H5_HAVE_COMPLEX_NUMBERS +/*------------------------------------------------------------------------- + * Function: H5T__conv_long_fcomplex + * + * Purpose: Convert native long to native + * float _Complex / _Fcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_long_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(LONG, FLOAT_COMPLEX, long, H5_float_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_long_dcomplex + * + * Purpose: Convert native long to native + * double _Complex / _Dcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_long_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(LONG, DOUBLE_COMPLEX, long, H5_double_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_long_lcomplex + * + * Purpose: Convert native long to native + * long double _Complex / _Lcomplex using hardware. This is a + * fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_long_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(LONG, LDOUBLE_COMPLEX, long, H5_ldouble_complex, -, -); +} +#endif + /*------------------------------------------------------------------------- * Function: H5T__conv_ulong_schar * @@ -2719,6 +3246,65 @@ H5T__conv_ulong_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, co H5T_CONV_xF(ULONG, LDOUBLE, unsigned long, long double, -, -); } +#ifdef H5_HAVE_COMPLEX_NUMBERS +/*------------------------------------------------------------------------- + * Function: H5T__conv_ulong_fcomplex + * + * Purpose: Convert native unsigned long to native + * float _Complex / _Fcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_ulong_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(ULONG, FLOAT_COMPLEX, unsigned long, H5_float_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_ulong_dcomplex + * + * Purpose: Convert native unsigned long to native + * double _Complex / _Dcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_ulong_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(ULONG, DOUBLE_COMPLEX, unsigned long, H5_double_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_ulong_lcomplex + * + * Purpose: Convert native unsigned long to native + * long double _Complex / _Lcomplex using hardware. This is a + * fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_ulong_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(ULONG, LDOUBLE_COMPLEX, unsigned long, H5_ldouble_complex, -, -); +} +#endif + /*------------------------------------------------------------------------- * Function: H5T__conv_llong_schar * @@ -2950,6 +3536,67 @@ H5T__conv_llong_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, co } #endif /* H5T_CONV_INTERNAL_LLONG_LDOUBLE */ +#ifdef H5_HAVE_COMPLEX_NUMBERS +/*------------------------------------------------------------------------- + * Function: H5T__conv_llong_fcomplex + * + * Purpose: Convert native long long to native + * float _Complex / _Fcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_llong_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(LLONG, FLOAT_COMPLEX, long long, H5_float_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_llong_dcomplex + * + * Purpose: Convert native long long to native + * double _Complex / _Dcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_llong_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(LLONG, DOUBLE_COMPLEX, long long, H5_double_complex, -, -); +} + +#ifdef H5T_CONV_INTERNAL_LLONG_LDOUBLE +/*------------------------------------------------------------------------- + * Function: H5T__conv_llong_lcomplex + * + * Purpose: Convert native long long to native + * long double _Complex / _Lcomplex using hardware. This is a + * fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_llong_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, size_t H5_ATTR_UNUSED bkg_stride, void *buf, + void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(LLONG, LDOUBLE_COMPLEX, long long, H5_ldouble_complex, -, -); +} +#endif /* H5T_CONV_INTERNAL_LLONG_LDOUBLE */ +#endif /* H5_HAVE_COMPLEX_NUMBERS */ + /*------------------------------------------------------------------------- * Function: H5T__conv_ullong_schar * @@ -3180,3 +3827,64 @@ H5T__conv_ullong_ldouble(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, c H5T_CONV_xF(ULLONG, LDOUBLE, unsigned long long, long double, -, -); } #endif /*H5T_CONV_INTERNAL_ULLONG_LDOUBLE*/ + +#ifdef H5_HAVE_COMPLEX_NUMBERS +/*------------------------------------------------------------------------- + * Function: H5T__conv_ullong_fcomplex + * + * Purpose: Convert native unsigned long long to native + * float _Complex / _Fcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_ullong_fcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(ULLONG, FLOAT_COMPLEX, unsigned long long, H5_float_complex, -, -); +} + +/*------------------------------------------------------------------------- + * Function: H5T__conv_ullong_dcomplex + * + * Purpose: Convert native unsigned long long to native + * double _Complex / _Dcomplex using hardware. This is a fast + * special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_ullong_dcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(ULLONG, DOUBLE_COMPLEX, unsigned long long, H5_double_complex, -, -); +} + +#ifdef H5T_CONV_INTERNAL_ULLONG_LDOUBLE +/*------------------------------------------------------------------------- + * Function: H5T__conv_ullong_lcomplex + * + * Purpose: Convert native unsigned long long to native + * long double _Complex / _Lcomplex using hardware. This is a + * fast special case. + * + * Return: Non-negative on success/Negative on failure + * + *------------------------------------------------------------------------- + */ +herr_t +H5T__conv_ullong_lcomplex(const H5T_t *st, const H5T_t *dt, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t H5_ATTR_UNUSED bkg_stride, void *buf, void H5_ATTR_UNUSED *bkg) +{ + H5T_CONV_xZ(ULLONG, LDOUBLE_COMPLEX, unsigned long long, H5_ldouble_complex, -, -); +} +#endif /* H5T_CONV_INTERNAL_ULLONG_LDOUBLE */ +#endif /* H5_HAVE_COMPLEX_NUMBERS */ diff --git a/src/H5Tconv_integer.h b/src/H5Tconv_integer.h index dbebfd4393f..22dee8c5979 100644 --- a/src/H5Tconv_integer.h +++ b/src/H5Tconv_integer.h @@ -16,10 +16,20 @@ /* Private headers needed by this file */ #include "H5Tpkg.h" +/*************************/ +/* Module private macros */ +/*************************/ + +#define TEMP_INT_CONV_BUFFER_SIZE 64 + /***********************/ /* Function Prototypes */ /***********************/ +/* Helper functions shared between conversion modules */ +H5_DLL herr_t H5T__conv_i_f_loop(const H5T_t *src_p, const H5T_t *dst_p, const H5T_conv_ctx_t *conv_ctx, + size_t nelmts, size_t buf_stride, void *buf); + /****************************************/ /* Soft (emulated) conversion functions */ /****************************************/ @@ -33,6 +43,9 @@ H5_DLL herr_t H5T__conv_i_i(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cda H5_DLL herr_t H5T__conv_i_f(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, size_t bkg_stride, void *_buf, void *bkg); +H5_DLL herr_t H5T__conv_i_complex(const H5T_t *src_p, const H5T_t *dst_p, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); /*********************************************/ /* Hard (compiler cast) conversion functions */ @@ -80,6 +93,17 @@ H5_DLL herr_t H5T__conv_schar_double(const H5T_t *src, const H5T_t *dst, H5T_cda H5_DLL herr_t H5T__conv_schar_ldouble(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf, void *bkg); +#ifdef H5_HAVE_COMPLEX_NUMBERS +H5_DLL herr_t H5T__conv_schar_fcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_schar_dcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_schar_lcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif /* Conversion functions for 'unsigned char' */ H5_DLL herr_t H5T__conv_uchar_schar(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, @@ -123,6 +147,17 @@ H5_DLL herr_t H5T__conv_uchar_double(const H5T_t *src, const H5T_t *dst, H5T_cda H5_DLL herr_t H5T__conv_uchar_ldouble(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf, void *bkg); +#ifdef H5_HAVE_COMPLEX_NUMBERS +H5_DLL herr_t H5T__conv_uchar_fcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_uchar_dcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_uchar_lcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif /* Conversion functions for 'signed short' */ H5_DLL herr_t H5T__conv_short_schar(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, @@ -166,6 +201,17 @@ H5_DLL herr_t H5T__conv_short_double(const H5T_t *src, const H5T_t *dst, H5T_cda H5_DLL herr_t H5T__conv_short_ldouble(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf, void *bkg); +#ifdef H5_HAVE_COMPLEX_NUMBERS +H5_DLL herr_t H5T__conv_short_fcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_short_dcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_short_lcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif /* Conversion functions for 'unsigned short' */ H5_DLL herr_t H5T__conv_ushort_schar(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, @@ -209,6 +255,17 @@ H5_DLL herr_t H5T__conv_ushort_double(const H5T_t *src, const H5T_t *dst, H5T_cd H5_DLL herr_t H5T__conv_ushort_ldouble(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf, void *bkg); +#ifdef H5_HAVE_COMPLEX_NUMBERS +H5_DLL herr_t H5T__conv_ushort_fcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_ushort_dcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_ushort_lcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif /* Conversion functions for 'signed int' */ H5_DLL herr_t H5T__conv_int_schar(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, @@ -252,6 +309,17 @@ H5_DLL herr_t H5T__conv_int_double(const H5T_t *src, const H5T_t *dst, H5T_cdata H5_DLL herr_t H5T__conv_int_ldouble(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf, void *bkg); +#ifdef H5_HAVE_COMPLEX_NUMBERS +H5_DLL herr_t H5T__conv_int_fcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_int_dcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_int_lcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif /* Conversion functions for 'unsigned int' */ H5_DLL herr_t H5T__conv_uint_schar(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, @@ -295,6 +363,17 @@ H5_DLL herr_t H5T__conv_uint_double(const H5T_t *src, const H5T_t *dst, H5T_cdat H5_DLL herr_t H5T__conv_uint_ldouble(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf, void *bkg); +#ifdef H5_HAVE_COMPLEX_NUMBERS +H5_DLL herr_t H5T__conv_uint_fcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_uint_dcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_uint_lcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif /* Conversion functions for 'signed long' */ H5_DLL herr_t H5T__conv_long_schar(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, @@ -338,6 +417,17 @@ H5_DLL herr_t H5T__conv_long_double(const H5T_t *src, const H5T_t *dst, H5T_cdat H5_DLL herr_t H5T__conv_long_ldouble(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf, void *bkg); +#ifdef H5_HAVE_COMPLEX_NUMBERS +H5_DLL herr_t H5T__conv_long_fcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_long_dcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_long_lcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif /* Conversion functions for 'unsigned long' */ H5_DLL herr_t H5T__conv_ulong_schar(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, @@ -381,6 +471,17 @@ H5_DLL herr_t H5T__conv_ulong_double(const H5T_t *src, const H5T_t *dst, H5T_cda H5_DLL herr_t H5T__conv_ulong_ldouble(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf, void *bkg); +#ifdef H5_HAVE_COMPLEX_NUMBERS +H5_DLL herr_t H5T__conv_ulong_fcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_ulong_dcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_ulong_lcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif /* Conversion functions for 'signed long long' */ H5_DLL herr_t H5T__conv_llong_schar(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, @@ -424,6 +525,19 @@ H5_DLL herr_t H5T__conv_llong_double(const H5T_t *src, const H5T_t *dst, H5T_cda H5_DLL herr_t H5T__conv_llong_ldouble(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf, void *bkg); +#ifdef H5_HAVE_COMPLEX_NUMBERS +H5_DLL herr_t H5T__conv_llong_fcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_llong_dcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#ifdef H5T_CONV_INTERNAL_LLONG_LDOUBLE +H5_DLL herr_t H5T__conv_llong_lcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif +#endif /* Conversion functions for 'unsigned long long' */ H5_DLL herr_t H5T__conv_ullong_schar(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, @@ -467,5 +581,18 @@ H5_DLL herr_t H5T__conv_ullong_double(const H5T_t *src, const H5T_t *dst, H5T_cd H5_DLL herr_t H5T__conv_ullong_ldouble(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf, void *bkg); +#ifdef H5_HAVE_COMPLEX_NUMBERS +H5_DLL herr_t H5T__conv_ullong_fcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +H5_DLL herr_t H5T__conv_ullong_dcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#ifdef H5T_CONV_INTERNAL_ULLONG_LDOUBLE +H5_DLL herr_t H5T__conv_ullong_lcomplex(const H5T_t *src, const H5T_t *dst, H5T_cdata_t *cdata, + const H5T_conv_ctx_t *conv_ctx, size_t nelmts, size_t buf_stride, + size_t bkg_stride, void *buf, void *bkg); +#endif +#endif #endif /* H5Tconv_integer_H */ diff --git a/src/H5Tconv_macros.h b/src/H5Tconv_macros.h index 33be7544bac..843255e51cc 100644 --- a/src/H5Tconv_macros.h +++ b/src/H5Tconv_macros.h @@ -99,8 +99,8 @@ typedef struct H5T_conv_hw_t { * destination is at least as wide as the source. This case * cannot generate overflows. * - * Ff: Floating-point values to floating-point values the source is at - * least as large as the destination. Overflows can occur when + * Ff: Floating-point values to floating-point values where the source is + * at least as large as the destination. Overflows can occur when * the destination is narrower than the source. * * xF: Integers to float-point(float or double) values where the destination @@ -118,6 +118,55 @@ typedef struct H5T_conv_hw_t { * wide as the destination. Overflows can occur when the destination is * narrower than the source. * + * zZ: Complex number values to complex number values where the + * destination is at least as wide as the source. This case + * cannot generate overflows. + * + * Zz: Complex number values to complex number values where the + * source is at least as large as the destination. Overflows can + * occur when the destination is narrower than the source. + * + * zF: Complex number values to floating-point values where the + * destination is at least as wide as the real part of the source + * complex number value. This case cannot generate overflows. + * + * Zf: Complex number values to floating-point values where the real + * part of the source complex number value is at least as large + * as the destination. Overflows can occur when the destination + * is narrower then the source. + * + * fZ: Floating-point values to complex number values where the + * destination is at least as wide as the source. This case + * cannot generate overflows. + * + * Fz: Floating-point values to complex number values where the source is + * at least as large as the destination. Overflows can occur when + * the destination is narrower than the source. + * + * zf: Complex number values to floating-point values where the real + * part of the source complex number value is the same size as + * the destination. This case cannot generate overflows. + * + * fz: Floating-point values to complex number values where the source + * is the same size as the real part of the destination. This case + * cannot generate overflows. + * + * xZ: Integers to complex number values where the destination is at + * least as wide as the source. This case cannot generate overflows. + * + * Zx: Complex number values to integers where the real part of the + * source complex number value is at least as wide as the destination. + * Overflow can occur when the source magnitude is too large for + * the destination. + * + * zX: Complex number values to integers where the destination is at + * least as wide as the real part of the source complex number + * value. This case cannot generate overflows. + * + * Xz: Integers to complex number values where the source is at least as + * wide as the destination. Overflows can occur when the destination + * is narrower than the source. + * * * The macros take a subset of these arguments in the order listed here: * @@ -804,6 +853,564 @@ typedef struct H5T_conv_hw_t { H5T_CONV(H5T_CONV_Xf, STYPE, DTYPE, ST, DT, D_MIN, D_MAX, Y) \ } while (0) +#ifdef H5_HAVE_COMPLEX_NUMBERS +/* + * NOTE: while it would be very nice to be able to use type-generic macros for + * the complex number functions used below to reduce macro duplication between + * the float, double and long double _Complex cases, support for the tgmath.h + * header appears to be problematic and not particularly portable pre-C11. This + * should be revisited if the minimum required C standard version is moved to + * C11 or later. + */ +#define H5T_CONV_FLOAT_COMPLEX_REALVAL(S) float sr_val = crealf(*(S)); +#define H5T_CONV_DOUBLE_COMPLEX_REALVAL(S) double sr_val = creal(*(S)); +#define H5T_CONV_LDOUBLE_COMPLEX_REALVAL(S) long double sr_val = creall(*(S)); +#define H5T_CONV_FLOAT_COMPLEX_IMAGVAL(S) float si_val = cimagf(*(S)); +#define H5T_CONV_DOUBLE_COMPLEX_IMAGVAL(S) double si_val = cimag(*(S)); +#define H5T_CONV_LDOUBLE_COMPLEX_IMAGVAL(S) long double si_val = cimagl(*(S)); + +/* + * Since MSVC defines complex numbers as structure types, they can't be cast + * directly to other types, so we have to simulate the behavior of the standard + * types here. When casting to a complex number type, a new complex number + * value is constructed from the given real and imaginary parts. When casting + * from a complex number type, the real and imaginary parts are extracted as + * needed and used as appropriate. With other platforms/compilers, the + * H5T_CONV_CAST_Z macro just maps this to direct casts. + */ +#ifndef H5_HAVE_C99_COMPLEX_NUMBERS +#define H5T_CONV_CAST_TO_FLOAT_COMPLEX(S_REAL, S_IMAG, D, DT) \ + { \ + *(D) = H5_CMPLXF(S_REAL, S_IMAG); \ + } +#define H5T_CONV_CAST_TO_DOUBLE_COMPLEX(S_REAL, S_IMAG, D, DT) \ + { \ + *(D) = H5_CMPLX(S_REAL, S_IMAG); \ + } +#define H5T_CONV_CAST_TO_LDOUBLE_COMPLEX(S_REAL, S_IMAG, D, DT) \ + { \ + *(D) = H5_CMPLXL(S_REAL, S_IMAG); \ + } + +#define H5T_CONV_CAST_zZ(STYPE, DTYPE, S, S_REAL, S_IMAG, D, ST, DT) \ + { \ + H5T_CONV_##STYPE##_REALVAL(S); /* Extract "real" part of complex number */ \ + H5T_CONV_##STYPE##_IMAGVAL(S); /* Extract "imaginary" part of complex number */ \ + H5T_CONV_CAST_TO_##DTYPE(sr_val, si_val, D, DT) \ + } +#define H5T_CONV_CAST_Zz(STYPE, DTYPE, S, S_REAL, S_IMAG, D, ST, DT) \ + { \ + H5T_CONV_CAST_TO_##DTYPE(S_REAL, S_IMAG, D, DT) \ + } +#define H5T_CONV_CAST_zF(STYPE, DTYPE, S, S_REAL, S_IMAG, D, ST, DT) \ + { \ + H5T_CONV_##STYPE##_REALVAL(S); /* Extract "real" part of complex number */ \ + *(D) = (DT)(sr_val); \ + } +#define H5T_CONV_CAST_zf(STYPE, DTYPE, S, S_REAL, S_IMAG, D, ST, DT) \ + { \ + H5T_CONV_##STYPE##_REALVAL(S); /* Extract "real" part of complex number */ \ + *(D) = (DT)(sr_val); \ + } +#define H5T_CONV_CAST_zX(STYPE, DTYPE, S, S_REAL, S_IMAG, D, ST, DT) \ + { \ + H5T_CONV_##STYPE##_REALVAL(S); /* Extract "real" part of complex number */ \ + *(D) = (DT)(sr_val); \ + } +#define H5T_CONV_CAST_fZ(STYPE, DTYPE, S, S_REAL, S_IMAG, D, ST, DT) \ + { \ + H5T_CONV_CAST_TO_##DTYPE(*(S), (ST)0.0, D, DT) \ + } +#define H5T_CONV_CAST_Fz(STYPE, DTYPE, S, S_REAL, S_IMAG, D, ST, DT) \ + { \ + H5T_CONV_CAST_TO_##DTYPE(*(S), (ST)0.0, D, DT) \ + } +#define H5T_CONV_CAST_fz(STYPE, DTYPE, S, S_REAL, S_IMAG, D, ST, DT) \ + { \ + H5T_CONV_CAST_TO_##DTYPE(*(S), (ST)0.0, D, DT) \ + } +#define H5T_CONV_CAST_xZ(STYPE, DTYPE, S, S_REAL, S_IMAG, D, ST, DT) \ + { \ + H5T_CONV_CAST_TO_##DTYPE(*(S), (ST)0.0, D, DT) \ + } + +#define H5T_CONV_CAST_Z(SYMBOLS, STYPE, DTYPE, S, S_REAL, S_IMAG, D, ST, DT) \ + do { \ + H5T_CONV_CAST_##SYMBOLS(STYPE, DTYPE, S, S_REAL, S_IMAG, D, ST, DT) \ + } while (0) + +#else + +/* Map all complex number casts to direct casts */ +#define H5T_CONV_CAST_Z(SYMBOLS, STYPE, DTYPE, S, S_REAL, S_IMAG, D, ST, DT) \ + do { \ + *(D) = (DT)(*(S)); \ + } while (0) + +#endif + +#define H5T_CONV_zZ_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + { \ + H5T_CONV_CAST_Z(zZ, STYPE, DTYPE, S, -, -, D, ST, DT); \ + } +#define H5T_CONV_zZ_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_zZ_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) + +/* Identical logic to H5T_CONV_fF, but special implementation is needed + * here to deal with MSVC's complex number structure types. + */ +#define H5T_CONV_zZ(STYPE, DTYPE, ST, DT, D_MIN, D_MAX) \ + do { \ + HDcompile_assert(sizeof(ST) <= sizeof(DT)); \ + H5T_CONV(H5T_CONV_zZ, STYPE, DTYPE, ST, DT, D_MIN, D_MAX, N) \ + } while (0) + +#define H5T_CONV_Zz_CORE_IMP(STYPE, DTYPE, DBTYPE, S, D, ST, DT, SBT, DBT, D_MIN, D_MAX) \ + { \ + H5T_CONV_##STYPE##_REALVAL(S); /* Extract "real" part of complex number */ \ + H5T_CONV_##STYPE##_IMAGVAL(S); /* Extract "imaginary" part of complex number */ \ + bool sr_over = (sr_val) > (SBT)(D_MAX); \ + bool sr_under = (sr_val) < (SBT)(D_MIN); \ + bool si_over = (si_val) > (SBT)(D_MAX); \ + bool si_under = (si_val) < (SBT)(D_MIN); \ + if (!sr_over && !sr_under && !si_over && !si_under) \ + H5T_CONV_CAST_Z(Zz, STYPE, DTYPE, S, sr_val, si_val, D, ST, DT); \ + else { \ + H5T_conv_ret_t except_ret = H5T_CONV_UNHANDLED; \ + \ + /* Since there's just one chance to raise a conversion exception here and either \ + * or both of the real and imaginary parts of a complex number could raise an \ + * exception, arbitrarily raise an exception in the order of: "overflow for either \ + * part" -> "underflow for either part". There are other orderings that may make \ + * more sense, such as "overflow for real part" -> "underflow for real part" -> \ + * "underflow..." -> "underflow...". For now, this will assume that the user's \ + * conversion exception function will inspect and handle both parts of the complex \ + * number. \ + */ \ + if (sr_over || si_over) { \ + except_ret = (conv_ctx->u.conv.cb_struct.func)( \ + H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, S, \ + D, conv_ctx->u.conv.cb_struct.user_data); \ + } \ + else if (sr_under || si_under) { \ + except_ret = (conv_ctx->u.conv.cb_struct.func)( \ + H5T_CONV_EXCEPT_RANGE_LOW, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, \ + S, D, conv_ctx->u.conv.cb_struct.user_data); \ + } \ + \ + /* If user conversion exception function handled the exception, do nothing. \ + * Otherwise, if explicitly left unhandled, create a complex number value \ + * to return based on the exception type. \ + */ \ + if (except_ret == H5T_CONV_UNHANDLED) { \ + DBT tmp_val[2]; /* [ real, imaginary ] */ \ + \ + if (sr_over) \ + tmp_val[0] = H5_GLUE3(H5T_NATIVE_, DBTYPE, _POS_INF_g); \ + else if (sr_under) \ + tmp_val[0] = H5_GLUE3(H5T_NATIVE_, DBTYPE, _NEG_INF_g); \ + else \ + tmp_val[0] = (DBT)(sr_val); \ + if (si_over) \ + tmp_val[1] = H5_GLUE3(H5T_NATIVE_, DBTYPE, _POS_INF_g); \ + else if (si_under) \ + tmp_val[1] = H5_GLUE3(H5T_NATIVE_, DBTYPE, _NEG_INF_g); \ + else \ + tmp_val[1] = (DBT)(si_val); \ + \ + H5T_CONV_CAST_Z(Zz, STYPE, DTYPE, (DT *)tmp_val, tmp_val[0], tmp_val[1], D, ST, DT); \ + } \ + else if (except_ret == H5T_CONV_ABORT) \ + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); \ + } \ + } +#define H5T_CONV_Zz_DOUBLE_COMPLEX_FLOAT_COMPLEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zz_CORE_IMP(STYPE, DTYPE, FLOAT, S, D, ST, DT, double, float, D_MIN, D_MAX) +#define H5T_CONV_Zz_DOUBLE_COMPLEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zz_DOUBLE_COMPLEX_##DTYPE##_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) +#define H5T_CONV_Zz_LDOUBLE_COMPLEX_FLOAT_COMPLEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zz_CORE_IMP(STYPE, DTYPE, FLOAT, S, D, ST, DT, long double, float, D_MIN, D_MAX) +#define H5T_CONV_Zz_LDOUBLE_COMPLEX_DOUBLE_COMPLEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zz_CORE_IMP(STYPE, DTYPE, DOUBLE, S, D, ST, DT, long double, double, D_MIN, D_MAX) +#define H5T_CONV_Zz_LDOUBLE_COMPLEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zz_LDOUBLE_COMPLEX_##DTYPE##_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) +#define H5T_CONV_Zz_NOEX_CORE_IMP(STYPE, DTYPE, DBTYPE, S, D, ST, DT, SBT, DBT, D_MIN, D_MAX) \ + { \ + H5T_CONV_##STYPE##_REALVAL(S); /* Extract "real" part of complex number */ \ + H5T_CONV_##STYPE##_IMAGVAL(S); /* Extract "imaginary" part of complex number */ \ + bool sr_over = (sr_val) > (SBT)(D_MAX); \ + bool sr_under = (sr_val) < (SBT)(D_MIN); \ + bool si_over = (si_val) > (SBT)(D_MAX); \ + bool si_under = (si_val) < (SBT)(D_MIN); \ + if (!sr_over && !sr_under && !si_over && !si_under) \ + H5T_CONV_CAST_Z(Zz, STYPE, DTYPE, S, sr_val, si_val, D, ST, DT); \ + else { \ + DBT tmp_val[2]; /* [ real, imaginary ] */ \ + \ + if (sr_over) \ + tmp_val[0] = H5_GLUE3(H5T_NATIVE_, DBTYPE, _POS_INF_g); \ + else if (sr_under) \ + tmp_val[0] = H5_GLUE3(H5T_NATIVE_, DBTYPE, _NEG_INF_g); \ + else \ + tmp_val[0] = (DBT)(sr_val); \ + if (si_over) \ + tmp_val[1] = H5_GLUE3(H5T_NATIVE_, DBTYPE, _POS_INF_g); \ + else if (si_under) \ + tmp_val[1] = H5_GLUE3(H5T_NATIVE_, DBTYPE, _NEG_INF_g); \ + else \ + tmp_val[1] = (DBT)(si_val); \ + \ + H5T_CONV_CAST_Z(Zz, STYPE, DTYPE, (DT *)tmp_val, tmp_val[0], tmp_val[1], D, ST, DT); \ + } \ + } +#define H5T_CONV_Zz_DOUBLE_COMPLEX_FLOAT_COMPLEX_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zz_NOEX_CORE_IMP(STYPE, DTYPE, FLOAT, S, D, ST, DT, double, float, D_MIN, D_MAX) +#define H5T_CONV_Zz_DOUBLE_COMPLEX_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zz_DOUBLE_COMPLEX_##DTYPE##_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) +#define H5T_CONV_Zz_LDOUBLE_COMPLEX_FLOAT_COMPLEX_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zz_NOEX_CORE_IMP(STYPE, DTYPE, FLOAT, S, D, ST, DT, long double, float, D_MIN, D_MAX) +#define H5T_CONV_Zz_LDOUBLE_COMPLEX_DOUBLE_COMPLEX_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zz_NOEX_CORE_IMP(STYPE, DTYPE, DOUBLE, S, D, ST, DT, long double, double, D_MIN, D_MAX) +#define H5T_CONV_Zz_LDOUBLE_COMPLEX_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zz_LDOUBLE_COMPLEX_##DTYPE##_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) + +/* + * Similar logic to H5T_CONV_Ff. The "real" and "imaginary" parts of the complex + * number value are retrieved using one of the creal() and cimag() variants + * (according to the source complex number type) and then are used for comparisons + * when checking for overflow and underflow. + * + * To efficiently convert between complex number types, the macros need to be aware + * of the base floating-point type for both the source and destination complex number + * types. Since there are currently only three cases where H5T_CONV_Zz applies + * (DOUBLE_COMPLEX -> FLOAT_COMPLEX, LDOUBLE_COMPLEX -> FLOAT_COMPLEX and + * LDOUBLE_COMPLEX -> DOUBLE_COMPLEX), use some specialized macros above for this + * for now. H5T_CONV_Zz directs the H5T_CONV macro to H5T_CONV_Zz__(NOEX_)CORE + * (depending on whether conversion exceptions are handled), which then redirects to + * H5T_CONV_Zz___(NOEX_)CORE, ending at H5T_CONV_Zz_(NOEX_)CORE_IMP + * after replacing values related to the source and destination datatypes that are + * passed. While a bit difficult to reason through, alternative approaches proved to + * be much more awkward. + */ +#define H5T_CONV_Zz(STYPE, DTYPE, ST, DT, D_MIN, D_MAX) \ + do { \ + HDcompile_assert(sizeof(ST) >= sizeof(DT)); \ + H5T_CONV(H5T_CONV_Zz_##STYPE, STYPE, DTYPE, ST, DT, D_MIN, D_MAX, N) \ + } while (0) + +#define H5T_CONV_zF_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + { \ + H5T_CONV_CAST_Z(zF, STYPE, DTYPE, S, -, -, D, ST, DT); \ + } +#define H5T_CONV_zF_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_zF_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) + +/* Identical logic to H5T_CONV_fF, but special implementation is needed + * here to deal with MSVC's complex number structure types. + */ +#define H5T_CONV_zF(STYPE, DTYPE, ST, DT, D_MIN, D_MAX) \ + do { \ + H5T_CONV(H5T_CONV_zF, STYPE, DTYPE, ST, DT, D_MIN, D_MAX, N) \ + } while (0) + +#define H5T_CONV_Zf_CORE_IMP(STYPE, DTYPE, S, D, ST, DT, SBT, D_MIN, D_MAX) \ + { \ + H5T_CONV_##STYPE##_REALVAL(S); \ + if ((sr_val) > (SBT)(D_MAX)) { \ + H5T_conv_ret_t except_ret = (conv_ctx->u.conv.cb_struct.func)( \ + H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, S, D, \ + conv_ctx->u.conv.cb_struct.user_data); \ + if (except_ret == H5T_CONV_UNHANDLED) \ + /* Let compiler convert if case is ignored by user handler*/ \ + *(D) = H5_GLUE3(H5T_NATIVE_, DTYPE, _POS_INF_g); \ + else if (except_ret == H5T_CONV_ABORT) \ + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); \ + /* if(except_ret==H5T_CONV_HANDLED): Fall through, user handled it */ \ + } \ + else if ((sr_val) < (SBT)(D_MIN)) { \ + H5T_conv_ret_t except_ret = (conv_ctx->u.conv.cb_struct.func)( \ + H5T_CONV_EXCEPT_RANGE_LOW, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, S, D, \ + conv_ctx->u.conv.cb_struct.user_data); \ + if (except_ret == H5T_CONV_UNHANDLED) \ + /* Let compiler convert if case is ignored by user handler*/ \ + *(D) = H5_GLUE3(H5T_NATIVE_, DTYPE, _NEG_INF_g); \ + else if (except_ret == H5T_CONV_ABORT) \ + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); \ + /* if(except_ret==H5T_CONV_HANDLED): Fall through, user handled it */ \ + } \ + else \ + *(D) = (DT)((sr_val)); \ + } +#define H5T_CONV_Zf_FLOAT_COMPLEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zf_CORE_IMP(STYPE, DTYPE, S, D, ST, DT, float, D_MIN, D_MAX) +#define H5T_CONV_Zf_DOUBLE_COMPLEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zf_CORE_IMP(STYPE, DTYPE, S, D, ST, DT, double, D_MIN, D_MAX) +#define H5T_CONV_Zf_LDOUBLE_COMPLEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zf_CORE_IMP(STYPE, DTYPE, S, D, ST, DT, long double, D_MIN, D_MAX) +#define H5T_CONV_Zf_NOEX_CORE_IMP(STYPE, DTYPE, S, D, ST, DT, SBT, D_MIN, D_MAX) \ + { \ + H5T_CONV_##STYPE##_REALVAL(S); /* Extract "real" part of complex number */ \ + if ((sr_val) > (SBT)(D_MAX)) \ + *(D) = H5_GLUE3(H5T_NATIVE_, DTYPE, _POS_INF_g); \ + else if ((sr_val) < (SBT)(D_MIN)) \ + *(D) = H5_GLUE3(H5T_NATIVE_, DTYPE, _NEG_INF_g); \ + else \ + *(D) = (DT)((sr_val)); \ + } +#define H5T_CONV_Zf_FLOAT_COMPLEX_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zf_NOEX_CORE_IMP(STYPE, DTYPE, S, D, ST, DT, float, D_MIN, D_MAX) +#define H5T_CONV_Zf_DOUBLE_COMPLEX_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zf_NOEX_CORE_IMP(STYPE, DTYPE, S, D, ST, DT, double, D_MIN, D_MAX) +#define H5T_CONV_Zf_LDOUBLE_COMPLEX_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zf_NOEX_CORE_IMP(STYPE, DTYPE, S, D, ST, DT, long double, D_MIN, D_MAX) + +/* Similar logic to H5T_CONV_Ff. The "real" part of the complex number is + * retrieved using one of the creal() variants (according to the source + * complex number type) and then is used for comparisons when checking for + * overflow and underflow. Uses specialized macros above to also pass the + * base floating-point C type of the complex number type for use in casts + * during those comparisons. + */ +#define H5T_CONV_Zf(STYPE, DTYPE, ST, DT, D_MIN, D_MAX) \ + do { \ + HDcompile_assert(sizeof(ST) >= sizeof(DT)); \ + H5T_CONV(H5T_CONV_Zf_##STYPE, STYPE, DTYPE, ST, DT, D_MIN, D_MAX, N) \ + } while (0) + +#define H5T_CONV_fZ_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + { \ + H5T_CONV_CAST_Z(fZ, STYPE, DTYPE, S, -, -, D, ST, DT); \ + } +#define H5T_CONV_fZ_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_fZ_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) + +/* Identical logic to H5T_CONV_fF, but special implementation is needed + * here to deal with MSVC's complex number structure types. + */ +#define H5T_CONV_fZ(STYPE, DTYPE, ST, DT, D_MIN, D_MAX) \ + do { \ + HDcompile_assert(sizeof(ST) <= sizeof(DT)); \ + H5T_CONV(H5T_CONV_fZ, STYPE, DTYPE, ST, DT, D_MIN, D_MAX, N) \ + } while (0) + +#define H5T_CONV_Fz_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + { \ + if (*(S) > (ST)(D_MAX)) { \ + H5T_conv_ret_t except_ret = (conv_ctx->u.conv.cb_struct.func)( \ + H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, S, D, \ + conv_ctx->u.conv.cb_struct.user_data); \ + if (except_ret == H5T_CONV_UNHANDLED) \ + /* Let compiler convert if case is ignored by user handler*/ \ + *(D) = H5_GLUE3(H5T_NATIVE_, DTYPE, _POS_INF_g); \ + else if (except_ret == H5T_CONV_ABORT) \ + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); \ + /* if(except_ret==H5T_CONV_HANDLED): Fall through, user handled it */ \ + } \ + else if (*(S) < (ST)(D_MIN)) { \ + H5T_conv_ret_t except_ret = (conv_ctx->u.conv.cb_struct.func)( \ + H5T_CONV_EXCEPT_RANGE_LOW, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, S, D, \ + conv_ctx->u.conv.cb_struct.user_data); \ + if (except_ret == H5T_CONV_UNHANDLED) \ + /* Let compiler convert if case is ignored by user handler*/ \ + *(D) = H5_GLUE3(H5T_NATIVE_, DTYPE, _NEG_INF_g); \ + else if (except_ret == H5T_CONV_ABORT) \ + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); \ + /* if(except_ret==H5T_CONV_HANDLED): Fall through, user handled it */ \ + } \ + else \ + H5T_CONV_CAST_Z(Fz, STYPE, DTYPE, S, -, -, D, ST, DT); \ + } +#define H5T_CONV_Fz_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + { \ + if (*(S) > (ST)(D_MAX)) \ + *(D) = H5_GLUE3(H5T_NATIVE_, DTYPE, _POS_INF_g); \ + else if (*(S) < (ST)(D_MIN)) \ + *(D) = H5_GLUE3(H5T_NATIVE_, DTYPE, _NEG_INF_g); \ + else \ + H5T_CONV_CAST_Z(Fz, STYPE, DTYPE, S, -, -, D, ST, DT); \ + } + +/* Similar logic to H5T_CONV_Ff. In the case of overflow or underflow, the + * floating-point value is converted to a complex number value where the + * "real" part of the value is set to positive or negative infinity and + * the "imaginary" part of the value is set to 0. + */ +#define H5T_CONV_Fz(STYPE, DTYPE, ST, DT, D_MIN, D_MAX) \ + do { \ + H5T_CONV(H5T_CONV_Fz, STYPE, DTYPE, ST, DT, D_MIN, D_MAX, N) \ + } while (0) + +#define H5T_CONV_zf_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + { \ + H5T_CONV_CAST_Z(zf, STYPE, DTYPE, S, -, -, D, ST, DT); \ + } +#define H5T_CONV_zf_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_zf_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) + +/* Convert a complex number value to the matching base floating-point type. Simple + * direct cast where the imaginary part of the complex number value is discarded. + * Special implementation is needed here to deal with MSVC's complex number + * structure types. + */ +#define H5T_CONV_zf(STYPE, DTYPE, ST, DT, D_MIN, D_MAX) \ + do { \ + HDcompile_assert(sizeof(ST) == (2 * sizeof(DT))); \ + H5T_CONV(H5T_CONV_zf, STYPE, DTYPE, ST, DT, D_MIN, D_MAX, N) \ + } while (0) + +#define H5T_CONV_fz_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + { \ + H5T_CONV_CAST_Z(fz, STYPE, DTYPE, S, -, -, D, ST, DT); \ + } +#define H5T_CONV_fz_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_fz_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) + +/* Convert a floating-point value to the matching complex number type. Simple direct + * cast where the imaginary part should be a zero (positive or unsigned). Special + * implementation is needed here to deal with MSVC's complex number structure types. + */ +#define H5T_CONV_fz(STYPE, DTYPE, ST, DT, D_MIN, D_MAX) \ + do { \ + HDcompile_assert((2 * sizeof(ST)) == sizeof(DT)); \ + H5T_CONV(H5T_CONV_fz, STYPE, DTYPE, ST, DT, D_MIN, D_MAX, N) \ + } while (0) + +#define H5T_CONV_xZ_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + { \ + if (sprec > dprec) { \ + unsigned low_bit_pos, high_bit_pos; \ + \ + /* Detect high & low bits set in source */ \ + H5T_HI_LO_BIT_SET(ST, *(S), low_bit_pos, high_bit_pos) \ + \ + /* Check for more bits of precision in src than available in dst */ \ + if ((high_bit_pos - low_bit_pos) >= dprec) { \ + H5T_conv_ret_t except_ret = (conv_ctx->u.conv.cb_struct.func)( \ + H5T_CONV_EXCEPT_PRECISION, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, \ + S, D, conv_ctx->u.conv.cb_struct.user_data); \ + if (except_ret == H5T_CONV_UNHANDLED) \ + /* Let compiler convert if case is ignored by user handler*/ \ + H5T_CONV_CAST_Z(xZ, STYPE, DTYPE, S, -, -, D, ST, DT); \ + else if (except_ret == H5T_CONV_ABORT) \ + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); \ + /* if(except_ret==H5T_CONV_HANDLED): Fall through, user handled it */ \ + } \ + else \ + H5T_CONV_CAST_Z(xZ, STYPE, DTYPE, S, -, -, D, ST, DT); \ + } \ + else \ + H5T_CONV_CAST_Z(xZ, STYPE, DTYPE, S, -, -, D, ST, DT); \ + } +#define H5T_CONV_xZ_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + { \ + H5T_CONV_CAST_Z(xZ, STYPE, DTYPE, S, -, -, D, ST, DT); \ + } + +/* Identical logic to H5T_CONV_xF */ +#define H5T_CONV_xZ(STYPE, DTYPE, ST, DT, D_MIN, D_MAX) \ + do { \ + H5T_CONV(H5T_CONV_xZ, STYPE, DTYPE, ST, DT, D_MIN, D_MAX, Y) \ + } while (0) + +#define H5T_CONV_Zx_CORE_IMP(STYPE, DTYPE, S, D, ST, DT, SBT, D_MIN, D_MAX) \ + { \ + H5T_CONV_##STYPE##_REALVAL(S); /* Extract "real" part of complex number */ \ + if ((sr_val) > (SBT)(D_MAX) || (sprec < dprec && (sr_val) == (SBT)(D_MAX))) { \ + H5T_conv_ret_t except_ret = (conv_ctx->u.conv.cb_struct.func)( \ + H5T_CONV_EXCEPT_RANGE_HI, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, S, D, \ + conv_ctx->u.conv.cb_struct.user_data); \ + if (except_ret == H5T_CONV_UNHANDLED) \ + /* Let compiler convert if case is ignored by user handler*/ \ + *(D) = (DT)(D_MAX); \ + else if (except_ret == H5T_CONV_ABORT) \ + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); \ + /* if(except_ret==H5T_CONV_HANDLED): Fall through, user handled it */ \ + } \ + else if ((sr_val) < (SBT)(D_MIN)) { \ + H5T_conv_ret_t except_ret = (conv_ctx->u.conv.cb_struct.func)( \ + H5T_CONV_EXCEPT_RANGE_LOW, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, S, D, \ + conv_ctx->u.conv.cb_struct.user_data); \ + if (except_ret == H5T_CONV_UNHANDLED) \ + /* Let compiler convert if case is ignored by user handler*/ \ + *(D) = (DT)(D_MIN); \ + else if (except_ret == H5T_CONV_ABORT) \ + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); \ + /* if(except_ret==H5T_CONV_HANDLED): Fall through, user handled it */ \ + } \ + else if ((sr_val) != (SBT)((DT)((sr_val)))) { \ + H5T_conv_ret_t except_ret = (conv_ctx->u.conv.cb_struct.func)( \ + H5T_CONV_EXCEPT_TRUNCATE, conv_ctx->u.conv.src_type_id, conv_ctx->u.conv.dst_type_id, S, D, \ + conv_ctx->u.conv.cb_struct.user_data); \ + if (except_ret == H5T_CONV_UNHANDLED) \ + /* Let compiler convert if case is ignored by user handler*/ \ + *(D) = (DT)((sr_val)); \ + else if (except_ret == H5T_CONV_ABORT) \ + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCONVERT, FAIL, "can't handle conversion exception"); \ + /* if(except_ret==H5T_CONV_HANDLED): Fall through, user handled it */ \ + } \ + else \ + *(D) = (DT)((sr_val)); \ + } +#define H5T_CONV_Zx_FLOAT_COMPLEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zx_CORE_IMP(STYPE, DTYPE, S, D, ST, DT, float, D_MIN, D_MAX) +#define H5T_CONV_Zx_DOUBLE_COMPLEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zx_CORE_IMP(STYPE, DTYPE, S, D, ST, DT, double, D_MIN, D_MAX) +#define H5T_CONV_Zx_LDOUBLE_COMPLEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zx_CORE_IMP(STYPE, DTYPE, S, D, ST, DT, long double, D_MIN, D_MAX) +#define H5T_CONV_Zx_NOEX_CORE_IMP(STYPE, DTYPE, S, D, ST, DT, SBT, D_MIN, D_MAX) \ + { \ + H5T_CONV_##STYPE##_REALVAL(S); /* Extract "real" part of complex number */ \ + if ((sr_val) > (SBT)(D_MAX)) \ + *(D) = (DT)(D_MAX); \ + else if ((sr_val) < (SBT)(D_MIN)) \ + *(D) = (DT)(D_MIN); \ + else \ + *(D) = (DT)((sr_val)); \ + } +#define H5T_CONV_Zx_FLOAT_COMPLEX_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zx_NOEX_CORE_IMP(STYPE, DTYPE, S, D, ST, DT, float, D_MIN, D_MAX) +#define H5T_CONV_Zx_DOUBLE_COMPLEX_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zx_NOEX_CORE_IMP(STYPE, DTYPE, S, D, ST, DT, double, D_MIN, D_MAX) +#define H5T_CONV_Zx_LDOUBLE_COMPLEX_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_Zx_NOEX_CORE_IMP(STYPE, DTYPE, S, D, ST, DT, long double, D_MIN, D_MAX) + +/* Similar logic to H5T_CONV_Fx. The "real" part of the complex number is + * retrieved using one of the creal() variants (according to the source + * complex number type) and then is used for comparisons when checking for + * overflow and underflow. Uses specialized macros above to also pass the + * base floating-point C type of the complex number type for use in casts + * during those comparisons. + */ +#define H5T_CONV_Zx(STYPE, DTYPE, ST, DT, D_MIN, D_MAX) \ + do { \ + H5T_CONV(H5T_CONV_Zx_##STYPE, STYPE, DTYPE, ST, DT, D_MIN, D_MAX, Y) \ + } while (0) + +#define H5T_CONV_zX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + { \ + H5T_CONV_CAST_Z(zX, STYPE, DTYPE, S, -, -, D, ST, DT); \ + } +#define H5T_CONV_zX_NOEX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) \ + H5T_CONV_zX_CORE(STYPE, DTYPE, S, D, ST, DT, D_MIN, D_MAX) + +/* Identical logic to H5T_CONV_fX, but special implementation is needed + * here to deal with MSVC's complex number structure types. + */ +#define H5T_CONV_zX(STYPE, DTYPE, ST, DT, D_MIN, D_MAX) \ + do { \ + HDcompile_assert(sizeof(ST) <= sizeof(DT)); \ + H5T_CONV(H5T_CONV_zX, STYPE, DTYPE, ST, DT, D_MIN, D_MAX, N) \ + } while (0) + +/* H5T_CONV_Xz is currently unused (as there is no standard _Complex type for + * smaller floats than "float", though some compilers will allow this). When + * implemented, the logic should be nearly identical to H5T_CONV_Xf, with the + * comparisons being made against the "real" part of the complex number, as + * extracted with the creal() variants (similar to H5T_CONV_Zx, foH5T_CONV_zX(r guidance). + */ +/* #define H5T_CONV_Xz(STYPE, DTYPE, ST, DT, D_MIN, D_MAX) */ +#endif + /* Since all "no exception" cores do the same thing (assign the value in the * source location to the destination location, using casting), use one "core" * to do them all. @@ -831,17 +1438,21 @@ typedef struct H5T_conv_hw_t { #define H5T_CONV_SET_PREC_Y \ /* Get source & destination precisions into a variable */ \ tclass = st->shared->type; \ - assert(tclass == H5T_INTEGER || tclass == H5T_FLOAT); \ + assert(tclass == H5T_INTEGER || tclass == H5T_FLOAT || tclass == H5T_COMPLEX); \ if (tclass == H5T_INTEGER) \ sprec = st->shared->u.atomic.prec; \ - else \ + else if (tclass == H5T_FLOAT) \ sprec = 1 + st->shared->u.atomic.u.f.msize; \ + else \ + sprec = 1 + st->shared->parent->shared->u.atomic.u.f.msize; \ tclass = dt->shared->type; \ - assert(tclass == H5T_INTEGER || tclass == H5T_FLOAT); \ + assert(tclass == H5T_INTEGER || tclass == H5T_FLOAT || tclass == H5T_COMPLEX); \ if (tclass == H5T_INTEGER) \ dprec = dt->shared->u.atomic.prec; \ + else if (tclass == H5T_FLOAT) \ + dprec = 1 + dt->shared->u.atomic.u.f.msize; \ else \ - dprec = 1 + dt->shared->u.atomic.u.f.msize; + dprec = 1 + dt->shared->parent->shared->u.atomic.u.f.msize; #define H5T_CONV_SET_PREC_N /*don't init precision variables */ diff --git a/src/H5Tconv_vlen.c b/src/H5Tconv_vlen.c index 5f6c35f127b..8c5af35ef1e 100644 --- a/src/H5Tconv_vlen.c +++ b/src/H5Tconv_vlen.c @@ -57,7 +57,7 @@ H5FL_BLK_DEFINE_STATIC(vlen_seq); * Function: H5T__conv_vlen_nested_free * * Purpose: Recursively locates and frees any nested VLEN components of - * complex data types (including COMPOUND). + * composite data types (including COMPOUND). * * Return: Non-negative on success/Negative on failure. * @@ -101,6 +101,7 @@ H5T__conv_vlen_nested_free(uint8_t *buf, H5T_t *dt) case H5T_OPAQUE: case H5T_REFERENCE: case H5T_ENUM: + case H5T_COMPLEX: /* These types cannot contain vl data */ break; diff --git a/src/H5Tdbg.c b/src/H5Tdbg.c index d54422a626c..7308279b35b 100644 --- a/src/H5Tdbg.c +++ b/src/H5Tdbg.c @@ -182,6 +182,31 @@ H5T_debug(const H5T_t *dt, FILE *stream) s1 = "struct"; break; + case H5T_REFERENCE: + switch (dt->shared->u.atomic.u.r.rtype) { + case H5R_OBJECT1: + s1 = "object reference (old)"; + break; + case H5R_OBJECT2: + s1 = "object reference (new)"; + break; + case H5R_DATASET_REGION1: + s1 = "region reference (old)"; + break; + case H5R_DATASET_REGION2: + s1 = "region reference (new)"; + break; + case H5R_ATTR: + s1 = "attribute reference"; + break; + case H5R_BADTYPE: + case H5R_MAXTYPE: + default: + s1 = "invalid reference"; + break; + } + break; + case H5T_ENUM: s1 = "enum"; break; @@ -193,8 +218,14 @@ H5T_debug(const H5T_t *dt, FILE *stream) s1 = "vlen"; break; - case H5T_REFERENCE: case H5T_ARRAY: + s1 = "array"; + break; + + case H5T_COMPLEX: + s1 = "complex number"; + break; + case H5T_NCLASSES: default: s1 = ""; @@ -342,6 +373,7 @@ H5T_debug(const H5T_t *dt, FILE *stream) case H5T_ENUM: case H5T_VLEN: case H5T_ARRAY: + case H5T_COMPLEX: case H5T_NCLASSES: default: /* No additional info */ @@ -407,6 +439,23 @@ H5T_debug(const H5T_t *dt, FILE *stream) else if (H5T_OPAQUE == dt->shared->type) { fprintf(stream, ", tag=\"%s\"", dt->shared->u.opaque.tag); } + else if (H5T_COMPLEX == dt->shared->type) { + fprintf(stream, ", homogeneous"); + switch (dt->shared->u.cplx.form) { + case H5T_COMPLEX_RECTANGULAR: + fprintf(stream, ", rectangular form"); + break; + case H5T_COMPLEX_POLAR: + fprintf(stream, ", polar form"); + break; + case H5T_COMPLEX_EXPONENTIAL: + fprintf(stream, ", exponential form"); + break; + default: + fprintf(stream, ", invalid form"); + break; + } + } else { /* Unknown */ fprintf(stream, "unknown class %d\n", (int)(dt->shared->type)); diff --git a/src/H5Tfields.c b/src/H5Tfields.c index 2b6ab80a62c..87d1a9068b8 100644 --- a/src/H5Tfields.c +++ b/src/H5Tfields.c @@ -172,6 +172,7 @@ H5T__get_member_name(H5T_t const *dt, unsigned membno) case H5T_REFERENCE: case H5T_VLEN: case H5T_ARRAY: + case H5T_COMPLEX: case H5T_NCLASSES: default: HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "operation not supported for type class"); @@ -231,6 +232,7 @@ H5Tget_member_index(hid_t type_id, const char *name) case H5T_REFERENCE: case H5T_VLEN: case H5T_ARRAY: + case H5T_COMPLEX: case H5T_NCLASSES: default: HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "operation not supported for this type"); diff --git a/src/H5Tfixed.c b/src/H5Tfixed.c index fab2159bb52..2a7c9030145 100644 --- a/src/H5Tfixed.c +++ b/src/H5Tfixed.c @@ -23,13 +23,12 @@ #include "H5Tpkg.h" /*data-type functions */ /*------------------------------------------------------------------------- - * Function: H5Tget_sign + * Function: H5Tget_sign * - * Purpose: Retrieves the sign type for an integer type. + * Purpose: Retrieves the sign type for an integer type. * - * Return: Success: The sign type. - * - * Failure: H5T_SGN_ERROR (Negative) + * Return: Success: The sign type. + * Failure: H5T_SGN_ERROR (Negative) * *------------------------------------------------------------------------- */ @@ -52,14 +51,13 @@ H5Tget_sign(hid_t type_id) } /*------------------------------------------------------------------------- - * Function: H5T_get_sign + * Function: H5T_get_sign * - * Purpose: Private function for H5Tget_sign. Retrieves the sign type + * Purpose: Private function for H5Tget_sign. Retrieves the sign type * for an integer type. * - * Return: Success: The sign type. - * - * Failure: H5T_SGN_ERROR (Negative) + * Return: Success: The sign type. + * Failure: H5T_SGN_ERROR (Negative) * *------------------------------------------------------------------------- */ @@ -88,11 +86,11 @@ H5T_get_sign(H5T_t const *dt) } /*------------------------------------------------------------------------- - * Function: H5Tset_sign + * Function: H5Tset_sign * - * Purpose: Sets the sign property for an integer. + * Purpose: Sets the sign property for an integer. * - * Return: Non-negative on success/Negative on failure + * Return: Non-negative on success/Negative on failure * *------------------------------------------------------------------------- */ diff --git a/src/H5Tmodule.h b/src/H5Tmodule.h index 139414fcf78..266516478de 100644 --- a/src/H5Tmodule.h +++ b/src/H5Tmodule.h @@ -71,7 +71,7 @@ * An HDF5 datatype describes one specific layout of bits. A dataset has a single datatype which * applies to every data element. When a dataset is created, the storage datatype is defined. After * the dataset or attribute is created, the datatype cannot be changed. - * \li The datatype describes the storage layout of a singledata element + * \li The datatype describes the storage layout of a single data element * \li All elements of the dataset must have the same type * \li The datatype of a dataset is immutable * @@ -168,6 +168,8 @@ * \li Compound datatypes: structured records * \li Array: a multidimensional array of a datatype * \li Variable-length: a one-dimensional array of a datatype + * \li Enumeration: a set of (name, value) pairs, similar to the C/C++ enum type + * \li Complex: an aggregate of two similar floating-point datatypes * *
Predefined Standard Datatypes
C-style long double
#H5T_NATIVE_FLOAT_COMPLEXC-style float _Complex (MSVC _Fcomplex) (May be H5I_INVALID_HID if platform doesn't support float _Complex / _Fcomplex type)
#H5T_NATIVE_DOUBLE_COMPLEXC-style double _Complex (MSVC _Dcomplex) (May be H5I_INVALID_HID if platform doesn't support double _Complex / _Dcomplex type)
#H5T_NATIVE_LDOUBLE_COMPLEXC-style long double _Complex (MSVC _Lcomplex) (May be H5I_INVALID_HID if platform doesn't support long double _Complex / _Lcomplex type)
#H5T_NATIVE_B8 8-bit bitfield based on native types
* @@ -199,7 +201,7 @@ * - * * + * + * + * + * + * + * *
* Description * + * * Properties * @@ -351,6 +353,20 @@ * * *
+ * Complex + * + * Data elements of two floating point numbers + * + * Base floating point datatype + * + * Other properties inherited from base floating point datatype + *
* * \subsubsection subsubsec_datatype_model_predefine Predefined Datatypes @@ -745,6 +761,30 @@ * * * + * #H5T_NATIVE_FLOAT_COMPLEX + * + * + * float _Complex (MSVC _Fcomplex) + * + * + * + * + * #H5T_NATIVE_DOUBLE_COMPLEX + * + * + * double _Complex (MSVC _Dcomplex) + * + * + * + * + * #H5T_NATIVE_LDOUBLE_COMPLEX + * + * + * long double _Complex (MSVC _Lcomplex) + * + * + * + * * #H5T_NATIVE_HSIZE * * @@ -1005,12 +1045,51 @@ * \ref hid_t \ref H5Tcreate (\ref H5T_class_t class, size_t size) * * - * Create a new datatype object of datatype class . The following datatype classes care supported - * with this function: + * Create a new datatype object of the specified datatype class with the specified size. This + * function is only used with the following datatype classes: * \li #H5T_COMPOUND * \li #H5T_OPAQUE * \li #H5T_ENUM - * \li Other datatypes are created with \ref H5Tcopy(). + * \li #H5T_STRING + * \li Other datatypes are created with a specialized datatype creation function such as + * \ref H5Tarray_create2 or are copied from an existing predefined datatype with \ref H5Tcopy(). + * + * + * + * + * \ref hid_t \ref H5Tarray_create2 (\ref hid_t base_id, unsigned ndims, const \ref hsize_t dim[]); + * + * + * Create a new array datatype object. \p base_id is the datatype of every element of the array, i.e., + * of the number at each position in the array. \p ndims is the number of dimensions and the size of + * each dimension is specified in the array \p dim. + * + * + * + * + * \ref hid_t \ref H5Tvlen_create (\ref hid_t base_id); + * + * + * Create a new one-dimensional variable-length array datatype object. \p base_id is the datatype of + * every element of the array. + * + * + * + * + * \ref hid_t \ref H5Tenum_create (\ref hid_t base_id); + * + * + * Create a new enumeration datatype object. \p base_id is the datatype of every element of the + * enumeration datatype. + * + * + * + * + * \ref hid_t \ref H5Tcomplex_create (\ref hid_t base_type_id); + * + * + * Create a new complex number datatype object. \p base_type_id is the datatype of both parts + * of the complex number datatype and must be a floating point datatype. * * * @@ -1044,7 +1123,8 @@ * * * Releases resources associated with a datatype obtained from \ref H5Tcopy, \ref H5Topen, or - * \ref H5Tcreate. It is illegal to close an immutable transient datatype (for example, predefined types). + * \ref H5Tcreate / \ref H5Tarray_create2 / etc. It is illegal to close an immutable transient + * datatype (for example, predefined types). * * * @@ -1075,12 +1155,12 @@ * * * - * In order to use a datatype, the object must be created (\ref H5Tcreate), or a reference obtained by - * cloning from an existing type (\ref H5Tcopy), or opened (\ref H5Topen). In addition, a reference to the - * datatype of a dataset or attribute can be obtained with \ref H5Dget_type or \ref H5Aget_type. For - * composite datatypes a reference to the datatype for members or base types can be obtained - * (\ref H5Tget_member_type, \ref H5Tget_super). When the datatype object is no longer needed, the - * reference is discarded with \ref H5Tclose. + * In order to use a datatype, the object must be created (\ref H5Tcreate / \ref H5Tarray_create2 / etc.), + * or a reference obtained by cloning from an existing type (\ref H5Tcopy), or opened (\ref H5Topen). + * In addition, a reference to the datatype of a dataset or attribute can be obtained with + * \ref H5Dget_type or \ref H5Aget_type. For composite datatypes a reference to the datatype for + * members or base types can be obtained (\ref H5Tget_member_type, \ref H5Tget_super). When the datatype + * object is no longer needed, the reference is discarded with \ref H5Tclose. * * Two datatype objects can be tested to see if they are the same with \ref H5Tequal. This function * returns true if the two datatype references refer to the same datatype object. However, if two @@ -1088,7 +1168,7 @@ * they will not be considered ‘equal’. * * A datatype can be written to the file as a first class object (\ref H5Tcommit). This is a committed - * datatype and can be used in thesame way as any other datatype. + * datatype and can be used in the same way as any other datatype. * * \subsubsection subsubsec_datatype_program_discover Discovery of Datatype Properties * Any HDF5 datatype object can be queried to discover all of its datatype properties. For each @@ -1115,7 +1195,7 @@ * * * The datatype class: #H5T_INTEGER, #H5T_FLOAT, #H5T_STRING, #H5T_BITFIELD, #H5T_OPAQUE, #H5T_COMPOUND, - * #H5T_REFERENCE, #H5T_ENUM, #H5T_VLEN, #H5T_ARRAY + * #H5T_REFERENCE, #H5T_ENUM, #H5T_VLEN, #H5T_ARRAY, #H5T_COMPLEX * * * @@ -1473,6 +1553,14 @@ * #H5Tvlen_create * * + * + * + * COMPLEX + * + * + * #H5Tcomplex_create + * + * * * * Once the datatype is created and the datatype properties set, the datatype object can be used. @@ -2408,7 +2496,8 @@ filled according to the value of this property. The padding can be: *
  • #H5T_REFERENCE
  • *
  • #H5T_ENUM
  • *
  • #H5T_VLEN
  • - *
  • #H5T_ARRAY
  • + *
  • #H5T_ARRAY
  • + *
  • #H5T_COMPLEX
  • * *
  • If class is #H5T_COMPOUND, then go to step 2 and repeat all steps under step 3. If * class is not #H5T_COMPOUND, then a member is of an atomic class and can be read @@ -2691,7 +2780,7 @@ filled according to the value of this property. The padding can be: * * * - * An array datatype may be multi-dimensional with 1 to #H5S_MAX_RANK(the maximum rank + * An array datatype may be multi-dimensional with 1 to #H5S_MAX_RANK (the maximum rank * of a dataset is currently 32) dimensions. The dimensions can be any size greater than 0, but * unlimited dimensions are not supported (although the datatype can be a variable-length datatype). * @@ -2727,7 +2816,7 @@ filled according to the value of this property. The padding can be: * * A variable-length (VL) datatype is a one-dimensional sequence of a datatype which are not fixed * in length from one dataset location to another. In other words, each data element may have a - * different number of members. Variable-length datatypes cannot be divided;the entire data + * different number of members. Variable-length datatypes cannot be divided; the entire data * element must be transferred. * * VL datatypes are useful to the scientific community in many different ways, possibly including: @@ -2780,14 +2869,14 @@ filled according to the value of this property. The padding can be: * data is laid out in memory. * * An analogous procedure must be used to read the data. See the second example below. An - * appropriate array of vl_t must be allocated, and the data read. It is then traversed one data - * element at a time. The #H5Dvlen_reclaim call frees the data buffer for the buffer. With each + * appropriate array of hvl_t must be allocated, and the data read. It is then traversed one data + * element at a time. The #H5Treclaim call frees the data buffer for the buffer. With each * element possibly being of different sequence lengths for a dataset with a VL datatype, the * memory for the VL datatype must be dynamically allocated. Currently there are two methods of * managing the memory for VL datatypes: the standard C malloc/free memory allocation routines * or a method of calling user-defined memory management routines to allocate or free memory * (set with #H5Pset_vlen_mem_manager). Since the memory allocated when reading (or writing) - * may be complicated to release, the #H5Dvlen_reclaim function is provided to traverse a memory + * may be complicated to release, the #H5Treclaim function is provided to traverse a memory * buffer and free the VL datatype information without leaking memory. * * Write VL data @@ -2815,7 +2904,7 @@ filled according to the value of this property. The padding can be: * printf(“ value: %u\n”,((unsigned int *)rdata[i].p)[j]); * } * } - * ret = H5Dvlen_reclaim(tid1, sid1, xfer_pid, rdata); + * ret = H5Treclaim(tid1, sid1, xfer_pid, rdata); * \endcode * * @@ -2827,10 +2916,10 @@ filled according to the value of this property. The padding can be: *
    * * The user program must carefully manage these relatively complex data structures. The - * #H5Dvlen_reclaim function performs a standard traversal, freeing all the data. This function + * #H5Treclaim function performs a standard traversal, freeing all the data. This function * analyzes the datatype and dataspace objects, and visits each VL data element, recursing through - * nested types. By default, the system free is called for the pointer in each vl_t. Obviously, this - * call assumes that all of this memory was allocated with the system malloc. + * nested types. By default, the system free is called for the pointer in each hvl_t. Obviously, + * this call assumes that all of this memory was allocated with the system malloc. * * The user program may specify custom memory manager routines, one for allocating and one for * freeing. These may be set with the #H5Pset_vlen_mem_manager, and must have the following @@ -2853,6 +2942,44 @@ filled according to the value of this property. The padding can be: * destination storage (memory). The size value is adjusted for data conversion and alignment in the * destination. * + *

    Complex

    + * + * A complex number datatype represents complex number data elements which consist of two floating + * point parts. Complex number datatypes cannot be divided for I/O; the entire data element must be + * transferred. + * + * A complex number datatype is created by calling #H5Tcomplex_create with a specified base floating + * point datatype. The example below shows code that creates a complex number datatype of 16-bit + * floating point values. + * + * Create a complex number datatype of 2 IEEE little-endian 16-bit floating point values + * \code + * tid1 = H5Tcomplex_create (H5T_IEEE_F16LE); + * + * dataset = H5Dcreate(fid1, “Dataset1”, tid1, sid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + * \endcode + * + * Data element storage of a complex number datatype + * + * Each part of a data element with a complex number datatype is stored contiguously. Complex number + * datatypes have the same storage representation as an array datatype of 2 elements of a floating + * point datatype or a compound datatype with 2 fields and no structure padding, where each field + * is of the same floating point datatype. Thus, the following representations are equivalent: + * + * \code + * float _Complex data; + * \endcode + * \code + * float data[2]; + * \endcode + * \code + * struct + * { + * float real; + * float imaginary; + * } data; + * \endcode + * * \subsection subsec_datatype_other Other Non-numeric Datatypes * Several datatype classes define special types of objects. * @@ -2917,13 +3044,13 @@ filled according to the value of this property. The padding can be: * is fast to access, but can waste storage space if the length of the Strings varies. * * A third alternative is to use a variable-length datatype. See item c in the figure above. This can - * be done using the standard mechanisms described above. The program would use vl_t structures + * be done using the standard mechanisms described above. The program would use hvl_t structures * to write and read the data. * * A fourth alternative is to use a special feature of the string datatype class to set the size of the * datatype to #H5T_VARIABLE. See item c in the figure above. The example below shows a * declaration of a datatype of type #H5T_C_S1 which is set to #H5T_VARIABLE. The HDF5 - * Library automatically translates between this and the vl_t structure. Note: the #H5T_VARIABLE + * Library automatically translates between this and the hvl_t structure. Note: the #H5T_VARIABLE * size can only be used with string datatypes. * * Set the string datatype size to H5T_VARIABLE @@ -2945,7 +3072,7 @@ filled according to the value of this property. The padding can be: * printf(“%d: len: %d, str is: %s\n”, i, strlen(rdata[i]), rdata[i]); * } * - * ret = H5Dvlen_reclaim(tid1, sid1, xfer_pid, rdata); + * ret = H5Treclaim(tid1, sid1, xfer_pid, rdata); * \endcode * * \subsubsection subsubsec_datatype_other_refs Reference @@ -3804,12 +3931,13 @@ filled according to the value of this property. The padding can be: * datatypes. * * The currently supported text format used by #H5LTtext_to_dtype and #H5LTdtype_to_text is the - * data description language (DDL) and conforms to the \ref DDLBNF114. The portion of the - * \ref DDLBNF114 that defines HDF5 datatypes appears below. + * data description language (DDL) and conforms to the \ref DDLBNF200. The portion of the + * \ref DDLBNF200 that defines HDF5 datatypes appears below. * * The definition of HDF5 datatypes from the HDF5 DDL * \code - * ::= | | | + * ::= | | | | + * * * ::= | |