summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeFilters.cmake2
-rw-r--r--CMakeInstallation.cmake15
-rw-r--r--MANIFEST2
-rw-r--r--README.txt2
-rwxr-xr-xbin/release2
-rw-r--r--c++/src/cpp_doc_config2
-rw-r--r--config/cmake/FindHDF5.cmake.in86
-rw-r--r--config/cmake/FindJNI.cmake17
-rw-r--r--config/cmake/HDF518_Examples.cmake.in19
-rw-r--r--config/cmake/HDF5UseFortran.cmake3
-rw-r--r--config/cmake/HDF5_Examples.cmake.in15
-rw-r--r--config/cmake/UseJava.cmake17
-rw-r--r--config/cmake/UseJavaClassFilelist.cmake15
-rw-r--r--config/cmake/UseJavaSymlinks.cmake15
-rwxr-xr-xconfig/cmake/scripts/CTestScript.cmake12
-rw-r--r--config/cmake_ext_mod/HDFLibMacros.cmake17
-rw-r--r--config/cmake_ext_mod/runTest.cmake8
-rw-r--r--config/conclude_fc.am4
-rw-r--r--configure.ac3
-rw-r--r--fortran/src/H5Pff.F9014
-rw-r--r--fortran/src/H5_f.c238
-rw-r--r--fortran/src/H5_ff.F9039
-rw-r--r--fortran/src/H5f90global.F9049
-rw-r--r--fortran/src/H5fort_type_defines.h.in1
-rw-r--r--fortran/src/H5match_types.c149
-rw-r--r--fortran/test/Makefile.am4
-rw-r--r--fortran/test/fortranlib_test_F03.F902
-rw-r--r--fortran/test/tH5T_F03.F9046
-rw-r--r--fortran/test/tf.F9013
-rw-r--r--hl/fortran/src/H5TBff.F903
-rw-r--r--hl/fortran/src/Makefile.am2
-rw-r--r--hl/fortran/test/tsttable.F9036
-rw-r--r--hl/test/test_ds.c9
-rw-r--r--hl/tools/gif2h5/CMakeTests.cmake4
-rw-r--r--hl/tools/gif2h5/h52gifgentst.c8
-rw-r--r--java/examples/datasets/CMakeLists.txt4
-rw-r--r--java/examples/datatypes/CMakeLists.txt2
-rw-r--r--java/examples/groups/CMakeLists.txt11
-rw-r--r--java/examples/intro/CMakeLists.txt2
-rw-r--r--m4/aclocal_fc.m45
-rw-r--r--release_docs/RELEASE.txt2
-rw-r--r--src/H5AC.c4
-rw-r--r--src/H5ACprivate.h2
-rw-r--r--src/H5Aint.c5
-rw-r--r--src/H5Cprivate.h2
-rw-r--r--src/H5Ctag.c14
-rw-r--r--src/H5D.c20
-rw-r--r--src/H5Dint.c37
-rw-r--r--src/H5Dpkg.h1
-rw-r--r--src/H5Dtest.c41
-rw-r--r--src/H5Fint.c16
-rw-r--r--src/H5Fio.c2
-rw-r--r--src/H5Fpkg.h1
-rw-r--r--src/H5Fprivate.h4
-rw-r--r--src/H5Fquery.c27
-rw-r--r--src/H5G.c4
-rw-r--r--src/H5Gint.c4
-rw-r--r--src/H5O.c2
-rw-r--r--src/H5Odtype.c9
-rw-r--r--src/H5Pfapl.c99
-rw-r--r--src/H5Ppublic.h2
-rw-r--r--src/H5Znbit.c99
-rw-r--r--src/H5public.h4
-rw-r--r--test/CMakeLists.txt1
-rw-r--r--test/CMakeTests.cmake2
-rw-r--r--test/Makefile.am2
-rw-r--r--test/cmpd_dset.c53
-rw-r--r--test/dsets.c92
-rw-r--r--test/dt_arith.c16
-rw-r--r--test/evict_on_close.c779
-rw-r--r--test/gheap.c84
-rw-r--r--test/h5test.c34
-rw-r--r--test/tattr.c44
-rw-r--r--test/tchecksum.c23
-rw-r--r--test/th5o.c32
-rw-r--r--test/theap.c47
-rw-r--r--test/titerate.c13
-rw-r--r--test/tskiplist.c51
-rw-r--r--test/tvltypes.c12
-rw-r--r--tools/h5copy/CMakeTests.cmake2
-rw-r--r--tools/h5diff/CMakeTests.cmake43
-rw-r--r--tools/h5dump/CMakeTests.cmake38
-rw-r--r--tools/h5dump/CMakeTestsPBITS.cmake7
-rw-r--r--tools/h5dump/CMakeTestsVDS.cmake13
-rw-r--r--tools/h5dump/CMakeTestsXML.cmake7
-rw-r--r--tools/h5dump/h5dumpgentest.c69
-rw-r--r--tools/h5format_convert/CMakeTests.cmake8
-rw-r--r--tools/h5import/CMakeTests.cmake10
-rw-r--r--tools/h5jam/CMakeTests.cmake35
-rw-r--r--tools/h5ls/CMakeTests.cmake6
-rw-r--r--tools/h5ls/CMakeTestsVDS.cmake6
-rw-r--r--tools/h5repack/CMakeTests.cmake11
-rw-r--r--tools/h5stat/CMakeTests.cmake6
-rw-r--r--tools/misc/CMakeTests.cmake4
-rw-r--r--tools/perform/sio_standalone.h25
95 files changed, 1908 insertions, 965 deletions
diff --git a/CMakeFilters.cmake b/CMakeFilters.cmake
index bb0d238..b7aa77d 100644
--- a/CMakeFilters.cmake
+++ b/CMakeFilters.cmake
@@ -8,7 +8,9 @@ if (HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT" OR HDF5_ALLOW_EXTERNAL_SUPPORT MAT
option (SZIP_USE_EXTERNAL "Use External Library Building for SZIP" 1)
if (HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT")
set (ZLIB_URL ${ZLIB_GIT_URL} CACHE STRING "Path to zlib git repository")
+ set (ZLIB_BRANCH ${ZLIB_GIT_BRANCH})
set (SZIP_URL ${SZIP_GIT_URL} CACHE STRING "Path to szip git repository")
+ set (SZIP_BRANCH ${SZIP_GIT_BRANCH})
elseif (HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN")
set (ZLIB_URL ${ZLIB_SVN_URL} CACHE STRING "Path to zlib Subversion repository")
set (SZIP_URL ${SZIP_SVN_URL} CACHE STRING "Path to szip Subversion repository")
diff --git a/CMakeInstallation.cmake b/CMakeInstallation.cmake
index 8dcaf85..6817d5c 100644
--- a/CMakeInstallation.cmake
+++ b/CMakeInstallation.cmake
@@ -75,21 +75,6 @@ configure_package_config_file (
)
#-----------------------------------------------------------------------------
-# Configure the FindHDF5.cmake file for the install directory
-#-----------------------------------------------------------------------------
-if (NOT HDF5_EXTERNALLY_CONFIGURED)
- configure_file (
- ${HDF_RESOURCES_DIR}/FindHDF5.cmake.in
- ${HDF5_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindHDF5${HDF_PACKAGE_EXT}.cmake @ONLY
- )
- install (
- FILES ${HDF5_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindHDF5${HDF_PACKAGE_EXT}.cmake
- DESTINATION ${HDF5_INSTALL_CMAKE_DIR}
- COMPONENT configinstall
- )
-endif (NOT HDF5_EXTERNALLY_CONFIGURED)
-
-#-----------------------------------------------------------------------------
# Configure the hdf5-config.cmake file for the install directory
#-----------------------------------------------------------------------------
set (INCLUDE_INSTALL_DIR ${HDF5_INSTALL_INCLUDE_DIR})
diff --git a/MANIFEST b/MANIFEST
index 4737346..da3530b 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -907,6 +907,7 @@
./test/enc_dec_plist.c
./test/enc_dec_plist_cross_platform.c
./test/enum.c
+./test/evict_on_close.c
./test/extend.c
./test/external.c
./test/error_test.c
@@ -2840,7 +2841,6 @@
./config/cmake/ConfigureChecks.cmake
./config/cmake/CPack.Info.plist.in
./config/cmake/CTestCustom.cmake
-./config/cmake/FindHDF5.cmake.in
./config/cmake/FindHDFJAVA.cmake.in
./config/cmake/FindJNI.cmake
./config/cmake/H5cxx_config.h.in
diff --git a/README.txt b/README.txt
index 6dfd021..151e92c 100644
--- a/README.txt
+++ b/README.txt
@@ -1,4 +1,4 @@
-HDF5 version 1.9.234 currently under development
+HDF5 version 1.9.235 currently under development
Please refer to the release_docs/INSTALL file for installation instructions.
------------------------------------------------------------------------------
diff --git a/bin/release b/bin/release
index 703916b..1d3c9c5 100755
--- a/bin/release
+++ b/bin/release
@@ -152,7 +152,7 @@ tar2zip()
# This command must be run at the top level of the hdf5 source directory.
# Verify this requirement.
-if [ ! \( -f configure -a -f bin/release \) ]; then
+if [ ! \( -f configure.ac -a -f bin/release \) ]; then
echo "$0 must be run at the top level of the hdf5 source directory"
exit 1
fi
diff --git a/c++/src/cpp_doc_config b/c++/src/cpp_doc_config
index 623f9c7..c024c45 100644
--- a/c++/src/cpp_doc_config
+++ b/c++/src/cpp_doc_config
@@ -38,7 +38,7 @@ PROJECT_NAME = "HDF5 C++ API"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = "1.9.234 currently under development"
+PROJECT_NUMBER = "1.9.235 currently under development"
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
diff --git a/config/cmake/FindHDF5.cmake.in b/config/cmake/FindHDF5.cmake.in
deleted file mode 100644
index fbc49f1..0000000
--- a/config/cmake/FindHDF5.cmake.in
+++ /dev/null
@@ -1,86 +0,0 @@
-#
-# To be used by projects that make use of Cmakeified hdf5-@HDF5_PACKAGE_VERSION@
-#
-
-#
-# Find the HDF5 includes and get all installed hdf5 library settings from
-# HDF5-config.cmake file : Requires a CMake compatible hdf5-1.8.5 or later
-# for this feature to work. The following vars are set if hdf5 is found.
-#
-# HDF5_FOUND - True if found, otherwise all other vars are undefined
-# HDF5_INCLUDE_DIR - The include dir for main *.h files
-# HDF5_FORTRAN_INCLUDE_DIR - The include dir for fortran modules and headers
-# HDF5_VERSION_STRING - full version (e.g. @HDF5_PACKAGE_VERSION@)
-# HDF5_VERSION_MAJOR - major part of version (e.g. @HDF5_PACKAGE_VERSION_MAJOR@)
-# HDF5_VERSION_MINOR - minor part (e.g. @HDF5_PACKAGE_VERSION_MINOR@)
-#
-# The following boolean vars will be defined
-# HDF5_ENABLE_PARALLEL - 1 if HDF5 parallel supported
-# HDF5_BUILD_FORTRAN - 1 if HDF5 was compiled with fortran on
-# HDF5_BUILD_CPP_LIB - 1 if HDF5 was compiled with cpp on
-# HDF5_BUILD_TOOLS - 1 if HDF5 was compiled with tools on
-# HDF5_BUILD_HL_LIB - 1 if HDF5 was compiled with high level on
-# HDF5_BUILD_HL_CPP_LIB - 1 if HDF5 was compiled with high level and cpp on
-#
-# Target names that are valid (depending on enabled options)
-# will be the following
-#
-# hdf5 : HDF5 C library
-# hdf5_tools : the tools library
-# hdf5_f90cstub : used by Fortran to C interface
-# hdf5_fortran : Fortran HDF5 library
-# hdf5_cpp : HDF5 cpp interface library
-# hdf5_hl : High Level library
-# hdf5_hl_f90cstub : used by Fortran to C interface to High Level library
-# hdf5_hl_fortran : Fortran High Level library
-# hdf5_hl_cpp : High Level cpp interface library
-#
-# To aid in finding HDF5 as part of a subproject set
-# HDF5_ROOT_DIR_HINT to the location where @HDF5_PACKAGE@@HDF_PACKAGE_EXT@-config.cmake lies
-
-include (SelectLibraryConfigurations)
-include (FindPackageHandleStandardArgs)
-
-# The HINTS option should only be used for values computed from the system.
-set (_HDF5_HINTS
- $ENV{HOME}/.local
- $ENV{HDF5_ROOT}
- $ENV{HDF5_ROOT_DIR_HINT}
-)
-# Hard-coded guesses should still go in PATHS. This ensures that the user
-# environment can always override hard guesses.
-set (_HDF5_PATHS
- $ENV{HOME}/.local
- $ENV{HDF5_ROOT}
- $ENV{HDF5_ROOT_DIR_HINT}
- /usr/lib/@HDF5_PACKAGE@
- /usr/share/@HDF5_PACKAGE@
- /usr/local/@HDF5_PACKAGE@
- /usr/local/@HDF5_PACKAGE@/share
-)
-
-FIND_PATH (HDF5_ROOT_DIR "@HDF5_PACKAGE@@HDF_PACKAGE_EXT@-config.cmake"
- HINTS ${_HDF5_HINTS}
- PATHS ${_HDF5_PATHS}
- PATH_SUFFIXES
- cmake/@HDF5_PACKAGE@
- lib/cmake/@HDF5_PACKAGE@
- share/cmake/@HDF5_PACKAGE@
-)
-
-FIND_PATH (HDF5_INCLUDE_DIRS "H5public.h"
- HINTS ${_HDF5_HINTS}
- PATHS ${_HDF5_PATHS}
- PATH_SUFFIXES
- include
- Include
-)
-
-# For backwards compatibility we set HDF5_INCLUDE_DIR to the value of
-# HDF5_INCLUDE_DIRS
-set ( HDF5_INCLUDE_DIR "${HDF5_INCLUDE_DIRS}" )
-
-if (HDF5_INCLUDE_DIR)
- set (HDF5_FOUND "YES")
- include (${HDF5_ROOT_DIR}/@HDF5_PACKAGE@@HDF_PACKAGE_EXT@-config.cmake)
-endif (HDF5_INCLUDE_DIR)
diff --git a/config/cmake/FindJNI.cmake b/config/cmake/FindJNI.cmake
index 9105f3d..9d755fc 100644
--- a/config/cmake/FindJNI.cmake
+++ b/config/cmake/FindJNI.cmake
@@ -1,3 +1,5 @@
+# Distributed under the OSI-approved BSD 3-Clause License. See https://cmake.org/licensing for details.
+
#.rst:
# FindJNI
# -------
@@ -22,19 +24,6 @@
# JAVA_INCLUDE_PATH2 = the include path to jni_md.h
# JAVA_AWT_INCLUDE_PATH = the include path to jawt.h
-#=============================================================================
-# Copyright 2001-2009 Kitware, Inc.
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-# License text for the above reference.)
-
# Expand {libarch} occurences to java_libarch subdirectory(-ies) and set ${_var}
macro(java_append_library_directories _var)
# Determine java arch-specific library subdir
@@ -53,7 +42,7 @@ macro(java_append_library_directories _var)
set(_java_libarch "alpha")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
# Subdir is "arm" for both big-endian (arm) and little-endian (armel).
- set(_java_libarch "arm")
+ set(_java_libarch "arm" "aarch32")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips")
# mips* machines are bi-endian mostly so processor does not tell
# endianess of the underlying system.
diff --git a/config/cmake/HDF518_Examples.cmake.in b/config/cmake/HDF518_Examples.cmake.in
index efabbe6..e1cb781 100644
--- a/config/cmake/HDF518_Examples.cmake.in
+++ b/config/cmake/HDF518_Examples.cmake.in
@@ -85,9 +85,9 @@ else(WIN32)
set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_BINARY_NAME}")
endif(WIN32)
if(${FORTRANLIBRARIES})
- set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF_BUILD_FORTRAN:BOOL=ON")
+ set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF_BUILD_FORTRAN:BOOL=ON")
else()
- set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF_BUILD_FORTRAN:BOOL=OFF")
+ set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF_BUILD_FORTRAN:BOOL=OFF")
endif()
if(${CDASH_LOCAL})
set(BUILD_OPTIONS "${BUILD_OPTIONS} -DCDASH_LOCAL:BOOL=ON")
@@ -171,19 +171,28 @@ ctest_read_custom_files ("${CTEST_BINARY_DIRECTORY}")
## NORMAL process
## --------------------------
ctest_start (Experimental)
-ctest_configure (BUILD "${CTEST_BINARY_DIRECTORY}")
+ctest_configure (BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)
+if(${res} LESS 0 OR ${res} GREATER 0)
+ file(APPEND ${CTEST_SCRIPT_DIRECTORY}/FailedCTest.txt "Failed Configure: ${res}\n")
+endif()
if(LOCAL_SUBMIT)
ctest_submit (PARTS Configure Notes)
endif()
-ctest_build (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND)
+ctest_build (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND APPEND RETURN_VALUE res NUMBER_ERRORS errval)
+if(${res} LESS 0 OR ${res} GREATER 0 OR ${errval} GREATER 0)
+ file(APPEND ${CTEST_SCRIPT_DIRECTORY}/FailedCTest.txt "Failed ${errval} Build: ${res}\n")
+endif()
if(LOCAL_SUBMIT)
ctest_submit (PARTS Build)
endif()
ctest_test (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND ${ctest_test_args} RETURN_VALUE res)
+if(${res} LESS 0 OR ${res} GREATER 0)
+ file(APPEND ${CTEST_SCRIPT_DIRECTORY}/FailedCTest.txt "Failed Tests: ${res}\n")
+endif()
if(LOCAL_SUBMIT)
ctest_submit (PARTS Test)
endif()
-if(res GREATER 0)
+if(${res} LESS 0 OR ${res} GREATER 0)
message (FATAL_ERROR "tests FAILED")
endif()
#-----------------------------------------------------------------------------
diff --git a/config/cmake/HDF5UseFortran.cmake b/config/cmake/HDF5UseFortran.cmake
index 41efadc..eba448c 100644
--- a/config/cmake/HDF5UseFortran.cmake
+++ b/config/cmake/HDF5UseFortran.cmake
@@ -159,9 +159,12 @@ set(PAC_FC_ALL_REAL_KINDS "\{${pac_validRealKinds}\}")
list(GET PROG_OUTPUT 3 NUM_IKIND)
list(GET PROG_OUTPUT 4 NUM_RKIND)
+set(PAC_FORTRAN_NUM_INTEGER_KINDS "${NUM_IKIND}")
+
set(H5CONFIG_F_NUM_IKIND "INTEGER, PARAMETER :: num_ikinds = ${NUM_IKIND}")
set(H5CONFIG_F_IKIND "INTEGER, DIMENSION(1:num_ikinds) :: ikind = (/${pac_validIntKinds}/)")
+message (STATUS "....NUMBER OF INTEGER KINDS FOUND ${PAC_FORTRAN_NUM_INTEGER_KINDS}")
message (STATUS "....REAL KINDS FOUND ${PAC_FC_ALL_REAL_KINDS}")
message (STATUS "....INTEGER KINDS FOUND ${PAC_FC_ALL_REAL_KINDS}")
message (STATUS "....MAX DECIMAL PRECISION ${H5_PAC_FC_MAX_REAL_PRECISION}")
diff --git a/config/cmake/HDF5_Examples.cmake.in b/config/cmake/HDF5_Examples.cmake.in
index 8ea6d18..058dd7a 100644
--- a/config/cmake/HDF5_Examples.cmake.in
+++ b/config/cmake/HDF5_Examples.cmake.in
@@ -182,19 +182,28 @@ ctest_read_custom_files ("${CTEST_BINARY_DIRECTORY}")
## NORMAL process
## --------------------------
ctest_start (Experimental)
-ctest_configure (BUILD "${CTEST_BINARY_DIRECTORY}")
+ctest_configure (BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)
+if(${res} LESS 0 OR ${res} GREATER 0)
+ file(APPEND ${CTEST_SCRIPT_DIRECTORY}/FailedCTest.txt "Failed Configure: ${res}\n")
+endif()
if(LOCAL_SUBMIT)
ctest_submit (PARTS Configure Notes)
endif()
-ctest_build (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND)
+ctest_build (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND APPEND RETURN_VALUE res NUMBER_ERRORS errval)
+if(${res} LESS 0 OR ${res} GREATER 0 OR ${errval} GREATER 0)
+ file(APPEND ${CTEST_SCRIPT_DIRECTORY}/FailedCTest.txt "Failed ${errval} Build: ${res}\n")
+endif()
if(LOCAL_SUBMIT)
ctest_submit (PARTS Build)
endif()
ctest_test (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND ${ctest_test_args} RETURN_VALUE res)
+if(${res} LESS 0 OR ${res} GREATER 0)
+ file(APPEND ${CTEST_SCRIPT_DIRECTORY}/FailedCTest.txt "Failed Tests: ${res}\n")
+endif()
if(LOCAL_SUBMIT)
ctest_submit (PARTS Test)
endif()
-if(res GREATER 0)
+if(${res} LESS 0 OR ${res} GREATER 0)
message (FATAL_ERROR "tests FAILED")
endif()
#-----------------------------------------------------------------------------
diff --git a/config/cmake/UseJava.cmake b/config/cmake/UseJava.cmake
index 4f8e4c8..6391c63 100644
--- a/config/cmake/UseJava.cmake
+++ b/config/cmake/UseJava.cmake
@@ -1,3 +1,5 @@
+# Distributed under the OSI-approved BSD 3-Clause License. See https://cmake.org/licensing for details.
+
#.rst:
# UseJava
# -------
@@ -400,21 +402,6 @@
# Sets the directory where the header files will be generated. Same behavior as option
# '-d' of javah tool. If not specified, ${CMAKE_CURRENT_BINARY_DIR} is used as output directory.
-#=============================================================================
-# Copyright 2013 OpenGamma Ltd. <graham@opengamma.com>
-# Copyright 2010-2011 Andreas schneider <asn@redhat.com>
-# Copyright 2010-2013 Kitware, Inc.
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-# License text for the above reference.)
-
include(CMakeParseArguments)
function (__java_copy_file src dest comment)
diff --git a/config/cmake/UseJavaClassFilelist.cmake b/config/cmake/UseJavaClassFilelist.cmake
index e8e6f01..4420550 100644
--- a/config/cmake/UseJavaClassFilelist.cmake
+++ b/config/cmake/UseJavaClassFilelist.cmake
@@ -1,3 +1,5 @@
+# Distributed under the OSI-approved BSD 3-Clause License. See https://cmake.org/licensing for details.
+
#.rst:
# UseJavaClassFilelist
# --------------------
@@ -10,19 +12,6 @@
# a jar file. This avoids including cmake files which get created in
# the binary directory.
-#=============================================================================
-# Copyright 2010-2011 Andreas schneider <asn@redhat.com>
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-# License text for the above reference.)
-
if (CMAKE_JAVA_CLASS_OUTPUT_PATH)
if (EXISTS "${CMAKE_JAVA_CLASS_OUTPUT_PATH}")
diff --git a/config/cmake/UseJavaSymlinks.cmake b/config/cmake/UseJavaSymlinks.cmake
index 90ffdd5..cd73348 100644
--- a/config/cmake/UseJavaSymlinks.cmake
+++ b/config/cmake/UseJavaSymlinks.cmake
@@ -1,3 +1,5 @@
+# Distributed under the OSI-approved BSD 3-Clause License. See https://cmake.org/licensing for details.
+
#.rst:
# UseJavaSymlinks
# ---------------
@@ -8,19 +10,6 @@
#
# Helper script for UseJava.cmake
-#=============================================================================
-# Copyright 2010-2011 Andreas schneider <asn@redhat.com>
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-# License text for the above reference.)
-
if (UNIX AND _JAVA_TARGET_OUTPUT_LINK)
if (_JAVA_TARGET_OUTPUT_NAME)
find_program(LN_EXECUTABLE
diff --git a/config/cmake/scripts/CTestScript.cmake b/config/cmake/scripts/CTestScript.cmake
index 8a08caa..322f0e5 100755
--- a/config/cmake/scripts/CTestScript.cmake
+++ b/config/cmake/scripts/CTestScript.cmake
@@ -257,12 +257,18 @@ message(STATUS "Dashboard script configuration:\n${vars}\n")
endif()
configure_file(${CTEST_SOURCE_DIRECTORY}/config/cmake/CTestCustom.cmake ${CTEST_BINARY_DIRECTORY}/CTestCustom.cmake)
ctest_read_custom_files ("${CTEST_BINARY_DIRECTORY}")
- ctest_configure (BUILD "${CTEST_BINARY_DIRECTORY}")
+ ctest_configure (BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)
+ if(${res} LESS 0 OR ${res} GREATER 0)
+ message(FATAL_ERROR "Failed configure: ${res}\n")
+ endif()
if(LOCAL_SUBMIT)
ctest_submit (PARTS Update Configure Notes)
endif()
- ctest_build (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND)
+ ctest_build (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND RETURN_VALUE res NUMBER_ERRORS errval)
+ if(${res} LESS 0 OR ${res} GREATER 0 OR ${errval} GREATER 0)
+ message(FATAL_ERROR "Failed build: ${res} with Errors=${errval}\n")
+ endif()
if(LOCAL_SUBMIT)
ctest_submit (PARTS Build)
endif()
@@ -273,7 +279,7 @@ message(STATUS "Dashboard script configuration:\n${vars}\n")
if(LOCAL_SUBMIT)
ctest_submit (PARTS Test)
endif()
- if(res GREATER 0)
+ if(${res} LESS 0 OR ${res} GREATER 0)
message(FATAL_ERROR "Failed tests: ${res}\n")
endif()
else()
diff --git a/config/cmake_ext_mod/HDFLibMacros.cmake b/config/cmake_ext_mod/HDFLibMacros.cmake
index 3f91405..2145a3d 100644
--- a/config/cmake_ext_mod/HDFLibMacros.cmake
+++ b/config/cmake_ext_mod/HDFLibMacros.cmake
@@ -22,6 +22,7 @@ macro (EXTERNAL_JPEG_LIBRARY compress_type jpeg_pic)
elseif (${compress_type} MATCHES "GIT")
EXTERNALPROJECT_ADD (JPEG
GIT_REPOSITORY ${JPEG_URL}
+ GIT_TAG ${JPEG_BRANCH}
INSTALL_COMMAND ""
CMAKE_ARGS
-DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
@@ -82,9 +83,9 @@ macro (PACKAGE_JPEG_LIBRARY compress_type)
COMMENT "Copying ${JPEG_INCLUDE_DIR_GEN}/jconfig.h to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/"
)
set (EXTERNAL_HEADER_LIST ${EXTERNAL_HEADER_LIST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/jconfig.h)
- if (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
+ if (${compress_type} MATCHES "GIT" OR ${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
add_dependencies (JPEG-GenHeader-Copy JPEG)
- endif (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
+ endif (${compress_type} MATCHES "GIT" OR ${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
endmacro (PACKAGE_JPEG_LIBRARY)
#-------------------------------------------------------------------------------
@@ -109,7 +110,7 @@ macro (EXTERNAL_SZIP_LIBRARY compress_type encoding)
elseif (${compress_type} MATCHES "GIT")
EXTERNALPROJECT_ADD (SZIP
GIT_REPOSITORY ${SZIP_URL}
- # [SVN_REVISION rev]
+ GIT_TAG ${SZIP_BRANCH}
INSTALL_COMMAND ""
CMAKE_ARGS
-DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
@@ -172,9 +173,9 @@ macro (PACKAGE_SZIP_LIBRARY compress_type)
COMMENT "Copying ${SZIP_INCLUDE_DIR_GEN}/SZconfig.h to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/"
)
set (EXTERNAL_HEADER_LIST ${EXTERNAL_HEADER_LIST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/SZconfig.h)
- if (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
+ if (${compress_type} MATCHES "GIT" OR ${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
add_dependencies (SZIP-GenHeader-Copy SZIP)
- endif (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
+ endif (${compress_type} MATCHES "GIT" OR ${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
endmacro (PACKAGE_SZIP_LIBRARY)
#-------------------------------------------------------------------------------
@@ -198,7 +199,7 @@ macro (EXTERNAL_ZLIB_LIBRARY compress_type)
elseif (${compress_type} MATCHES "GIT")
EXTERNALPROJECT_ADD (ZLIB
GIT_REPOSITORY ${ZLIB_URL}
- # [SVN_REVISION rev]
+ GIT_TAG ${ZLIB_BRANCH}
INSTALL_COMMAND ""
CMAKE_ARGS
-DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
@@ -264,7 +265,7 @@ macro (PACKAGE_ZLIB_LIBRARY compress_type)
COMMENT "Copying ${ZLIB_INCLUDE_DIR_GEN}/zconf.h to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/"
)
set (EXTERNAL_HEADER_LIST ${EXTERNAL_HEADER_LIST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/zconf.h)
- if (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
+ if (${compress_type} MATCHES "GIT" OR ${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
add_dependencies (ZLIB-GenHeader-Copy ZLIB)
- endif (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
+ endif (${compress_type} MATCHES "GIT" OR ${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
endmacro (PACKAGE_ZLIB_LIBRARY)
diff --git a/config/cmake_ext_mod/runTest.cmake b/config/cmake_ext_mod/runTest.cmake
index 21a65e6..8b47693 100644
--- a/config/cmake_ext_mod/runTest.cmake
+++ b/config/cmake_ext_mod/runTest.cmake
@@ -25,6 +25,14 @@ if (NOT TEST_SKIP_COMPARE AND NOT TEST_REFERENCE)
message (FATAL_ERROR "Require TEST_REFERENCE to be defined")
endif (NOT TEST_SKIP_COMPARE AND NOT TEST_REFERENCE)
+if (EXISTS ${TEST_FOLDER}/${TEST_OUTPUT})
+ file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT})
+endif (EXISTS ${TEST_FOLDER}/${TEST_OUTPUT})
+
+if (EXISTS ${TEST_FOLDER}/${TEST_OUTPUT}.err)
+ file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}.err)
+endif (EXISTS ${TEST_FOLDER}/${TEST_OUTPUT}.err)
+
# if there is not an error reference file add the error output to the stdout file
if (NOT TEST_ERRREF)
set (ERROR_APPEND 1)
diff --git a/config/conclude_fc.am b/config/conclude_fc.am
index d9e7b56..6402412 100644
--- a/config/conclude_fc.am
+++ b/config/conclude_fc.am
@@ -26,8 +26,8 @@ LTPPFCCOMPILE = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=co
# Treat all .f90 and .F90 files as preprocessed Fortran.
.f90.o:
- $(PPFCCOMPILE) -c -o $@ $(FCFLAGS) $<
+ $(PPFCCOMPILE) -c -o $@ $<
.F90.o:
- $(PPFCCOMPILE) -c -o $@ $(FCFLAGS) $<
+ $(PPFCCOMPILE) -c -o $@ $<
include $(top_srcdir)/config/conclude.am
diff --git a/configure.ac b/configure.ac
index 59d1bef..31b5e14 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,7 +26,7 @@ AC_PREREQ([2.69])
## NOTE: Do not forget to change the version number here when we do a
## release!!!
##
-AC_INIT([HDF5], [1.9.234], [help@hdfgroup.org])
+AC_INIT([HDF5], [1.9.235], [help@hdfgroup.org])
AC_CONFIG_SRCDIR([src/H5.c])
AC_CONFIG_HEADERS([src/H5config.h])
@@ -551,6 +551,7 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
AC_SUBST([PAC_FC_ALL_REAL_KINDS])
AC_SUBST([PAC_FC_MAX_REAL_PRECISION])
+ AC_SUBST([PAC_FORTRAN_NUM_INTEGER_KINDS])
AC_SUBST([PAC_FC_ALL_INTEGER_KINDS])
AC_SUBST([PAC_FC_ALL_REAL_KINDS_SIZEOF])
AC_SUBST([PAC_FC_ALL_INTEGER_KINDS_SIZEOF])
diff --git a/fortran/src/H5Pff.F90 b/fortran/src/H5Pff.F90
index 532ecc6..6ba5aeb 100644
--- a/fortran/src/H5Pff.F90
+++ b/fortran/src/H5Pff.F90
@@ -6397,18 +6397,18 @@ SUBROUTINE h5pset_attr_phase_change_f(ocpl_id, max_compact, min_dense, hdferr)
!! SUBROUTINE h5pget_fill_value_f(prp_id, type_id, fillvalue, hdferr)
!! INTEGER(HID_T), INTENT(IN) :: prp_id
!! INTEGER(HID_T), INTENT(IN) :: type_id
-!! TYPE(C_PTR) , INTENT(OUT) :: fillvalue
+!! TYPE(C_PTR) :: fillvalue
!! INTEGER , INTENT(OUT) :: hdferr
!*****
SUBROUTINE h5pget_fill_value_ptr(prp_id, type_id, fillvalue, hdferr)
IMPLICIT NONE
- INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
- INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
- ! of fillvalue datatype
- ! (in memory)
- TYPE(C_PTR), INTENT(OUT) :: fillvalue ! Fillvalue
- INTEGER, INTENT(OUT) :: hdferr ! Error code
+ INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+ INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
+ ! of fillvalue datatype
+ ! (in memory)
+ TYPE(C_PTR) :: fillvalue ! Fillvalue
+ INTEGER , INTENT(OUT) :: hdferr ! Error code
hdferr = h5pget_fill_value_c(prp_id, type_id, fillvalue)
diff --git a/fortran/src/H5_f.c b/fortran/src/H5_f.c
index d7b952d..f9fe927 100644
--- a/fortran/src/H5_f.c
+++ b/fortran/src/H5_f.c
@@ -23,6 +23,10 @@
#include "H5f90.h"
#include "H5fort_type_defines.h"
+
+int IntKinds_SizeOf[] = H5_FORTRAN_INTEGER_KINDS_SIZEOF;
+
+
/****if* H5_f/h5init_types_c
* NAME
* h5init_types_c
@@ -30,16 +34,16 @@
* Initialize predefined datatypes in Fortran
* INPUTS
* types - array with the predefined Native Fortran
- * type, its element and length must be the
- * same as the types array defined in the
+ * type, its element and length must be the
+ * same as the types array defined in the
* H5f90global.F90
* floatingtypes - array with the predefined Floating Fortran
- * type, its element and length must be the
- * same as the floatingtypes array defined in the
- * H5f90global.F90
+ * type, its element and length must be the
+ * same as the floatingtypes array defined in the
+ * H5f90global.F90
* integertypes - array with the predefined Integer Fortran
- * type, its element and length must be the
- * same as the integertypes array defined in the
+ * type, its element and length must be the
+ * same as the integertypes array defined in the
* H5f90global.F90
* RETURNS
* 0 on success, -1 on failure
@@ -55,173 +59,116 @@ h5init_types_c( hid_t_f * types, hid_t_f * floatingtypes, hid_t_f * integertypes
int ret_value = -1;
hid_t c_type_id;
size_t tmp_val;
+ int i;
+
+ /* Fortran INTEGER may not be the same as C; do all checking to find
+ an appropriate size
+ */
+
+ /*
+ * Find the HDF5 type of the Fortran Integer KIND.
+ */
+
+ /* Initialized INTEGER KIND types to default to native integer */
+ for(i=0;i<5;i++) {
+ if ((types[i] = (hid_t_f)H5Tcopy (H5T_NATIVE_INT)) < 0) return ret_value;
+ }
+
+ for(i=0;i<H5_FORTRAN_NUM_INTEGER_KINDS;i++) {
+ if ( IntKinds_SizeOf[i] == sizeof(char)) {
+ if ((types[i] = (hid_t_f)H5Tcopy(H5T_NATIVE_CHAR)) < 0) return ret_value;
+ } /*end if */
+ else if ( IntKinds_SizeOf[i] == sizeof(short)) {
+ if ((types[i] = (hid_t_f)H5Tcopy(H5T_NATIVE_SHORT)) < 0) return ret_value;
+ } /*end if */
+ else if ( IntKinds_SizeOf[i] == sizeof(int)) {
+ if ((types[i] = (hid_t_f)H5Tcopy(H5T_NATIVE_INT)) < 0) return ret_value;
+ } /*end if */
+ else if ( IntKinds_SizeOf[i] == sizeof(long long)) {
+ if ((types[i] = (hid_t_f)H5Tcopy(H5T_NATIVE_LLONG)) < 0) return ret_value;
+ } /*end if */
+ else {
+ if ((types[i] = (hid_t_f)H5Tcopy (H5T_NATIVE_INT)) < 0) return ret_value;
+ if ( H5Tset_precision (types[i], 128) < 0) return ret_value;
+ } /*end else */
+
+ }
-/* Fortran INTEGER may not be the same as C; do all checking to find
- an appropriate size
-*/
if (sizeof(int_f) == sizeof(int)) {
- if ((types[0] = (hid_t_f)H5Tcopy(H5T_NATIVE_INT)) < 0) return ret_value;
+ if ((types[5] = (hid_t_f)H5Tcopy(H5T_NATIVE_INT)) < 0) return ret_value;
} /*end if */
else if (sizeof(int_f) == sizeof(long)) {
- if ((types[0] = (hid_t_f)H5Tcopy(H5T_NATIVE_LONG)) < 0) return ret_value;
+ if ((types[5] = (hid_t_f)H5Tcopy(H5T_NATIVE_LONG)) < 0) return ret_value;
} /*end if */
else
- if (sizeof(int_f) == sizeof(long long)) {
- if ((types[0] = (hid_t_f)H5Tcopy(H5T_NATIVE_LLONG)) < 0) return ret_value;
+ if (sizeof(int_f) == sizeof(long long)) {
+ if ((types[5] = (hid_t_f)H5Tcopy(H5T_NATIVE_LLONG)) < 0) return ret_value;
} /*end else */
-
+
/* Find appropriate size to store Fortran REAL */
if(sizeof(real_f)==sizeof(float)) {
- if ((types[1] = (hid_t_f)H5Tcopy(H5T_NATIVE_FLOAT)) < 0) return ret_value;
+ if ((types[6] = (hid_t_f)H5Tcopy(H5T_NATIVE_FLOAT)) < 0) return ret_value;
} /* end if */
else if(sizeof(real_f)==sizeof(double)){
- if ((types[1] = (hid_t_f)H5Tcopy(H5T_NATIVE_DOUBLE)) < 0) return ret_value;
+ if ((types[6] = (hid_t_f)H5Tcopy(H5T_NATIVE_DOUBLE)) < 0) return ret_value;
} /* end if */
#if H5_SIZEOF_LONG_DOUBLE!=0
else if (sizeof(real_f) == sizeof(long double)) {
- if ((types[1] = (hid_t_f)H5Tcopy(H5T_NATIVE_LDOUBLE)) < 0) return ret_value;
+ if ((types[6] = (hid_t_f)H5Tcopy(H5T_NATIVE_LDOUBLE)) < 0) return ret_value;
} /* end else */
#endif
/* Find appropriate size to store Fortran DOUBLE */
if(sizeof(double_f)==sizeof(double)) {
- if ((types[2] = (hid_t_f)H5Tcopy(H5T_NATIVE_DOUBLE)) < 0) return ret_value;
+ if ((types[7] = (hid_t_f)H5Tcopy(H5T_NATIVE_DOUBLE)) < 0) return ret_value;
}/*end if */
#if H5_SIZEOF_LONG_DOUBLE!=0
else if(sizeof(double_f)==sizeof(long double)) {
- if ((types[2] = (hid_t_f)H5Tcopy(H5T_NATIVE_LDOUBLE)) < 0) return ret_value;
+ if ((types[7] = (hid_t_f)H5Tcopy(H5T_NATIVE_LDOUBLE)) < 0) return ret_value;
}/*end else */
#endif
#ifdef H5_HAVE_FLOAT128
else if(sizeof(double_f)==sizeof(__float128)) {
- if ((types[2] = H5Tcopy (H5T_NATIVE_FLOAT)) < 0) return ret_value;
- if ( H5Tset_precision (types[2], 128) < 0) return ret_value;
+ if ((types[7] = H5Tcopy (H5T_NATIVE_FLOAT)) < 0) return ret_value;
+ if ( H5Tset_precision (types[7], 128) < 0) return ret_value;
}/*end else */
#endif
-/*
- if ((types[3] = H5Tcopy(H5T_NATIVE_UINT8)) < 0) return ret_value;
-*/
if ((c_type_id = H5Tcopy(H5T_FORTRAN_S1)) < 0) return ret_value;
tmp_val = 1;
if(H5Tset_size(c_type_id, tmp_val) < 0) return ret_value;
if(H5Tset_strpad(c_type_id, H5T_STR_SPACEPAD) < 0) return ret_value;
- types[3] = (hid_t_f)c_type_id;
+ types[8] = (hid_t_f)c_type_id;
-/*
- if ((types[3] = H5Tcopy(H5T_C_S1)) < 0) return ret_value;
- if(H5Tset_strpad(types[3],H5T_STR_NULLTERM) < 0) return ret_value;
- if(H5Tset_size(types[3],1) < 0) return ret_value;
-*/
-
-
-/* if ((types[3] = H5Tcopy(H5T_STD_I8BE)) < 0) return ret_value;
-*/
- if ((types[4] = (hid_t_f)H5Tcopy(H5T_STD_REF_OBJ)) < 0) return ret_value;
- if ((types[5] = (hid_t_f)H5Tcopy(H5T_STD_REF_DSETREG)) < 0) return ret_value;
- /*
- * FIND H5T_NATIVE_INTEGER_1
- */
- if (sizeof(int_1_f) == sizeof(char)) {
- if ((types[6] = (hid_t_f)H5Tcopy(H5T_NATIVE_CHAR)) < 0) return ret_value;
- } /*end if */
- else if (sizeof(int_1_f) == sizeof(short)) {
- if ((types[6] = (hid_t_f)H5Tcopy(H5T_NATIVE_SHORT)) < 0) return ret_value;
- } /*end if */
- else if (sizeof(int_1_f) == sizeof(int)) {
- if ((types[6] = (hid_t_f)H5Tcopy(H5T_NATIVE_INT)) < 0) return ret_value;
- } /*end if */
- else if (sizeof(int_1_f) == sizeof(long long)) {
- if ((types[6] = (hid_t_f)H5Tcopy(H5T_NATIVE_LLONG)) < 0) return ret_value;
- } /*end if */
- else {
- if ((types[6] = H5Tcopy (H5T_NATIVE_INT)) < 0) return ret_value;
- if ( H5Tset_precision (types[6], 128) < 0) return ret_value;
- } /*end else */
- /*
- * FIND H5T_NATIVE_INTEGER_2
- */
- if (sizeof(int_2_f) == sizeof(char)) {
- if ((types[7] = (hid_t_f)H5Tcopy(H5T_NATIVE_CHAR)) < 0) return ret_value;
- } /*end if */
- else if (sizeof(int_2_f) == sizeof(short)) {
- if ((types[7] = (hid_t_f)H5Tcopy(H5T_NATIVE_SHORT)) < 0) return ret_value;
- } /*end if */
- else if (sizeof(int_2_f) == sizeof(int)) {
- if ((types[7] = (hid_t_f)H5Tcopy(H5T_NATIVE_INT)) < 0) return ret_value;
- } /*end if */
- else if (sizeof(int_2_f) == sizeof(long long)) {
- if ((types[7] = (hid_t_f)H5Tcopy(H5T_NATIVE_LLONG)) < 0) return ret_value;
- } /*end else */
- else {
- if ((types[7] = H5Tcopy (H5T_NATIVE_INT)) < 0) return ret_value;
- if ( H5Tset_precision (types[7], 128) < 0) return ret_value;
- } /*end else */
- /*
- * FIND H5T_NATIVE_INTEGER_4
- */
- if (sizeof(int_4_f) == sizeof(char)) {
- if ((types[8] = (hid_t_f)H5Tcopy(H5T_NATIVE_CHAR)) < 0) return ret_value;
- } /*end if */
- else if (sizeof(int_4_f) == sizeof(short)) {
- if ((types[8] = (hid_t_f)H5Tcopy(H5T_NATIVE_SHORT)) < 0) return ret_value;
- } /*end if */
- else if (sizeof(int_4_f) == sizeof(int)) {
- if ((types[8] = (hid_t_f)H5Tcopy(H5T_NATIVE_INT)) < 0) return ret_value;
- } /*end if */
- else if (sizeof(int_4_f) == sizeof(long long)) {
- if ((types[8] = (hid_t_f)H5Tcopy(H5T_NATIVE_LLONG)) < 0) return ret_value;
- } /*end else */
- else {
- if ((types[8] = H5Tcopy (H5T_NATIVE_INT)) < 0) return ret_value;
- if ( H5Tset_precision (types[8], 128) < 0) return ret_value;
- } /*end else */
- /*
- * FIND H5T_NATIVE_INTEGER_8
- */
- if (sizeof(int_8_f) == sizeof(char)) {
- if ((types[9] = (hid_t_f)H5Tcopy(H5T_NATIVE_CHAR)) < 0) return ret_value;
- } /*end if */
- else if (sizeof(int_8_f) == sizeof(short)) {
- if ((types[9] = (hid_t_f)H5Tcopy(H5T_NATIVE_SHORT)) < 0) return ret_value;
- } /*end if */
- else if (sizeof(int_8_f) == sizeof(int)) {
- if ((types[9] = (hid_t_f)H5Tcopy(H5T_NATIVE_INT)) < 0) return ret_value;
- } /*end if */
- else if (sizeof(int_8_f) == sizeof(long long)) {
- if ((types[9] = (hid_t_f)H5Tcopy(H5T_NATIVE_LLONG)) < 0) return ret_value;
- } /*end else */
- else {
- if ((types[9] = H5Tcopy (H5T_NATIVE_INT)) < 0) return ret_value;
- if ( H5Tset_precision (types[9], 128) < 0) return ret_value;
- } /*end else */
+ if ((types[9] = (hid_t_f)H5Tcopy(H5T_STD_REF_OBJ)) < 0) return ret_value;
+ if ((types[10] = (hid_t_f)H5Tcopy(H5T_STD_REF_DSETREG)) < 0) return ret_value;
/*
* FIND H5T_NATIVE_REAL_C_FLOAT
*/
if (sizeof(real_C_FLOAT_f) == sizeof(float)) {
- if ((types[10] = (hid_t_f)H5Tcopy(H5T_NATIVE_FLOAT)) < 0) return ret_value;
+ if ((types[11] = (hid_t_f)H5Tcopy(H5T_NATIVE_FLOAT)) < 0) return ret_value;
} /*end if */
else if (sizeof(real_C_FLOAT_f) == sizeof(double)) {
- if ((types[10] = (hid_t_f)H5Tcopy(H5T_NATIVE_DOUBLE)) < 0) return ret_value;
+ if ((types[11] = (hid_t_f)H5Tcopy(H5T_NATIVE_DOUBLE)) < 0) return ret_value;
} /*end if */
#if H5_SIZEOF_LONG_DOUBLE!=0
else if (sizeof(real_C_FLOAT_f) == sizeof(long double)) {
- if ((types[10] = (hid_t_f)H5Tcopy(H5T_NATIVE_LDOUBLE)) < 0) return ret_value;
+ if ((types[11] = (hid_t_f)H5Tcopy(H5T_NATIVE_LDOUBLE)) < 0) return ret_value;
} /*end else */
#endif
/*
* FIND H5T_NATIVE_REAL_C_DOUBLE
*/
if (sizeof(real_C_DOUBLE_f) == sizeof(float)) {
- if ((types[11] = (hid_t_f)H5Tcopy(H5T_NATIVE_FLOAT)) < 0) return ret_value;
+ if ((types[12] = (hid_t_f)H5Tcopy(H5T_NATIVE_FLOAT)) < 0) return ret_value;
} /*end if */
else if (sizeof(real_C_DOUBLE_f) == sizeof(double)) {
- if ((types[11] = (hid_t_f)H5Tcopy(H5T_NATIVE_DOUBLE)) < 0) return ret_value;
+ if ((types[12] = (hid_t_f)H5Tcopy(H5T_NATIVE_DOUBLE)) < 0) return ret_value;
} /*end if */
#if H5_SIZEOF_LONG_DOUBLE!=0
else if (sizeof(real_C_DOUBLE_f) == sizeof(long double)) {
- if ((types[11] = (hid_t_f)H5Tcopy(H5T_NATIVE_LDOUBLE)) < 0) return ret_value;
+ if ((types[12] = (hid_t_f)H5Tcopy(H5T_NATIVE_LDOUBLE)) < 0) return ret_value;
} /*end else */
#endif
/*
@@ -229,67 +176,44 @@ h5init_types_c( hid_t_f * types, hid_t_f * floatingtypes, hid_t_f * integertypes
*/
#if H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE!=0
if (sizeof(real_C_LONG_DOUBLE_f) == sizeof(float)) {
- if ((types[12] = (hid_t_f)H5Tcopy(H5T_NATIVE_FLOAT)) < 0) return ret_value;
+ if ((types[13] = (hid_t_f)H5Tcopy(H5T_NATIVE_FLOAT)) < 0) return ret_value;
} /*end if */
else if (sizeof(real_C_LONG_DOUBLE_f) == sizeof(double)) {
- if ((types[12] = (hid_t_f)H5Tcopy(H5T_NATIVE_DOUBLE)) < 0) return ret_value;
+ if ((types[13] = (hid_t_f)H5Tcopy(H5T_NATIVE_DOUBLE)) < 0) return ret_value;
} /*end if */
# if H5_FORTRAN_HAVE_C_LONG_DOUBLE!=0
else if (sizeof(real_C_LONG_DOUBLE_f) == sizeof(long double)) {
if ( H5_PAC_C_MAX_REAL_PRECISION >= H5_PAC_FC_MAX_REAL_PRECISION) {
- if ((types[12] = (hid_t_f)H5Tcopy(H5T_NATIVE_LDOUBLE)) < 0) return ret_value;
+ if ((types[13] = (hid_t_f)H5Tcopy(H5T_NATIVE_LDOUBLE)) < 0) return ret_value;
}
else {
- if ((types[12] = H5Tcopy (H5T_NATIVE_FLOAT)) < 0) return ret_value;
- if ( H5Tset_precision (types[12], 128) < 0) return ret_value;
+ if ((types[13] = H5Tcopy (H5T_NATIVE_FLOAT)) < 0) return ret_value;
+ if ( H5Tset_precision (types[13], 128) < 0) return ret_value;
}
}
# else
- if ((types[12] = H5Tcopy (H5T_NATIVE_FLOAT)) < 0) return ret_value;
- if ( H5Tset_precision (types[12], 64) < 0) return ret_value;
+ if ((types[13] = H5Tcopy (H5T_NATIVE_FLOAT)) < 0) return ret_value;
+ if ( H5Tset_precision (types[13], 64) < 0) return ret_value;
# endif
#else
- if ((types[12] = H5Tcopy(H5T_NATIVE_DOUBLE)) < 0) return ret_value;
+ if ((types[13] = H5Tcopy(H5T_NATIVE_DOUBLE)) < 0) return ret_value;
#endif
/*
* FIND H5T_NATIVE_B_8
*/
- if ((types[13] = (hid_t_f)H5Tcopy(H5T_NATIVE_B8)) < 0) return ret_value;
- if ((types[14] = (hid_t_f)H5Tcopy(H5T_NATIVE_B16)) < 0) return ret_value;
- if ((types[15] = (hid_t_f)H5Tcopy(H5T_NATIVE_B32)) < 0) return ret_value;
- if ((types[16] = (hid_t_f)H5Tcopy(H5T_NATIVE_B64)) < 0) return ret_value;
-
-#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
- /*
- * FIND H5T_NATIVE_INTEGER_16
- */
- if (sizeof(int_16_f) == sizeof(char)) {
- if ((types[17] = (hid_t_f)H5Tcopy(H5T_NATIVE_CHAR)) < 0) return ret_value;
- } /*end if */
- else if (sizeof(int_16_f) == sizeof(short)) {
- if ((types[17] = (hid_t_f)H5Tcopy(H5T_NATIVE_SHORT)) < 0) return ret_value;
- } /*end if */
- else if (sizeof(int_16_f) == sizeof(int)) {
- if ((types[17] = (hid_t_f)H5Tcopy(H5T_NATIVE_INT)) < 0) return ret_value;
- } /*end if */
- else if (sizeof(int_16_f) == sizeof(long long)) {
- if ((types[17] = (hid_t_f)H5Tcopy(H5T_NATIVE_LLONG)) < 0) return ret_value;
- } /*end else */
- else {
- if ((types[17] = H5Tcopy (H5T_NATIVE_INT)) < 0) return ret_value;
- if ( H5Tset_precision (types[17], 128) < 0) return ret_value;
- } /*end else */
-#else
- if ((types[17] = H5Tcopy (H5T_NATIVE_INT)) < 0) return ret_value;
- if ( H5Tset_precision (types[17], 128) < 0) return ret_value;
-#endif
+ if ((types[14] = (hid_t_f)H5Tcopy(H5T_NATIVE_B8)) < 0) return ret_value;
+ if ((types[15] = (hid_t_f)H5Tcopy(H5T_NATIVE_B16)) < 0) return ret_value;
+ if ((types[16] = (hid_t_f)H5Tcopy(H5T_NATIVE_B32)) < 0) return ret_value;
+ if ((types[17] = (hid_t_f)H5Tcopy(H5T_NATIVE_B64)) < 0) return ret_value;
- /*
+ /*
* FIND H5T_NATIVE_FLOAT_128
*/
if ((types[18] = H5Tcopy (H5T_NATIVE_FLOAT)) < 0) return ret_value;
if ( H5Tset_precision (types[18], 128) < 0) return ret_value;
+ /*--------------------------------------------------------------------------------------*/
+
if ((floatingtypes[0] = (hid_t_f)H5Tcopy(H5T_IEEE_F32BE)) < 0) return ret_value;
if ((floatingtypes[1] = (hid_t_f)H5Tcopy(H5T_IEEE_F32LE)) < 0) return ret_value;
if ((floatingtypes[2] = (hid_t_f)H5Tcopy(H5T_IEEE_F64BE)) < 0) return ret_value;
diff --git a/fortran/src/H5_ff.F90 b/fortran/src/H5_ff.F90
index 169864f..228e148 100644
--- a/fortran/src/H5_ff.F90
+++ b/fortran/src/H5_ff.F90
@@ -379,27 +379,23 @@ CONTAINS
IMPLICIT NONE
INTEGER, INTENT(IN) :: ikind
INTEGER, INTENT(IN) :: flag
-#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
- INTEGER :: Fortran_INTEGER_16
- Fortran_INTEGER_16=SELECTED_INT_KIND(36) !should map to INTEGER*16 on most modern processors
-#endif
-
-
+ INTEGER :: i
!*****
+
+!#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
+! ! (1) The array index assumes INTEGER*16 the last integer in the series, and
+! ! (2) it should map to INTEGER*16 on most modern processors
+! H5T_NATIVE_INTEGER_KIND(H5_FORTRAN_NUM_INTEGER_KINDS)=SELECTED_INT_KIND(36)
+!#endif
+
+ h5_type = -1
IF(flag.EQ.H5_INTEGER_KIND)THEN
- IF(ikind.EQ.Fortran_INTEGER_1)THEN
- h5_type = H5T_NATIVE_INTEGER_1
- ELSE IF(ikind.EQ.Fortran_INTEGER_2)THEN
- h5_type = H5T_NATIVE_INTEGER_2
- ELSE IF(ikind.EQ.Fortran_INTEGER_4)THEN
- h5_type = H5T_NATIVE_INTEGER_4
- ELSE IF(ikind.EQ.Fortran_INTEGER_8)THEN
- h5_type = H5T_NATIVE_INTEGER_8
-#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
- ELSE IF(ikind.EQ.Fortran_INTEGER_16)THEN
- h5_type = H5T_NATIVE_INTEGER_16
-#endif
- ENDIF
+ do_kind: DO i = 1, H5_FORTRAN_NUM_INTEGER_KINDS
+ IF(ikind.EQ.Fortran_INTEGER_AVAIL_KINDS(i))THEN
+ h5_type = H5T_NATIVE_INTEGER_KIND(i)
+ EXIT do_kind
+ ENDIF
+ END DO do_kind
ELSE IF(flag.EQ.H5_REAL_KIND)THEN
IF(ikind.EQ.KIND(1.0_C_FLOAT))THEN
h5_type = H5T_NATIVE_REAL_C_FLOAT
@@ -409,14 +405,11 @@ CONTAINS
ELSE IF(ikind.EQ.KIND(1.0_C_LONG_DOUBLE))THEN
h5_type = H5T_NATIVE_REAL_C_LONG_DOUBLE
#endif
-#if H5_PAC_FC_MAX_REAL_PRECISION > 28
+#if H5_PAC_FC_MAX_REAL_PRECISION > 28
#if H5_HAVE_FLOAT128 == 1
ELSE
h5_type = H5T_NATIVE_FLOAT_128
#endif
-#else
- ELSE
- h5_type = -1
#endif
ENDIF
ENDIF
diff --git a/fortran/src/H5f90global.F90 b/fortran/src/H5f90global.F90
index af0a000..b84f6c2 100644
--- a/fortran/src/H5f90global.F90
+++ b/fortran/src/H5f90global.F90
@@ -85,11 +85,7 @@ MODULE H5GLOBAL
! integer data types are added
INTEGER, PARAMETER :: INTEGER_TYPES_LEN = 27
- INTEGER(HID_T) :: H5T_NATIVE_INTEGER_1, &
- H5T_NATIVE_INTEGER_2, &
- H5T_NATIVE_INTEGER_4, &
- H5T_NATIVE_INTEGER_8, &
- H5T_NATIVE_REAL_C_FLOAT, &
+ INTEGER(HID_T) :: H5T_NATIVE_REAL_C_FLOAT, &
H5T_NATIVE_REAL_C_DOUBLE, &
H5T_NATIVE_REAL_C_LONG_DOUBLE, &
H5T_NATIVE_INTEGER, &
@@ -115,8 +111,11 @@ MODULE H5GLOBAL
H5T_STD_U16BE, &
H5T_STD_U16LE, &
H5T_STD_U32BE
-
- INTEGER(HID_T) :: H5T_NATIVE_INTEGER_16 ! NEED IFDEF -MSB-
+
+ INTEGER, PARAMETER :: NUM_NATIVE_INTEGER_KIND = 5
+ ! INTEGER*1, INTEGER*2, INTEGER*4, INTEGER*8, INTEGER*16
+ INTEGER(HID_T), DIMENSION(1:NUM_NATIVE_INTEGER_KIND) :: H5T_NATIVE_INTEGER_KIND
+
INTEGER(HID_T) :: H5T_NATIVE_FLOAT_128 ! NEED IFDEF -MSB-
! NOTE: Splitting the line since the Fortran 95 standard limits the number of
@@ -144,24 +143,24 @@ MODULE H5GLOBAL
INTEGER(HID_T), DIMENSION(PREDEF_TYPES_LEN) :: predef_types
- EQUIVALENCE (predef_types(1), H5T_NATIVE_INTEGER)
- EQUIVALENCE (predef_types(2), H5T_NATIVE_REAL)
- EQUIVALENCE (predef_types(3), H5T_NATIVE_DOUBLE)
- EQUIVALENCE (predef_types(4), H5T_NATIVE_CHARACTER)
- EQUIVALENCE (predef_types(5), H5T_STD_REF_OBJ)
- EQUIVALENCE (predef_types(6), H5T_STD_REF_DSETREG)
- EQUIVALENCE (predef_types(7), H5T_NATIVE_INTEGER_1)
- EQUIVALENCE (predef_types(8), H5T_NATIVE_INTEGER_2)
- EQUIVALENCE (predef_types(9), H5T_NATIVE_INTEGER_4)
- EQUIVALENCE (predef_types(10), H5T_NATIVE_INTEGER_8)
- EQUIVALENCE (predef_types(11), H5T_NATIVE_REAL_C_FLOAT)
- EQUIVALENCE (predef_types(12), H5T_NATIVE_REAL_C_DOUBLE)
- EQUIVALENCE (predef_types(13), H5T_NATIVE_REAL_C_LONG_DOUBLE)
- EQUIVALENCE (predef_types(14), H5T_NATIVE_B8 )
- EQUIVALENCE (predef_types(15), H5T_NATIVE_B16)
- EQUIVALENCE (predef_types(16), H5T_NATIVE_B32)
- EQUIVALENCE (predef_types(17), H5T_NATIVE_B64)
- EQUIVALENCE (predef_types(18), H5T_NATIVE_INTEGER_16) ! ADDED NEW TYPE -MSB-
+ EQUIVALENCE (predef_types(1), H5T_NATIVE_INTEGER_KIND(1))
+ EQUIVALENCE (predef_types(2), H5T_NATIVE_INTEGER_KIND(2))
+ EQUIVALENCE (predef_types(3), H5T_NATIVE_INTEGER_KIND(3))
+ EQUIVALENCE (predef_types(4), H5T_NATIVE_INTEGER_KIND(4))
+ EQUIVALENCE (predef_types(5), H5T_NATIVE_INTEGER_KIND(5))
+ EQUIVALENCE (predef_types(6), H5T_NATIVE_INTEGER)
+ EQUIVALENCE (predef_types(7), H5T_NATIVE_REAL)
+ EQUIVALENCE (predef_types(8), H5T_NATIVE_DOUBLE)
+ EQUIVALENCE (predef_types(9), H5T_NATIVE_CHARACTER)
+ EQUIVALENCE (predef_types(10), H5T_STD_REF_OBJ)
+ EQUIVALENCE (predef_types(11), H5T_STD_REF_DSETREG)
+ EQUIVALENCE (predef_types(12), H5T_NATIVE_REAL_C_FLOAT)
+ EQUIVALENCE (predef_types(13), H5T_NATIVE_REAL_C_DOUBLE)
+ EQUIVALENCE (predef_types(14), H5T_NATIVE_REAL_C_LONG_DOUBLE)
+ EQUIVALENCE (predef_types(15), H5T_NATIVE_B8 )
+ EQUIVALENCE (predef_types(16), H5T_NATIVE_B16)
+ EQUIVALENCE (predef_types(17), H5T_NATIVE_B32)
+ EQUIVALENCE (predef_types(18), H5T_NATIVE_B64)
EQUIVALENCE (predef_types(19), H5T_NATIVE_FLOAT_128) ! ADDED NEW TYPE -MSB-
INTEGER(HID_T), DIMENSION(FLOATING_TYPES_LEN) :: floating_types
diff --git a/fortran/src/H5fort_type_defines.h.in b/fortran/src/H5fort_type_defines.h.in
index 0e14e86..6feed4f 100644
--- a/fortran/src/H5fort_type_defines.h.in
+++ b/fortran/src/H5fort_type_defines.h.in
@@ -7,6 +7,7 @@
#define H5_FORTRAN_NATIVE_REAL_SIZEOF @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
#define H5_FORTRAN_NATIVE_DOUBLE_KIND @PAC_FORTRAN_NATIVE_DOUBLE_KIND@
#define H5_FORTRAN_NATIVE_DOUBLE_SIZEOF @PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF@
+#define H5_FORTRAN_NUM_INTEGER_KINDS @PAC_FORTRAN_NUM_INTEGER_KINDS@
#define H5_FORTRAN_INTEGER_KINDS @PAC_FC_ALL_INTEGER_KINDS@
#define H5_FORTRAN_INTEGER_KINDS_SIZEOF @PAC_FC_ALL_INTEGER_KINDS_SIZEOF@
#define H5_FORTRAN_REAL_KINDS @PAC_FC_ALL_REAL_KINDS@
diff --git a/fortran/src/H5match_types.c b/fortran/src/H5match_types.c
index 98128db..2337fb3 100644
--- a/fortran/src/H5match_types.c
+++ b/fortran/src/H5match_types.c
@@ -51,7 +51,8 @@ FILE * fort_header;
/* Prototypes for the write routines */
void writeTypedef(const char* c_typedef, const char* c_type, int size);
void writeTypedefDefault(const char* c_typedef, int size);
-void writeToFiles(const char* c_typedef, const char* fortran_type, const char* c_type, int size, int kind);
+void writeToFiles(const char* c_typedef, const char* fortran_type, const char* c_type, int kind);
+void writeToCFileOnly(const char* c_typedef, const char* fortran_type, const char* c_type, int size);
void writeToFilesChr(const char* c_typedef, const char* fortran_type, const char* c_type, int size, const char* kind);
static void
@@ -100,7 +101,7 @@ initFfile(void)
! access to either file, you may request a copy from help@hdfgroup.org. *\n\
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\
!\n!\n\
-! This file is automatically generated and contains HDF5 Fortran90 type definitions.\n!\n\
+! This file is automatically generated by H5match_types.c and contains HDF5 Fortran90 type definitions.\n!\n\
MODULE H5FORTRAN_TYPES\n\
USE ISO_C_BINDING\n\
!\n\
@@ -135,10 +136,10 @@ void writeTypedefDefault(const char* c_typedef, int size)
}
/* Create matching Fortran and C types by writing to both files */
-void writeToFiles(const char* c_typedef, const char* fortran_type, const char* c_type, int size, int kind)
+void writeToFiles(const char* c_typedef, const char* fortran_type, const char* c_type, int kind)
{
fprintf(fort_header, " INTEGER, PARAMETER :: %s = %u\n", fortran_type, kind);
- fprintf(c_header, "typedef c_%s_%d %s;\n", c_typedef, size, c_type);
+ fprintf(c_header, "typedef c_%s_%d %s;\n", c_typedef, kind, c_type);
}
void writeToFilesChr(const char* c_typedef, const char* fortran_type, const char* c_type, int size, const char* kind)
{
@@ -147,9 +148,7 @@ void writeToFilesChr(const char* c_typedef, const char* fortran_type, const char
}
int main(void)
{
- int FoundIntSize[10];
- int FoundIntSizeKind[10];
- int i, j,flag;
+ int i;
char chrA[32],chrB[32];
int IntKinds[] = H5_FORTRAN_INTEGER_KINDS;
@@ -158,7 +157,7 @@ int main(void)
int RealKinds_SizeOf[] = H5_FORTRAN_REAL_KINDS_SIZEOF;
char Real_C_TYPES[10][32];
- int H5_FORTRAN_NUM_INTEGER_KINDS;
+ int FORTRAN_NUM_INTEGER_KINDS=H5_FORTRAN_NUM_INTEGER_KINDS;
int H5_FORTRAN_NUM_REAL_KINDS;
int found_long_double = 0;
@@ -172,10 +171,13 @@ int main(void)
/* (a) define c_int_x */
- H5_FORTRAN_NUM_INTEGER_KINDS = (int)(sizeof(IntKinds)/sizeof(IntKinds[0]));
+ FORTRAN_NUM_INTEGER_KINDS = (int)(sizeof(IntKinds)/sizeof(IntKinds[0]));
H5_FORTRAN_NUM_REAL_KINDS = (int)(sizeof(RealKinds)/sizeof(RealKinds[0]));
- for(i=0;i< H5_FORTRAN_NUM_INTEGER_KINDS;i++) {
+ fprintf(fort_header," INTEGER, PARAMETER :: H5_FORTRAN_NUM_INTEGER_KINDS = %d\n", FORTRAN_NUM_INTEGER_KINDS);
+
+
+ for(i=0;i< FORTRAN_NUM_INTEGER_KINDS;i++) {
if(sizeof(long long) == IntKinds_SizeOf[i])
writeTypedef("int", "long long", IntKinds[i]);
else if(sizeof(long) == IntKinds[i])
@@ -256,122 +258,78 @@ int main(void)
fprintf(c_header, "\n");
/* haddr_t */
- for(i=0;i< H5_FORTRAN_NUM_INTEGER_KINDS;i++) {
+ for(i=0;i< FORTRAN_NUM_INTEGER_KINDS;i++) {
if(IntKinds_SizeOf[i] == H5_SIZEOF_HADDR_T) {
- writeToFiles("int","HADDR_T", "haddr_t_f", H5_SIZEOF_HADDR_T, IntKinds[i]);
+ writeToFiles("int","HADDR_T", "haddr_t_f", IntKinds[i]);
break;
}
- if(i == (H5_FORTRAN_NUM_INTEGER_KINDS-1) )
+ if(i == (FORTRAN_NUM_INTEGER_KINDS-1) )
/* Error: couldn't find a size for haddr_t */
return -1;
}
/* hsize_t */
- for(i=0;i< H5_FORTRAN_NUM_INTEGER_KINDS;i++) {
+ for(i=0;i< FORTRAN_NUM_INTEGER_KINDS;i++) {
if(IntKinds_SizeOf[i] == H5_SIZEOF_HSIZE_T) {
- writeToFiles("hsize_t","HSIZE_T", "hsize_t_f", H5_SIZEOF_HSIZE_T, IntKinds[i]);
+ writeToFiles("hsize_t","HSIZE_T", "hsize_t_f", IntKinds[i]);
break;
}
- if(i == (H5_FORTRAN_NUM_INTEGER_KINDS-1) )
+ if(i == (FORTRAN_NUM_INTEGER_KINDS-1) )
/* Error: couldn't find a size for hsize_t */
return -1;
}
/* hssize_t */
- for(i=0;i< H5_FORTRAN_NUM_INTEGER_KINDS;i++) {
+ for(i=0;i< FORTRAN_NUM_INTEGER_KINDS;i++) {
if(IntKinds_SizeOf[i] == H5_SIZEOF_HSSIZE_T) {
- writeToFiles("int","HSSIZE_T", "hssize_t_f", H5_SIZEOF_HSSIZE_T, IntKinds[i]);
+ writeToFiles("int","HSSIZE_T", "hssize_t_f", IntKinds[i]);
break;
}
- if(i == (H5_FORTRAN_NUM_INTEGER_KINDS-1) )
+ if(i == (FORTRAN_NUM_INTEGER_KINDS-1) )
/* Error: couldn't find a size for hssize_t */
return -1;
}
/* off_t */
- for(i=0;i< H5_FORTRAN_NUM_INTEGER_KINDS;i++) {
+ for(i=0;i< FORTRAN_NUM_INTEGER_KINDS;i++) {
if(IntKinds_SizeOf[i] == H5_SIZEOF_OFF_T) {
- writeToFiles("int","OFF_T", "off_t_f", H5_SIZEOF_OFF_T, IntKinds[i]);
+ writeToFiles("int","OFF_T", "off_t_f", IntKinds[i]);
break;
}
- if(i == (H5_FORTRAN_NUM_INTEGER_KINDS-1) )
+ if(i == (FORTRAN_NUM_INTEGER_KINDS-1) )
/* Error: couldn't find a size for off_t */
return -1;
}
/* size_t */
- for(i=0;i< H5_FORTRAN_NUM_INTEGER_KINDS;i++) {
+ for(i=0;i< FORTRAN_NUM_INTEGER_KINDS;i++) {
if(IntKinds_SizeOf[i] == H5_SIZEOF_SIZE_T) {
- writeToFiles("size_t","SIZE_T", "size_t_f", H5_SIZEOF_SIZE_T, IntKinds[i]);
+ writeToFiles("size_t","SIZE_T", "size_t_f", IntKinds[i]);
break;
}
- if(i == (H5_FORTRAN_NUM_INTEGER_KINDS-1) )
+ if(i == (FORTRAN_NUM_INTEGER_KINDS-1) )
/* Error: couldn't find a size for size_t */
return -1;
}
/* int */
- writeToFiles("int","Fortran_INTEGER", "int_f", H5_FORTRAN_NATIVE_INTEGER_SIZEOF, H5_FORTRAN_NATIVE_INTEGER_KIND);
+ writeToFiles("int","Fortran_INTEGER", "int_f", H5_FORTRAN_NATIVE_INTEGER_KIND);
/* int_1, int_2, int_4, int_8 */
-/* Defined different KINDs of integers: */
-/* if the integer kind is not available then we assign */
-/* it a value of the next larger one, but if the next */
-/* higher one is not available we assigned it the next lowest */
-
+/* Defined different KINDs of integers */
- FoundIntSize[0] = -1;
- FoundIntSize[1] = -1;
- FoundIntSize[2] = -1;
- FoundIntSize[3] = -1;
- FoundIntSize[4] = -1;
+ fprintf(fort_header," INTEGER, DIMENSION(1:%d), PARAMETER :: Fortran_INTEGER_AVAIL_KINDS = (/", FORTRAN_NUM_INTEGER_KINDS);
- for(i=0;i<H5_FORTRAN_NUM_INTEGER_KINDS;i++) {
- FoundIntSize[i] = (int)IntKinds[i];
- FoundIntSizeKind[i] = (int)IntKinds_SizeOf[i];
-/* writeToFiles("int",chrA, chrB, FoundIntSize[i], FoundIntSizeKind[i]); */
- }
-
- for(i=0;i<H5_FORTRAN_NUM_INTEGER_KINDS;i++) {
- if( FoundIntSize[i] > 0) /* Found the integer type */
- {
- sprintf(chrA, "Fortran_INTEGER_%d", FoundIntSize[i]);
- sprintf(chrB, "int_%d_f", FoundIntSize[i]);
- writeToFiles("int",chrA, chrB, FoundIntSize[i], FoundIntSizeKind[i]);
- }
- else /* Did not find the integer type */
- {
- flag = 0; /* flag indicating if found the next highest */
- for(j=i+1;j<4;j++) /* search for next highest */
- {
- if( FoundIntSize[j] > 0) /* Found the next highest */
- {
- sprintf(chrA, "Fortran_INTEGER_%d", (-1)*FoundIntSize[i]);
- sprintf(chrB, "int_%d_f", (-1)*FoundIntSize[i]);
- writeToFiles("int",chrA, chrB, FoundIntSize[j], FoundIntSizeKind[j]);
- flag = 1;
- break;
- }
- }
- if(flag == 0) /* No higher one found, so find next lowest */
- {
- for(j=2;j>-1;j--) /* Search for next lowest */
- {
- if( FoundIntSize[j] > 0) /* Found the next lowest */
- {
- sprintf(chrA, "Fortran_INTEGER_%d", (-1)*FoundIntSize[i]);
- sprintf(chrB, "int_%d_f", (-1)*FoundIntSize[i]);
- writeToFiles("int",chrA, chrB, FoundIntSize[j], FoundIntSizeKind[j]);
- flag = 1;
- break;
- }
- }
- }
- if(flag == 0) /* No higher or lower one found, indicating an error */
- return -1;
- }
+ for(i=0;i<FORTRAN_NUM_INTEGER_KINDS;i++) {
+ fprintf(fort_header,"%d",(int)IntKinds[i]);
+ if(i==FORTRAN_NUM_INTEGER_KINDS-1) {
+ fprintf(fort_header,"/)\n");
+ } else {
+ fprintf(fort_header,",");
}
+
+ }
/* real_4, real_8, real_16 */
@@ -384,27 +342,29 @@ int main(void)
if (RealKinds[i] > 0) {
sprintf(chrA, "Fortran_REAL_%s", Real_C_TYPES[i]);
sprintf(chrB, "real_%s_f", Real_C_TYPES[i]);
- writeToFiles("float",chrA, chrB, RealKinds[i], RealKinds_SizeOf[i]);
+ writeToFiles("float",chrA, chrB, RealKinds[i]);
}
}
/* hid_t */
- for(i=0;i< H5_FORTRAN_NUM_INTEGER_KINDS;i++) {
+ for(i=0;i< FORTRAN_NUM_INTEGER_KINDS;i++) {
if(IntKinds_SizeOf[i] == H5_SIZEOF_HID_T) {
- writeToFiles("int","HID_T", "hid_t_f", H5_SIZEOF_HID_T, IntKinds[i]);
+ writeToFiles("int","HID_T", "hid_t_f", IntKinds[i]);
break;
}
- if(i == (H5_FORTRAN_NUM_INTEGER_KINDS-1) )
+ if(i == (FORTRAN_NUM_INTEGER_KINDS-1) )
/* Error: couldn't find a size for hid_t */
return -1;
}
-
/* real_f */
- if(H5_FORTRAN_NATIVE_REAL_SIZEOF == sizeof(long double))
+#if H5_FORTRAN_HAVE_C_LONG_DOUBLE!=0
+ if(H5_FORTRAN_NATIVE_REAL_SIZEOF == sizeof(long double)) {
writeToFilesChr("float","Fortran_REAL", "real_f", H5_FORTRAN_NATIVE_REAL_KIND, "C_LONG_DOUBLE");
- else if(H5_FORTRAN_NATIVE_REAL_SIZEOF == sizeof(double))
+ } else
+#endif
+ if(H5_FORTRAN_NATIVE_REAL_SIZEOF == sizeof(double)) {
writeToFilesChr("float","Fortran_REAL", "real_f", H5_FORTRAN_NATIVE_REAL_KIND, "C_DOUBLE");
- else if(H5_FORTRAN_NATIVE_REAL_SIZEOF == sizeof(float))
+ } else if(H5_FORTRAN_NATIVE_REAL_SIZEOF == sizeof(float))
writeToFilesChr("float","Fortran_REAL", "real_f", H5_FORTRAN_NATIVE_REAL_KIND, "C_FLOAT");
else {
/* No exact match, choose the next highest */
@@ -422,20 +382,23 @@ int main(void)
}
/* double_f */
- if(H5_FORTRAN_NATIVE_DOUBLE_SIZEOF == sizeof(long double))
+#if H5_FORTRAN_HAVE_C_LONG_DOUBLE!=0
+ if(H5_FORTRAN_NATIVE_DOUBLE_SIZEOF == sizeof(long double)){
writeToFilesChr("float","Fortran_DOUBLE", "double_f", H5_FORTRAN_NATIVE_DOUBLE_KIND, "C_LONG_DOUBLE");
- else if(H5_FORTRAN_NATIVE_DOUBLE_SIZEOF == sizeof(double))
+ } else
+#endif
+ if(H5_FORTRAN_NATIVE_DOUBLE_SIZEOF == sizeof(double)) {
writeToFilesChr("float","Fortran_DOUBLE", "double_f", H5_FORTRAN_NATIVE_DOUBLE_KIND, "C_DOUBLE");
- else if(H5_FORTRAN_NATIVE_DOUBLE_SIZEOF == sizeof(float))
+ } else if(H5_FORTRAN_NATIVE_DOUBLE_SIZEOF == sizeof(float))
writeToFilesChr("float","Fortran_DOUBLE", "double_f", H5_FORTRAN_NATIVE_DOUBLE_KIND, "C_FLOAT");
#ifdef H5_HAVE_FLOAT128
/* Don't select a higher precision than Fortran can support */
else if(sizeof(__float128) == H5_FORTRAN_NATIVE_DOUBLE_SIZEOF && H5_PAC_FC_MAX_REAL_PRECISION > 28) {
- writeToFilesChr("float","Fortran_DOUBLE", "double_f", H5_FORTRAN_NATIVE_DOUBLE_KIND, "C_FLOAT128");
+ writeToFilesChr("float","Fortran_DOUBLE", "double_f", H5_FORTRAN_NATIVE_DOUBLE_KIND, "Fortran_REAL_C_FLOAT128");
}
#else
else if(sizeof(long double) == H5_FORTRAN_NATIVE_DOUBLE_SIZEOF && H5_PAC_FC_MAX_REAL_PRECISION > 28) {
- writeToFilesChr("float","Fortran_DOUBLE", "double_f", H5_FORTRAN_NATIVE_DOUBLE_KIND, "C_FLOAT128");
+ writeToFilesChr("float","Fortran_DOUBLE", "double_f", H5_FORTRAN_NATIVE_DOUBLE_KIND, "Fortran_REAL_C_FLOAT128");
}
#endif
else {
diff --git a/fortran/test/Makefile.am b/fortran/test/Makefile.am
index 60f9f53..3def26e 100644
--- a/fortran/test/Makefile.am
+++ b/fortran/test/Makefile.am
@@ -92,10 +92,10 @@ tf_gen.F90: H5_test_buildiface$(EXEEXT)
H5_test_buildiface_SOURCES = H5_test_buildiface.F90
-# The build of the H5_test_buildiface does depend on any libraries, so set it
+# The build of the H5_test_buildiface does not depend on any libraries, so set it
# to nothing.
-H5_test_buildiface_LDADD =
+H5_test_buildiface_LDADD =
# fflush2 depends on files created by fflush1
fflush2.chkexe_: fflush1.chkexe_
diff --git a/fortran/test/fortranlib_test_F03.F90 b/fortran/test/fortranlib_test_F03.F90
index 070cd73..5f5fd2d 100644
--- a/fortran/test/fortranlib_test_F03.F90
+++ b/fortran/test/fortranlib_test_F03.F90
@@ -131,7 +131,7 @@ PROGRAM fortranlibtest_F03
ret_total_error = 0
CALL test_array_bkg(ret_total_error)
- CALL write_test_status(ret_total_error, ' Testing Partial I/O of Array Fields in Compound Datatype FunctionalityT', total_error)
+ CALL write_test_status(ret_total_error, ' Testing Partial I/O of Array Fields in Compound Datatype Functionality', total_error)
ret_total_error = 0
CALL test_genprop_class_callback(ret_total_error)
diff --git a/fortran/test/tH5T_F03.F90 b/fortran/test/tH5T_F03.F90
index 6ddded4..c8be606 100644
--- a/fortran/test/tH5T_F03.F90
+++ b/fortran/test/tH5T_F03.F90
@@ -66,6 +66,7 @@ SUBROUTINE test_array_compound_atomic(total_error)
CHARACTER(LEN=10), PARAMETER :: FILENAME = "tarray1.h5"
TYPE s1_t
+ SEQUENCE
INTEGER :: i
REAL :: f
END TYPE s1_t
@@ -298,7 +299,8 @@ END SUBROUTINE test_array_compound_atomic
INTEGER, PARAMETER :: SPACE1_DIM1 = 4
CHARACTER(LEN=10), PARAMETER :: FILENAME = "tarray2.h5"
- TYPE st_t_struct ! Typedef for compound datatype
+ TYPE st_t_struct ! Typedef for compound datatype
+ SEQUENCE
INTEGER :: i
REAL, DIMENSION(1:ARRAY2_DIM1) :: f
CHARACTER(LEN=2), DIMENSION(1:ARRAY2_DIM1) :: c
@@ -1144,33 +1146,33 @@ END SUBROUTINE test_array_compound_atomic
!
! Read data back into an integer size that is larger then the original size used for
! writing the data
- f_ptr = C_LOC(data_out_i1)
+ f_ptr = C_LOC(data_out_i1(1))
CALL h5dread_f(dset_id1, h5kind_to_type(int_kind_1,H5_INTEGER_KIND), f_ptr, error)
CALL check("h5dread_f",error, total_error)
- f_ptr = C_LOC(data_out_i4)
+ f_ptr = C_LOC(data_out_i4(1))
CALL h5dread_f(dset_id4, h5kind_to_type(int_kind_4,H5_INTEGER_KIND), f_ptr, error)
CALL check("h5dread_f",error, total_error)
- f_ptr = C_LOC(data_out_i8)
+ f_ptr = C_LOC(data_out_i8(1))
CALL h5dread_f(dset_id8, h5kind_to_type(int_kind_8,H5_INTEGER_KIND), f_ptr, error)
CALL check("h5dread_f",error, total_error)
- f_ptr = C_LOC(data_out_i16)
+ f_ptr = C_LOC(data_out_i16(1))
CALL h5dread_f(dset_id16, h5kind_to_type(int_kind_16,H5_INTEGER_KIND), f_ptr, error)
CALL check("h5dread_f",error, total_error)
#if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
- f_ptr = C_LOC(data_out_i32)
+ f_ptr = C_LOC(data_out_i32(1))
CALL h5dread_f(dset_id32, h5kind_to_type(int_kind_32,H5_INTEGER_KIND), f_ptr, error)
CALL check("h5dread_f",error, total_error)
#endif
- f_ptr = C_LOC(data_out_r)
+ f_ptr = C_LOC(data_out_r(1))
CALL h5dread_f(dset_idr, H5T_NATIVE_REAL, f_ptr, error)
CALL check("h5dread_f",error, total_error)
- f_ptr = C_LOC(data_out_r7)
+ f_ptr = C_LOC(data_out_r7(1))
CALL h5dread_f(dset_idr4, h5kind_to_type(real_kind_7,H5_REAL_KIND), f_ptr, error)
CALL check("h5dread_f",error, total_error)
- f_ptr = C_LOC(data_out_r15)
+ f_ptr = C_LOC(data_out_r15(1))
CALL h5dread_f(dset_idr8, h5kind_to_type(real_kind_15,H5_REAL_KIND), f_ptr, error)
CALL check("h5dread_f",error, total_error)
- f_ptr = C_LOC(data_out_r31)
+ f_ptr = C_LOC(data_out_r31(1))
CALL h5dread_f(dset_idr16, h5kind_to_type(real_kind_31,H5_REAL_KIND), f_ptr, error)
CALL check("h5dread_f",error, total_error)
DO i = 1, 4
@@ -2000,7 +2002,7 @@ SUBROUTINE t_regref(total_error)
CALL h5dcreate_f(file,dataset2, H5T_STD_I8LE, space, dset2, error)
CALL check("h5dcreate_f",error, total_error)
f_ptr = C_LOC(wdata2(1,1))
- CALL h5dwrite_f(dset2, H5T_NATIVE_INTEGER_1, f_ptr, error)
+ CALL h5dwrite_f(dset2, H5T_NATIVE_INTEGER_KIND(1), f_ptr, error)
CALL check("h5dwrite_f",error, total_error)
!
! Create reference to a list of elements in dset2.
@@ -2112,7 +2114,7 @@ SUBROUTINE t_regref(total_error)
CALL check("h5screate_simple_f",error, total_error)
f_ptr = C_LOC(rdata2(1)(1:1))
- CALL h5dread_f( dset2, H5T_NATIVE_INTEGER_1, f_ptr, error, memspace, space)
+ CALL h5dread_f( dset2, H5T_NATIVE_INTEGER_KIND(1), f_ptr, error, memspace, space)
CALL check("H5Dread_f",error, total_error)
CALL verify("h5dread_f",rdata2(1)(1:npoints),TRIM(chrref_correct(i)), total_error)
@@ -2886,33 +2888,23 @@ SUBROUTINE setup_buffer(data_in, line_lengths, char_type)
CHARACTER(len=10), DIMENSION(:) :: data_in
INTEGER(size_t), DIMENSION(:) :: line_lengths
- INTEGER, DIMENSION(1:3) :: letters
- CHARACTER(LEN=3) :: lets
+ CHARACTER(LEN=3) :: lets = 'abc'
CHARACTER(KIND=C_CHAR,LEN=*) :: char_type
- CHARACTER(KIND=C_CHAR,LEN=1) :: char_tmp
- INTEGER :: i, j, n, ff
+ INTEGER :: i, j, n
- ! Convert the letters and special character to integers
- lets = 'abc'
-
- READ(lets,'(3A1)') letters
- READ(char_type,'(A1)') ff
n = SIZE(data_in)
j = 1
DO i=1,n-1
IF( j .EQ. 4 )THEN
- WRITE(char_tmp,'(A1)') ff
- data_in(i:i) = char_tmp
+ data_in(i:i) = char_type(1:1)
ELSE
- WRITE(char_tmp,'(A1)') letters(j)
- data_in(i:i) = char_tmp
+ data_in(i:i) = lets(j:j)
ENDIF
line_lengths(i) = LEN_TRIM(data_in(i))
j = j + 1
IF( j .EQ. 5 ) j = 1
END DO
- WRITE(char_tmp,'(A1)') ff
- data_in(n:n) = char_tmp
+ data_in(n:n) = char_type(1:1)
line_lengths(n) = 1
END SUBROUTINE setup_buffer
diff --git a/fortran/test/tf.F90 b/fortran/test/tf.F90
index 219254b..26b3e99 100644
--- a/fortran/test/tf.F90
+++ b/fortran/test/tf.F90
@@ -40,7 +40,8 @@ MODULE TH5_MISC
INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(10) ! This should map to REAL*8 on most modern processors
! generic compound datatype
- TYPE, BIND(C) :: comp_datatype
+ TYPE :: comp_datatype
+ SEQUENCE
REAL :: a
INTEGER :: x
DOUBLE PRECISION :: y
@@ -336,14 +337,10 @@ CONTAINS
IMPLICIT NONE
TYPE(comp_datatype), INTENT(in) :: a
-#ifdef H5_FORTRAN_HAVE_C_SIZEOF
- H5_SIZEOF_CMPD = C_SIZEOF(a)
+#ifdef H5_FORTRAN_HAVE_STORAGE_SIZE
+ H5_SIZEOF_CMPD = storage_size(a, c_size_t)/storage_size(c_char_'a',c_size_t)
#else
-# ifdef H5_FORTRAN_HAVE_STORAGE_SIZE
- H5_SIZEOF_CMPD = storage_size(a, c_size_t)/storage_size(c_char_'a',c_size_t)
-# else
- H5_SIZEOF_CMPD = SIZEOF(a)
-# endif
+ H5_SIZEOF_CMPD = SIZEOF(a)
#endif
END FUNCTION H5_SIZEOF_CMPD
diff --git a/hl/fortran/src/H5TBff.F90 b/hl/fortran/src/H5TBff.F90
index a31c751..5d1ee35 100644
--- a/hl/fortran/src/H5TBff.F90
+++ b/hl/fortran/src/H5TBff.F90
@@ -376,7 +376,8 @@ CONTAINS
INTEGER(size_t), INTENT(in) :: dst_size ! The size of the structure type
INTEGER(size_t), DIMENSION(1:nfields), INTENT(in) :: dst_offset ! An array containing the offsets of the fields
INTEGER(size_t), DIMENSION(1:nfields), INTENT(in) :: dst_sizes ! An array containing the sizes of the fields
- TYPE(C_PTR), INTENT(OUT) :: dst_buf ! Buffer with data
+ TYPE(C_PTR) :: dst_buf ! Buffer with data !! do not use INTENT, causes NAG
+ ! to segfault in C APIs
INTEGER :: errcode ! error code
INTEGER(size_t) :: namelen ! name length
diff --git a/hl/fortran/src/Makefile.am b/hl/fortran/src/Makefile.am
index 571ca45..7ac18cd 100644
--- a/hl/fortran/src/Makefile.am
+++ b/hl/fortran/src/Makefile.am
@@ -86,8 +86,6 @@ H5LTff_gen.F90: H5HL_buildiface$(EXEEXT)
H5TBff_gen.F90: H5HL_buildiface$(EXEEXT)
-#H5TBff_gen.F90: H5HL_buildiface$(EXEEXT)
-
# H5HL_buildiface.F90 is included in the distribution, and Automake knows
# how to compile a fortran program given its sources.
diff --git a/hl/fortran/test/tsttable.F90 b/hl/fortran/test/tsttable.F90
index 62d291f..3cf8fed 100644
--- a/hl/fortran/test/tsttable.F90
+++ b/hl/fortran/test/tsttable.F90
@@ -185,7 +185,7 @@ SUBROUTINE test_table1()
! make table
!-------------------------------------------------------------------------
- test_txt = " Make table"
+ test_txt = "Make table"
CALL test_begin(test_txt)
CALL h5tbmake_table_f(dsetname1,&
@@ -508,7 +508,6 @@ SUBROUTINE test_table1()
WRITE(*,'(/,5X,"H5TBGET_FIELD_INFO_F: RETURN ERROR")')
STOP
ENDIF
-
! "field4abc" was deleted and "field5" was added.
field_names(4) = "field5"
@@ -538,7 +537,6 @@ SUBROUTINE test_table1()
!
CALL h5fclose_f(file_id, errcode)
-
!
! end function.
!
@@ -557,15 +555,16 @@ SUBROUTINE test_table2()
IMPLICIT NONE
- INTEGER, PARAMETER :: int_kind_8 = SELECTED_INT_KIND(9) !should map to INTEGER*4 on most modern processors
- INTEGER, PARAMETER :: int_kind_16 = SELECTED_INT_KIND(9) ! (18) !should map to INTEGER*8 on most modern processors
+ INTEGER, PARAMETER :: i8 = SELECTED_INT_KIND(9) !should map to INTEGER*4 on most modern processors
+ INTEGER, PARAMETER :: i16 = SELECTED_INT_KIND(9) ! (18) !should map to INTEGER*8 on most modern processors
INTEGER, PARAMETER :: sp = SELECTED_REAL_KIND(5) ! This should map to REAL*4 on most modern processors
INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(10) ! This should map to REAL*8 on most modern processors
TYPE particle_t
+ SEQUENCE
CHARACTER(LEN=11) :: name
- INTEGER(KIND=int_kind_8) :: lati
- INTEGER(KIND=int_kind_16) :: long
+ INTEGER(KIND=i8) :: lati
+ INTEGER(KIND=i16) :: long
REAL(KIND=sp) :: pressure
REAL(KIND=dp) :: temperature
END TYPE particle_t
@@ -607,23 +606,23 @@ SUBROUTINE test_table2()
test_txt = "Testing H5TBread_table_f and H5TBmake_table_f (F2003)"
CALL test_begin(test_txt)
+
! Define an array of Particles
p_data(1:nrecords) = (/ &
- particle_t("zero ",0_int_kind_8,0_int_kind_16,0.0_sp,0.0_dp), &
- particle_t("one ",10_int_kind_8,10_int_kind_16,10.0_sp,10.0_dp), &
- particle_t("two ",20_int_kind_8,20_int_kind_16,20.0_sp,20.0_dp), &
- particle_t("three ",30_int_kind_8,30_int_kind_16,30.0_sp,30.0_dp),&
- particle_t("four ",40_int_kind_8,40_int_kind_16,40.0_sp,40.0_dp), &
- particle_t("five ",50_int_kind_8,50_int_kind_16,50.0_sp,50.0_dp), &
- particle_t("six ",60_int_kind_8,60_int_kind_16,60.0_sp,60.0_dp), &
- particle_t("seven ",70_int_kind_8,70_int_kind_16,70.0_sp,70.0_dp) &
+ particle_t("zero ",0_i8,0_i16,0.0_sp,0.0_dp), &
+ particle_t("one ",10_i8,10_i16,10.0_sp,10.0_dp), &
+ particle_t("two ",20_i8,20_i16,20.0_sp,20.0_dp), &
+ particle_t("three ",30_i8,30_i16,30.0_sp,30.0_dp),&
+ particle_t("four ",40_i8,40_i16,40.0_sp,40.0_dp), &
+ particle_t("five ",50_i8,50_i16,50.0_sp,50.0_dp), &
+ particle_t("six ",60_i8,60_i16,60.0_sp,60.0_dp), &
+ particle_t("seven ",70_i8,70_i16,70.0_sp,70.0_dp) &
/)
- fill_data(1:nrecords) = particle_t("no data",-1_int_kind_8, -2_int_kind_16, -99.0_sp, -100.0_dp)
+ fill_data(1:nrecords) = particle_t("no data",-1_i8, -2_i16, -99.0_sp, -100.0_dp)
compress = 0
-
dst_size = H5OFFSETOF(C_LOC(dst_buf(1)), C_LOC(dst_buf(2)))
#ifdef H5_FORTRAN_HAVE_STORAGE_SIZE
@@ -673,11 +672,10 @@ SUBROUTINE test_table2()
f_ptr1 = C_NULL_PTR
f_ptr2 = C_LOC(fill_data(1)%name(1:1))
-
CALL h5tbmake_table_f("Table Title Fill", file_id, table_name_fill, nfields, nrecords, &
dst_size, field_names, dst_offset, field_type, &
chunk_size, f_ptr2, compress, f_ptr1, errcode )
-
+
f_ptr3 = C_LOC(r_data(1)%name(1:1))
CALL h5tbread_table_f(file_id, table_name_fill, nfields, dst_size, dst_offset, dst_sizes, f_ptr3, errcode)
diff --git a/hl/test/test_ds.c b/hl/test/test_ds.c
index 47929e6..091a98b 100644
--- a/hl/test/test_ds.c
+++ b/hl/test/test_ds.c
@@ -389,7 +389,7 @@ herr_t create_long_dataset(hid_t fid, const char *dsname, const char *dsidx, int
int rank = 4;
int rankds = 1;
hsize_t dims[4] = {DIM1_SIZE,DIM2_SIZE,DIM3_SIZE,DIM4_SIZE};
- long buf[DIM1_SIZE*DIM2_SIZE*DIM3_SIZE*DIM4_SIZE];
+ long *buf;
hsize_t s1_dim[1] = {DIM1_SIZE};
hsize_t s2_dim[1] = {DIM2_SIZE};
hsize_t s3_dim[1] = {DIM3_SIZE};
@@ -409,6 +409,10 @@ herr_t create_long_dataset(hid_t fid, const char *dsname, const char *dsidx, int
long s43_wbuf[DIM4_SIZE] = {180,180};
long s44_wbuf[DIM4_SIZE] = {280,280};
+ /* Allocate buffer */
+ if(NULL == (buf = (long *)HDmalloc(sizeof(long) * DIM1_SIZE * DIM2_SIZE * DIM3_SIZE * DIM4_SIZE)))
+ return FAIL;
+
/* make a dataset */
if(H5LTmake_dataset_long(fid, dsname, rank, dims, buf) >= 0) {
if(fulldims==0) {
@@ -444,6 +448,9 @@ herr_t create_long_dataset(hid_t fid, const char *dsname, const char *dsidx, int
}
else
return FAIL;
+
+ HDfree(buf);
+
return SUCCEED;
}
diff --git a/hl/tools/gif2h5/CMakeTests.cmake b/hl/tools/gif2h5/CMakeTests.cmake
index 1cffe55..8a52f50 100644
--- a/hl/tools/gif2h5/CMakeTests.cmake
+++ b/hl/tools/gif2h5/CMakeTests.cmake
@@ -28,14 +28,18 @@ add_test (
)
add_test (NAME HL_TOOLS_gif2h5 COMMAND $<TARGET_FILE:gif2h5> testfiles/image1.gif image1.h5)
+set_tests_properties (HL_TOOLS_gif2h5 PROPERTIES DEPENDS HL_TOOLS-clear-objects)
add_test (NAME HL_TOOLS_h52gif COMMAND $<TARGET_FILE:h52gif> testfiles/h52giftst.h5 image1.gif -i image)
+set_tests_properties (HL_TOOLS_h52gif PROPERTIES DEPENDS HL_TOOLS-clear-objects)
add_test (NAME HL_TOOLS_h52gif_none COMMAND $<TARGET_FILE:h52gif> testfiles/h52giftst.h5 image.gif -i nosuch_image)
set_tests_properties (HL_TOOLS_h52gif_none PROPERTIES WILL_FAIL "true")
+set_tests_properties (HL_TOOLS_h52gif_none PROPERTIES DEPENDS HL_TOOLS-clear-objects)
#add_test (NAME HL_TOOLS_h52gifpal COMMAND $<TARGET_FILE:h52gif> testfiles/h52giftst.h5 image.gif -i palette)
#set_tests_properties (HL_TOOLS_h52gifpal PROPERTIES WILL_FAIL "true")
add_test (NAME HL_TOOLS_h52gif24bits COMMAND $<TARGET_FILE:h52gif> testfiles/ex_image2.h5 image24.gif -i image24bitpixel)
set_tests_properties (HL_TOOLS_h52gif24bits PROPERTIES WILL_FAIL "true")
+set_tests_properties (HL_TOOLS_h52gif24bits PROPERTIES DEPENDS HL_TOOLS-clear-objects)
diff --git a/hl/tools/gif2h5/h52gifgentst.c b/hl/tools/gif2h5/h52gifgentst.c
index 3433d0a..39e950b 100644
--- a/hl/tools/gif2h5/h52gifgentst.c
+++ b/hl/tools/gif2h5/h52gifgentst.c
@@ -13,6 +13,7 @@
* access to either file, you may request a copy from help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include "hdf5.h"
@@ -49,12 +50,15 @@ int main(void)
{
hid_t fid;
int i, j, n, space;
- unsigned char buf [ WIDTH*HEIGHT ];
+ 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)
@@ -99,6 +103,8 @@ int main(void)
if(H5Fclose(fid)<0)
return EXIT_FAILURE;
+ free(buf);
+
return EXIT_SUCCESS;
}
diff --git a/java/examples/datasets/CMakeLists.txt b/java/examples/datasets/CMakeLists.txt
index 0ba2331..3a69359 100644
--- a/java/examples/datasets/CMakeLists.txt
+++ b/java/examples/datasets/CMakeLists.txt
@@ -108,8 +108,6 @@ if (BUILD_TESTING)
-E remove
${HDFJAVA_EXAMPLES_BINARY_DIR}/${example}.h5
${HDFJAVA_EXAMPLES_BINARY_DIR}/${example}.data
- ${example}.out
- ${example}.out.err
)
else (${example} STREQUAL "H5Ex_D_External")
add_test (
@@ -117,8 +115,6 @@ if (BUILD_TESTING)
COMMAND ${CMAKE_COMMAND}
-E remove
${HDFJAVA_EXAMPLES_BINARY_DIR}/${example}.h5
- ${example}.out
- ${example}.out.err
)
endif (${example} STREQUAL "H5Ex_D_External")
if (NOT "${last_test}" STREQUAL "")
diff --git a/java/examples/datatypes/CMakeLists.txt b/java/examples/datatypes/CMakeLists.txt
index 5ab513c..3eae115 100644
--- a/java/examples/datatypes/CMakeLists.txt
+++ b/java/examples/datatypes/CMakeLists.txt
@@ -96,8 +96,6 @@ if (BUILD_TESTING)
COMMAND ${CMAKE_COMMAND}
-E remove
${HDFJAVA_EXAMPLES_BINARY_DIR}/${example}.h5
- ${example}.out
- ${example}.out.err
)
if (NOT "${last_test}" STREQUAL "")
set_tests_properties (JAVA_datatypes-${example}-clear-objects PROPERTIES DEPENDS ${last_test})
diff --git a/java/examples/groups/CMakeLists.txt b/java/examples/groups/CMakeLists.txt
index c23b7d3..2cab211 100644
--- a/java/examples/groups/CMakeLists.txt
+++ b/java/examples/groups/CMakeLists.txt
@@ -90,17 +90,6 @@ ENDMACRO (ADD_H5_TEST file)
if (BUILD_TESTING)
foreach (example ${HDF_JAVA_EXAMPLES})
- add_test (
- NAME JAVA_groups-${example}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove
- ${example}.out
- ${example}.out.err
- )
- if (NOT "${last_test}" STREQUAL "")
- set_tests_properties (JAVA_groups-${example}-clear-objects PROPERTIES DEPENDS ${last_test})
- endif (NOT "${last_test}" STREQUAL "")
- set (last_test "JAVA_groups-${example}-clear-objects")
if (NOT ${example} STREQUAL "H5Ex_G_Iterate" AND NOT ${example} STREQUAL "H5Ex_G_Visit")
if (${example} STREQUAL "H5Ex_G_Compact")
add_test (
diff --git a/java/examples/intro/CMakeLists.txt b/java/examples/intro/CMakeLists.txt
index 6b77382..2d0c218 100644
--- a/java/examples/intro/CMakeLists.txt
+++ b/java/examples/intro/CMakeLists.txt
@@ -98,8 +98,6 @@ if (BUILD_TESTING)
COMMAND ${CMAKE_COMMAND}
-E remove
${HDFJAVA_EXAMPLES_BINARY_DIR}/${example}.h5
- ${example}.out
- ${example}.out.err
)
if (NOT "${last_test}" STREQUAL "")
set_tests_properties (JAVA_intro-${example}-clear-objects PROPERTIES DEPENDS ${last_test})
diff --git a/m4/aclocal_fc.m4 b/m4/aclocal_fc.m4
index 763ab77..2213a7c 100644
--- a/m4/aclocal_fc.m4
+++ b/m4/aclocal_fc.m4
@@ -280,7 +280,8 @@ AC_RUN_IFELSE([$TEST_SRC],
PAC_FC_ALL_INTEGER_KINDS="{`echo $pac_validIntKinds`}"
PAC_FC_ALL_REAL_KINDS="{`echo $pac_validRealKinds`}"
- H5CONFIG_F_NUM_IKIND="INTEGER, PARAMETER :: num_ikinds = `sed -n '4p' pac_fconftest.out`"
+ PAC_FORTRAN_NUM_INTEGER_KINDS="`sed -n '4p' pac_fconftest.out`"
+ H5CONFIG_F_NUM_IKIND="INTEGER, PARAMETER :: num_ikinds = `echo $PAC_FORTRAN_NUM_INTEGER_KINDS`"
H5CONFIG_F_IKIND="INTEGER, DIMENSION(1:num_ikinds) :: ikind = (/`echo $pac_validIntKinds`/)"
H5CONFIG_F_NUM_RKIND="INTEGER, PARAMETER :: num_rkinds = `sed -n '5p' pac_fconftest.out`"
H5CONFIG_F_RKIND="INTEGER, DIMENSION(1:num_rkinds) :: rkind = (/`echo $pac_validRealKinds`/)"
@@ -290,6 +291,8 @@ AC_RUN_IFELSE([$TEST_SRC],
AC_DEFINE_UNQUOTED([H5CONFIG_F_RKIND], $H5CONFIG_F_RKIND, [Define valid Fortran REAL KINDs])
AC_DEFINE_UNQUOTED([H5CONFIG_F_IKIND], $H5CONFIG_F_IKIND, [Define valid Fortran INTEGER KINDs])
+ AC_MSG_CHECKING([for Number of Fortran INTEGER KINDs])
+ AC_MSG_RESULT([$PAC_FORTRAN_NUM_INTEGER_KINDS])
AC_MSG_CHECKING([for Fortran INTEGER KINDs])
AC_MSG_RESULT([$PAC_FC_ALL_INTEGER_KINDS])
AC_MSG_CHECKING([for Fortran REAL KINDs])
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index 4d9b832..87eb732 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -1,4 +1,4 @@
-HDF5 version 1.9.234 currently under development
+HDF5 version 1.9.235 currently under development
================================================================================
diff --git a/src/H5AC.c b/src/H5AC.c
index 77a58fc..4dac680 100644
--- a/src/H5AC.c
+++ b/src/H5AC.c
@@ -2383,7 +2383,7 @@ done:
*------------------------------------------------------------------------------
*/
herr_t
-H5AC_evict_tagged_metadata(H5F_t * f, haddr_t metadata_tag, hid_t dxpl_id)
+H5AC_evict_tagged_metadata(H5F_t * f, haddr_t metadata_tag, hbool_t match_global, hid_t dxpl_id)
{
/* Variable Declarations */
herr_t ret_value = SUCCEED;
@@ -2396,7 +2396,7 @@ H5AC_evict_tagged_metadata(H5F_t * f, haddr_t metadata_tag, hid_t dxpl_id)
HDassert(f->shared);
/* Call cache level function to evict metadata entries with specified tag */
- if(H5C_evict_tagged_entries(f, dxpl_id, metadata_tag) < 0)
+ if(H5C_evict_tagged_entries(f, dxpl_id, metadata_tag, match_global) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Cannot evict metadata")
done:
diff --git a/src/H5ACprivate.h b/src/H5ACprivate.h
index d1d41c9..84c9e93 100644
--- a/src/H5ACprivate.h
+++ b/src/H5ACprivate.h
@@ -364,7 +364,7 @@ H5_DLL herr_t H5AC_validate_config(H5AC_cache_config_t *config_ptr);
/* Tag & Ring routines */
H5_DLL herr_t H5AC_tag(hid_t dxpl_id, haddr_t metadata_tag, haddr_t *prev_tag);
H5_DLL herr_t H5AC_flush_tagged_metadata(H5F_t * f, haddr_t metadata_tag, hid_t dxpl_id);
-H5_DLL herr_t H5AC_evict_tagged_metadata(H5F_t * f, haddr_t metadata_tag, hid_t dxpl_id);
+H5_DLL herr_t H5AC_evict_tagged_metadata(H5F_t * f, haddr_t metadata_tag, hbool_t match_global, hid_t dxpl_id);
H5_DLL herr_t H5AC_retag_copied_metadata(const H5F_t *f, haddr_t metadata_tag);
H5_DLL herr_t H5AC_ignore_tags(const H5F_t *f);
H5_DLL herr_t H5AC_cork(H5F_t *f, haddr_t obj_addr, unsigned action, hbool_t *corked);
diff --git a/src/H5Aint.c b/src/H5Aint.c
index ea90118..66af0ff 100644
--- a/src/H5Aint.c
+++ b/src/H5Aint.c
@@ -2106,10 +2106,9 @@ H5A_attr_copy_file(const H5A_t *attr_src, H5F_t *file_dst, hbool_t *recompute_si
HDmemcpy(buf, attr_src->shared->data, attr_src->shared->data_size);
/* Allocate background memory */
- if(H5T_path_bkg(tpath_src_mem) || H5T_path_bkg(tpath_mem_dst)) {
+ if(H5T_path_bkg(tpath_src_mem) || H5T_path_bkg(tpath_mem_dst))
if(NULL == (bkg_buf = H5FL_BLK_CALLOC(attr_buf, buf_size)))
- HGOTO_ERROR(H5E_ATTR, H5E_CANTALLOC, FAIL, "memory allocation failed")
- }
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTALLOC, NULL, "memory allocation failed")
/* Convert from source file to memory */
if(H5T_convert(tpath_src_mem, tid_src, tid_mem, nelmts, (size_t)0, (size_t)0, buf, bkg_buf, dxpl_id) < 0)
diff --git a/src/H5Cprivate.h b/src/H5Cprivate.h
index 975ea3e..4137edf 100644
--- a/src/H5Cprivate.h
+++ b/src/H5Cprivate.h
@@ -1970,7 +1970,7 @@ H5_DLL herr_t H5C_expunge_entry(H5F_t *f, hid_t dxpl_id,
const H5C_class_t *type, haddr_t addr, unsigned flags);
H5_DLL herr_t H5C_flush_cache(H5F_t *f, hid_t dxpl_id, unsigned flags);
H5_DLL herr_t H5C_flush_tagged_entries(H5F_t * f, hid_t dxpl_id, haddr_t tag);
-H5_DLL herr_t H5C_evict_tagged_entries(H5F_t * f, hid_t dxpl_id, haddr_t tag);
+H5_DLL herr_t H5C_evict_tagged_entries(H5F_t * f, hid_t dxpl_id, haddr_t tag, hbool_t match_global);
H5_DLL herr_t H5C_expunge_tag_type_metadata(H5F_t *f, hid_t dxpl_id, haddr_t tag, int type_id, unsigned flags);
#if H5C_DO_TAGGING_SANITY_CHECKS
herr_t H5C_verify_tag(int id, haddr_t tag, H5C_tag_globality_t globality);
diff --git a/src/H5Ctag.c b/src/H5Ctag.c
index d560e25..e1b4df6 100644
--- a/src/H5Ctag.c
+++ b/src/H5Ctag.c
@@ -352,7 +352,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5C_evict_tagged_entries(H5F_t * f, hid_t dxpl_id, haddr_t tag)
+H5C_evict_tagged_entries(H5F_t * f, hid_t dxpl_id, haddr_t tag, hbool_t match_global)
{
H5C_t *cache; /* Pointer to cache structure */
H5C_tag_iter_evict_ctx_t ctx; /* Context for iterator callback */
@@ -374,15 +374,15 @@ H5C_evict_tagged_entries(H5F_t * f, hid_t dxpl_id, haddr_t tag)
/* Start evicting entries */
do {
- /* Reset pinned/evicted tracking flags */
- ctx.pinned_entries_need_evicted = FALSE;
- ctx.evicted_entries_last_pass = FALSE;
+ /* Reset pinned/evicted tracking flags */
+ ctx.pinned_entries_need_evicted = FALSE;
+ ctx.evicted_entries_last_pass = FALSE;
- /* Iterate through entries in the cache */
- if(H5C__iter_tagged_entries(cache, tag, TRUE, H5C__evict_tagged_entries_cb, &ctx) < 0)
+ /* Iterate through entries in the cache */
+ if(H5C__iter_tagged_entries(cache, tag, match_global, H5C__evict_tagged_entries_cb, &ctx) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_BADITER, FAIL, "Iteration of tagged entries failed")
- /* Keep doing this until we have stopped evicted entries */
+ /* Keep doing this until we have stopped evicted entries */
} while(TRUE == ctx.evicted_entries_last_pass);
/* Fail if we have finished evicting entries and pinned entries still need evicted */
diff --git a/src/H5D.c b/src/H5D.c
index 23397ad..44e4baa 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -308,37 +308,37 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5Dclose
+ * Function: H5Dclose
*
- * Purpose: Closes access to a dataset (DATASET_ID) and releases
- * resources used by it. It is illegal to subsequently use that
- * same dataset ID in calls to other dataset functions.
+ * Purpose: Closes access to a dataset (DATASET_ID) and releases
+ * resources used by it. It is illegal to subsequently use that
+ * same dataset ID in calls to other dataset functions.
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Non-negative on success/Negative on failure
*
- * Programmer: Robb Matzke
- * Thursday, December 4, 1997
+ * Programmer: Robb Matzke
+ * Thursday, December 4, 1997
*
*-------------------------------------------------------------------------
*/
herr_t
H5Dclose(hid_t dset_id)
{
- herr_t ret_value = SUCCEED; /* Return value */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE1("e", "i", dset_id);
/* Check args */
if(NULL == H5I_object_verify(dset_id, H5I_DATASET))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
/*
* Decrement the counter on the dataset. It will be freed if the count
* reaches zero.
*/
if(H5I_dec_app_ref_always_close(dset_id) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTDEC, FAIL, "can't decrement count on dataset ID")
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTDEC, FAIL, "can't decrement count on dataset ID")
done:
FUNC_LEAVE_API(ret_value)
diff --git a/src/H5Dint.c b/src/H5Dint.c
index 8a00be2..59fe3e9 100644
--- a/src/H5Dint.c
+++ b/src/H5Dint.c
@@ -1780,9 +1780,9 @@ done:
herr_t
H5D_close(H5D_t *dataset)
{
- hbool_t free_failed = FALSE;
- hbool_t corked; /* Whether the dataset is corked or not */
- herr_t ret_value = SUCCEED; /* Return value */
+ hbool_t free_failed = FALSE; /* Set if freeing sub-components failed */
+ hbool_t corked; /* Whether the dataset is corked or not */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
@@ -1797,6 +1797,7 @@ H5D_close(H5D_t *dataset)
dataset->shared->fo_count--;
if(dataset->shared->fo_count == 0) {
+
/* Flush the dataset's information. Continue to close even if it fails. */
if(H5D__flush_real(dataset, H5AC_ind_read_dxpl_id) < 0)
HDONE_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to flush cached dataset info")
@@ -1891,12 +1892,12 @@ H5D_close(H5D_t *dataset)
(H5O_msg_reset(H5O_FILL_ID, &dataset->shared->dcpl_cache.fill) < 0) ||
(H5O_msg_reset(H5O_EFL_ID, &dataset->shared->dcpl_cache.efl) < 0);
- /* Uncork cache entries with object address tag */
- if(H5AC_cork(dataset->oloc.file, dataset->oloc.addr, H5AC__GET_CORKED, &corked) < 0)
- HDONE_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "unable to retrieve an object's cork status")
- if(corked)
- if(H5AC_cork(dataset->oloc.file, dataset->oloc.addr, H5AC__UNCORK, NULL) < 0)
- HDONE_ERROR(H5E_DATASET, H5E_CANTUNCORK, FAIL, "unable to uncork an object")
+ /* Uncork cache entries with object address tag */
+ if(H5AC_cork(dataset->oloc.file, dataset->oloc.addr, H5AC__GET_CORKED, &corked) < 0)
+ HDONE_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "unable to retrieve an object's cork status")
+ if(corked)
+ if(H5AC_cork(dataset->oloc.file, dataset->oloc.addr, H5AC__UNCORK, NULL) < 0)
+ HDONE_ERROR(H5E_DATASET, H5E_CANTUNCORK, FAIL, "unable to uncork an object")
/*
* Release datatype, dataspace and creation property list -- there isn't
@@ -1917,6 +1918,14 @@ H5D_close(H5D_t *dataset)
if(H5O_close(&(dataset->oloc)) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release object header")
+ /* Evict dataset metadata if evicting on close */
+ if(H5F_SHARED(dataset->oloc.file) && H5F_EVICT_ON_CLOSE(dataset->oloc.file)) {
+ if(H5AC_flush_tagged_metadata(dataset->oloc.file, dataset->oloc.addr, H5AC_ind_read_dxpl_id) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush tagged metadata")
+ if(H5AC_evict_tagged_metadata(dataset->oloc.file, dataset->oloc.addr, FALSE, H5AC_ind_read_dxpl_id) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to evict tagged metadata")
+ } /* end if */
+
/*
* Free memory. Before freeing the memory set the file pointer to NULL.
* We always check for a null file pointer in other H5D functions to be
@@ -1924,8 +1933,8 @@ H5D_close(H5D_t *dataset)
* above).
*/
dataset->oloc.file = NULL;
-
dataset->shared = H5FL_FREE(H5D_shared_t, dataset->shared);
+
} /* end if */
else {
/* Decrement the ref. count for this object in the top file */
@@ -1943,16 +1952,16 @@ H5D_close(H5D_t *dataset)
HGOTO_ERROR(H5E_DATASET, H5E_CANTRELEASE, FAIL, "problem attempting to free location")
} /* end else */
- /* Release the dataset's path info */
- if(H5G_name_free(&(dataset->path)) < 0)
- free_failed = TRUE;
+ /* Release the dataset's path info */
+ if(H5G_name_free(&(dataset->path)) < 0)
+ free_failed = TRUE;
/* Free the dataset's memory structure */
dataset = H5FL_FREE(H5D_t, dataset);
/* Check if anything failed in the middle... */
if(free_failed)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "couldn't free a component of the dataset, but the dataset was freed anyway.")
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "couldn't free a component of the dataset, but the dataset was freed anyway.")
done:
FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5Dpkg.h b/src/H5Dpkg.h
index 05f49d1..2190f8c 100644
--- a/src/H5Dpkg.h
+++ b/src/H5Dpkg.h
@@ -770,6 +770,7 @@ H5_DLL htri_t H5D__mpio_opt_possible(const H5D_io_info_t *io_info,
H5_DLL herr_t H5D__layout_version_test(hid_t did, unsigned *version);
H5_DLL herr_t H5D__layout_contig_size_test(hid_t did, hsize_t *size);
H5_DLL herr_t H5D__layout_idx_type_test(hid_t did, H5D_chunk_index_t *idx_type);
+H5_DLL herr_t H5D__layout_type_test(hid_t did, H5D_layout_t *layout_type);
H5_DLL herr_t H5D__current_cache_size_test(hid_t did, size_t *nbytes_used, int *nused);
#endif /* H5D_TESTING */
diff --git a/src/H5Dtest.c b/src/H5Dtest.c
index c3b0b19..56f14f7 100644
--- a/src/H5Dtest.c
+++ b/src/H5Dtest.c
@@ -144,6 +144,47 @@ done:
/*--------------------------------------------------------------------------
NAME
+ H5D__layout_type_test
+ PURPOSE
+ Determine the storage layout type for a dataset
+ USAGE
+ herr_t H5D__layout_type_test(did, layout_type)
+ hid_t did; IN: Dataset to query
+ H5D_layout_t *layout_type; OUT: Pointer to location to place layout info
+ RETURNS
+ Non-negative on success, negative on failure
+ DESCRIPTION
+ Checks the layout type for a dataset.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ DO NOT USE THIS FUNCTION FOR ANYTHING EXCEPT TESTING
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5D__layout_type_test(hid_t did, H5D_layout_t *layout_type)
+{
+ H5D_t *dset; /* Pointer to dataset to query */
+ herr_t ret_value = SUCCEED; /* return value */
+
+ FUNC_ENTER_PACKAGE
+
+ HDassert(layout_type);
+
+ /* Check args */
+ if(NULL == (dset = (H5D_t *)H5I_object_verify(did, H5I_DATASET)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+
+ if(layout_type)
+ *layout_type = dset->shared->layout.type;
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5D__layout_type_test() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
H5D__layout_idx_type_test
PURPOSE
Determine the storage layout index type for a dataset's layout information
diff --git a/src/H5Fint.c b/src/H5Fint.c
index 80c593b..5b7fdda 100644
--- a/src/H5Fint.c
+++ b/src/H5Fint.c
@@ -954,6 +954,7 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id,
H5FD_class_t *drvr; /*file driver class info */
H5P_genplist_t *a_plist; /*file access property list */
H5F_close_degree_t fc_degree; /*file close degree */
+ hbool_t evict_on_close; /* evict on close value from plist */
H5F_t *ret_value = NULL; /*actual return value */
FUNC_ENTER_NOAPI(NULL)
@@ -1118,6 +1119,21 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id,
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "file close degree doesn't match")
} /* end if */
+ /* Record the evict-on-close MDC behavior. If it's the first time opening
+ * the file, set it to access property list value; if it's the second time
+ * or later, verify that the access property list value matches the value
+ * in shared file structure.
+ */
+ if(H5P_get(a_plist, H5F_ACS_EVICT_ON_CLOSE_FLAG_NAME, &evict_on_close) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get evict on close value")
+
+ if(shared->nrefs == 1) {
+ shared->evict_on_close = evict_on_close;
+ } else if(shared->nrefs > 1) {
+ if(shared->evict_on_close != evict_on_close)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "file evict-on-close value doesn't match")
+ } /* end if */
+
/* Formulate the absolute path for later search of target file for external links */
if(H5_build_extpath(name, &file->extpath) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to build extpath")
diff --git a/src/H5Fio.c b/src/H5Fio.c
index b9bd354..2ccd3f3 100644
--- a/src/H5Fio.c
+++ b/src/H5Fio.c
@@ -271,7 +271,7 @@ H5F_evict_tagged_metadata(H5F_t * f, haddr_t tag, hid_t dxpl_id)
f->shared->sblock = NULL;
/* Evict the object's metadata */
- if(H5AC_evict_tagged_metadata(f, tag, dxpl_id)<0)
+ if(H5AC_evict_tagged_metadata(f, tag, TRUE, dxpl_id) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTEXPUNGE, FAIL, "unable to evict tagged metadata")
/* Re-read the superblock. */
diff --git a/src/H5Fpkg.h b/src/H5Fpkg.h
index c5aed3b..8ec2a93 100644
--- a/src/H5Fpkg.h
+++ b/src/H5Fpkg.h
@@ -261,6 +261,7 @@ struct H5F_file_t {
/* not change thereafter. */
hid_t fcpl_id; /* File creation property list ID */
H5F_close_degree_t fc_degree; /* File close behavior degree */
+ hbool_t evict_on_close; /* If the file's objects should be evicted from the metadata cache on close */
size_t rdcc_nslots; /* Size of raw data chunk cache (slots) */
size_t rdcc_nbytes; /* Size of raw data chunk cache (bytes) */
double rdcc_w0; /* Preempt read chunks first? [0.0..1.0]*/
diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h
index b5c24e9..40e5ff2 100644
--- a/src/H5Fprivate.h
+++ b/src/H5Fprivate.h
@@ -303,6 +303,7 @@
#define H5F_SET_SOHM_NINDEXES(F, N) ((F)->shared->sohm_nindexes = (N))
#define H5F_FCPL(F) ((F)->shared->fcpl_id)
#define H5F_GET_FC_DEGREE(F) ((F)->shared->fc_degree)
+#define H5F_EVICT_ON_CLOSE(F) ((F)->shared->evict_on_close)
#define H5F_RDCC_NSLOTS(F) ((F)->shared->rdcc_nslots)
#define H5F_RDCC_NBYTES(F) ((F)->shared->rdcc_nbytes)
#define H5F_RDCC_W0(F) ((F)->shared->rdcc_w0)
@@ -348,6 +349,7 @@
#define H5F_SET_SOHM_NINDEXES(F, N) (H5F_set_sohm_nindexes((F), (N)))
#define H5F_FCPL(F) (H5F_get_fcpl(F))
#define H5F_GET_FC_DEGREE(F) (H5F_get_fc_degree(F))
+#define H5F_EVICT_ON_CLOSE(F) (H5F_get_evict_on_close(F))
#define H5F_RDCC_NSLOTS(F) (H5F_rdcc_nslots(F))
#define H5F_RDCC_NBYTES(F) (H5F_rdcc_nbytes(F))
#define H5F_RDCC_W0(F) (H5F_rdcc_w0(F))
@@ -463,6 +465,7 @@
#define H5F_ACS_EFC_SIZE_NAME "efc_size" /* Size of external file cache */
#define H5F_ACS_FILE_IMAGE_INFO_NAME "file_image_info" /* struct containing initial file image and callback info */
#define H5F_ACS_CORE_WRITE_TRACKING_FLAG_NAME "core_write_tracking_flag" /* Whether or not core VFD backing store write tracking is enabled */
+#define H5F_ACS_EVICT_ON_CLOSE_FLAG_NAME "evict_on_close_flag" /* Whether or not the metadata cache will evict objects on close */
#define H5F_ACS_CORE_WRITE_TRACKING_PAGE_SIZE_NAME "core_write_tracking_page_size" /* The page size in kiB when core VFD write tracking is enabled */
#define H5F_ACS_COLL_MD_WRITE_FLAG_NAME "collective_metadata_write" /* property indicating whether metadata writes are done collectively or not */
@@ -660,6 +663,7 @@ H5_DLL unsigned H5F_get_sohm_nindexes(const H5F_t *f);
H5_DLL herr_t H5F_set_sohm_nindexes(H5F_t *f, unsigned nindexes);
H5_DLL hid_t H5F_get_fcpl(const H5F_t *f);
H5_DLL H5F_close_degree_t H5F_get_fc_degree(const H5F_t *f);
+H5_DLL hbool_t H5F_get_evict_on_close(const H5F_t *f);
H5_DLL size_t H5F_rdcc_nbytes(const H5F_t *f);
H5_DLL size_t H5F_rdcc_nslots(const H5F_t *f);
H5_DLL double H5F_rdcc_w0(const H5F_t *f);
diff --git a/src/H5Fquery.c b/src/H5Fquery.c
index dd6e8e3..f59a9b7 100644
--- a/src/H5Fquery.c
+++ b/src/H5Fquery.c
@@ -835,6 +835,33 @@ H5F_get_fc_degree(const H5F_t *f)
/*-------------------------------------------------------------------------
+ * Function: H5F_get_evict_on_close
+ *
+ * Purpose: Retrieve the 'file close degree' for the file.
+ *
+ * Return: Success: Flag indicating whether the evict-on-close
+ * property was set for the file.
+ * Failure: (can't happen)
+ *
+ * Programmer: Dana Robinson
+ * Spring 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+hbool_t
+H5F_get_evict_on_close(const H5F_t *f)
+{
+ /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
+ FUNC_ENTER_NOAPI_NOINIT_NOERR
+
+ HDassert(f);
+ HDassert(f->shared);
+
+ FUNC_LEAVE_NOAPI(f->shared->evict_on_close)
+} /* end H5F_get_evict_on_close() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5F_store_msg_crt_idx
*
* Purpose: Retrieve the 'store message creation index' flag for the file.
diff --git a/src/H5G.c b/src/H5G.c
index 5d920a4..1a18dc0 100644
--- a/src/H5G.c
+++ b/src/H5G.c
@@ -715,14 +715,14 @@ done:
herr_t
H5Gclose(hid_t group_id)
{
- herr_t ret_value = SUCCEED; /* Return value */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE1("e", "i", group_id);
/* Check args */
if(NULL == H5I_object_verify(group_id,H5I_GROUP))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a group")
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a group")
/*
* Decrement the counter on the group atom. It will be freed if the count
diff --git a/src/H5Gint.c b/src/H5Gint.c
index f5bccc3..a0e06f3 100644
--- a/src/H5Gint.c
+++ b/src/H5Gint.c
@@ -486,7 +486,7 @@ H5G_close(H5G_t *grp)
if(0 == grp->shared->fo_count) {
HDassert(grp != H5G_rootof(H5G_fileof(grp)));
- /* Uncork cache entries with object address tag */
+ /* Uncork cache entries with object address tag */
if(H5AC_cork(grp->oloc.file, grp->oloc.addr, H5AC__GET_CORKED, &corked) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "unable to retrieve an object's cork status")
if(corked)
@@ -500,6 +500,8 @@ H5G_close(H5G_t *grp)
HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "can't remove group from list of open objects")
if(H5O_close(&(grp->oloc)) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to close")
+
+ /* Free memory */
grp->shared = H5FL_FREE(H5G_shared_t, grp->shared);
} else {
/* Decrement the ref. count for this object in the top file */
diff --git a/src/H5O.c b/src/H5O.c
index 3daf09e..d1806a1 100644
--- a/src/H5O.c
+++ b/src/H5O.c
@@ -1051,7 +1051,7 @@ done:
* the same effect as calling H5Gclose, H5Dclose, or H5Tclose.
*
* Return: Success: Non-negative
- * Failure: Negative
+ * Failure: Negative
*
* Programmer: James Laird
* July 14 2006
diff --git a/src/H5Odtype.c b/src/H5Odtype.c
index e51d319..799f475 100644
--- a/src/H5Odtype.c
+++ b/src/H5Odtype.c
@@ -311,7 +311,11 @@ H5O_dtype_decode_helper(H5F_t *f, unsigned *ioflags/*in,out*/, const uint8_t **p
if(version == H5O_DTYPE_VERSION_1) {
/* Decode the number of dimensions */
ndims = *(*pp)++;
- HDassert(ndims <= 4);
+
+ /* Check that ndims is valid */
+ if(ndims > 4)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_BADTYPE, FAIL, "invalid number of dimensions for array")
+
*pp += 3; /*reserved bytes */
/* Skip dimension permutation */
@@ -519,7 +523,8 @@ H5O_dtype_decode_helper(H5F_t *f, unsigned *ioflags/*in,out*/, const uint8_t **p
dt->shared->u.array.ndims = *(*pp)++;
/* Double-check the number of dimensions */
- HDassert(dt->shared->u.array.ndims <= H5S_MAX_RANK);
+ if(dt->shared->u.array.ndims > H5S_MAX_RANK)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTLOAD, FAIL, "too many dimensions for array datatype")
/* Skip reserved bytes, if version has them */
if(version < H5O_DTYPE_VERSION_3)
diff --git a/src/H5Pfapl.c b/src/H5Pfapl.c
index 96de39c..8801061 100644
--- a/src/H5Pfapl.c
+++ b/src/H5Pfapl.c
@@ -181,6 +181,11 @@
/* Definition for object flush callback */
#define H5F_ACS_OBJECT_FLUSH_CB_SIZE sizeof(H5F_object_flush_t)
#define H5F_ACS_OBJECT_FLUSH_CB_DEF {NULL, NULL}
+/* Definition for evict on close property */
+#define H5F_ACS_EVICT_ON_CLOSE_FLAG_SIZE sizeof(hbool_t)
+#define H5F_ACS_EVICT_ON_CLOSE_FLAG_DEF FALSE
+#define H5F_ACS_EVICT_ON_CLOSE_FLAG_ENC H5P__encode_hbool_t
+#define H5F_ACS_EVICT_ON_CLOSE_FLAG_DEC H5P__decode_hbool_t
#ifdef H5_HAVE_PARALLEL
/* Definition of collective metadata read mode flag */
#define H5F_ACS_COLL_MD_READ_FLAG_SIZE sizeof(H5P_coll_md_read_flag_t)
@@ -296,6 +301,7 @@ static const H5FD_file_image_info_t H5F_def_file_image_info_g = H5F_ACS_FILE_IMA
static const hbool_t H5F_def_core_write_tracking_flag_g = H5F_ACS_CORE_WRITE_TRACKING_FLAG_DEF; /* Default setting for core VFD write tracking */
static const size_t H5F_def_core_write_tracking_page_size_g = H5F_ACS_CORE_WRITE_TRACKING_PAGE_SIZE_DEF; /* Default core VFD write tracking page size */
static const H5F_object_flush_t H5F_def_object_flush_cb_g = H5F_ACS_OBJECT_FLUSH_CB_DEF; /* Default setting for object flush callback */
+static const hbool_t H5F_def_evict_on_close_flag_g = H5F_ACS_EVICT_ON_CLOSE_FLAG_DEF; /* Default setting for evict on close property */
#ifdef H5_HAVE_PARALLEL
static const H5P_coll_md_read_flag_t H5F_def_coll_md_read_flag_g = H5F_ACS_COLL_MD_READ_FLAG_DEF; /* Default setting for the collective metedata read flag */
static const hbool_t H5F_def_coll_md_write_flag_g = H5F_ACS_COLL_MD_WRITE_FLAG_DEF; /* Default setting for the collective metedata write flag */
@@ -462,6 +468,12 @@ H5P__facc_reg_prop(H5P_genclass_t *pclass)
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+ /* Register the evict on close flag */
+ if(H5P_register_real(pclass, H5F_ACS_EVICT_ON_CLOSE_FLAG_NAME, H5F_ACS_EVICT_ON_CLOSE_FLAG_SIZE, &H5F_def_evict_on_close_flag_g,
+ NULL, NULL, NULL, H5F_ACS_EVICT_ON_CLOSE_FLAG_ENC, H5F_ACS_EVICT_ON_CLOSE_FLAG_DEC,
+ NULL, NULL, NULL, NULL) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
#ifdef H5_HAVE_PARALLEL
/* Register the metadata collective read flag */
if(H5P_register_real(pclass, H5_COLL_MD_READ_FLAG_NAME, H5F_ACS_COLL_MD_READ_FLAG_SIZE, &H5F_def_coll_md_read_flag_g,
@@ -3605,6 +3617,93 @@ done:
FUNC_LEAVE_API(ret_value)
} /* H5Pget_obj_flush_cb() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5Pset_evict_on_close
+ *
+ * Purpose: Sets the evict_on_close property value.
+ *
+ * When this property is set, closing an HDF5 object will
+ * cause the object's metadata cache entries to be flushed
+ * and evicted from the cache.
+ *
+ * Currently only implemented for datasets.
+ *
+ * Return: SUCCEED/FAIL
+ *
+ * Programmer: Dana Robinson
+ * Spring 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_evict_on_close(hid_t fapl_id, hbool_t evict_on_close)
+{
+ H5P_genplist_t *plist; /* property list pointer */
+ herr_t ret_value = SUCCEED; /* return value */
+
+ FUNC_ENTER_API(FAIL)
+ H5TRACE2("e", "ib", fapl_id, evict_on_close);
+
+ /* Compare the property list's class against the other class */
+ if(TRUE != H5P_isa_class(fapl_id, H5P_FILE_ACCESS))
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "property list is not a file access plist")
+
+ /* Get the plist structure */
+ if(NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id)))
+ HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
+
+ /* Set values */
+ if(H5P_set(plist, H5F_ACS_EVICT_ON_CLOSE_FLAG_NAME, &evict_on_close) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set evict on close property")
+
+done:
+ FUNC_LEAVE_API(ret_value)
+} /* end H5Pset_evict_on_close() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5Pget_evict_on_close
+ *
+ * Purpose: Gets the evict_on_close property value.
+ *
+ * When this property is set, closing an HDF5 object will
+ * cause the object's metadata cache entries to be flushed
+ * and evicted from the cache.
+ *
+ * Currently only implemented for datasets.
+ *
+ * Return: SUCCEED/FAIL
+ *
+ * Programmer: Dana Robinson
+ * Spring 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_evict_on_close(hid_t fapl_id, hbool_t *evict_on_close)
+{
+ H5P_genplist_t *plist; /* property list pointer */
+ herr_t ret_value = SUCCEED; /* return value */
+
+ FUNC_ENTER_API(FAIL)
+ H5TRACE2("e", "i*b", fapl_id, evict_on_close);
+
+ /* Compare the property list's class against the other class */
+ if(TRUE != H5P_isa_class(fapl_id, H5P_FILE_ACCESS))
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "property list is not an access plist")
+
+ /* Get the plist structure */
+ if(NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id)))
+ HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
+
+ if(H5P_get(plist, H5F_ACS_EVICT_ON_CLOSE_FLAG_NAME, evict_on_close) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get evict on close property")
+
+done:
+ FUNC_LEAVE_API(ret_value)
+} /* end H5Pget_evict_on_close() */
+
#ifdef H5_HAVE_PARALLEL
/*-------------------------------------------------------------------------
diff --git a/src/H5Ppublic.h b/src/H5Ppublic.h
index 0318c8f..b807a37 100644
--- a/src/H5Ppublic.h
+++ b/src/H5Ppublic.h
@@ -353,6 +353,8 @@ H5_DLL herr_t H5Pset_core_write_tracking(hid_t fapl_id, hbool_t is_enabled, size
H5_DLL herr_t H5Pget_core_write_tracking(hid_t fapl_id, hbool_t *is_enabled, size_t *page_size);
H5_DLL herr_t H5Pset_object_flush_cb(hid_t plist_id, H5F_flush_cb_t func, void *udata);
H5_DLL herr_t H5Pget_object_flush_cb(hid_t plist_id, H5F_flush_cb_t *func, void **udata);
+H5_DLL herr_t H5Pset_evict_on_close(hid_t fapl_id, hbool_t evict_on_close);
+H5_DLL herr_t H5Pget_evict_on_close(hid_t fapl_id, hbool_t *evict_on_close);
#ifdef H5_HAVE_PARALLEL
H5_DLL herr_t H5Pset_all_coll_metadata_ops(hid_t plist_id, hbool_t is_collective);
H5_DLL herr_t H5Pget_all_coll_metadata_ops(hid_t plist_id, hbool_t *is_collective);
diff --git a/src/H5Znbit.c b/src/H5Znbit.c
index 04e8869..7a41d16 100644
--- a/src/H5Znbit.c
+++ b/src/H5Znbit.c
@@ -65,13 +65,13 @@ static void H5Z_nbit_decompress_one_nooptype(unsigned char *data, size_t data_of
unsigned char *buffer, size_t *j, size_t *buf_len, unsigned size);
static void H5Z_nbit_decompress_one_atomic(unsigned char *data, size_t data_offset,
unsigned char *buffer, size_t *j, size_t *buf_len, const parms_atomic *p);
-static void H5Z_nbit_decompress_one_array(unsigned char *data, size_t data_offset,
+static herr_t H5Z__nbit_decompress_one_array(unsigned char *data, size_t data_offset,
unsigned char *buffer, size_t *j, size_t *buf_len, const unsigned parms[],
unsigned *parms_index);
-static void H5Z_nbit_decompress_one_compound(unsigned char *data, size_t data_offset,
+static herr_t H5Z__nbit_decompress_one_compound(unsigned char *data, size_t data_offset,
unsigned char *buffer, size_t *j, size_t *buf_len, const unsigned parms[],
unsigned *parms_index);
-static void H5Z_nbit_decompress(unsigned char *data, unsigned d_nelmts, unsigned char *buffer,
+static herr_t H5Z__nbit_decompress(unsigned char *data, unsigned d_nelmts, unsigned char *buffer,
const unsigned parms[]);
static void H5Z_nbit_compress_one_nooptype(unsigned char *data, size_t data_offset,
unsigned char *buffer, size_t *j, size_t *buf_len, unsigned size);
@@ -1011,7 +1011,8 @@ H5Z_filter_nbit(unsigned flags, size_t cd_nelmts, const unsigned cd_values[],
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "memory allocation failed for nbit decompression")
/* decompress the buffer */
- H5Z_nbit_decompress(outbuf, d_nelmts, (unsigned char *)*buf, cd_values);
+ if(H5Z__nbit_decompress(outbuf, d_nelmts, (unsigned char *)*buf, cd_values) < 0)
+ HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, 0, "can't decompress buffer")
} /* end if */
/* output; compress */
else {
@@ -1166,13 +1167,16 @@ H5Z_nbit_decompress_one_atomic(unsigned char *data, size_t data_offset,
}
}
-static void
-H5Z_nbit_decompress_one_array(unsigned char *data, size_t data_offset,
+static herr_t
+H5Z__nbit_decompress_one_array(unsigned char *data, size_t data_offset,
unsigned char *buffer, size_t *j, size_t *buf_len, const unsigned parms[],
unsigned *parms_index)
{
unsigned i, total_size, base_class, base_size, n, begin_index;
parms_atomic p;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_STATIC
total_size = parms[(*parms_index)++];
base_class = parms[(*parms_index)++];
@@ -1183,6 +1187,11 @@ H5Z_nbit_decompress_one_array(unsigned char *data, size_t data_offset,
p.order = parms[(*parms_index)++];
p.precision = parms[(*parms_index)++];
p.offset = parms[(*parms_index)++];
+
+ /* Check values of precision and offset */
+ if(p.precision > p.size * 8 || (p.precision + p.offset) > p.size * 8)
+ HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "invalid datatype precision/offset")
+
n = total_size / p.size;
for(i = 0; i < n; i++)
H5Z_nbit_decompress_one_atomic(data, data_offset + i * p.size,
@@ -1194,8 +1203,9 @@ H5Z_nbit_decompress_one_array(unsigned char *data, size_t data_offset,
n = total_size / base_size; /* number of base_type elements inside the array datatype */
begin_index = *parms_index;
for(i = 0; i < n; i++) {
- H5Z_nbit_decompress_one_array(data, data_offset + i * base_size,
- buffer, j, buf_len, parms, parms_index);
+ if(H5Z__nbit_decompress_one_array(data, data_offset + i * base_size,
+ buffer, j, buf_len, parms, parms_index) < 0)
+ HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, FAIL, "can't decompress array")
*parms_index = begin_index;
}
break;
@@ -1205,8 +1215,9 @@ H5Z_nbit_decompress_one_array(unsigned char *data, size_t data_offset,
n = total_size / base_size; /* number of base_type elements inside the array datatype */
begin_index = *parms_index;
for(i = 0; i < n; i++) {
- H5Z_nbit_decompress_one_compound(data, data_offset + i * base_size,
- buffer, j, buf_len, parms, parms_index);
+ if(H5Z__nbit_decompress_one_compound(data, data_offset + i * base_size,
+ buffer, j, buf_len, parms, parms_index) < 0)
+ HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, FAIL, "can't decompress compound")
*parms_index = begin_index;
}
break;
@@ -1219,56 +1230,81 @@ H5Z_nbit_decompress_one_array(unsigned char *data, size_t data_offset,
default:
HDassert(0 && "This Should never be executed!");
} /* end switch */
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
}
-static void
-H5Z_nbit_decompress_one_compound(unsigned char *data, size_t data_offset,
+static herr_t
+H5Z__nbit_decompress_one_compound(unsigned char *data, size_t data_offset,
unsigned char *buffer, size_t *j, size_t *buf_len, const unsigned parms[],
unsigned *parms_index)
{
- unsigned i, nmembers, member_offset, member_class, size;
+ unsigned i, nmembers, member_offset, member_class, member_size, used_size = 0, size;
parms_atomic p;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_STATIC
- (*parms_index)++; /* skip total size of compound datatype */
+ size = parms[(*parms_index)++];
nmembers = parms[(*parms_index)++];
for(i = 0; i < nmembers; i++) {
member_offset = parms[(*parms_index)++];
member_class = parms[(*parms_index)++];
+
+ /* Check for overflow */
+ member_size = parms[*parms_index];
+ used_size += member_size;
+ if(used_size > size)
+ HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "compound member offset overflowed compound size")
switch(member_class) {
case H5Z_NBIT_ATOMIC:
- p.size = parms[(*parms_index)++];
+ p.size = member_size;
+ /* Advance past member size */
+ (*parms_index)++;
p.order = parms[(*parms_index)++];
p.precision = parms[(*parms_index)++];
p.offset = parms[(*parms_index)++];
+
+ /* Check values of precision and offset */
+ if(p.precision > p.size * 8 || (p.precision + p.offset) > p.size * 8)
+ HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "invalid datatype precision/offset")
+
H5Z_nbit_decompress_one_atomic(data, data_offset + member_offset,
buffer, j, buf_len, &p);
break;
case H5Z_NBIT_ARRAY:
- H5Z_nbit_decompress_one_array(data, data_offset + member_offset,
- buffer, j, buf_len, parms, parms_index);
+ if(H5Z__nbit_decompress_one_array(data, data_offset + member_offset,
+ buffer, j, buf_len, parms, parms_index) < 0)
+ HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, FAIL, "can't decompress array")
break;
case H5Z_NBIT_COMPOUND:
- H5Z_nbit_decompress_one_compound(data, data_offset+member_offset,
- buffer, j, buf_len, parms, parms_index);
+ if(H5Z__nbit_decompress_one_compound(data, data_offset+member_offset,
+ buffer, j, buf_len, parms, parms_index) < 0)
+ HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, FAIL, "can't decompress compound")
break;
case H5Z_NBIT_NOOPTYPE:
- size = parms[(*parms_index)++];
+ /* Advance past member size */
+ (*parms_index)++;
H5Z_nbit_decompress_one_nooptype(data, data_offset+member_offset,
- buffer, j, buf_len, size);
+ buffer, j, buf_len, member_size);
break;
default:
HDassert(0 && "This Should never be executed!");
} /* end switch */
}
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
}
-static void
-H5Z_nbit_decompress(unsigned char *data, unsigned d_nelmts, unsigned char *buffer,
+static herr_t
+H5Z__nbit_decompress(unsigned char *data, unsigned d_nelmts, unsigned char *buffer,
const unsigned parms[])
{
/* i: index of data, j: index of buffer,
@@ -1278,6 +1314,9 @@ H5Z_nbit_decompress(unsigned char *data, unsigned d_nelmts, unsigned char *buffe
size_t buf_len;
parms_atomic p;
unsigned parms_index; /* index in array parms used by compression/decompression functions */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_STATIC
/* may not have to initialize to zeros */
HDmemset(data, 0, d_nelmts * parms[4]);
@@ -1292,6 +1331,11 @@ H5Z_nbit_decompress(unsigned char *data, unsigned d_nelmts, unsigned char *buffe
p.order = parms[5];
p.precision = parms[6];
p.offset = parms[7];
+
+ /* Check values of precision and offset */
+ if(p.precision > p.size * 8 || (p.precision + p.offset) > p.size * 8)
+ HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "invalid datatype precision/offset")
+
for(i = 0; i < d_nelmts; i++)
H5Z_nbit_decompress_one_atomic(data, i * p.size, buffer, &j, &buf_len, &p);
break;
@@ -1300,7 +1344,8 @@ H5Z_nbit_decompress(unsigned char *data, unsigned d_nelmts, unsigned char *buffe
size = parms[4];
parms_index = 4; /* set the index before goto function call */
for(i = 0; i < d_nelmts; i++) {
- H5Z_nbit_decompress_one_array(data, i * size, buffer, &j, &buf_len, parms, &parms_index);
+ if(H5Z__nbit_decompress_one_array(data, i * size, buffer, &j, &buf_len, parms, &parms_index) < 0)
+ HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, FAIL, "can't decompress array")
parms_index = 4;
}
break;
@@ -1309,7 +1354,8 @@ H5Z_nbit_decompress(unsigned char *data, unsigned d_nelmts, unsigned char *buffe
size = parms[4];
parms_index = 4; /* set the index before goto function call */
for(i = 0; i < d_nelmts; i++) {
- H5Z_nbit_decompress_one_compound(data, i * size, buffer, &j, &buf_len, parms, &parms_index);
+ if(H5Z__nbit_decompress_one_compound(data, i * size, buffer, &j, &buf_len, parms, &parms_index) < 0)
+ HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, FAIL, "can't decompress compound")
parms_index = 4;
}
break;
@@ -1317,6 +1363,9 @@ H5Z_nbit_decompress(unsigned char *data, unsigned d_nelmts, unsigned char *buffe
default:
HDassert(0 && "This Should never be executed!");
} /* end switch */
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
}
static void
diff --git a/src/H5public.h b/src/H5public.h
index 2f21648..84c98fa 100644
--- a/src/H5public.h
+++ b/src/H5public.h
@@ -94,10 +94,10 @@ extern "C" {
/* Version numbers */
#define H5_VERS_MAJOR 1 /* For major interface/format changes */
#define H5_VERS_MINOR 9 /* For minor interface/format changes */
-#define H5_VERS_RELEASE 234 /* For tweaks, bug-fixes, or development */
+#define H5_VERS_RELEASE 235 /* For tweaks, bug-fixes, or development */
#define H5_VERS_SUBRELEASE "" /* For pre-releases like snap0 */
/* Empty string for real releases. */
-#define H5_VERS_INFO "HDF5 library version: 1.9.234" /* Full version string */
+#define H5_VERS_INFO "HDF5 library version: 1.9.235" /* Full version string */
#define H5check() H5check_version(H5_VERS_MAJOR,H5_VERS_MINOR, \
H5_VERS_RELEASE)
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 1ab4165..6e6a0b9 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -204,6 +204,7 @@ set (H5_TESTS
ohdr
stab
gheap
+ evict_on_close
farray
earray
btree2
diff --git a/test/CMakeTests.cmake b/test/CMakeTests.cmake
index ca890ba..1e7940a 100644
--- a/test/CMakeTests.cmake
+++ b/test/CMakeTests.cmake
@@ -513,6 +513,7 @@ set (H5TEST_TESTS
ohdr
stab
gheap
+ evict_on_close
farray
earray
btree2
@@ -865,6 +866,7 @@ if (HDF5_TEST_VFD)
ohdr
stab
gheap
+ evict_on_close
pool
# accum
farray
diff --git a/test/Makefile.am b/test/Makefile.am
index 9e0f9c5..7d062f4 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -42,7 +42,7 @@ check_SCRIPTS = $(TEST_SCRIPT)
# As an exception, long-running tests should occur earlier in the list.
# This gives them more time to run when tests are executing in parallel.
TEST_PROG= testhdf5 cache cache_api cache_tagging lheap ohdr stab gheap \
- farray earray btree2 fheap \
+ evict_on_close farray earray btree2 fheap \
pool accum hyperslab istore bittests dt_arith \
dtypes dsets cmpd_dset filter_fail extend external efc objcopy links unlink \
big mtime fillval mount flush1 flush2 app_ref enum \
diff --git a/test/cmpd_dset.c b/test/cmpd_dset.c
index 311b9bb..a7f3902 100644
--- a/test/cmpd_dset.c
+++ b/test/cmpd_dset.c
@@ -154,30 +154,28 @@ static unsigned
test_compound (char *filename, hid_t fapl)
{
/* First dataset */
- static s1_t s1[NX*NY];
+ s1_t *s1 = NULL;
hid_t s1_tid;
/* Second dataset */
- static s2_t s2[NX*NY];
+ s2_t *s2 = NULL;
hid_t s2_tid;
/* Third dataset */
- static s3_t s3[NX*NY];
+ s3_t *s3 = NULL;
hid_t s3_tid;
/* Fourth dataset */
- static s4_t s4[NX*NY];
+ s4_t *s4 = NULL;
hid_t s4_tid;
/* Fifth dataset */
- static s5_t s5[NX*NY];
+ s5_t *s5 = NULL;
hid_t s5_tid;
- static s6_t s6[NX*NY];
- hid_t s6_tid;
-
-
/* Sixth dataset */
+ s6_t *s6 = NULL;
+ hid_t s6_tid;
/* Seventh dataset */
hid_t s7_sid;
@@ -204,6 +202,20 @@ test_compound (char *filename, hid_t fapl)
hsize_t memb_size[1] = {4};
int ret_code;
+ /* Allocate buffers for datasets */
+ if(NULL == (s1 = (s1_t *)HDmalloc(sizeof(s1_t) * NX * NY)))
+ goto error;
+ if(NULL == (s2 = (s2_t *)HDmalloc(sizeof(s2_t) * NX * NY)))
+ goto error;
+ if(NULL == (s3 = (s3_t *)HDmalloc(sizeof(s3_t) * NX * NY)))
+ goto error;
+ if(NULL == (s4 = (s4_t *)HDmalloc(sizeof(s4_t) * NX * NY)))
+ goto error;
+ if(NULL == (s5 = (s5_t *)HDmalloc(sizeof(s5_t) * NX * NY)))
+ goto error;
+ if(NULL == (s6 = (s6_t *)HDmalloc(sizeof(s6_t) * NX * NY)))
+ goto error;
+
/* Create the file */
if ((file = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) {
goto error;
@@ -848,11 +860,34 @@ test_compound (char *filename, hid_t fapl)
H5Dclose (dataset);
H5Fclose (file);
+ /* Release buffers */
+ HDfree(s1);
+ HDfree(s2);
+ HDfree(s3);
+ HDfree(s4);
+ HDfree(s5);
+ HDfree(s6);
+
PASSED();
return 0;
error:
puts("*** DATASET TESTS FAILED ***");
+
+ /* Release resources */
+ if(s1)
+ HDfree(s1);
+ if(s2)
+ HDfree(s2);
+ if(s3)
+ HDfree(s3);
+ if(s4)
+ HDfree(s4);
+ if(s5)
+ HDfree(s5);
+ if(s6)
+ HDfree(s6);
+
return 1;
}
diff --git a/test/dsets.c b/test/dsets.c
index fe6a0c0..8aa073f 100644
--- a/test/dsets.c
+++ b/test/dsets.c
@@ -240,6 +240,10 @@ double points_dbl[DSET_DIM1][DSET_DIM2], check_dbl[DSET_DIM1][DSET_DIM2];
size_t count_nbytes_read = 0;
size_t count_nbytes_written = 0;
+/* Temporary buffer dimensions */
+#define DSET_TMP_DIM1 50
+#define DSET_TMP_DIM2 100
+
/* Declarations for test_idx_compatible() */
#define DSET "dset"
#define DSET_FILTER "dset_filter"
@@ -7942,11 +7946,10 @@ test_big_chunks_bypass_cache(hid_t fapl)
int fvalue = BYPASS_FILL_VALUE; /* Fill value */
hsize_t count, stride, offset, block; /* Setting for hyperslab (1-D) */
hsize_t t_count[2], t_stride[2], t_offset[2], t_block[2]; /* Setting for hyperslab (2-D) */
- /* Buffer for reading and writing data (1-D) */
- static int wdata[BYPASS_CHUNK_DIM/2], rdata1[BYPASS_DIM],
- rdata2[BYPASS_CHUNK_DIM/2];
+ /* Buffers for reading and writing data (1-D) */
+ int *wdata = NULL, *rdata1 = NULL, *rdata2 = NULL;
/* Buffer for reading and writing data (2-D) */
- static int t_wdata[BYPASS_CHUNK_DIM/2][BYPASS_CHUNK_DIM/2], t_rdata1[BYPASS_DIM][BYPASS_DIM],
+ int t_wdata[BYPASS_CHUNK_DIM/2][BYPASS_CHUNK_DIM/2], t_rdata1[BYPASS_DIM][BYPASS_DIM],
t_rdata2[BYPASS_CHUNK_DIM/2][BYPASS_CHUNK_DIM/2];
int i, j; /* Local index variables */
H5F_libver_t low; /* File format low bound */
@@ -8031,6 +8034,14 @@ test_big_chunks_bypass_cache(hid_t fapl)
if(H5Sselect_hyperslab(t_sid, H5S_SELECT_SET, t_offset, t_stride, t_count, t_block) < 0)
FAIL_STACK_ERROR
+ /* Allocate buffers */
+ if(NULL == (wdata = (int *)HDmalloc(sizeof(int) * (BYPASS_CHUNK_DIM / 2))))
+ TEST_ERROR
+ if(NULL == (rdata1 = (int *)HDmalloc(sizeof(int) * BYPASS_DIM)))
+ TEST_ERROR
+ if(NULL == (rdata2 = (int *)HDmalloc(sizeof(int) * (BYPASS_CHUNK_DIM / 2))))
+ TEST_ERROR
+
/* Initialize data to write for 1-D dataset */
for(i = 0; i < BYPASS_CHUNK_DIM / 2; i++)
wdata[i] = i;
@@ -8165,6 +8176,11 @@ test_big_chunks_bypass_cache(hid_t fapl)
if(H5Pclose(fapl_local) < 0) FAIL_STACK_ERROR
if(H5Fclose(fid) < 0) FAIL_STACK_ERROR
+ /* Release buffers */
+ HDfree(wdata);
+ HDfree(rdata1);
+ HDfree(rdata2);
+
PASSED();
return 0;
@@ -8179,6 +8195,12 @@ error:
H5Sclose(t_sid);
H5Fclose(fid);
} H5E_END_TRY;
+ if(wdata)
+ HDfree(wdata);
+ if(rdata1)
+ HDfree(rdata1);
+ if(rdata2)
+ HDfree(rdata2);
return -1;
} /* end test_big_chunks_bypass_cache() */
@@ -9265,9 +9287,9 @@ test_fixed_array(hid_t fapl)
hsize_t msize_big[1] = {POINTS_BIG}; /* Size of memory space for big dataset */
int wbuf[POINTS]; /* write buffer */
- int wbuf_big[POINTS_BIG]; /* write buffer for big dataset */
+ int *wbuf_big = NULL; /* write buffer for big dataset */
int rbuf[POINTS]; /* read buffer */
- int rbuf_big[POINTS_BIG]; /* read buffer for big dataset */
+ int *rbuf_big = NULL; /* read buffer for big dataset */
hsize_t chunk_dim2[2] = {4, 3}; /* Chunk dimensions */
int chunks[12][6]; /* # of chunks for dataset dimensions */
@@ -9309,6 +9331,12 @@ test_fixed_array(hid_t fapl)
if((empty_size = h5_get_file_size(filename, fapl)) < 0)
TEST_ERROR
+ /* Allocate the "big" buffers */
+ if(NULL == (wbuf_big = (int *)HDmalloc(sizeof(int) * POINTS_BIG)))
+ TEST_ERROR
+ if(NULL == (rbuf_big = (int *)HDmalloc(sizeof(int) * POINTS_BIG)))
+ TEST_ERROR
+
#ifdef H5_HAVE_FILTER_DEFLATE
/* Loop over compressing chunks */
for(compress = FALSE; compress <= TRUE; compress++) {
@@ -9567,7 +9595,7 @@ test_fixed_array(hid_t fapl)
/* Verify that written and read data are the same */
for(i = 0; i < POINTS_BIG; i++)
- if(rbuf_big[i] != wbuf_big[i]){
+ if(rbuf_big[i] != wbuf_big[i]) {
printf(" Line %d: Incorrect value, wbuf_bif[%u]=%d, rbuf_big[%u]=%d\n",
__LINE__,(unsigned)i,wbuf_big[i],(unsigned)i,rbuf_big[i]);
TEST_ERROR;
@@ -9599,6 +9627,10 @@ test_fixed_array(hid_t fapl)
} /* end for */
#endif /* H5_HAVE_FILTER_DEFLATE */
+ /* Release buffers */
+ HDfree(wbuf_big);
+ HDfree(rbuf_big);
+
PASSED();
return 0;
@@ -9610,6 +9642,10 @@ error:
H5Sclose(mem_id);
H5Fclose(fid);
} H5E_END_TRY;
+ if(wbuf_big)
+ HDfree(wbuf_big);
+ if(rbuf_big)
+ HDfree(rbuf_big);
return -1;
} /* end test_fixed_array() */
@@ -9650,11 +9686,11 @@ test_single_chunk(hid_t fapl)
hid_t sid = -1, sid_max = -1; /* Dataspace ID for dataset with fixed dimensions */
hid_t did = -1, did_max = -1; /* Dataset ID for dataset with fixed dimensions */
hsize_t dim2[2] = {DSET_DIM1, DSET_DIM2}; /* Dataset dimensions */
- hsize_t t_dim2[2] = {50, 100}; /* Dataset dimensions */
- int wbuf[DSET_DIM1*DSET_DIM2]; /* write buffer */
- int t_wbuf[50*100]; /* write buffer */
- int rbuf[DSET_DIM1*DSET_DIM2]; /* read buffer */
- int t_rbuf[50*100]; /* read buffer */
+ hsize_t t_dim2[2] = {DSET_TMP_DIM1, DSET_TMP_DIM2}; /* Dataset dimensions */
+ int *wbuf = NULL; /* write buffer */
+ int *t_wbuf = NULL; /* write buffer */
+ int *rbuf = NULL; /* read buffer */
+ int *t_rbuf = NULL; /* read buffer */
H5D_chunk_index_t idx_type; /* Dataset chunk index type */
H5F_libver_t low, high; /* File format bounds */
@@ -9686,10 +9722,20 @@ test_single_chunk(hid_t fapl)
if((empty_size = h5_get_file_size(filename, fapl)) < 0)
TEST_ERROR
+ /* Allocate the buffers */
+ if(NULL == (wbuf = (int *)HDmalloc(sizeof(int) * (DSET_DIM1 * DSET_DIM2))))
+ TEST_ERROR
+ if(NULL == (rbuf = (int *)HDmalloc(sizeof(int) * (DSET_DIM1 * DSET_DIM2))))
+ TEST_ERROR
+ if(NULL == (t_wbuf = (int *)HDmalloc(sizeof(int) * (DSET_TMP_DIM1 * DSET_TMP_DIM2))))
+ TEST_ERROR
+ if(NULL == (t_rbuf = (int *)HDmalloc(sizeof(int) * (DSET_TMP_DIM1 * DSET_TMP_DIM2))))
+ TEST_ERROR
+
for(i = n = 0; i < (DSET_DIM1 * DSET_DIM2); i++)
wbuf[i] = (int)n++;
- for(i = n = 0; i < (50* 100); i++)
+ for(i = n = 0; i < (DSET_TMP_DIM1* DSET_TMP_DIM2); i++)
t_wbuf[i] = (int)n++;
#ifdef H5_HAVE_FILTER_DEFLATE
@@ -9800,14 +9846,14 @@ test_single_chunk(hid_t fapl)
/* Open the second dataset */
if((did = H5Dopen2(fid, DSET_SINGLE_NOMAX, H5P_DEFAULT)) < 0) TEST_ERROR;
- HDmemset(rbuf, 0, sizeof(rbuf));
+ HDmemset(rbuf, 0, sizeof(int) * (DSET_DIM1 * DSET_DIM2));
/* Read from dataset */
if(H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, t_rbuf) < 0) TEST_ERROR;
/* Verify that written and read data are the same */
- for(i = 0; i < (50* 100); i++)
- if(t_rbuf[i] != t_wbuf[i]){
+ for(i = 0; i < (DSET_TMP_DIM1* DSET_TMP_DIM2); i++)
+ if(t_rbuf[i] != t_wbuf[i]) {
printf(" Line %d: Incorrect value, t_wbuf[%u]=%d, t_rbuf[%u]=%d\n",
__LINE__,(unsigned)i,t_wbuf[i],(unsigned)i,t_rbuf[i]);
TEST_ERROR;
@@ -9836,6 +9882,12 @@ test_single_chunk(hid_t fapl)
} /* end for */
#endif /* H5_HAVE_FILTER_DEFLATE */
+ /* Release buffers */
+ HDfree(wbuf);
+ HDfree(rbuf);
+ HDfree(t_wbuf);
+ HDfree(t_rbuf);
+
PASSED();
return 0;
@@ -9849,6 +9901,14 @@ error:
H5Sclose(sid_max);
H5Fclose(fid);
} H5E_END_TRY;
+ if(wbuf)
+ HDfree(wbuf);
+ if(rbuf)
+ HDfree(rbuf);
+ if(t_wbuf)
+ HDfree(t_wbuf);
+ if(t_rbuf)
+ HDfree(t_rbuf);
return -1;
} /* end test_single_chunk() */
diff --git a/test/dt_arith.c b/test/dt_arith.c
index 064ee69..1ebcf74 100644
--- a/test/dt_arith.c
+++ b/test/dt_arith.c
@@ -94,6 +94,9 @@ static int skip_overflow_tests_g = 0;
#define TEST_DENORM 2
#define TEST_SPECIAL 3
+/* Temporary buffer sizes */
+#define TMP_BUF_DIM1 32
+#define TMP_BUF_DIM2 100
/* Don't use hardware conversions if set */
static int without_hardware_g = 0;
@@ -2673,14 +2676,16 @@ test_conv_int_2(void)
{
int i, j;
hid_t src_type, dst_type;
- char buf[32*100];
+ char *buf;
printf("%-70s", "Testing overlap calculations");
HDfflush(stdout);
- HDmemset(buf, 0, sizeof buf);
- for (i=1; i<=32; i++) {
- for (j=1; j<=32; j++) {
+ buf = (char *)HDcalloc(TMP_BUF_DIM1, TMP_BUF_DIM2);
+ HDassert(buf);
+
+ for(i = 1; i <= TMP_BUF_DIM1; i++) {
+ for(j = 1; j <= TMP_BUF_DIM1; j++) {
/* Source type */
src_type = H5Tcopy(H5T_NATIVE_CHAR);
@@ -2694,12 +2699,13 @@ test_conv_int_2(void)
* Conversion. If overlap calculations aren't right then an
* assertion will fail in H5T__conv_i_i()
*/
- H5Tconvert(src_type, dst_type, (size_t)100, buf, NULL, H5P_DEFAULT);
+ H5Tconvert(src_type, dst_type, (size_t)TMP_BUF_DIM2, buf, NULL, H5P_DEFAULT);
H5Tclose(src_type);
H5Tclose(dst_type);
}
}
PASSED();
+ HDfree(buf);
return 0;
}
diff --git a/test/evict_on_close.c b/test/evict_on_close.c
new file mode 100644
index 0000000..1f515b2
--- /dev/null
+++ b/test/evict_on_close.c
@@ -0,0 +1,779 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * 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 files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help@hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Dana Robinson
+ * Spring 2016
+ *
+ * Purpose: Tests the basic operation of the evict-on-close cache
+ * behavior. Tests that ensure the tagging is handled correctly
+ * are located in cache.c.
+ */
+
+#define H5C_FRIEND /*suppress error about including H5Cpkg */
+#define H5D_FRIEND /*suppress error about including H5Dpkg */
+#define H5D_TESTING
+#define H5F_FRIEND /*suppress error about including H5Fpkg */
+#define H5F_TESTING
+#define H5I_FRIEND /*suppress error about including H5Ipkg */
+#define H5I_TESTING
+
+
+#include "h5test.h"
+#include "H5Cpkg.h"
+#include "H5Dpkg.h"
+#include "H5Fpkg.h"
+#include "H5Ipkg.h"
+
+/* Uncomment to manually inspect cache states */
+/* #define EOC_MANUAL_INSPECTION */
+
+const char *FILENAMES[] = {
+ "evict-on-close", /* 0 */
+ NULL
+};
+#define FILENAME_BUF_SIZE 1024
+
+/* Dataset names */
+#define DSET_COMPACT_NAME "compact"
+#define DSET_CONTIGUOUS_NAME "contiguous"
+#define DSET_BTREE_NAME "v1_btree"
+#define DSET_EARRAY_NAME "earray"
+#define DSET_BT2_NAME "v2_btree"
+#define DSET_FARRAY_NAME "farray"
+#define DSET_SINGLE_NAME "single"
+
+/* All datasets store 1000 elements */
+#define NELEMENTS 1024
+
+static hbool_t verify_tag_not_in_cache(H5F_t *f, haddr_t tag);
+static herr_t check_evict_on_close_api(void);
+static hid_t generate_eoc_test_file(hid_t fapl_id);
+static herr_t check_configuration(hid_t fid, const char *dset_name);
+
+
+/*-------------------------------------------------------------------------
+ * Function: verify_tag_not_in_cache()
+ *
+ * Purpose: Ensure that metadata cache entries with a given tag are not
+ * present in the cache.
+ *
+ * Return: TRUE/FALSE
+ *
+ * Programmer: Dana Robinson
+ * Fall 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+verify_tag_not_in_cache(H5F_t *f, haddr_t tag)
+{
+ H5C_t *cache_ptr = NULL; /* cache pointer */
+ int i = 0; /* iterator */
+ H5C_cache_entry_t *entry_ptr = NULL; /* entry pointer */
+
+ cache_ptr = f->shared->cache;
+
+ for(i = 0; i < H5C__HASH_TABLE_LEN; i++) {
+
+ entry_ptr = cache_ptr->index[i];
+
+ while(entry_ptr != NULL) {
+
+ if(tag == entry_ptr->tag)
+ return TRUE;
+ else
+ entry_ptr = entry_ptr->ht_next;
+
+ } /* end while */
+ } /* end for */
+
+ return FALSE;
+
+} /* end verify_tag_not_in_cache() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: generate_eoc_test_file()
+ *
+ * Purpose: Generate the evict-on-close test file.
+ *
+ * Return: Success: The file ID of the created file
+ * Failure: -1
+ *
+ * Programmer: Dana Robinson
+ * Fall 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+static hid_t
+generate_eoc_test_file(hid_t fapl_id)
+{
+ char filename[FILENAME_BUF_SIZE]; /* decorated file name */
+ hid_t fid = -1; /* file ID (returned) */
+ hid_t fapl_copy_id = -1; /* ID of copied fapl */
+ hid_t sid = -1; /* dataspace ID */
+ hid_t dcpl_id = -1; /* dataset creation plist */
+ hid_t did = -1; /* dataset ID */
+ int rank; /* # of array dimensions */
+ hsize_t current_dims[2]; /* current dataset size */
+ hsize_t maximum_dims[2]; /* maximum dataset size */
+ hsize_t chunk_dims[2]; /* chunk dimensions */
+ H5D_chunk_index_t idx_type; /* dataset chunk index type */
+ H5D_layout_t layout_type; /* dataset layout type */
+ int *data = NULL; /* buffer for fake data */
+ int n; /* # of data elements */
+
+ TESTING("generating evict-on-close test file");
+
+ /* Get a VFD-specific filename */
+ h5_fixname(FILENAMES[0], fapl_id, filename, sizeof(filename));
+
+ /* Create file */
+ if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id)) < 0)
+ TEST_ERROR;
+
+ /***********************************************************/
+ /* Generate datasets and ensure that the scheme is correct */
+ /***********************************************************/
+
+ /* Create the data buffer */
+ if(NULL == (data = (int *)HDcalloc(NELEMENTS, sizeof(int))))
+ TEST_ERROR;
+
+ /****************************************************/
+ /* Old file format data structures (v1 B-tree only) */
+ /****************************************************/
+
+ /********************/
+ /* Version 1 B-tree */
+ /********************/
+
+ /* Create dataspace */
+ n = NELEMENTS;
+ rank = 1;
+ current_dims[0] = (hsize_t)n;
+ maximum_dims[0] = H5S_UNLIMITED;
+ if((sid = H5Screate_simple(rank, current_dims, maximum_dims)) < 0)
+ TEST_ERROR;
+
+ /* Create dcpl and set up chunking */
+ if((dcpl_id = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+ TEST_ERROR;
+ chunk_dims[0] = 1;
+ if(H5Pset_chunk(dcpl_id, rank, chunk_dims) < 0)
+ TEST_ERROR;
+
+ /* Create dataset */
+ if((did = H5Dcreate2(fid, DSET_BTREE_NAME, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl_id, H5P_DEFAULT)) < 0)
+ TEST_ERROR;
+
+ /* Ensure we're using the correct chunk indexing scheme */
+ if(H5D__layout_idx_type_test(did, &idx_type) < 0)
+ TEST_ERROR;
+ if(idx_type != H5D_CHUNK_IDX_BTREE)
+ FAIL_PUTS_ERROR("should be using version 1 B-tree as the chunk index");
+
+ /* Write a bunch of fake data */
+ if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data) < 0)
+ TEST_ERROR;
+
+ /* Close IDs for this dataset */
+ if(H5Dclose(did) < 0)
+ TEST_ERROR;
+ if(H5Sclose(sid) < 0)
+ TEST_ERROR;
+ if(H5Pclose(dcpl_id) < 0)
+ TEST_ERROR;
+
+ /***********************************/
+ /* New file format data structures */
+ /***********************************/
+
+ /* Close the file */
+ if(H5Fclose(fid) < 0)
+ TEST_ERROR;
+
+ /* Copy the fapl and set the latest file format */
+ if((fapl_copy_id = H5Pcopy(fapl_id)) < 0)
+ TEST_ERROR;
+ if(H5Pset_libver_bounds(fapl_copy_id, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
+ TEST_ERROR;
+
+ /* Reopen the file */
+ if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl_copy_id)) < 0)
+ TEST_ERROR;
+
+ /********************/
+ /* Extensible Array */
+ /********************/
+
+ /* Create dataspace */
+ n = NELEMENTS;
+ rank = 1;
+ current_dims[0] = (hsize_t)n;
+ maximum_dims[0] = H5S_UNLIMITED;
+ if((sid = H5Screate_simple(rank, current_dims, maximum_dims)) < 0)
+ TEST_ERROR;
+
+ /* Create dcpl and set up chunking */
+ if((dcpl_id = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+ TEST_ERROR;
+ chunk_dims[0] = 1;
+ if(H5Pset_chunk(dcpl_id, rank, chunk_dims) < 0)
+ TEST_ERROR;
+
+ /* Create dataset */
+ if((did = H5Dcreate2(fid, DSET_EARRAY_NAME, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl_id, H5P_DEFAULT)) < 0)
+ TEST_ERROR;
+
+ /* Ensure we're using the correct chunk indexing scheme */
+ if(H5D__layout_idx_type_test(did, &idx_type) < 0)
+ TEST_ERROR;
+ if(idx_type != H5D_CHUNK_IDX_EARRAY)
+ FAIL_PUTS_ERROR("should be using extensible array as the chunk index");
+
+ /* Write a bunch of fake data */
+ if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data) < 0)
+ TEST_ERROR;
+
+ /* Close IDs for this dataset */
+ if(H5Dclose(did) < 0)
+ TEST_ERROR;
+ if(H5Sclose(sid) < 0)
+ TEST_ERROR;
+ if(H5Pclose(dcpl_id) < 0)
+ TEST_ERROR;
+
+ /********************/
+ /* Version 2 B-Tree */
+ /********************/
+
+ /* Create dataspace */
+ n = NELEMENTS;
+ rank = 2;
+ current_dims[0] = (hsize_t)2;
+ current_dims[1] = (hsize_t)(n/2);
+ maximum_dims[0] = H5S_UNLIMITED;
+ maximum_dims[1] = H5S_UNLIMITED;
+ if((sid = H5Screate_simple(rank, current_dims, maximum_dims)) < 0)
+ TEST_ERROR;
+
+ /* Create dcpl and set up chunking */
+ if((dcpl_id = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+ TEST_ERROR;
+ chunk_dims[0] = 1;
+ chunk_dims[1] = 1;
+ if(H5Pset_chunk(dcpl_id, rank, chunk_dims) < 0)
+ TEST_ERROR;
+
+ /* Create dataset */
+ if((did = H5Dcreate2(fid, DSET_BT2_NAME, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl_id, H5P_DEFAULT)) < 0)
+ TEST_ERROR;
+
+ /* Ensure we're using the correct chunk indexing scheme */
+ if(H5D__layout_idx_type_test(did, &idx_type) < 0)
+ TEST_ERROR;
+ if(idx_type != H5D_CHUNK_IDX_BT2)
+ FAIL_PUTS_ERROR("should be using version 2 B-tree as the chunk index");
+
+ /* Write a bunch of fake data */
+ if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data) < 0)
+ TEST_ERROR;
+
+ /* Close IDs for this dataset */
+ if(H5Dclose(did) < 0)
+ TEST_ERROR;
+ if(H5Sclose(sid) < 0)
+ TEST_ERROR;
+ if(H5Pclose(dcpl_id) < 0)
+ TEST_ERROR;
+
+ /***************/
+ /* Fixed Array */
+ /***************/
+
+ /* Create dataspace */
+ n = NELEMENTS;
+ rank = 1;
+ current_dims[0] = (hsize_t)n;
+ maximum_dims[0] = (hsize_t)n;
+ if((sid = H5Screate_simple(rank, current_dims, maximum_dims)) < 0)
+ TEST_ERROR;
+
+ /* Create dcpl and set up chunking */
+ if((dcpl_id = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+ TEST_ERROR;
+ chunk_dims[0] = 1;
+ chunk_dims[1] = 1;
+ if(H5Pset_chunk(dcpl_id, rank, chunk_dims) < 0)
+ TEST_ERROR;
+
+ /* Create dataset */
+ if((did = H5Dcreate2(fid, DSET_FARRAY_NAME, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl_id, H5P_DEFAULT)) < 0)
+ TEST_ERROR;
+
+ /* Ensure we're using the correct chunk indexing scheme */
+ if(H5D__layout_idx_type_test(did, &idx_type) < 0)
+ TEST_ERROR;
+ if(idx_type != H5D_CHUNK_IDX_FARRAY)
+ FAIL_PUTS_ERROR("should be using fixed array as the chunk index");
+
+ /* Write a bunch of fake data */
+ if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data) < 0)
+ TEST_ERROR;
+
+ /* Close IDs for this dataset */
+ if(H5Dclose(did) < 0)
+ TEST_ERROR;
+ if(H5Sclose(sid) < 0)
+ TEST_ERROR;
+ if(H5Pclose(dcpl_id) < 0)
+ TEST_ERROR;
+
+ /****************/
+ /* Single Chunk */
+ /****************/
+
+ /* Create dataspace */
+ n = NELEMENTS;
+ rank = 1;
+ current_dims[0] = (hsize_t)n;
+ maximum_dims[0] = (hsize_t)n;
+ if((sid = H5Screate_simple(rank, current_dims, maximum_dims)) < 0)
+ TEST_ERROR;
+
+ /* Create dcpl and set up chunking */
+ if((dcpl_id = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+ TEST_ERROR;
+ chunk_dims[0] = (hsize_t)n;
+ chunk_dims[1] = (hsize_t)n;
+ if(H5Pset_chunk(dcpl_id, rank, chunk_dims) < 0)
+ TEST_ERROR;
+
+ /* Create dataset */
+ if((did = H5Dcreate2(fid, DSET_SINGLE_NAME, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl_id, H5P_DEFAULT)) < 0)
+ TEST_ERROR;
+
+ /* Ensure we're using the correct chunk indexing scheme */
+ if(H5D__layout_idx_type_test(did, &idx_type) < 0)
+ TEST_ERROR;
+ if(idx_type != H5D_CHUNK_IDX_SINGLE)
+ FAIL_PUTS_ERROR("should be using single chunk as the chunk index");
+
+ /* Write a bunch of fake data */
+ if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data) < 0)
+ TEST_ERROR;
+
+ /* Close IDs for this dataset */
+ if(H5Dclose(did) < 0)
+ TEST_ERROR;
+ if(H5Sclose(sid) < 0)
+ TEST_ERROR;
+ if(H5Pclose(dcpl_id) < 0)
+ TEST_ERROR;
+
+ /**************/
+ /* Contiguous */
+ /**************/
+
+ /* Create dataspace */
+ n = NELEMENTS;
+ rank = 1;
+ current_dims[0] = (hsize_t)n;
+ maximum_dims[0] = (hsize_t)n;
+ if((sid = H5Screate_simple(rank, current_dims, maximum_dims)) < 0)
+ TEST_ERROR;
+
+ /* Create dataset */
+ if((did = H5Dcreate2(fid, DSET_CONTIGUOUS_NAME, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+ TEST_ERROR;
+
+ /* Ensure we're using the correct layout scheme */
+ if(H5D__layout_type_test(did, &layout_type) < 0)
+ TEST_ERROR;
+ if(layout_type != H5D_CONTIGUOUS)
+ FAIL_PUTS_ERROR("should be using contiguous layout");
+
+ /* Write a bunch of fake data */
+ if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data) < 0)
+ TEST_ERROR;
+
+ /* Close IDs for this dataset */
+ if(H5Dclose(did) < 0)
+ TEST_ERROR;
+ if(H5Sclose(sid) < 0)
+ TEST_ERROR;
+
+ /***********/
+ /* Compact */
+ /***********/
+
+ /* Create dataspace */
+ n = 1;
+ rank = 1;
+ current_dims[0] = (hsize_t)n;
+ maximum_dims[0] = (hsize_t)n;
+ if((sid = H5Screate_simple(rank, current_dims, maximum_dims)) < 0)
+ TEST_ERROR;
+
+ /* Create dcpl and set up compact layout */
+ if((dcpl_id = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+ TEST_ERROR;
+ if(H5Pset_layout(dcpl_id, H5D_COMPACT) < 0)
+ TEST_ERROR;
+
+ /* Create dataset */
+ if((did = H5Dcreate2(fid, DSET_COMPACT_NAME, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl_id, H5P_DEFAULT)) < 0)
+ TEST_ERROR;
+
+ /* Ensure we're using the correct layout scheme */
+ if(H5D__layout_type_test(did, &layout_type) < 0)
+ TEST_ERROR;
+ if(layout_type != H5D_COMPACT)
+ FAIL_PUTS_ERROR("should be using compact layout");
+
+ /* Write a bunch of fake data */
+ if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data) < 0)
+ TEST_ERROR;
+
+ /* Close IDs for this dataset */
+ if(H5Dclose(did) < 0)
+ TEST_ERROR;
+ if(H5Sclose(sid) < 0)
+ TEST_ERROR;
+ if(H5Pclose(dcpl_id) < 0)
+ TEST_ERROR;
+
+ /********/
+ /* DONE */
+ /********/
+
+ /* Close/free everything else */
+ if(H5Pclose(fapl_copy_id) < 0)
+ TEST_ERROR;
+
+ HDfree(data);
+
+ PASSED();
+ return fid;
+
+error:
+ H5E_BEGIN_TRY {
+ H5Fclose(fid);
+ H5Dclose(did);
+ H5Sclose(sid);
+ H5Pclose(dcpl_id);
+ H5Pclose(fapl_copy_id);
+ } H5E_END_TRY;
+
+ HDfree(data);
+
+ H5_FAILED();
+ return -1;
+
+} /* end generate_eoc_test_file() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: check_configuration()
+ *
+ * Purpose: Verify that the evict-on-close feature works for a given
+ * dataset layout and/or chunk index.
+ *
+ * Return: SUCCEED/FAIL
+ *
+ * Programmer: Dana Robinson
+ * Fall 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+check_configuration(hid_t fid, const char *dset_name)
+{
+ H5F_t *file_ptr = NULL; /* ptr to internal file struct */
+ hid_t did = -1; /* dataset ID */
+ H5D_t *dset_ptr = NULL; /* ptr to internal dset struct */
+ haddr_t tag; /* MD cache tag for dataset */
+ int *data = NULL; /* buffer for fake data */
+ int32_t before, during, after; /* cache sizes */
+
+ /* NOTE: The TESTING() macro is called in main() */
+
+ /* Get a pointer to the file struct */
+ if(NULL == (file_ptr = (H5F_t *)H5I_object_verify(fid, H5I_FILE)))
+ TEST_ERROR;
+
+ /* Create the data buffer */
+ if(NULL == (data = (int *)HDcalloc(NELEMENTS, sizeof(int))))
+ TEST_ERROR;
+
+ /* Record the number of cache entries */
+ before = file_ptr->shared->cache->index_len;
+
+#ifdef EOC_MANUAL_INSPECTION
+ HDprintf("\nCACHE BEFORE DATASET OPEN:\n");
+ if(H5AC_dump_cache(file_ptr) < 0)
+ TEST_ERROR;
+ HDprintf("NUMBER OF CACHE ENTRIES: %d\n", before);
+#endif
+
+ /* Open dataset and get the metadata tag */
+ if((did = H5Dopen2(fid, dset_name, H5P_DEFAULT)) < 0)
+ TEST_ERROR;
+ if(NULL == (dset_ptr = (H5D_t *)H5I_object_verify(did, H5I_DATASET)))
+ TEST_ERROR;
+ tag = dset_ptr->oloc.addr;
+
+ /* Read data from the dataset so the cache gets populated with chunk
+ * and the like.
+ */
+ if(H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data) < 0)
+ TEST_ERROR;
+
+ /* Record the number of cache entries */
+ during = file_ptr->shared->cache->index_len;
+
+#ifdef EOC_MANUAL_INSPECTION
+ HDprintf("\nCACHE AFTER DATA READ (WHILE OPEN):\n");
+ if(H5AC_dump_cache(file_ptr) < 0)
+ TEST_ERROR;
+ HDprintf("TAG: %#X\n", tag);
+ HDprintf("NUMBER OF CACHE ENTRIES: %d\n", during);
+#endif
+
+ /* Close the dataset */
+ if(H5Dclose(did) < 0)
+ TEST_ERROR;
+
+ /* Record the number of cache entries */
+ after = file_ptr->shared->cache->index_len;
+
+#ifdef EOC_MANUAL_INSPECTION
+ HDprintf("\nCACHE AFTER DATASET CLOSE:\n");
+ if(H5AC_dump_cache(file_ptr) < 0)
+ TEST_ERROR;
+ HDprintf("NUMBER OF CACHE ENTRIES: %d\n", after);
+#endif
+
+ /* Ensure that the cache does not contain data items with the tag */
+ if(TRUE == verify_tag_not_in_cache(file_ptr, tag))
+ TEST_ERROR;
+
+ /* Compare the number of cache entries */
+ if(before != after || before == during)
+ TEST_ERROR;
+
+ HDfree(data);
+
+ PASSED();
+ return SUCCEED;
+
+error:
+ H5E_BEGIN_TRY {
+ H5Dclose(did);
+ } H5E_END_TRY;
+
+ H5_FAILED();
+ return FAIL;
+
+} /* check_configuration() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: check_evict_on_close_api()
+ *
+ * Purpose: Verify that the H5Pset/get_evict_on_close() calls behave
+ * correctly.
+ *
+ * Return: SUCCEED/FAIL
+ *
+ * Programmer: Dana Robinson
+ * Spring 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+check_evict_on_close_api(void)
+{
+ hid_t fapl_id = -1;
+ hid_t dapl_id = -1;
+ hbool_t evict_on_close;
+ herr_t status;
+
+ TESTING("evict on close API");
+
+ /* Create a fapl */
+ if((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0)
+ TEST_ERROR;
+
+ /* Check the default */
+ evict_on_close = TRUE;
+ if(H5Pget_evict_on_close(fapl_id, &evict_on_close) < 0)
+ TEST_ERROR;
+ if(evict_on_close != FALSE)
+ FAIL_PUTS_ERROR("Incorrect default evict on close value.");
+
+ /* Set the evict on close property */
+ evict_on_close = TRUE;
+ if(H5Pset_evict_on_close(fapl_id, evict_on_close) < 0)
+ TEST_ERROR;
+
+ /* Make sure we can get it back out */
+ evict_on_close = FALSE;
+ if(H5Pget_evict_on_close(fapl_id, &evict_on_close) < 0)
+ TEST_ERROR;
+ if(evict_on_close != TRUE)
+ FAIL_PUTS_ERROR("Incorrect evict on close value.");
+
+ /* close fapl */
+ if(H5Pclose(fapl_id) < 0)
+ TEST_ERROR;
+
+ /**********************************************/
+ /* Trying passing in a non-fapl property list */
+ /**********************************************/
+
+ if((dapl_id = H5Pcreate(H5P_DATASET_ACCESS)) < 0)
+ TEST_ERROR;
+
+ /* ensure using an incorrect access plist fails */
+ H5E_BEGIN_TRY {
+ status = H5Pset_evict_on_close(dapl_id, evict_on_close);
+ } H5E_END_TRY;
+ if(status >= 0)
+ FAIL_PUTS_ERROR("H5Pset_evict_on_close() accepted invalid access plist.");
+
+ /* ensure an invalid plist fails */
+ H5E_BEGIN_TRY {
+ status = H5Pget_evict_on_close((hid_t)-1, &evict_on_close);
+ } H5E_END_TRY;
+ if(status >= 0)
+ FAIL_PUTS_ERROR("H5Pget_evict_on_close() accepted invalid hid_t.");
+
+ /* close dapl */
+ if(H5Pclose(dapl_id) < 0)
+ TEST_ERROR;
+
+ PASSED();
+ return SUCCEED;
+
+error:
+ H5_FAILED();
+ return FAIL;
+
+} /* check_evict_on_close_api() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: main
+ *
+ * Return: EXIT_FAILURE/EXIT_SUCCESS
+ *
+ * Programmer: Dana Robinson
+ * Spring 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+ hid_t fapl_id = -1; /* VFD-specific fapl */
+ hid_t fid = -1; /* file ID */
+ unsigned nerrors = 0; /* number of test errors */
+
+ HDprintf("Testing evict-on-close cache behavior.\n");
+
+ /* Initialize */
+ h5_reset();
+
+ /* Test H5P call to set up EoC (does not require VFD-specific fapl) */
+ nerrors += check_evict_on_close_api() < 0 ? 1 : 0;
+
+ /* Set up VFD-specific fapl */
+ if((fapl_id = h5_fileaccess()) < 0) {
+ nerrors++;
+ PUTS_ERROR("Unable to get VFD-specific fapl\n");
+ } /* end if */
+
+ /* Set evict-on-close property */
+ if(H5Pset_evict_on_close(fapl_id, TRUE) < 0) {
+ nerrors++;
+ PUTS_ERROR("Unable to set evict-on-close property\n");
+ } /* end if */
+
+ /*************************/
+ /* Test EoC for datasets */
+ /*************************/
+
+ /* Generate the test file */
+ if((fid = generate_eoc_test_file(fapl_id)) < 0) {
+ nerrors++;
+ PUTS_ERROR("Unable to generate test file\n");
+ } /* end if */
+
+ /* Run tests with a variety of dataset configurations
+ * PASSED() and H5_FAILED() are handled in check_configuration()
+ */
+ TESTING("evict on close with version 1 B-tree chunk index");
+ nerrors += check_configuration(fid, DSET_BTREE_NAME) < 0 ? 1 : 0;
+ TESTING("evict on close with extensible array chunk index");
+ nerrors += check_configuration(fid, DSET_EARRAY_NAME) < 0 ? 1 : 0;
+ TESTING("evict on close with version 2 B-tree chunk index");
+ nerrors += check_configuration(fid, DSET_BT2_NAME) < 0 ? 1 : 0;
+ TESTING("evict on close with fixed array chunk index");
+ nerrors += check_configuration(fid, DSET_FARRAY_NAME) < 0 ? 1 : 0;
+ TESTING("evict on close with \'single chunk\' chunk index");
+ nerrors += check_configuration(fid, DSET_SINGLE_NAME) < 0 ? 1 : 0;
+ TESTING("evict on close with contiguous layout");
+ nerrors += check_configuration(fid, DSET_CONTIGUOUS_NAME) < 0 ? 1 : 0;
+ TESTING("evict on close with compact layout");
+ nerrors += check_configuration(fid, DSET_COMPACT_NAME) < 0 ? 1 : 0;
+
+ /* Close the test file */
+ if(H5Fclose(fid) < 0) {
+ nerrors++;
+ PUTS_ERROR("Unable to close the test file.\n");
+ } /* end if */
+
+ /* Clean up files and close the VFD-specific fapl */
+ h5_delete_all_test_files(FILENAMES, fapl_id);
+ if(H5Pclose(fapl_id) < 0) {
+ nerrors++;
+ PUTS_ERROR("Unable to close VFD-specific fapl.\n");
+ } /* end if */
+
+ if(nerrors)
+ goto error;
+
+ HDprintf("All evict-on-close tests passed.\n");
+
+ return EXIT_SUCCESS;
+
+error:
+
+ HDprintf("***** %u evict-on-close test%s FAILED! *****\n",
+ nerrors, nerrors > 1 ? "S" : "");
+
+ h5_delete_all_test_files(FILENAMES, fapl_id);
+ H5E_BEGIN_TRY {
+ H5Fclose(fid);
+ H5Pclose(fapl_id);
+ } H5E_END_TRY;
+
+ return EXIT_FAILURE;
+
+} /* end main() */
+
diff --git a/test/gheap.c b/test/gheap.c
index 317e306..eafc49d 100644
--- a/test/gheap.c
+++ b/test/gheap.c
@@ -35,6 +35,9 @@
* GHEAP_REPEATED_ERR_LIM errors, and suppress the rest */
#define GHEAP_REPEATED_ERR_LIM 20
+/* Number of heap objects to test */
+#define GHEAP_TEST_NOBJS 1024
+
#define GHEAP_REPEATED_ERR(MSG) \
{ \
nerrors++; \
@@ -78,9 +81,9 @@ test_1 (hid_t fapl)
{
hid_t file = -1;
H5F_t *f = NULL;
- H5HG_t obj[1024];
- uint8_t out[1024];
- uint8_t in[1024];
+ H5HG_t *obj = NULL;
+ uint8_t out[GHEAP_TEST_NOBJS];
+ uint8_t in[GHEAP_TEST_NOBJS];
size_t u;
size_t size;
herr_t status;
@@ -89,6 +92,10 @@ test_1 (hid_t fapl)
TESTING("monotonically increasing lengths");
+ /* Allocate buffer for H5HG_t */
+ if(NULL == (obj = (H5HG_t *)HDmalloc(sizeof(H5HG_t) * GHEAP_TEST_NOBJS)))
+ goto error;
+
/* Open a clean file */
h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
@@ -104,7 +111,7 @@ test_1 (hid_t fapl)
* a clean file, the addresses allocated for the collections should also
* be monotonically increasing.
*/
- for(u = 0; u < 1024; u++) {
+ for(u = 0; u < GHEAP_TEST_NOBJS; u++) {
size = u + 1;
HDmemset(out, (int)('A' + u % 26), size);
H5Eclear2(H5E_DEFAULT);
@@ -123,7 +130,7 @@ test_1 (hid_t fapl)
/*
* Now try to read each object back.
*/
- for(u = 0; u < 1024; u++) {
+ for(u = 0; u < GHEAP_TEST_NOBJS; u++) {
size = u + 1;
HDmemset(out, (int)('A' + u % 26), size);
H5Eclear2(H5E_DEFAULT);
@@ -138,6 +145,10 @@ test_1 (hid_t fapl)
}
}
+ /* Release buffer */
+ HDfree(obj);
+ obj = NULL;
+
if(H5Fclose(file) < 0) goto error;
if(nerrors) goto error;
@@ -148,6 +159,8 @@ error:
H5E_BEGIN_TRY {
H5Fclose(file);
} H5E_END_TRY;
+ if(obj)
+ HDfree(obj);
return MAX(1, nerrors);
}
@@ -174,9 +187,9 @@ test_2 (hid_t fapl)
{
hid_t file = -1;
H5F_t *f = NULL;
- H5HG_t obj[1024];
- uint8_t out[1024];
- uint8_t in[1024];
+ H5HG_t *obj = NULL;
+ uint8_t out[GHEAP_TEST_NOBJS];
+ uint8_t in[GHEAP_TEST_NOBJS];
size_t u;
size_t size;
int nerrors = 0;
@@ -184,6 +197,10 @@ test_2 (hid_t fapl)
TESTING("monotonically decreasing lengths");
+ /* Allocate buffer for H5HG_t */
+ if(NULL == (obj = (H5HG_t *)HDmalloc(sizeof(H5HG_t) * GHEAP_TEST_NOBJS)))
+ goto error;
+
/* Open a clean file */
h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
@@ -197,8 +214,8 @@ test_2 (hid_t fapl)
/*
* Write the objects, monotonically decreasing in length.
*/
- for(u = 0; u < 1024; u++) {
- size = 1024 - u;
+ for(u = 0; u < GHEAP_TEST_NOBJS; u++) {
+ size = GHEAP_TEST_NOBJS - u;
HDmemset(out, (int)('A' + u % 26), size);
H5Eclear2(H5E_DEFAULT);
if (H5HG_insert (f, H5AC_ind_read_dxpl_id, size, out, obj + u) < 0) {
@@ -211,8 +228,8 @@ test_2 (hid_t fapl)
/*
* Now try to read each object back.
*/
- for(u = 0; u < 1024; u++) {
- size = 1024 - u;
+ for(u = 0; u < GHEAP_TEST_NOBJS; u++) {
+ size = GHEAP_TEST_NOBJS - u;
HDmemset(out, (int)('A' + u % 26), size);
H5Eclear2(H5E_DEFAULT);
if (NULL==H5HG_read (f, H5AC_ind_read_dxpl_id, obj + u, in, NULL)) {
@@ -226,8 +243,13 @@ test_2 (hid_t fapl)
}
}
+ /* Release buffer */
+ HDfree(obj);
+ obj = NULL;
+
if (H5Fclose(file)<0) goto error;
if (nerrors) goto error;
+
PASSED();
return 0;
@@ -235,6 +257,8 @@ test_2 (hid_t fapl)
H5E_BEGIN_TRY {
H5Fclose(file);
} H5E_END_TRY;
+ if(obj)
+ HDfree(obj);
return MAX(1, nerrors);
}
@@ -261,8 +285,8 @@ test_3 (hid_t fapl)
{
hid_t file = -1;
H5F_t *f = NULL;
- H5HG_t obj[1024];
- uint8_t out[1024];
+ H5HG_t *obj = NULL;
+ uint8_t out[GHEAP_TEST_NOBJS];
size_t u;
size_t size;
herr_t status;
@@ -271,6 +295,10 @@ test_3 (hid_t fapl)
TESTING("complete object removal");
+ /* Allocate buffer for H5HG_t */
+ if(NULL == (obj = (H5HG_t *)HDmalloc(sizeof(H5HG_t) * GHEAP_TEST_NOBJS)))
+ goto error;
+
/* Open a clean file */
h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
@@ -282,7 +310,7 @@ test_3 (hid_t fapl)
}
/* Create some stuff */
- for(u = 0; u < 1024; u++) {
+ for(u = 0; u < GHEAP_TEST_NOBJS; u++) {
size = u % 30 + 100;
HDmemset(out, (int)('A' + u % 26), size);
H5Eclear2(H5E_DEFAULT);
@@ -295,7 +323,7 @@ test_3 (hid_t fapl)
}
/* Remove everything */
- for(u = 0; u < 1024; u++) {
+ for(u = 0; u < GHEAP_TEST_NOBJS; u++) {
status = H5HG_remove (f, H5AC_ind_read_dxpl_id, obj + u);
if (status<0) {
H5_FAILED();
@@ -304,8 +332,13 @@ test_3 (hid_t fapl)
}
}
+ /* Release buffer */
+ HDfree(obj);
+ obj = NULL;
+
if (H5Fclose(file)<0) goto error;
if (nerrors) goto error;
+
PASSED();
return 0;
@@ -313,6 +346,8 @@ test_3 (hid_t fapl)
H5E_BEGIN_TRY {
H5Fclose(file);
} H5E_END_TRY;
+ if(obj)
+ HDfree(obj);
return MAX(1, nerrors);
}
@@ -340,8 +375,8 @@ test_4 (hid_t fapl)
{
hid_t file = -1;
H5F_t *f = NULL;
- H5HG_t obj[1024];
- uint8_t out[1024];
+ H5HG_t *obj = NULL;
+ uint8_t out[GHEAP_TEST_NOBJS];
size_t u;
size_t size;
herr_t status;
@@ -350,6 +385,10 @@ test_4 (hid_t fapl)
TESTING("partial object removal");
+ /* Allocate buffer for H5HG_t */
+ if(NULL == (obj = (H5HG_t *)HDmalloc(sizeof(H5HG_t) * GHEAP_TEST_NOBJS)))
+ goto error;
+
/* Open a clean file */
h5_fixname(FILENAME[3], fapl, filename, sizeof filename);
if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
@@ -360,7 +399,7 @@ test_4 (hid_t fapl)
goto error;
}
- for(u = 0; u < 1024; u++) {
+ for(u = 0; u < GHEAP_TEST_NOBJS; u++) {
/* Insert */
size = u % 30 + 100;
HDmemset(out, (int)('A' + u % 26), size);
@@ -389,8 +428,13 @@ test_4 (hid_t fapl)
}
}
+ /* Release buffer */
+ HDfree(obj);
+ obj = NULL;
+
if (H5Fclose(file)<0) goto error;
if (nerrors) goto error;
+
PASSED();
return 0;
@@ -398,6 +442,8 @@ test_4 (hid_t fapl)
H5E_BEGIN_TRY {
H5Fclose(file);
} H5E_END_TRY;
+ if(obj)
+ HDfree(obj);
return MAX(1, nerrors);
}
diff --git a/test/h5test.c b/test/h5test.c
index aea5dc7..c126da8 100644
--- a/test/h5test.c
+++ b/test/h5test.c
@@ -74,7 +74,7 @@ char *paraprefix = NULL; /* for command line option para-prefix */
MPI_Info h5_io_info_g=MPI_INFO_NULL;/* MPI INFO object for IO */
#endif
-#define READ_BUF_SIZE 4096
+#define READ_BUF_SIZE 65536
/*
* These are the letters that are appended to the file name when generating
@@ -90,6 +90,9 @@ MPI_Info h5_io_info_g=MPI_INFO_NULL;/* MPI INFO object for IO */
*/
static const char *multi_letters = "msbrglo";
+/* Length of multi-file VFD filename buffers */
+#define H5TEST_MULTI_FILENAME_LEN 1024
+
/* Previous error reporting function */
static H5E_auto2_t err_func = NULL;
@@ -196,7 +199,7 @@ h5_clean_files(const char *base_name[], hid_t fapl)
*
* Purpose Clean up temporary test files.
*
- * When a test calls h5_fixname() get a VFD-dependent
+ * When a test calls h5_fixname() to get a VFD-dependent
* test file name, this function can be used to clean it up.
*
* Return: void
@@ -855,7 +858,7 @@ h5_fileaccess(void)
H5FD_mem_t memb_map[H5FD_MEM_NTYPES];
hid_t memb_fapl[H5FD_MEM_NTYPES];
const char *memb_name[H5FD_MEM_NTYPES];
- char sv[H5FD_MEM_NTYPES][1024];
+ char *sv[H5FD_MEM_NTYPES];
haddr_t memb_addr[H5FD_MEM_NTYPES];
H5FD_mem_t mt;
@@ -867,6 +870,8 @@ h5_fileaccess(void)
HDassert(HDstrlen(multi_letters)==H5FD_MEM_NTYPES);
for(mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t, mt)) {
memb_fapl[mt] = H5P_DEFAULT;
+ if(NULL == (sv[mt] = (char *)HDmalloc(H5TEST_MULTI_FILENAME_LEN)))
+ return -1;
HDsprintf(sv[mt], "%%s-%c.h5", multi_letters[mt]);
memb_name[mt] = sv[mt];
memb_addr[mt] = (haddr_t)MAX(mt - 1, 0) * (HADDR_MAX / 10);
@@ -874,6 +879,9 @@ h5_fileaccess(void)
if(H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name, memb_addr, FALSE) < 0)
return -1;
+
+ for(mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t, mt))
+ HDfree(sv[mt]);
}
else if(!HDstrcmp(name, "family")) {
hsize_t fam_size = 100*1024*1024; /*100 MB*/
@@ -989,7 +997,7 @@ h5_get_vfd_fapl(void)
H5FD_mem_t memb_map[H5FD_MEM_NTYPES];
hid_t memb_fapl[H5FD_MEM_NTYPES];
const char *memb_name[H5FD_MEM_NTYPES];
- char sv[H5FD_MEM_NTYPES][1024];
+ char *sv[H5FD_MEM_NTYPES];
haddr_t memb_addr[H5FD_MEM_NTYPES];
H5FD_mem_t mt;
@@ -1001,15 +1009,18 @@ h5_get_vfd_fapl(void)
HDassert(HDstrlen(multi_letters) == H5FD_MEM_NTYPES);
for(mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t, mt)) {
memb_fapl[mt] = H5P_DEFAULT;
+ sv[mt] = (char *)HDmalloc(H5TEST_MULTI_FILENAME_LEN);
+ HDassert(sv[mt]);
HDsprintf(sv[mt], "%%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) {
+ if(H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name, memb_addr, FALSE) < 0)
return -1;
- } /* end if */
+
+ for(mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t, mt))
+ HDfree(sv[mt]);
} else if(!HDstrcmp(tok, "family")) {
/* Family of files, each 1MB and using the default driver */
hsize_t fam_size = 100*1024*1024; /*100 MB*/
@@ -1573,9 +1584,13 @@ 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 */
- char buf[READ_BUF_SIZE]; /* Buffer for copying data */
+ void *buf; /* Buffer for copying data */
const char *filename = H5_get_srcdir_filename(origfilename);; /* Get the test file name to copy */
+ /* Allocate copy buffer */
+ if(NULL == (buf = HDmalloc(READ_BUF_SIZE)))
+ return -1;
+
/* Copy old file into temporary file */
if((fd_old = HDopen(filename, O_RDONLY, 0666)) < 0)
return -1;
@@ -1586,6 +1601,9 @@ h5_make_local_copy(const char *origfilename, const char *local_copy_name)
while((nread = HDread(fd_old, buf, (size_t)READ_BUF_SIZE)) > 0)
if(HDwrite(fd_new, buf, (size_t)nread) < 0)
return -1;
+
+ /* Release memory */
+ HDfree(buf);
/* Close files */
if(HDclose(fd_old) < 0) return -1;
diff --git a/test/tattr.c b/test/tattr.c
index e7b3ece..6f55081 100644
--- a/test/tattr.c
+++ b/test/tattr.c
@@ -8029,7 +8029,7 @@ test_attr_shared_write(hid_t fcpl, hid_t fapl)
htri_t is_shared; /* Is attributes shared? */
hsize_t shared_refcount; /* Reference count of shared attribute */
unsigned attr_value; /* Attribute value */
- unsigned big_value[SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3]; /* Data for "big" attribute */
+ unsigned *big_value; /* Data for "big" attribute */
size_t mesg_count; /* # of shared messages */
unsigned test_shared; /* Index over shared component type */
unsigned u; /* Local index variable */
@@ -8040,8 +8040,10 @@ test_attr_shared_write(hid_t fcpl, hid_t fapl)
/* Output message about test being performed */
MESSAGE(5, ("Testing Writing Shared & Unshared Attributes in Compact & Dense Storage\n"));
- /* Initialize "big" attribute data */
- HDmemset(big_value, 1, sizeof(big_value));
+ /* Allocate & initialize "big" attribute data */
+ big_value = (unsigned *)HDmalloc((size_t)(SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3) * sizeof(unsigned));
+ CHECK(big_value, NULL, "HDmalloc");
+ HDmemset(big_value, 1, sizeof(unsigned) * (size_t)(SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3));
/* Create dataspace for dataset */
sid = H5Screate(H5S_SCALAR);
@@ -8328,6 +8330,9 @@ test_attr_shared_write(hid_t fcpl, hid_t fapl)
CHECK(ret, FAIL, "H5Sclose");
ret = H5Sclose(big_sid);
CHECK(ret, FAIL, "H5Sclose");
+
+ /* Release memory */
+ HDfree(big_value);
} /* test_attr_shared_write() */
/****************************************************************
@@ -8355,7 +8360,7 @@ test_attr_shared_rename(hid_t fcpl, hid_t fapl)
htri_t is_shared; /* Is attributes shared? */
hsize_t shared_refcount; /* Reference count of shared attribute */
unsigned attr_value; /* Attribute value */
- unsigned big_value[SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3]; /* Data for "big" attribute */
+ unsigned *big_value; /* Data for "big" attribute */
size_t mesg_count; /* # of shared messages */
unsigned test_shared; /* Index over shared component type */
unsigned u; /* Local index variable */
@@ -8366,8 +8371,10 @@ test_attr_shared_rename(hid_t fcpl, hid_t fapl)
/* Output message about test being performed */
MESSAGE(5, ("Testing Renaming Shared & Unshared Attributes in Compact & Dense Storage\n"));
- /* Initialize "big" attribute data */
- HDmemset(big_value, 1, sizeof(big_value));
+ /* Allocate & initialize "big" attribute data */
+ big_value = (unsigned *)HDmalloc((size_t)(SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3) * sizeof(unsigned));
+ CHECK(big_value, NULL, "HDmalloc");
+ HDmemset(big_value, 1, sizeof(unsigned) * (size_t)(SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3));
/* Create dataspace for dataset */
sid = H5Screate(H5S_SCALAR);
@@ -8770,6 +8777,9 @@ test_attr_shared_rename(hid_t fcpl, hid_t fapl)
CHECK(ret, FAIL, "H5Sclose");
ret = H5Sclose(big_sid);
CHECK(ret, FAIL, "H5Sclose");
+
+ /* Release memory */
+ HDfree(big_value);
} /* test_attr_shared_rename() */
/****************************************************************
@@ -8796,7 +8806,7 @@ test_attr_shared_delete(hid_t fcpl, hid_t fapl)
htri_t is_shared; /* Is attributes shared? */
hsize_t shared_refcount; /* Reference count of shared attribute */
unsigned attr_value; /* Attribute value */
- unsigned big_value[SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3]; /* Data for "big" attribute */
+ unsigned *big_value; /* Data for "big" attribute */
size_t mesg_count; /* # of shared messages */
unsigned test_shared; /* Index over shared component type */
unsigned u; /* Local index variable */
@@ -8807,8 +8817,10 @@ test_attr_shared_delete(hid_t fcpl, hid_t fapl)
/* Output message about test being performed */
MESSAGE(5, ("Testing Deleting Shared & Unshared Attributes in Compact & Dense Storage\n"));
- /* Initialize "big" attribute data */
- HDmemset(big_value, 1, sizeof(big_value));
+ /* Allocate & initialize "big" attribute data */
+ big_value = (unsigned *)HDmalloc((size_t)(SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3) * sizeof(unsigned));
+ CHECK(big_value, NULL, "HDmalloc");
+ HDmemset(big_value, 1, sizeof(unsigned) * (size_t)(SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3));
/* Create dataspace for dataset */
sid = H5Screate(H5S_SCALAR);
@@ -9134,6 +9146,9 @@ test_attr_shared_delete(hid_t fcpl, hid_t fapl)
CHECK(ret, FAIL, "H5Sclose");
ret = H5Sclose(big_sid);
CHECK(ret, FAIL, "H5Sclose");
+
+ /* Release memory */
+ HDfree(big_value);
} /* test_attr_shared_delete() */
/****************************************************************
@@ -9160,7 +9175,7 @@ test_attr_shared_unlink(hid_t fcpl, hid_t fapl)
htri_t is_shared; /* Is attributes shared? */
hsize_t shared_refcount; /* Reference count of shared attribute */
unsigned attr_value; /* Attribute value */
- unsigned big_value[SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3]; /* Data for "big" attribute */
+ unsigned *big_value; /* Data for "big" attribute */
size_t mesg_count; /* # of shared messages */
unsigned test_shared; /* Index over shared component type */
unsigned u; /* Local index variable */
@@ -9171,8 +9186,10 @@ test_attr_shared_unlink(hid_t fcpl, hid_t fapl)
/* Output message about test being performed */
MESSAGE(5, ("Testing Unlinking Object with Shared Attributes in Compact & Dense Storage\n"));
- /* Initialize "big" attribute data */
- HDmemset(big_value, 1, sizeof(big_value));
+ /* Allocate & initialize "big" attribute data */
+ big_value = (unsigned *)HDmalloc((size_t)(SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3) * sizeof(unsigned));
+ CHECK(big_value, NULL, "HDmalloc");
+ HDmemset(big_value, 1, sizeof(unsigned) * (size_t)(SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3));
/* Create dataspace for dataset */
sid = H5Screate(H5S_SCALAR);
@@ -9484,6 +9501,9 @@ test_attr_shared_unlink(hid_t fcpl, hid_t fapl)
CHECK(ret, FAIL, "H5Sclose");
ret = H5Sclose(big_sid);
CHECK(ret, FAIL, "H5Sclose");
+
+ /* Release memory */
+ HDfree(big_value);
} /* test_attr_shared_unlink() */
/****************************************************************
diff --git a/test/tchecksum.c b/test/tchecksum.c
index ca6c227..cf519c0 100644
--- a/test/tchecksum.c
+++ b/test/tchecksum.c
@@ -37,7 +37,6 @@
/*******************/
/* Local variables */
/*******************/
-uint8_t large_buf[BUF_LEN];
/****************************************************************
@@ -184,33 +183,41 @@ test_chksum_size_four(void)
static void
test_chksum_large(void)
{
+ uint8_t *large_buf; /* Buffer for checksum calculations */
uint32_t chksum; /* Checksum value */
size_t u; /* Local index variable */
+ /* Allocate the buffer */
+ large_buf = (uint8_t *)HDmalloc((size_t)BUF_LEN);
+ CHECK(large_buf, NULL, "HDmalloc");
+
/* Initialize buffer w/known data */
for(u = 0; u < BUF_LEN; u++)
large_buf[u] = (uint8_t)(u * 3);
/* Buffer w/real data */
- chksum = H5_checksum_fletcher32(large_buf, sizeof(large_buf));
+ chksum = H5_checksum_fletcher32(large_buf, (size_t)BUF_LEN);
VERIFY(chksum, 0x85b4e2a, "H5_checksum_fletcher32");
- chksum = H5_checksum_crc(large_buf, sizeof(large_buf));
+ chksum = H5_checksum_crc(large_buf, (size_t)BUF_LEN);
VERIFY(chksum, 0xfbd0f7c0, "H5_checksum_crc");
- chksum = H5_checksum_lookup3(large_buf, sizeof(large_buf), 0);
+ chksum = H5_checksum_lookup3(large_buf, (size_t)BUF_LEN, 0);
VERIFY(chksum, 0x1bd2ee7b, "H5_checksum_lookup3");
/* Buffer w/zero(s) for data */
- HDmemset(large_buf, 0, sizeof(large_buf));
- chksum = H5_checksum_fletcher32(large_buf, sizeof(large_buf));
+ HDmemset(large_buf, 0, (size_t)BUF_LEN);
+ chksum = H5_checksum_fletcher32(large_buf, (size_t)BUF_LEN);
VERIFY(chksum, 0, "H5_checksum_fletcher32");
- chksum = H5_checksum_crc(large_buf, sizeof(large_buf));
+ chksum = H5_checksum_crc(large_buf, (size_t)BUF_LEN);
VERIFY(chksum, 0xfac8b4c4, "H5_checksum_crc");
- chksum = H5_checksum_lookup3(large_buf, sizeof(large_buf), 0);
+ chksum = H5_checksum_lookup3(large_buf, (size_t)BUF_LEN, 0);
VERIFY(chksum, 0x930c7afc, "H5_checksum_lookup3");
+
+ /* Release memory for buffer */
+ HDfree(large_buf);
} /* test_chksum_large() */
diff --git a/test/th5o.c b/test/th5o.c
index 125e11b..c2c4034 100644
--- a/test/th5o.c
+++ b/test/th5o.c
@@ -777,15 +777,21 @@ test_h5o_link(void)
hsize_t dims[2] = {TEST6_DIM1, TEST6_DIM2};
htri_t committed; /* Whether the named datatype is committed */
unsigned new_format; /* Whether to use the new format or not */
- int wdata[TEST6_DIM1][TEST6_DIM2];
- int rdata[TEST6_DIM1][TEST6_DIM2];
- int i, n, j;
+ int *wdata;
+ int *rdata;
+ int i, n;
herr_t ret; /* Value returned from API calls */
+ /* Allocate memory buffers */
+ /* (These are treated as 2-D buffers) */
+ wdata = (int *)HDmalloc((size_t)(TEST6_DIM1 * TEST6_DIM2) * sizeof(int));
+ CHECK(wdata, NULL, "HDmalloc");
+ rdata = (int *)HDmalloc((size_t)(TEST6_DIM1 * TEST6_DIM2) * sizeof(int));
+ CHECK(rdata, NULL, "HDmalloc");
+
/* Initialize the raw data */
- for(i = n = 0; i < TEST6_DIM1; i++)
- for(j = 0; j < TEST6_DIM2; j++)
- wdata[i][j] = n++;
+ for(i = n = 0; i < (TEST6_DIM1 * TEST6_DIM2); i++)
+ wdata[i] = n++;
/* Create the dataspace */
space_id = H5Screate_simple(2 ,dims, NULL);
@@ -840,9 +846,8 @@ test_h5o_link(void)
CHECK(ret, FAIL, "H5Dread");
/* Verify the data */
- for(i = 0; i < TEST6_DIM1; i++)
- for(j = 0; j < TEST6_DIM2; j++)
- VERIFY(wdata[i][j], rdata[i][j], "H5Dread");
+ for(i = 0; i < (TEST6_DIM1 * TEST6_DIM2); i++)
+ VERIFY(wdata[i], rdata[i], "H5Dread");
/* Create a group with no name*/
group_id = H5Gcreate_anon(file_id, H5P_DEFAULT, H5P_DEFAULT);
@@ -879,9 +884,8 @@ test_h5o_link(void)
/* Read data from dataset */
ret = H5Dread(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata);
CHECK(ret, FAIL, "H5Dread");
- for(i = 0; i < TEST6_DIM1; i++)
- for(j = 0; j < TEST6_DIM2; j++)
- VERIFY(wdata[i][j], rdata[i][j], "H5Dread");
+ for(i = 0; i < (TEST6_DIM1 * TEST6_DIM2); i++)
+ VERIFY(wdata[i], rdata[i], "H5Dread");
/* Close open IDs */
ret = H5Dclose(dset_id);
@@ -897,6 +901,10 @@ test_h5o_link(void)
CHECK(ret, FAIL, "H5Sclose");
ret = H5Pclose(lcpl_id);
CHECK(ret, FAIL, "H5Pclose");
+
+ /* Release buffers */
+ HDfree(wdata);
+ HDfree(rdata);
} /* end test_h5o_link() */
diff --git a/test/theap.c b/test/theap.c
index 2d509bf..9c509a1 100644
--- a/test/theap.c
+++ b/test/theap.c
@@ -44,13 +44,13 @@ typedef struct test_obj {
} test_obj;
/* Array of random element values */
-static test_obj rand_num[NUM_ELEMS];
+static test_obj *rand_num;
/* Array of random elements values, sorted in increasing order */
-static test_obj inc_sort_num[NUM_ELEMS];
+static test_obj *inc_sort_num;
/* Array of random elements values, sorted in decreasing order */
-static test_obj dec_sort_num[NUM_ELEMS];
+static test_obj *dec_sort_num;
static int tst_dec_sort(const void *_i1, const void *_i2)
{
@@ -88,21 +88,29 @@ test_heap_init(void)
time_t curr_time; /* Current time, for seeding random number generator */
size_t u; /* Local index variables */
+ /* Allocate arrays */
+ rand_num = (test_obj *)HDmalloc(sizeof(test_obj) * NUM_ELEMS);
+ CHECK(rand_num, NULL, "HDmalloc");
+ inc_sort_num = (test_obj *)HDmalloc(sizeof(test_obj) * NUM_ELEMS);
+ CHECK(inc_sort_num, NULL, "HDmalloc");
+ dec_sort_num = (test_obj *)HDmalloc(sizeof(test_obj) * NUM_ELEMS);
+ CHECK(dec_sort_num, NULL, "HDmalloc");
+
/* Create randomized set of numbers */
- curr_time=time(NULL);
+ curr_time = HDtime(NULL);
HDsrandom((unsigned)curr_time);
- for(u=0; u<NUM_ELEMS; u++)
+ for(u = 0; u < NUM_ELEMS; u++)
/* Generate random numbers from -1000 to 1000 */
- rand_num[u].val=(int)(HDrandom()%2001)-1001;
+ rand_num[u].val = (int)(HDrandom() % 2001) - 1001;
/* Sort random numbers into increasing order */
- HDmemcpy(inc_sort_num,rand_num,sizeof(test_obj)*NUM_ELEMS);
+ HDmemcpy(inc_sort_num, rand_num, sizeof(test_obj) * NUM_ELEMS);
HDqsort(inc_sort_num, (size_t)NUM_ELEMS, sizeof(test_obj), tst_inc_sort);
/* Sort random numbers into decreasing order */
- HDmemcpy(dec_sort_num,rand_num,sizeof(test_obj)*NUM_ELEMS);
+ HDmemcpy(dec_sort_num, rand_num, sizeof(test_obj) * NUM_ELEMS);
HDqsort(dec_sort_num, (size_t)NUM_ELEMS, sizeof(test_obj), tst_dec_sort);
-} /* end test_tst_init() */
+} /* end test_heap_init() */
/****************************************************************
**
@@ -1023,6 +1031,24 @@ test_heap_incdec(void)
/****************************************************************
**
+** test_heap_term(): Test H5HP (heap) code.
+** Release data for Heap testing
+**
+****************************************************************/
+static void
+test_heap_term(void)
+{
+ /* Release arrays */
+ if(rand_num)
+ HDfree(rand_num);
+ if(inc_sort_num)
+ HDfree(inc_sort_num);
+ if(dec_sort_num)
+ HDfree(dec_sort_num);
+} /* end test_tst_term() */
+
+/****************************************************************
+**
** test_heap(): Main H5HP testing routine.
**
****************************************************************/
@@ -1044,5 +1070,8 @@ test_heap(void)
test_heap_change(); /* Test changing priority of objects on Heap */
test_heap_incdec(); /* Test incrementing & decrementing priority of objects on Heap */
+ /* Release Heap testing data */
+ test_heap_term();
+
} /* end test_heap() */
diff --git a/test/titerate.c b/test/titerate.c
index 9f0b900..3004d62 100644
--- a/test/titerate.c
+++ b/test/titerate.c
@@ -584,9 +584,9 @@ test_iter_group_large(hid_t fapl)
hid_t tid; /* Datatype ID */
hsize_t dims[] = {SPACE1_DIM1};
herr_t ret; /* Generic return value */
- char gname[20]; /* Temporary group name */
- iter_info names[ITER_NGROUPS+2]; /* Names of objects in the root group */
- iter_info *curr_name; /* Pointer to the current name in the root group */
+ char gname[20]; /* Temporary group name */
+ iter_info *names; /* Names of objects in the root group */
+ iter_info *curr_name; /* Pointer to the current name in the root group */
int i;
/* Compound datatype */
@@ -596,7 +596,9 @@ test_iter_group_large(hid_t fapl)
float c;
} s1_t;
- HDmemset(names, 0, sizeof names);
+ /* Allocate & initialize array */
+ names = (iter_info *)HDcalloc(sizeof(iter_info), (ITER_NGROUPS + 2));
+ CHECK(names, NULL, "HDcalloc");
/* Output message about test being performed */
MESSAGE(5, ("Testing Large Group Iteration Functionality\n"));
@@ -686,6 +688,9 @@ test_iter_group_large(hid_t fapl)
/* Close file */
ret = H5Fclose(file);
CHECK(ret, FAIL, "H5Fclose");
+
+ /* Release memory */
+ HDfree(names);
} /* test_iterate_group_large() */
/****************************************************************
diff --git a/test/tskiplist.c b/test/tskiplist.c
index f413674..f30948e 100644
--- a/test/tskiplist.c
+++ b/test/tskiplist.c
@@ -38,9 +38,9 @@
#define NUM_ELEMS 1000
/* Random numbers */
-static int rand_num[NUM_ELEMS];
-static int sort_rand_num[NUM_ELEMS];
-static int rev_sort_rand_num[NUM_ELEMS];
+static int *rand_num;
+static int *sort_rand_num;
+static int *rev_sort_rand_num;
static int tst_sort(const void *i1, const void *i2)
{
@@ -66,23 +66,31 @@ test_skiplist_init(void)
unsigned found; /* Flag to indicate value was inserted already */
size_t u,v; /* Local index variables */
+ /* Allocate arrays */
+ rand_num = (int *)HDmalloc(sizeof(int) * NUM_ELEMS);
+ CHECK(rand_num, NULL, "HDmalloc");
+ sort_rand_num = (int *)HDmalloc(sizeof(int) * NUM_ELEMS);
+ CHECK(sort_rand_num, NULL, "HDmalloc");
+ rev_sort_rand_num = (int *)HDmalloc(sizeof(int) * NUM_ELEMS);
+ CHECK(rev_sort_rand_num, NULL, "HDmalloc");
+
/* Initialize random number seed */
curr_time = HDtime(NULL);
HDsrandom((unsigned)curr_time);
/* Create randomized set of numbers */
- for(u=0; u<NUM_ELEMS; u++) {
+ for(u = 0; u < NUM_ELEMS; u++) {
do {
/* Reset flag */
- found=0;
+ found = 0;
/* Generate random numbers from -5000 to 5000 */
- new_val=(int)(HDrandom()%10001)-5001;
+ new_val = (int)(HDrandom() % 10001) - 5001;
/* Check if the value is already in the array */
- for(v=0; v<u; v++)
- if(rand_num[v]==new_val)
- found=1;
+ for(v = 0; v < u; v++)
+ if(rand_num[v] == new_val)
+ found = 1;
} while(found);
/* Set unique value in array */
@@ -90,7 +98,7 @@ test_skiplist_init(void)
} /* end for */
/* Copy random values to sorted array */
- HDmemcpy(sort_rand_num,rand_num,sizeof(int)*NUM_ELEMS);
+ HDmemcpy(sort_rand_num, rand_num, sizeof(int) * NUM_ELEMS);
/* Sort random numbers */
HDqsort(sort_rand_num, (size_t)NUM_ELEMS, sizeof(int), tst_sort);
@@ -100,7 +108,7 @@ test_skiplist_init(void)
/* Sort random numbers */
HDqsort(rev_sort_rand_num, (size_t)NUM_ELEMS, sizeof(int), tst_rev_sort);
-} /* end test_tst_init() */
+} /* end test_skiplist_init() */
/****************************************************************
**
@@ -1746,6 +1754,24 @@ test_skiplist_remove_first_many(void)
/****************************************************************
**
+** test_skiplist_term(): Test H5SL (skiplist) code.
+** Release data for skip list testing
+**
+****************************************************************/
+static void
+test_skiplist_term(void)
+{
+ /* Release arrays */
+ if(rand_num)
+ HDfree(rand_num);
+ if(sort_rand_num)
+ HDfree(sort_rand_num);
+ if(rev_sort_rand_num)
+ HDfree(rev_sort_rand_num);
+} /* end test_skiplist_term() */
+
+/****************************************************************
+**
** test_skiplist(): Main H5SL testing routine.
**
****************************************************************/
@@ -1784,5 +1810,8 @@ test_skiplist(void)
test_skiplist_remove_first(); /* Test 'remove first' operation */
test_skiplist_remove_first_many(); /* Test 'remove first' operation on large skip lists */
+ /* Release skip list testing data */
+ test_skiplist_term();
+
} /* end test_skiplist() */
diff --git a/test/tvltypes.c b/test/tvltypes.c
index f8a6a91..d00519d 100644
--- a/test/tvltypes.c
+++ b/test/tvltypes.c
@@ -1001,8 +1001,8 @@ test_vltypes_compound_vlen_vlen(void)
float f;
hvl_t v;
} s1;
- s1 wdata[SPACE3_DIM1]; /* data to write */
- s1 rdata[SPACE3_DIM1]; /* data to read */
+ s1 *wdata; /* data to write */
+ s1 *rdata; /* data to read */
hid_t fid1; /* HDF5 File IDs */
hid_t dataset; /* Dataset ID */
hid_t sid1; /* Dataspace ID */
@@ -1016,6 +1016,10 @@ test_vltypes_compound_vlen_vlen(void)
MESSAGE(5, ("Testing Compound Datatypes with VL Atomic Datatype Component Functionality\n"));
/* Allocate and initialize VL data to write */
+ wdata = (s1 *)HDmalloc(sizeof(s1) * SPACE3_DIM1);
+ CHECK(wdata, NULL, "HDmalloc");
+ rdata = (s1 *)HDmalloc(sizeof(s1) * SPACE3_DIM1);
+ CHECK(rdata, NULL, "HDmalloc");
for(i = 0; i < SPACE3_DIM1; i++) {
wdata[i].i = (int)(i * 10);
wdata[i].f = (float)(i * 20) / 3.0F;
@@ -1147,6 +1151,10 @@ test_vltypes_compound_vlen_vlen(void)
/* Close file */
ret = H5Fclose(fid1);
CHECK(ret, FAIL, "H5Fclose");
+
+ /* Release buffers */
+ HDfree(wdata);
+ HDfree(rdata);
} /* end test_vltypes_compound_vlen_vlen() */
/****************************************************************
diff --git a/tools/h5copy/CMakeTests.cmake b/tools/h5copy/CMakeTests.cmake
index 96dc92b..a32c766 100644
--- a/tools/h5copy/CMakeTests.cmake
+++ b/tools/h5copy/CMakeTests.cmake
@@ -211,8 +211,6 @@
COMMAND ${CMAKE_COMMAND}
-E remove
./testfiles/${testname}.out.h5
- ./testfiles/${testname}.out.out
- ./testfiles/${testname}.out.out.err
)
add_test (
NAME H5COPY-CMP-${testname}
diff --git a/tools/h5diff/CMakeTests.cmake b/tools/h5diff/CMakeTests.cmake
index a649b78..5d3d433 100644
--- a/tools/h5diff/CMakeTests.cmake
+++ b/tools/h5diff/CMakeTests.cmake
@@ -310,11 +310,6 @@
endif ()
else (HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME H5DIFF-${resultfile}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove ./testfiles/${resultfile}.out ./testfiles/${resultfile}.out.err
- )
- add_test (
NAME H5DIFF-${resultfile}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5diff>"
@@ -326,7 +321,6 @@
-D "TEST_APPEND=EXIT CODE:"
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
- set_tests_properties (H5DIFF-${resultfile} PROPERTIES DEPENDS "H5DIFF-${resultfile}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
if (H5_HAVE_PARALLEL)
ADD_PH5_TEST (${resultfile} ${resultcode} ${ARGN})
@@ -346,11 +340,6 @@
endif ()
else (HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME PH5DIFF-${resultfile}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove ./testfiles/${resultfile}_p.out ./testfiles/${resultfile}_p.out.err
- )
- add_test (
NAME PH5DIFF-${resultfile}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=${MPIEXEC};${MPIEXEC_PREFLAGS};${MPIEXEC_NUMPROC_FLAG};${MPIEXEC_MAX_NUMPROCS};${MPIEXEC_POSTFLAGS};$<TARGET_FILE:ph5diff>"
@@ -364,41 +353,9 @@
-D "TEST_SKIP_COMPARE=TRUE"
-P "${HDF_RESOURCES_EXT_DIR}/prunTest.cmake"
)
- set_tests_properties (PH5DIFF-${resultfile} PROPERTIES DEPENDS "PH5DIFF-${resultfile}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (ADD_PH5_TEST file)
- # ADD_H5_NO_OUTPUT_TEST
- # Purpose to verify only exitcode without output comparison
- # Don't use this if possible; this may be removed.
- MACRO (ADD_H5_NO_OUTPUT_TEST testname resultcode)
- # If using memchecker add tests without using scripts
- if (NOT HDF5_ENABLE_USING_MEMCHECKER)
- add_test (
- NAME H5DIFF-${testname}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove ./testfiles/${testname}.out ./testfiles/${testname}.out.err
- )
- # if there was a previous test
- if (NOT "${last_test}" STREQUAL "")
- set_tests_properties (H5DIFF-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
- endif ()
- endif (NOT HDF5_ENABLE_USING_MEMCHECKER)
-
- add_test (NAME H5DIFF-${testname} COMMAND $<TARGET_FILE:h5diff> ${ARGN})
- if (NOT ${resultcode} STREQUAL "0")
- set_tests_properties (H5DIFF-${testname} PROPERTIES WILL_FAIL "true")
- endif ()
-
- if (HDF5_ENABLE_USING_MEMCHECKER)
- if (NOT "${last_test}" STREQUAL "")
- set_tests_properties (H5DIFF-${testname} PROPERTIES DEPENDS ${last_test})
- endif ()
- else (HDF5_ENABLE_USING_MEMCHECKER)
- set_tests_properties (H5DIFF-${testname} PROPERTIES DEPENDS H5DIFF-${testname}-clear-objects)
- endif (HDF5_ENABLE_USING_MEMCHECKER)
- ENDMACRO (ADD_H5_NO_OUTPUT_TEST)
-
##############################################################################
##############################################################################
### T H E T E S T S ###
diff --git a/tools/h5dump/CMakeTests.cmake b/tools/h5dump/CMakeTests.cmake
index e376b50..895855c 100644
--- a/tools/h5dump/CMakeTests.cmake
+++ b/tools/h5dump/CMakeTests.cmake
@@ -381,12 +381,6 @@
set (last_test "H5DUMP-${testname}")
else (HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME H5DUMP-h5dump-${testname}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove h5dump-${testname}.out h5dump-${testname}.out.err
- )
- set_tests_properties (H5DUMP-h5dump-${testname}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std")
- add_test (
NAME H5DUMP-h5dump-${testname}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
@@ -397,7 +391,6 @@
-D "TEST_REFERENCE=h5dump-${testname}.txt"
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
- set_tests_properties (H5DUMP-h5dump-${testname} PROPERTIES DEPENDS "H5DUMP-h5dump-${testname}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (ADD_HELP_TEST)
@@ -429,7 +422,7 @@
add_test (
NAME H5DUMP-${resultfile}-clear-objects
COMMAND ${CMAKE_COMMAND}
- -E remove ${resultfile}.bin ${resultfile}.out ${resultfile}.out.err
+ -E remove ${resultfile}.bin
)
set_tests_properties (H5DUMP-${resultfile}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std")
add_test (
@@ -462,7 +455,7 @@
add_test (
NAME H5DUMP-N-${resultfile}-clear-objects
COMMAND ${CMAKE_COMMAND}
- -E remove ${resultfile}-N.bin ${resultfile}-N.out ${resultfile}-N.out.err
+ -E remove ${resultfile}-N.bin
)
set_tests_properties (H5DUMP-N-${resultfile}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std")
add_test (
@@ -495,7 +488,7 @@
add_test (
NAME H5DUMP-${resultfile}-clear-objects
COMMAND ${CMAKE_COMMAND}
- -E remove ${resultfile}.txt ${resultfile}.out ${resultfile}.out.err
+ -E remove ${resultfile}.txt
)
set_tests_properties (H5DUMP-${resultfile}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std")
add_test (
@@ -535,7 +528,7 @@
add_test (
NAME H5DUMP-${resultfile}-clear-objects
COMMAND ${CMAKE_COMMAND}
- -E remove ${ddlfile}.txt ${resultfile}.txt ${resultfile}.out ${resultfile}.out.err
+ -E remove ${ddlfile}.txt ${resultfile}.txt
)
set_tests_properties (H5DUMP-${resultfile}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std")
add_test (
@@ -594,12 +587,6 @@
MACRO (ADD_H5_MASK_TEST resultfile resultcode)
if (NOT HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME H5DUMP-${resultfile}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove ${resultfile}.out ${resultfile}.out.err
- )
- set_tests_properties (H5DUMP-${resultfile}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std")
- add_test (
NAME H5DUMP-${resultfile}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
@@ -611,19 +598,12 @@
-D "TEST_MASK_ERROR=true"
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
- set_tests_properties (H5DUMP-${resultfile} PROPERTIES DEPENDS "H5DUMP-${resultfile}-clear-objects")
endif (NOT HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (ADD_H5_MASK_TEST file)
MACRO (ADD_H5ERR_MASK_TEST resultfile resultcode)
if (NOT HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME H5DUMP-${resultfile}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove ${resultfile}.out ${resultfile}.out.err
- )
- set_tests_properties (H5DUMP-${resultfile}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std")
- add_test (
NAME H5DUMP-${resultfile}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
@@ -636,19 +616,12 @@
-D "TEST_MASK_ERROR=true"
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
- set_tests_properties (H5DUMP-${resultfile} PROPERTIES DEPENDS "H5DUMP-${resultfile}-clear-objects")
endif (NOT HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (ADD_H5ERR_MASK_TEST file)
MACRO (ADD_H5ERR_MASK_ENV_TEST resultfile resultcode envvar envval)
if (NOT HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME H5DUMP-${resultfile}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove ${resultfile}.out ${resultfile}.out.err
- )
- set_tests_properties (H5DUMP-${resultfile}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std")
- add_test (
NAME H5DUMP-${resultfile}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
@@ -663,7 +636,6 @@
-D "TEST_ENV_VALUE:STRING=${envval}"
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
- set_tests_properties (H5DUMP-${resultfile} PROPERTIES DEPENDS "H5DUMP-${resultfile}-clear-objects")
endif (NOT HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (ADD_H5ERR_MASK_ENV_TEST)
@@ -673,7 +645,7 @@
add_test (
NAME H5DUMP-IMPORT-${resultfile}-clear-objects
COMMAND ${CMAKE_COMMAND}
- -E remove ${conffile}.out ${conffile}.out.err ${resultfile}.bin ${resultfile}.h5
+ -E remove ${resultfile}.bin ${resultfile}.h5
)
set_tests_properties (H5DUMP-IMPORT-${resultfile}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std")
add_test (
diff --git a/tools/h5dump/CMakeTestsPBITS.cmake b/tools/h5dump/CMakeTestsPBITS.cmake
index 28514fb..681479a 100644
--- a/tools/h5dump/CMakeTestsPBITS.cmake
+++ b/tools/h5dump/CMakeTestsPBITS.cmake
@@ -121,12 +121,6 @@
endif ()
else (HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME H5DUMP-${resultfile}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove ${resultfile}.out ${resultfile}.out.err
- )
- set_tests_properties (H5DUMP-${resultfile}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/pbits")
- add_test (
NAME H5DUMP-${resultfile}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
@@ -137,7 +131,6 @@
-D "TEST_REFERENCE=${resultfile}.ddl"
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
- set_tests_properties (H5DUMP-${resultfile} PROPERTIES DEPENDS "H5DUMP-${resultfile}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (ADD_H5_PBITS_TEST file)
diff --git a/tools/h5dump/CMakeTestsVDS.cmake b/tools/h5dump/CMakeTestsVDS.cmake
index 68a62e8..32056db 100644
--- a/tools/h5dump/CMakeTestsVDS.cmake
+++ b/tools/h5dump/CMakeTestsVDS.cmake
@@ -100,12 +100,6 @@
endif ()
else (HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME H5DUMP-${resultfile}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove ${resultfile}.out ${resultfile}.out.err
- )
- set_tests_properties (H5DUMP-${resultfile}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/vds")
- add_test (
NAME H5DUMP-${resultfile}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
@@ -116,7 +110,6 @@
-D "TEST_REFERENCE=${resultfile}.ddl"
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
- set_tests_properties (H5DUMP-${resultfile} PROPERTIES DEPENDS "H5DUMP-${resultfile}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (ADD_H5_VDS_TEST file)
@@ -133,12 +126,6 @@
endif ()
else (HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME H5DUMP-${resultfile}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove ${resultfile}.out ${resultfile}.out.err
- )
- set_tests_properties (H5DUMP-${resultfile}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/vds")
- add_test (
NAME H5DUMP-${resultfile}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
diff --git a/tools/h5dump/CMakeTestsXML.cmake b/tools/h5dump/CMakeTestsXML.cmake
index 6e8dd15..79d3ff8 100644
--- a/tools/h5dump/CMakeTestsXML.cmake
+++ b/tools/h5dump/CMakeTestsXML.cmake
@@ -169,12 +169,6 @@
endif ()
else (HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME H5DUMP-XML-${resultfile}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove ${resultfile}.out ${resultfile}.out.err
- )
- set_tests_properties (H5DUMP-XML-${resultfile}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/xml")
- add_test (
NAME H5DUMP-XML-${resultfile}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
@@ -185,7 +179,6 @@
-D "TEST_REFERENCE=${resultfile}.xml"
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
- set_tests_properties (H5DUMP-XML-${resultfile} PROPERTIES DEPENDS "H5DUMP-XML-${resultfile}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (ADD_XML_H5_TEST file)
diff --git a/tools/h5dump/h5dumpgentest.c b/tools/h5dump/h5dumpgentest.c
index c95ada3..bbec813 100644
--- a/tools/h5dump/h5dumpgentest.c
+++ b/tools/h5dump/h5dumpgentest.c
@@ -3458,9 +3458,13 @@ static void gent_array8(void)
herr_t status = -1;
hsize_t sdims[] = {F64_DIM0};
hsize_t tdims[] = {F64_DIM1};
- int wdata[F64_DIM1]; /* Write buffer */
+ int *wdata; /* Write buffer */
unsigned int i;
+ /* Allocate data buffer */
+ wdata = HDmalloc(F64_DIM1 * sizeof(int));
+ HDassert(wdata);
+
/*
* Initialize data. i is the element in the dataspace, j and k the
* elements within the array datatype.
@@ -3494,6 +3498,7 @@ static void gent_array8(void)
status = H5Dwrite (dset, filetype, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
HDassert(status >= 0);
}
+
/*
* Close and release resources.
*/
@@ -3505,6 +3510,7 @@ static void gent_array8(void)
HDassert(status >= 0);
status = H5Fclose (file);
HDassert(status >= 0);
+ HDfree(wdata);
}
static void gent_empty(void)
@@ -7585,7 +7591,7 @@ static void gent_compound_intsizes(void) {
int64_t dset64[F70_XDIM][F70_YDIM64];
double dsetdbl[F70_XDIM][F70_YDIM8];
} Array1Struct;
- Array1Struct Array1[F70_LENGTH];
+ Array1Struct *Array1;
hid_t Array1Structid; /* File datatype identifier */
herr_t status; /* Error checking variable */
@@ -7593,6 +7599,10 @@ static void gent_compound_intsizes(void) {
int m, n, o; /* Array init loop vars */
+ /* Allocate buffer */
+ Array1 = (Array1Struct *)HDmalloc(sizeof(Array1Struct) * F70_LENGTH);
+ HDassert(Array1);
+
/* Initialize the data in the arrays/datastructure */
for (m = 0; m < F70_LENGTH; m++) {
@@ -7602,9 +7612,8 @@ static void gent_compound_intsizes(void) {
valu8bits = (uint8_t) ~0u; /* all 1s */
for(n = 0; n < (int)dims[0]; n++){
Array1[m].dsetu8[n][0] = valu8bits;
- for(o = 1; o < (int)dims[1]; o++) {
+ for(o = 1; o < (int)dims[1]; o++)
Array1[m].dsetu8[n][o] = (uint8_t)(Array1[m].dsetu8[n][o-1] << 1);
- }
valu8bits = (uint8_t)(valu8bits << 1);
}
@@ -7614,9 +7623,8 @@ static void gent_compound_intsizes(void) {
valu16bits = (uint16_t) ~0u; /* all 1s */
for(n = 0; n < (int)dims[0]; n++){
Array1[m].dsetu16[n][0] = valu16bits;
- for(o = 1; o < (int)dims[1]; o++) {
+ for(o = 1; o < (int)dims[1]; o++)
Array1[m].dsetu16[n][o] = (uint16_t)(Array1[m].dsetu16[n][o-1] << 1);
- }
valu16bits = (uint16_t)(valu16bits << 1);
}
@@ -7626,9 +7634,8 @@ static void gent_compound_intsizes(void) {
valu32bits = (uint32_t) ~0u; /* all 1s */
for(n = 0; n < (int)dims[0]; n++){
Array1[m].dsetu32[n][0] = valu32bits;
- for(o = 1; o < (int)dims[1]; o++) {
+ for(o = 1; o < (int)dims[1]; o++)
Array1[m].dsetu32[n][o] = Array1[m].dsetu32[n][o-1] << 1;
- }
valu32bits <<= 1;
}
@@ -7638,9 +7645,8 @@ static void gent_compound_intsizes(void) {
valu64bits = (uint64_t) ~0Lu; /* all 1s */
for(n = 0; n < (int)dims[0]; n++){
Array1[m].dsetu64[n][0] = valu64bits;
- for(o = 1; o < (int)dims[1]; o++) {
+ for(o = 1; o < (int)dims[1]; o++)
Array1[m].dsetu64[n][o] = Array1[m].dsetu64[n][o-1] << 1;
- }
valu64bits <<= 1;
}
@@ -7650,9 +7656,8 @@ static void gent_compound_intsizes(void) {
val8bits = (int8_t) ~0; /* all 1s */
for(n = 0; n < (int)dims[0]; n++){
Array1[m].dset8[n][0] = val8bits;
- for(o = 1; o < (int)dims[1]; o++) {
+ for(o = 1; o < (int)dims[1]; o++)
Array1[m].dset8[n][o] = (int8_t)(Array1[m].dset8[n][o-1] << 1);
- }
val8bits = (int8_t)(val8bits << 1);
}
@@ -7662,9 +7667,8 @@ static void gent_compound_intsizes(void) {
val16bits = (int16_t) ~0; /* all 1s */
for(n = 0; n < (int)dims[0]; n++){
Array1[m].dset16[n][0] = val16bits;
- for(o = 1; o < (int)dims[1]; o++) {
+ for(o = 1; o < (int)dims[1]; o++)
Array1[m].dset16[n][o] = (int16_t)(Array1[m].dset16[n][o-1] << 1);
- }
val16bits = (int16_t)(val16bits << 1);
}
@@ -7674,9 +7678,8 @@ static void gent_compound_intsizes(void) {
val32bits = (int32_t) ~0; /* all 1s */
for(n = 0; n < (int)dims[0]; n++){
Array1[m].dset32[n][0] = val32bits;
- for(o = 1; o < (int)dims[1]; o++) {
+ for(o = 1; o < (int)dims[1]; o++)
Array1[m].dset32[n][o] = Array1[m].dset32[n][o-1] << 1;
- }
val32bits <<= 1;
}
@@ -7686,9 +7689,8 @@ static void gent_compound_intsizes(void) {
val64bits = (int64_t) ~0L; /* all 1s */
for(n = 0; n < (int)dims[0]; n++){
Array1[m].dset64[n][0] = val64bits;
- for(o = 1; o < (int)dims[1]; o++) {
+ for(o = 1; o < (int)dims[1]; o++)
Array1[m].dset64[n][o] = Array1[m].dset64[n][o-1] << 1;
- }
val64bits <<= 1;
}
@@ -7822,6 +7824,8 @@ static void gent_compound_intsizes(void) {
status = H5Fclose(fid);
HDassert(status >= 0);
+
+ HDfree(Array1);
}
static void gent_compound_attr_intsizes(void) {
@@ -8736,7 +8740,7 @@ static void gent_compound_int_array(void) {
int64_t dset64[F76_DIM64];
double dsetdbl[F76_DIM8];
} Cmpd1Struct;
- Cmpd1Struct Cmpd1[F76_LENGTH];
+ Cmpd1Struct *Cmpd1;
hid_t Cmpd1Structid; /* File datatype identifier */
herr_t status; /* Error checking variable */
@@ -8744,6 +8748,10 @@ static void gent_compound_int_array(void) {
int m, n; /* Array init loop vars */
+ /* Allocate buffer */
+ Cmpd1 = (Cmpd1Struct *)HDmalloc(sizeof(Cmpd1Struct) * F76_LENGTH);
+ HDassert(Cmpd1);
+
/* Initialize the data in the arrays/datastructure */
for (m = 0; m < F76_LENGTH; m++) {
@@ -8948,6 +8956,8 @@ static void gent_compound_int_array(void) {
status = H5Fclose(fid);
HDassert(status >= 0);
+
+ HDfree(Cmpd1);
}
static void gent_compound_ints(void) {
@@ -8972,7 +8982,7 @@ static void gent_compound_ints(void) {
int64_t dset64;
double dsetdbl;
} Cmpd1Struct;
- Cmpd1Struct Cmpd1[F77_LENGTH];
+ Cmpd1Struct *Cmpd1;
typedef struct Cmpd2Struct {
uint64_t dsetu64;
@@ -8985,7 +8995,7 @@ static void gent_compound_ints(void) {
int8_t dset8;
double dsetdbl;
} Cmpd2Struct;
- Cmpd2Struct Cmpd2[F77_LENGTH];
+ Cmpd2Struct *Cmpd2;
hid_t Cmpd1Structid; /* File datatype identifier */
hid_t Cmpd2Structid; /* File datatype identifier */
@@ -8994,6 +9004,12 @@ static void gent_compound_ints(void) {
int m; /* Array init loop vars */
+ /* Allocate buffers */
+ Cmpd1 = (Cmpd1Struct *)HDmalloc(sizeof(Cmpd1Struct) * F77_LENGTH);
+ HDassert(Cmpd1);
+ Cmpd2 = (Cmpd2Struct *)HDmalloc(sizeof(Cmpd2Struct) * F77_LENGTH);
+ HDassert(Cmpd2);
+
/* Initialize the data in the arrays/datastructure */
for (m = 0; m < F77_LENGTH; m++) {
@@ -9170,6 +9186,9 @@ static void gent_compound_ints(void) {
status = H5Fclose(fid);
HDassert(status >= 0);
+
+ HDfree(Cmpd1);
+ HDfree(Cmpd2);
}
/*-------------------------------------------------------------------------
@@ -9918,7 +9937,7 @@ static void gent_compound_complex2(void)
multiple_nested_compound e; /* Compound inside compound with further nested compound */
} compound;
- compound buf[F82_DIM32]; /* compound */
+ compound *buf; /* compound */
hid_t file, type=-1, space=-1, dset=-1;
hid_t dset_array_a, dset_array_b, dset_array_c;
@@ -9929,6 +9948,10 @@ static void gent_compound_complex2(void)
hsize_t dset_array_a_dims[1], dset_array_b_dims[1], dset_array_c_dims[2];
hsize_t nelmts = F82_DIM32;
+ /* Allocate buffer */
+ buf = (compound *)HDmalloc(sizeof(compound) * F82_DIM32);
+ HDassert(buf);
+
file = H5Fcreate(FILE82, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
if ((space = H5Screate_simple(F82_RANK, &nelmts, NULL)) >= 0) {
@@ -10176,6 +10199,8 @@ static void gent_compound_complex2(void)
// }
H5Fclose(file);
+
+ HDfree(buf);
}
/*-------------------------------------------------------------------------
diff --git a/tools/h5format_convert/CMakeTests.cmake b/tools/h5format_convert/CMakeTests.cmake
index 37ee824..929230a 100644
--- a/tools/h5format_convert/CMakeTests.cmake
+++ b/tools/h5format_convert/CMakeTests.cmake
@@ -83,7 +83,7 @@
add_test (
NAME H5FC-${testname}-clear-objects
COMMAND ${CMAKE_COMMAND}
- -E remove ./testfiles/${testname}.out ./testfiles/${testname}.out.err ./testfiles/outtmp.h5
+ -E remove ./testfiles/outtmp.h5
)
if (NOT "${last_test}" STREQUAL "")
set_tests_properties (H5FC-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
@@ -132,7 +132,7 @@
add_test (
NAME H5FC-${testname}-clear-objects
COMMAND ${CMAKE_COMMAND}
- -E remove ./testfiles/${testname}.out ./testfiles/${testname}.out.err ./testfiles/tmp.h5
+ -E remove ./testfiles/tmp.h5
)
if (NOT "${last_test}" STREQUAL "")
set_tests_properties (H5FC-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
@@ -176,7 +176,7 @@
add_test (
NAME H5FC-${testname}-clear-objects
COMMAND ${CMAKE_COMMAND}
- -E remove ./testfiles/${testname}.out ./testfiles/${testname}.out.err ./testfiles/chktmp.h5
+ -E remove ./testfiles/chktmp.h5
)
if (NOT "${last_test}" STREQUAL "")
set_tests_properties (H5FC-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
@@ -214,7 +214,7 @@
add_test (
NAME H5FC-${testname}-clear-objects
COMMAND ${CMAKE_COMMAND}
- -E remove ./testfiles/${testname}.out ./testfiles/${testname}.out.err ./testfiles/dmptmp.h5
+ -E remove ./testfiles/dmptmp.h5
)
if (NOT "${last_test}" STREQUAL "")
set_tests_properties (H5FC-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
diff --git a/tools/h5import/CMakeTests.cmake b/tools/h5import/CMakeTests.cmake
index ef029e9..0fdf9dd 100644
--- a/tools/h5import/CMakeTests.cmake
+++ b/tools/h5import/CMakeTests.cmake
@@ -93,10 +93,6 @@
COMMAND ${CMAKE_COMMAND}
-E remove
${testfile}
- ${testfile}.new
- ${testfile}.new.err
- ${testfile}.out
- ${testfile}.out.err
)
set_tests_properties (H5IMPORT-${testname}-clear-objects PROPERTIES DEPENDS H5IMPORT-h5importtest)
@@ -141,12 +137,6 @@
-E remove
d${testfile}
d${testfile}.bin
- d${testfile}.imp
- d${testfile}.imp.err
- d${testfile}.dmp
- d${testfile}.dmp.err
- d${testfile}.dff
- d${testfile}.dff.err
)
set_tests_properties (H5IMPORT-DUMP-${testname}-clear-objects PROPERTIES DEPENDS H5IMPORT-h5importtest)
diff --git a/tools/h5jam/CMakeTests.cmake b/tools/h5jam/CMakeTests.cmake
index 6752c9a..96061b0 100644
--- a/tools/h5jam/CMakeTests.cmake
+++ b/tools/h5jam/CMakeTests.cmake
@@ -49,13 +49,6 @@
endif (NOT "${resultcode}" STREQUAL "0")
else (HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME H5JAM-${expectfile}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove
- ${expectfile}.out
- ${expectfile}.out.err
- )
- add_test (
NAME H5JAM-${expectfile}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5jam>"
@@ -66,7 +59,6 @@
-D "TEST_REFERENCE=testfiles/${expectfile}.txt"
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
- set_tests_properties (H5JAM-${expectfile} PROPERTIES DEPENDS H5JAM-${expectfile}-clear-objects)
endif (HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (TEST_H5JAM_OUTPUT)
@@ -83,13 +75,6 @@
endif (NOT "${resultcode}" STREQUAL "0")
else (HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME H5JAM-UNJAM-${expectfile}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove
- ${expectfile}.out
- ${expectfile}.out.err
- )
- add_test (
NAME H5JAM-UNJAM-${expectfile}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5unjam>"
@@ -100,7 +85,6 @@
-D "TEST_REFERENCE=testfiles/${expectfile}.txt"
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
- set_tests_properties (H5JAM-UNJAM-${expectfile} PROPERTIES DEPENDS H5JAM-UNJAM-${expectfile}-clear-objects)
endif (HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (TEST_H5UNJAM_OUTPUT)
@@ -108,16 +92,6 @@
# If using memchecker add tests without using scripts
if (NOT HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME H5JAM-${testname}-CHECKFILE-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove
- ${actual}.new
- ${actual}.new.err
- ${actual}.out
- ${actual}.out.err
- )
- set_tests_properties (H5JAM-${testname}-CHECKFILE-clear-objects PROPERTIES DEPENDS ${testdepends})
- add_test (
NAME H5JAM-${testname}-CHECKFILE-H5DMP
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
@@ -129,7 +103,7 @@
-D "TEST_SKIP_COMPARE=TRUE"
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
- set_tests_properties (H5JAM-${testname}-CHECKFILE-H5DMP PROPERTIES DEPENDS H5JAM-${testname}-CHECKFILE-clear-objects)
+ set_tests_properties (H5JAM-${testname}-CHECKFILE-H5DMP PROPERTIES DEPENDS ${testdepends})
add_test (
NAME H5JAM-${testname}-CHECKFILE-H5DMP_CMP
COMMAND "${CMAKE_COMMAND}"
@@ -174,11 +148,6 @@
else (NOT "${ufile}" STREQUAL "NONE")
if (NOT "${ARGN}" STREQUAL "--delete")
add_test (
- NAME H5JAM-${testname}-UNJAM_D-clear-objects
- COMMAND ${CMAKE_COMMAND} -E remove ${outfile}.ufile.txt ${outfile}.ufile.txt.err
- )
- set_tests_properties (H5JAM-${testname}-UNJAM_D-clear-objects PROPERTIES DEPENDS H5JAM-${testname}-UNJAM-clear-objects)
- add_test (
NAME H5JAM-${testname}-UNJAM
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5unjam>"
@@ -189,7 +158,7 @@
-D "TEST_SKIP_COMPARE=TRUE"
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
- set_tests_properties (H5JAM-${testname}-UNJAM PROPERTIES DEPENDS H5JAM-${testname}-UNJAM_D-clear-objects)
+ set_tests_properties (H5JAM-${testname}-UNJAM PROPERTIES DEPENDS H5JAM-${testname}-UNJAM-clear-objects)
set (compare_test "${outfile}.ufile.txt")
else (NOT "${ARGN}" STREQUAL "--delete")
add_test (NAME H5JAM-${testname}-UNJAM COMMAND $<TARGET_FILE:h5unjam> -i ${infile} -o ${outfile})
diff --git a/tools/h5ls/CMakeTests.cmake b/tools/h5ls/CMakeTests.cmake
index 2367df8..816907c 100644
--- a/tools/h5ls/CMakeTests.cmake
+++ b/tools/h5ls/CMakeTests.cmake
@@ -120,11 +120,6 @@
endif ()
else (HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME H5LS-${resultfile}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove ./testfiles/${resultfile}.out ./testfiles/${resultfile}.out.err
- )
- add_test (
NAME H5LS-${resultfile}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5ls>"
@@ -135,7 +130,6 @@
-D "TEST_REFERENCE=${resultfile}.ls"
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
- set_tests_properties (H5LS-${resultfile} PROPERTIES DEPENDS "H5LS-${resultfile}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (ADD_H5_TEST file)
diff --git a/tools/h5ls/CMakeTestsVDS.cmake b/tools/h5ls/CMakeTestsVDS.cmake
index e6c216d..0c825cb 100644
--- a/tools/h5ls/CMakeTestsVDS.cmake
+++ b/tools/h5ls/CMakeTestsVDS.cmake
@@ -71,11 +71,6 @@
endif ()
else (HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME H5LS-${resultfile}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove ./testfiles/vds/${resultfile}.out ./testfiles/vds/${resultfile}.out.err
- )
- add_test (
NAME H5LS-${resultfile}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5ls>"
@@ -86,7 +81,6 @@
-D "TEST_REFERENCE=${resultfile}.ls"
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
- set_tests_properties (H5LS-${resultfile} PROPERTIES DEPENDS "H5LS_VDS-${resultfile}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (ADD_H5_VDS_TEST file)
diff --git a/tools/h5repack/CMakeTests.cmake b/tools/h5repack/CMakeTests.cmake
index d0aa6c8..666f28e 100644
--- a/tools/h5repack/CMakeTests.cmake
+++ b/tools/h5repack/CMakeTests.cmake
@@ -147,12 +147,6 @@
set (last_test "H5REPACK-${testname}")
else (HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME H5REPACK-h5repack-${testname}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove h5repack-${testname}.out h5repack-${testname}.out.err
- )
- set_tests_properties (H5REPACK-h5repack-${testname}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles")
- add_test (
NAME H5REPACK-h5repack-${testname}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5repack>"
@@ -163,7 +157,6 @@
-D "TEST_REFERENCE=h5repack-${testname}.txt"
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
- set_tests_properties (H5REPACK-h5repack-${testname} PROPERTIES DEPENDS "H5REPACK-h5repack-${testname}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (ADD_HELP_TEST)
@@ -442,10 +435,6 @@
COMMAND ${CMAKE_COMMAND}
-E remove
testfiles/out-${testname}.${resultfile}
- testfiles/${testname}.${resultfile}.out
- testfiles/${testname}.${resultfile}.out.err
- testfiles/${resultfile}-${testname}.out
- testfiles/${resultfile}-${testname}.out.err
)
add_test (
NAME H5REPACK_UD-${testname}
diff --git a/tools/h5stat/CMakeTests.cmake b/tools/h5stat/CMakeTests.cmake
index a371b81..fea358a 100644
--- a/tools/h5stat/CMakeTests.cmake
+++ b/tools/h5stat/CMakeTests.cmake
@@ -75,11 +75,6 @@
endif (NOT "${last_test}" STREQUAL "")
else (HDF5_ENABLE_USING_MEMCHECKER)
add_test (
- NAME H5STAT-${resultfile}-clear-objects
- COMMAND ${CMAKE_COMMAND}
- -E remove ${resultfile}.out ${resultfile}.out.err
- )
- add_test (
NAME H5STAT-${resultfile}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5stat>"
@@ -90,7 +85,6 @@
-D "TEST_REFERENCE=${resultfile}.ddl"
-P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
- set_tests_properties (H5STAT-${resultfile} PROPERTIES DEPENDS "H5STAT-${resultfile}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (ADD_H5_TEST file)
diff --git a/tools/misc/CMakeTests.cmake b/tools/misc/CMakeTests.cmake
index 6822be5..bc2760b 100644
--- a/tools/misc/CMakeTests.cmake
+++ b/tools/misc/CMakeTests.cmake
@@ -76,8 +76,6 @@
COMMAND ${CMAKE_COMMAND}
-E remove
${resultfile}.h5
- ${resultfile}.out
- ${resultfile}.out.err
)
set_tests_properties (H5MKGRP-${resultfile}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles")
endif (NOT HDF5_ENABLE_USING_MEMCHECKER)
@@ -118,8 +116,6 @@
COMMAND ${CMAKE_COMMAND}
-E remove
${resultfile}.h5
- ${resultfile}.out
- ${resultfile}.out.err
)
set_tests_properties (H5MKGRP_CMP-${resultfile}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles")
add_test (
diff --git a/tools/perform/sio_standalone.h b/tools/perform/sio_standalone.h
index 258eafb..63dc7b0 100644
--- a/tools/perform/sio_standalone.h
+++ b/tools/perform/sio_standalone.h
@@ -56,6 +56,14 @@
# define H5_INC_ENUM(TYPE,VAR) (VAR)=((TYPE)((VAR)+1))
#endif
+#define H5_FLT_ABS_EQUAL(X,Y) (HDfabsf((X)-(Y)) < FLT_EPSILON)
+#define H5_DBL_ABS_EQUAL(X,Y) (HDfabs ((X)-(Y)) < DBL_EPSILON)
+#define H5_LDBL_ABS_EQUAL(X,Y) (HDfabsl((X)-(Y)) < LDBL_EPSILON)
+
+#define H5_FLT_REL_EQUAL(X,Y,M) (HDfabsf(((Y)-(X)) / (X)) < (M))
+#define H5_DBL_REL_EQUAL(X,Y,M) (HDfabs (((Y)-(X)) / (X)) < (M))
+#define H5_LDBL_REL_EQUAL(X,Y,M) (HDfabsl(((Y)-(X)) / (X)) < (M))
+
/*
* Redefine all the POSIX functions. We should never see a POSIX
* function (or any other non-HDF5 function) in the source!
@@ -183,20 +191,32 @@ H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
#define HDstat(S,B) _stati64(S,B)
typedef struct _stati64 h5_stat_t;
typedef __int64 h5_stat_size_t;
+ #define HDoff_t __int64
#elif H5_SIZEOF_OFF_T!=8 && H5_SIZEOF_OFF64_T==8 && defined(H5_HAVE_STAT64)
#define HDfstat(F,B) fstat64(F,B)
#define HDlstat(S,B) lstat64(S,B)
#define HDstat(S,B) stat64(S,B)
typedef struct stat64 h5_stat_t;
typedef off64_t h5_stat_size_t;
+ #define HDoff_t off64_t
#else
#define HDfstat(F,B) fstat(F,B)
#define HDlstat(S,B) lstat(S,B)
#define HDstat(S,B) stat(S,B)
typedef struct stat h5_stat_t;
typedef off_t h5_stat_size_t;
+ #define HDoff_t off_t
#endif
+#ifndef H5_HAVE_WIN32_API
+/* These definitions differ in Windows and are defined in
+ * H5win32defs for that platform.
+ */
+typedef struct stat h5_stat_t;
+typedef off_t h5_stat_size_t;
+#define HDoff_t off_t
+#endif /* H5_HAVE_WIN32_API */
+
#define HDftell(F) ftell(F)
#define HDftruncate(F,L) ftruncate(F,L)
#define HDfwrite(M,Z,N,F) fwrite(M,Z,N,F)
@@ -402,6 +422,11 @@ H5_DLL void HDsrand(unsigned int seed);
#define HDstrtol(S,R,N) strtol(S,R,N)
H5_DLL int64_t HDstrtoll (const char *s, const char **rest, int base);
#define HDstrtoul(S,R,N) strtoul(S,R,N)
+#ifdef H5_HAVE_WIN32_API
+#define HDstrtoull(S,R,N) _strtoui64(S,R,N)
+#else
+#define HDstrtoull(S,R,N) strtoull(S,R,N)
+#endif
#define HDstrxfrm(X,Y,Z) strxfrm(X,Y,Z)
#define HDsysconf(N) sysconf(N)
#define HDsystem(S) system(S)