Compare commits
41 Commits
hdf5_1_8_1
...
hdf5-1_8_1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a81072047a | ||
|
|
abc9e47211 | ||
|
|
5378648f38 | ||
|
|
a722448cd1 | ||
|
|
aa51f3eab8 | ||
|
|
cd9872b0b6 | ||
|
|
244b942437 | ||
|
|
7316eacf78 | ||
|
|
46b3fba39e | ||
|
|
fdb4afa9c0 | ||
|
|
545c05fee3 | ||
|
|
28f8d9231f | ||
|
|
4088f72f29 | ||
|
|
ec44b28d9e | ||
|
|
1248b6a632 | ||
|
|
b01c140736 | ||
|
|
9afd83c1cb | ||
|
|
99d8998eb3 | ||
|
|
3ec97c62cb | ||
|
|
295fc6270e | ||
|
|
231456fb5f | ||
|
|
14fe0317db | ||
|
|
6ed9173ecd | ||
|
|
ed01385375 | ||
|
|
10366ba116 | ||
|
|
e04b9b47d9 | ||
|
|
f8172fa692 | ||
|
|
a5630d1093 | ||
|
|
74af9ca093 | ||
|
|
b53552a536 | ||
|
|
f1ec0ee395 | ||
|
|
2df9918c57 | ||
|
|
f527bb1863 | ||
|
|
42fa89b60d | ||
|
|
2ace2845e5 | ||
|
|
f2e1c3354d | ||
|
|
159f6633a4 | ||
|
|
93f524713c | ||
|
|
5ffb018405 | ||
|
|
beb4ef159d | ||
|
|
5c9749559f |
@@ -281,10 +281,10 @@ SET (H5_ENABLE_SHARED_LIB NO)
|
||||
SET (H5_ENABLE_STATIC_LIB NO)
|
||||
IF (BUILD_SHARED_LIBS)
|
||||
SET (LIB_TYPE SHARED)
|
||||
ADD_DEFINITIONS (-DH5_BUILT_AS_DYNAMIC_LIB)
|
||||
SET (H5_BUILT_AS_DYNAMIC_LIB 1)
|
||||
SET (H5_ENABLE_SHARED_LIB YES)
|
||||
ELSE (BUILD_SHARED_LIBS)
|
||||
ADD_DEFINITIONS (-DH5_BUILT_AS_STATIC_LIB)
|
||||
SET (H5_BUILT_AS_STATIC_LIB 1)
|
||||
SET (H5_ENABLE_STATIC_LIB YES)
|
||||
IF (NOT WIN32)
|
||||
# should this be a user setting : Everyone uses it anyway ?
|
||||
@@ -560,9 +560,9 @@ IF (HDF5_ENABLE_Z_LIB_SUPPORT)
|
||||
IF (NOT H5_ZLIB_HEADER)
|
||||
IF (NOT ZLIB_USE_EXTERNAL)
|
||||
FIND_PACKAGE (ZLIB NAMES ${ZLIB_PACKAGE_NAME}${HDF_PACKAGE_EXT})
|
||||
IF (NOT ZLIB_FOUND)
|
||||
FIND_PACKAGE (ZLIB) # Legacy find
|
||||
ENDIF (NOT ZLIB_FOUND)
|
||||
IF (NOT ZLIB_FOUND)
|
||||
FIND_PACKAGE (ZLIB) # Legacy find
|
||||
ENDIF (NOT ZLIB_FOUND)
|
||||
ENDIF (NOT ZLIB_USE_EXTERNAL)
|
||||
IF (ZLIB_FOUND)
|
||||
SET (H5_HAVE_FILTER_DEFLATE 1)
|
||||
@@ -901,7 +901,7 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
|
||||
${HDF5_BINARY_DIR}/CMakeFiles/${HDF5_PACKAGE}${HDF_PACKAGE_EXT}-config-version.cmake @ONLY
|
||||
)
|
||||
INSTALL (
|
||||
FILES ${HDF5_BINARY_DIR}/CMakeFiles/${HDF5_PACKAGE}${HDF5_PACKAGE_EXT}-config-version.cmake
|
||||
FILES ${HDF5_BINARY_DIR}/CMakeFiles/${HDF5_PACKAGE}${HDF_PACKAGE_EXT}-config-version.cmake
|
||||
DESTINATION ${HDF5_INSTALL_CMAKE_DIR}/${HDF5_PACKAGE}
|
||||
COMPONENT configinstall
|
||||
)
|
||||
|
||||
5
MANIFEST
5
MANIFEST
@@ -46,6 +46,7 @@
|
||||
./bin/chkconfigure _DO_NOT_DISTRIBUTE_
|
||||
./bin/chkcopyright _DO_NOT_DISTRIBUTE_
|
||||
./bin/chkmanifest
|
||||
./bin/cmakehdf5
|
||||
./bin/compile
|
||||
./bin/config.guess
|
||||
./bin/config.sub
|
||||
@@ -439,8 +440,8 @@
|
||||
./release_docs/INSTALL_parallel
|
||||
./release_docs/INSTALL_VMS.txt
|
||||
./release_docs/INSTALL_Windows.txt
|
||||
./release_docs/INSTALL_Windows_From_Command_Line.txt
|
||||
./release_docs/INSTALL_Windows_Short_VS2008.TXT
|
||||
./release_docs/obsolete_windows_docs/INSTALL_Windows_From_Command_Line.txt
|
||||
./release_docs/obsolete_windows_docs/INSTALL_Windows_Short_VS2008.TXT
|
||||
./release_docs/RELEASE.txt
|
||||
./release_docs/USING_CMake.txt
|
||||
./release_docs/USING_Windows.txt
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
HDF5 version 1.8.10-snap14 currently under development
|
||||
HDF5 version 1.8.10-patch1 released on 2013-01-22
|
||||
Please refer to the release_docs/INSTALL file for installation instructions.
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
|
||||
196
bin/cmakehdf5
Executable file
196
bin/cmakehdf5
Executable file
@@ -0,0 +1,196 @@
|
||||
#! /bin/sh
|
||||
# Build and Test HDF5 using cmake.
|
||||
# Author: Allen Byrne
|
||||
# Albert Cheng
|
||||
# Creation Date: Nov 2012
|
||||
|
||||
# Copyright: The HDF Group, 2012
|
||||
|
||||
# Debug: remove the comment hash if you want DPRINT to do echo
|
||||
DPRINT=:
|
||||
#DPRINT=echo
|
||||
|
||||
# variable names
|
||||
progname=`basename $0` # program name
|
||||
cminfile="cmakemin.$$" # Cmake minimum file
|
||||
cfgfile=$progname.$$ # configure file
|
||||
$DPRINT $cfgfile
|
||||
|
||||
# Remove temporary generated files if exit 0
|
||||
trap "rm -f $cminfile $cfgfile" 0
|
||||
|
||||
#==========
|
||||
# main
|
||||
#==========
|
||||
# First generate the two needed input files, the $cimnfile and $cfgfile.
|
||||
# Then use ctest to use the two input files.
|
||||
|
||||
#==========
|
||||
# create the configure file
|
||||
#==========
|
||||
# Create the cmake minimum required file to be used by the following
|
||||
# configure file. Though not absolute needed, it is better to generate
|
||||
# this file before the configure file. Quote the EOF to preven substitution
|
||||
# in the text.
|
||||
#==========
|
||||
#==========
|
||||
cat > $cfgfile <<'EOF'
|
||||
cmake_minimum_required(VERSION 2.8.6 FATAL_ERROR)
|
||||
########################################################
|
||||
# This dashboard is maintained by The HDF Group
|
||||
# For any comments please contact cdashhelp@hdfgroup.org
|
||||
#
|
||||
########################################################
|
||||
|
||||
set (CTEST_DASHBOARD_ROOT ${CTEST_SCRIPT_DIRECTORY})
|
||||
set (CTEST_SOURCE_DIRECTORY "../hdf5")
|
||||
set (CTEST_BINARY_DIRECTORY ".")
|
||||
set (CTEST_CMAKE_GENERATOR "Unix Makefiles")
|
||||
set (CTEST_BUILD_CONFIGURATION "Release")
|
||||
|
||||
# -- CDash variables
|
||||
#set (LOCAL_NO_SUBMIT TRUE)
|
||||
set (MODEL "Experimental")
|
||||
set (CDASH_LOCAL TRUE)
|
||||
set (SITE_BUILDNAME_SUFFIX "SHARED")
|
||||
|
||||
# -- URL set for internal check, default is to not update
|
||||
set (LOCAL_SKIP_UPDATE TRUE)
|
||||
set (REPOSITORY_URL "http://svn.hdfgroup.uiuc.edu/hdf5/branches/hdf5_1_8")
|
||||
# -- Standard build options
|
||||
set (ADD_BUILD_OPTIONS "-DCMAKE_INSTALL_PREFIX:PATH=/usr/local/hdf5.1.8 -DHDF5_ALLOW_EXTERNAL_SUPPORT:STRING=\"SVN\" -DHDF5_PACKAGE_EXTLIBS:BOOL=ON")
|
||||
|
||||
# Use multiple CPU cores to build
|
||||
SET (CTEST_BUILD_FLAGS "-j4")
|
||||
|
||||
# -----------------------------------------------------------
|
||||
# -- Get environment
|
||||
# -----------------------------------------------------------
|
||||
## -- set hostname
|
||||
## --------------------------
|
||||
find_program (HOSTNAME_CMD NAMES hostname)
|
||||
exec_program (${HOSTNAME_CMD} ARGS OUTPUT_VARIABLE HOSTNAME)
|
||||
set (CTEST_SITE "${HOSTNAME}${CTEST_SITE_EXT}")
|
||||
find_program (UNAME NAMES uname)
|
||||
macro (getuname name flag)
|
||||
exec_program ("${UNAME}" ARGS "${flag}" OUTPUT_VARIABLE "${name}")
|
||||
endmacro (getuname)
|
||||
|
||||
getuname (osname -s)
|
||||
getuname (osrel -r)
|
||||
getuname (cpu -m)
|
||||
|
||||
if (SITE_BUILDNAME_SUFFIX)
|
||||
set (CTEST_BUILD_NAME "${osname}-${osrel}-${cpu}-${SITE_BUILDNAME_SUFFIX}")
|
||||
else (SITE_BUILDNAME_SUFFIX)
|
||||
set (CTEST_BUILD_NAME "${osname}-${osrel}-${cpu}")
|
||||
endif (SITE_BUILDNAME_SUFFIX)
|
||||
# -----------------------------------------------------------
|
||||
|
||||
set (BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DSITE:STRING=${CTEST_SITE} -DBUILDNAME:STRING=${CTEST_BUILD_NAME}")
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# MAC machines need special option
|
||||
#-----------------------------------------------------------------------------
|
||||
if (APPLE)
|
||||
# Compiler choice
|
||||
execute_process(COMMAND xcrun --find cc OUTPUT_VARIABLE XCODE_CC OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND xcrun --find c++ OUTPUT_VARIABLE XCODE_CXX OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
SET(ENV{CC} "${XCODE_CC}")
|
||||
SET(ENV{CXX} "${XCODE_CXX}")
|
||||
# Shared fortran is not supported, build static
|
||||
set (BUILD_OPTIONS "${BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF -DCMAKE_ANSI_CFLAGS:STRING=-fPIC")
|
||||
set (BUILD_OPTIONS "${BUILD_OPTIONS} -DCTEST_USE_LAUNCHERS:BOOL=ON -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=OFF")
|
||||
endif (APPLE)
|
||||
|
||||
|
||||
# -----------------------------------------------------------
|
||||
find_package (Subversion)
|
||||
set (CTEST_UPDATE_COMMAND "${Subversion_SVN_EXECUTABLE}")
|
||||
# -- Only clean build folder if LOCAL_CLEAR_BUILD is set
|
||||
if (LOCAL_CLEAR_BUILD)
|
||||
set (CTEST_START_WITH_EMPTY_BINARY_DIRECTORY TRUE)
|
||||
ctest_empty_binary_directory (${CTEST_BINARY_DIRECTORY})
|
||||
endif (LOCAL_CLEAR_BUILD)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Send the main script as a note.
|
||||
list (APPEND CTEST_NOTES_FILES
|
||||
"${CMAKE_CURRENT_LIST_FILE}"
|
||||
"${CTEST_SOURCE_DIRECTORY}/config/cmake/cacheinit.cmake"
|
||||
)
|
||||
|
||||
# Check for required variables.
|
||||
foreach (req
|
||||
CTEST_CMAKE_GENERATOR
|
||||
CTEST_SITE
|
||||
CTEST_BUILD_NAME
|
||||
)
|
||||
if (NOT DEFINED ${req})
|
||||
message(FATAL_ERROR "The containing script must set ${req}")
|
||||
endif (NOT DEFINED ${req})
|
||||
endforeach (req)
|
||||
|
||||
## -- set output to english
|
||||
set($ENV{LC_MESSAGES} "en_EN")
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Initialize the CTEST commands
|
||||
#------------------------------
|
||||
SET (CTEST_CMAKE_COMMAND "\"${CMAKE_COMMAND}\"")
|
||||
SET (CTEST_CONFIGURE_COMMAND
|
||||
"${CTEST_CMAKE_COMMAND} -C \"${CTEST_SOURCE_DIRECTORY}/config/cmake/cacheinit.cmake\" -DCMAKE_BUILD_TYPE:STRING=${CTEST_BUILD_CONFIGURATION} ${BUILD_OPTIONS} \"-G${CTEST_CMAKE_GENERATOR}\" \"${CTEST_SOURCE_DIRECTORY}\"")
|
||||
|
||||
# Print summary information.
|
||||
foreach (v
|
||||
CTEST_SITE
|
||||
CTEST_BUILD_NAME
|
||||
CTEST_SOURCE_DIRECTORY
|
||||
CTEST_BINARY_DIRECTORY
|
||||
CTEST_CMAKE_GENERATOR
|
||||
CTEST_BUILD_CONFIGURATION
|
||||
CTEST_CONFIGURE_COMMAND
|
||||
CTEST_SCRIPT_DIRECTORY
|
||||
)
|
||||
set (vars "${vars} ${v}=[${${v}}]\n")
|
||||
endforeach (v)
|
||||
message ("Dashboard script configuration:\n${vars}\n")
|
||||
|
||||
CTEST_START (${MODEL} TRACK ${MODEL})
|
||||
if (NOT LOCAL_SKIP_UPDATE)
|
||||
CTEST_UPDATE (SOURCE "${CTEST_SOURCE_DIRECTORY}")
|
||||
endif (NOT LOCAL_SKIP_UPDATE)
|
||||
CTEST_CONFIGURE (BUILD "${CTEST_BINARY_DIRECTORY}")
|
||||
message ("Configure DONE")
|
||||
CTEST_READ_CUSTOM_FILES ("${CTEST_BINARY_DIRECTORY}")
|
||||
if (NOT LOCAL_NO_SUBMIT)
|
||||
CTEST_SUBMIT (PARTS Update Configure Notes)
|
||||
endif (NOT LOCAL_NO_SUBMIT)
|
||||
CTEST_BUILD (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND)
|
||||
if (NOT LOCAL_NO_SUBMIT)
|
||||
CTEST_SUBMIT (PARTS Build)
|
||||
endif (NOT LOCAL_NO_SUBMIT)
|
||||
message ("build DONE")
|
||||
if (NOT LOCAL_SKIP_TEST)
|
||||
CTEST_TEST (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND)
|
||||
if (NOT LOCAL_NO_SUBMIT)
|
||||
CTEST_SUBMIT (PARTS Test)
|
||||
endif (NOT LOCAL_NO_SUBMIT)
|
||||
message ("test DONE")
|
||||
endif (NOT LOCAL_SKIP_TEST)
|
||||
|
||||
message ("DONE")
|
||||
EOF
|
||||
|
||||
|
||||
# Run ctest
|
||||
date
|
||||
ctest -S $cfgfile -C Release -O testhdf.log
|
||||
exit_code=$?
|
||||
if [ $exit_code = 0 ]; then
|
||||
echo Complete without error
|
||||
else
|
||||
echo Error encountered
|
||||
fi
|
||||
date
|
||||
exit $exit_code
|
||||
@@ -18,6 +18,6 @@
|
||||
# latest revision of that branch. If set to "hdf5", it uses the main
|
||||
# version.
|
||||
# H5VER tells runtest which version to run
|
||||
H5VERSION=hdf5_1_8
|
||||
H5VER="-r1.8"
|
||||
H5VERSION=hdf5_1_8_10
|
||||
H5VER="-r1.8.10"
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ INCLUDE (${CMAKE_ROOT}/Modules/TestBigEndian.cmake)
|
||||
INCLUDE (${CMAKE_ROOT}/Modules/TestForSTDNamespace.cmake)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Always SET this for now IF we are on an OS X box
|
||||
# APPLE/Darwin setup
|
||||
#-----------------------------------------------------------------------------
|
||||
IF (APPLE)
|
||||
LIST(LENGTH CMAKE_OSX_ARCHITECTURES ARCH_LENGTH)
|
||||
@@ -28,6 +28,11 @@ IF (APPLE)
|
||||
SET (H5_AC_APPLE_UNIVERSAL_BUILD 0)
|
||||
ENDIF (APPLE)
|
||||
|
||||
# Check for Darwin (not just Apple - we also want to catch OpenDarwin)
|
||||
IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
SET (H5_HAVE_DARWIN 1)
|
||||
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Option to Clear File Buffers before write --enable-clear-file-buffers
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
@@ -15,6 +15,24 @@
|
||||
/* Define if using a Windows compiler (i.e. Visual Studio) */
|
||||
#cmakedefine H5_HAVE_VISUAL_STUDIO @H5_HAVE_VISUAL_STUDIO@
|
||||
|
||||
/* Defined if HDF5 was built with CMake AND build as a shared library */
|
||||
#cmakedefine H5_BUILT_AS_DYNAMIC_LIB @H5_BUILT_AS_DYNAMIC_LIB@
|
||||
|
||||
/* Defined if HDF5 was built with CMake AND build as a static library */
|
||||
#cmakedefine H5_BUILT_AS_STATIC_LIB @H5_BUILT_AS_STATIC_LIB@
|
||||
|
||||
/* Defined if HDF5 CPP was built with CMake AND build as a shared library */
|
||||
#cmakedefine H5_CPP_BUILT_AS_DYNAMIC_LIB @H5_CPP_BUILT_AS_DYNAMIC_LIB@
|
||||
|
||||
/* Defined if HDF5 CPP was built with CMake AND build as a static library */
|
||||
#cmakedefine H5_CPP_BUILT_AS_STATIC_LIB @H5_CPP_BUILT_AS_STATIC_LIB@
|
||||
|
||||
/* Defined if HDF5 HL was built with CMake AND build as a shared library */
|
||||
#cmakedefine H5_HL_BUILT_AS_DYNAMIC_LIB @H5_HL_BUILT_AS_DYNAMIC_LIB@
|
||||
|
||||
/* Defined if HDF5 HL was built with CMake AND build as a static library */
|
||||
#cmakedefine H5_HL_BUILT_AS_STATIC_LIB @H5_HL_BUILT_AS_STATIC_LIB@
|
||||
|
||||
/* Define if building universal (internal helper macro) */
|
||||
#cmakedefine H5_AC_APPLE_UNIVERSAL_BUILD @H5_AC_APPLE_UNIVERSAL_BUILD@
|
||||
|
||||
@@ -93,6 +111,9 @@
|
||||
/* Define if the function stack tracing code is to be compiled in */
|
||||
#cmakedefine H5_HAVE_CODESTACK @H5_HAVE_CODESTACK@
|
||||
|
||||
/* Define if Darwin or Mac OS X */
|
||||
#cmakedefine H5_HAVE_DARWIN @H5_HAVE_DARWIN@
|
||||
|
||||
/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't.
|
||||
*/
|
||||
#cmakedefine H5_HAVE_DECL_TZNAME @H5_HAVE_DECL_TZNAME@
|
||||
|
||||
@@ -112,7 +112,7 @@ IF (NOT TEST_SKIP_COMPARE)
|
||||
|
||||
# again, if return value is !=0 scream and shout
|
||||
IF (NOT ${TEST_RESULT} STREQUAL 0)
|
||||
MESSAGE (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not match P_${TEST_REFERENCE}")
|
||||
MESSAGE (FATAL_ERROR "Failed: The output of ${TEST_OUTPUT} did not match P_${TEST_REFERENCE}")
|
||||
ENDIF (NOT ${TEST_RESULT} STREQUAL 0)
|
||||
ENDIF (NOT TEST_SKIP_COMPARE)
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ IF (NOT TEST_SKIP_COMPARE)
|
||||
|
||||
# again, if return value is !=0 scream and shout
|
||||
IF (NOT ${TEST_RESULT} STREQUAL 0)
|
||||
MESSAGE (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not match ${TEST_REFERENCE}")
|
||||
MESSAGE (FATAL_ERROR "Failed: The output of ${TEST_OUTPUT} did not match ${TEST_REFERENCE}")
|
||||
ENDIF (NOT ${TEST_RESULT} STREQUAL 0)
|
||||
|
||||
IF (TEST_ERRREF)
|
||||
@@ -136,7 +136,7 @@ IF (NOT TEST_SKIP_COMPARE)
|
||||
|
||||
# again, if return value is !=0 scream and shout
|
||||
IF (NOT ${TEST_RESULT} STREQUAL 0)
|
||||
MESSAGE (FATAL_ERROR "Failed: The error output of ${TEST_PROGRAM} did not match ${TEST_ERRREF}")
|
||||
MESSAGE (FATAL_ERROR "Failed: The error output of ${TEST_OUTPUT}.err did not match ${TEST_ERRREF}")
|
||||
ENDIF (NOT ${TEST_RESULT} STREQUAL 0)
|
||||
ENDIF (TEST_ERRREF)
|
||||
ENDIF (NOT TEST_SKIP_COMPARE)
|
||||
|
||||
36
configure
vendored
36
configure
vendored
@@ -1,7 +1,7 @@
|
||||
#! /bin/sh
|
||||
# From configure.ac Id: configure.ac 22803 2012-09-24 00:27:42Z hdftest .
|
||||
# From configure.ac Id: configure.ac 23143 2013-01-08 03:47:01Z derobins .
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for HDF5 1.8.10-snap14.
|
||||
# Generated by GNU Autoconf 2.69 for HDF5 1.8.10-patch1.
|
||||
#
|
||||
# Report bugs to <help@hdfgroup.org>.
|
||||
#
|
||||
@@ -591,8 +591,8 @@ MAKEFLAGS=
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='HDF5'
|
||||
PACKAGE_TARNAME='hdf5'
|
||||
PACKAGE_VERSION='1.8.10-snap14'
|
||||
PACKAGE_STRING='HDF5 1.8.10-snap14'
|
||||
PACKAGE_VERSION='1.8.10-patch1'
|
||||
PACKAGE_STRING='HDF5 1.8.10-patch1'
|
||||
PACKAGE_BUGREPORT='help@hdfgroup.org'
|
||||
PACKAGE_URL=''
|
||||
|
||||
@@ -1485,7 +1485,7 @@ if test "$ac_init_help" = "long"; then
|
||||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures HDF5 1.8.10-snap14 to adapt to many kinds of systems.
|
||||
\`configure' configures HDF5 1.8.10-patch1 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@@ -1555,7 +1555,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of HDF5 1.8.10-snap14:";;
|
||||
short | recursive ) echo "Configuration of HDF5 1.8.10-patch1:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@@ -1754,7 +1754,7 @@ fi
|
||||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
HDF5 configure 1.8.10-snap14
|
||||
HDF5 configure 1.8.10-patch1
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
@@ -2848,7 +2848,7 @@ cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by HDF5 $as_me 1.8.10-snap14, which was
|
||||
It was created by HDF5 $as_me 1.8.10-patch1, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
@@ -3680,7 +3680,7 @@ fi
|
||||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='hdf5'
|
||||
VERSION='1.8.10-snap14'
|
||||
VERSION='1.8.10-patch1'
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
@@ -22226,7 +22226,7 @@ fi
|
||||
|
||||
|
||||
case "X-$enable_production" in
|
||||
X-yes)
|
||||
X-|X-yes)
|
||||
enable_production="yes"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: production" >&5
|
||||
$as_echo "production" >&6; }
|
||||
@@ -22236,7 +22236,7 @@ $as_echo "production" >&6; }
|
||||
H5_CXXFLAGS="$H5_CXXFLAGS $PROD_CXXFLAGS"
|
||||
H5_FCFLAGS="$H5_FCFLAGS $PROD_FCFLAGS"
|
||||
;;
|
||||
X-|X-no)
|
||||
X-no)
|
||||
enable_production="no"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: development" >&5
|
||||
$as_echo "development" >&6; }
|
||||
@@ -22772,6 +22772,14 @@ fi
|
||||
|
||||
done
|
||||
|
||||
## Also need to detect Darwin for pubconf
|
||||
case $host_os in
|
||||
darwin*)
|
||||
|
||||
$as_echo "#define HAVE_DARWIN 1" >>confdefs.h
|
||||
|
||||
;;
|
||||
esac
|
||||
|
||||
## Windows
|
||||
case "`uname`" in
|
||||
@@ -31748,7 +31756,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by HDF5 $as_me 1.8.10-snap14, which was
|
||||
This file was extended by HDF5 $as_me 1.8.10-patch1, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@@ -31814,7 +31822,7 @@ _ACEOF
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
HDF5 config.status 1.8.10-snap14
|
||||
HDF5 config.status 1.8.10-patch1
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
@@ -34587,7 +34595,7 @@ Usage: $0 [OPTIONS]
|
||||
Report bugs to <bug-libtool@gnu.org>."
|
||||
|
||||
lt_cl_version="\
|
||||
HDF5 config.lt 1.8.10-snap14
|
||||
HDF5 config.lt 1.8.10-patch1
|
||||
configured by $0, generated by GNU Autoconf 2.69.
|
||||
|
||||
Copyright (C) 2011 Free Software Foundation, Inc.
|
||||
|
||||
12
configure.ac
12
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.8.10-snap14], [help@hdfgroup.org])
|
||||
AC_INIT([HDF5], [1.8.10-patch1], [help@hdfgroup.org])
|
||||
AC_CONFIG_SRCDIR([src/H5.c])
|
||||
AC_CONFIG_HEADER([src/H5config.h])
|
||||
|
||||
@@ -1219,7 +1219,7 @@ AC_ARG_ENABLE([production],
|
||||
[Determines how to run the compiler.])])
|
||||
|
||||
case "X-$enable_production" in
|
||||
X-yes)
|
||||
X-|X-yes)
|
||||
enable_production="yes"
|
||||
AC_MSG_RESULT([production])
|
||||
CONFIG_MODE=production
|
||||
@@ -1228,7 +1228,7 @@ case "X-$enable_production" in
|
||||
H5_CXXFLAGS="$H5_CXXFLAGS $PROD_CXXFLAGS"
|
||||
H5_FCFLAGS="$H5_FCFLAGS $PROD_FCFLAGS"
|
||||
;;
|
||||
X-|X-no)
|
||||
X-no)
|
||||
enable_production="no"
|
||||
AC_MSG_RESULT([development])
|
||||
CONFIG_MODE=development
|
||||
@@ -1290,6 +1290,12 @@ AC_CHECK_HEADERS([stdint.h], [C9x=yes])
|
||||
|
||||
## Darwin
|
||||
AC_CHECK_HEADERS([mach/mach_time.h])
|
||||
## Also need to detect Darwin for pubconf
|
||||
case $host_os in
|
||||
darwin*)
|
||||
AC_DEFINE([HAVE_DARWIN], [1], [Define if Darwin or Mac OS X])
|
||||
;;
|
||||
esac
|
||||
|
||||
## Windows
|
||||
case "`uname`" in
|
||||
|
||||
@@ -98,10 +98,6 @@ FFLAGS="${HDF5_FFLAGS:-$FFLAGSBASE}"
|
||||
LDFLAGS="${HDF5_LDFLAGS:-$LDFLAGSBASE}"
|
||||
LIBS="${HDF5_LIBS:-$LIBSBASE}"
|
||||
|
||||
# If static was disabled, @HDF5_USE_SHLIB@ will be yes. In that case
|
||||
# HDF5_USE_SHLIB should be set to yes because there are no static
|
||||
# lib files.
|
||||
HDF5_USE_SHLIB="@HDF5_USE_SHLIB@"
|
||||
USE_SHARED_LIB="${HDF5_USE_SHLIB:-no}"
|
||||
|
||||
usage() {
|
||||
|
||||
@@ -19,8 +19,726 @@ This file contains development history of HDF5 1.8 branch
|
||||
%%%%1.8.9%%%%
|
||||
|
||||
|
||||
<NOTE: Copy the RELEASE.txt from the 1.8.9 Release Branch HERE when
|
||||
it has been finalized!>
|
||||
HDF5 version 1.8.9 released on 2012-05-09
|
||||
================================================================================
|
||||
|
||||
INTRODUCTION
|
||||
============
|
||||
|
||||
This document describes the differences between HDF5-1.8.8 and
|
||||
HDF5 1.8.9. It also contains information on the platforms tested and
|
||||
known problems in HDF5-1.8.9.
|
||||
|
||||
For more details, see the files HISTORY-1_0-1_8_0_rc3.txt
|
||||
and HISTORY-1_8.txt in the release_docs/ directory of the HDF5 source.
|
||||
|
||||
Links to the HDF5 1.8.9 source code, documentation, and additional materials
|
||||
can be found on the HDF5 web page at:
|
||||
|
||||
http://www.hdfgroup.org/products/hdf5/
|
||||
|
||||
The HDF5 1.8.9 release can be obtained from:
|
||||
|
||||
http://www.hdfgroup.org/HDF5/release/obtain5.html
|
||||
|
||||
User documentation for 1.8.9 can be accessed directly at this location:
|
||||
|
||||
http://www.hdfgroup.org/HDF5/doc/
|
||||
|
||||
New features in the HDF5-1.8.x release series, including brief general
|
||||
descriptions of some new and modified APIs, are described in the "What's New
|
||||
in 1.8.0?" document:
|
||||
|
||||
http://www.hdfgroup.org/HDF5/doc/ADGuide/WhatsNew180.html
|
||||
|
||||
All new and modified APIs are listed in detail in the "HDF5 Software Changes
|
||||
from Release to Release" document, in the section "Release 1.8.9 (current
|
||||
release) versus Release 1.8.8":
|
||||
|
||||
http://www.hdfgroup.org/HDF5/doc/ADGuide/Changes.html
|
||||
|
||||
If you have any questions or comments, please send them to the HDF Help Desk:
|
||||
|
||||
help@hdfgroup.org
|
||||
|
||||
|
||||
CONTENTS
|
||||
========
|
||||
|
||||
- New Features
|
||||
- Support for New Platforms, Languages, and Compilers
|
||||
- Bug Fixes since HDF5-1.8.8
|
||||
- Platforms Tested
|
||||
- Supported Configuration Features Summary
|
||||
- Known Problems
|
||||
|
||||
|
||||
New Features
|
||||
============
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
- None
|
||||
|
||||
Library
|
||||
-------
|
||||
- Added new feature to merge committed datatypes when copying objects,
|
||||
using new H5O_COPY_MERGE_COMMITTED_DTYPE_FLAG, modified by new API
|
||||
routines: H5Padd_merge_committed_dtype_path(),
|
||||
H5Pfree_merge_committed_dtype_paths(), H5Pset_mcdt_search_cb() and
|
||||
H5Pget_mcdt_search_cb(). (QAK - 2012/03/30)
|
||||
- Added new feature which allows working with files in memory in the
|
||||
same ways files are worked with on disk. New API routines include
|
||||
H5Pset_file_image, H5Pget_file_image, H5Pset_file_image_callbacks,
|
||||
H5Pget_file_image_callbacks, H5Fget_file_image, and
|
||||
H5LTopen_file_image. (QAK - 2012/04/17)
|
||||
|
||||
Parallel Library
|
||||
----------------
|
||||
- Corrected memory allocation error in MPI datatype construction code.
|
||||
(QAK - 2012/04/23)
|
||||
- Add two new routines to set/get the atomicity parameter in the
|
||||
MPI library to perform atomic operations. Some file systems (for
|
||||
example PVFS2) do not support atomic updates, so those routines
|
||||
would not be supported. (MSC - 2012/03/27 - HDFFV-7961)
|
||||
|
||||
Tools
|
||||
-----
|
||||
- h5repack: Added ability to set the metadata block size of the output
|
||||
file, with the '-M'/'--metadata_block_size' command line parameter.
|
||||
(QAK - 2012/03/30)
|
||||
- h5stat: Added ability to display a summary of the file space usage for a
|
||||
file, with the '-S'/'--summary' command line parameter. (QAK - 2012/03/28)
|
||||
- h5dump: Added capability for "-a" option to show attributes containing "/"
|
||||
by using an escape character. For example, for a dataset "/dset"
|
||||
containing attribute "speed(m/h)", use "h5dump -a "/dset/speed(\/h)"
|
||||
to show the content of the attribute. (PC - 2012/03/12 - HDFFV-7523)
|
||||
- h5dump: Added ability to apply command options across multiple files using a
|
||||
wildcard in the filename. Unix example; "h5dump -H -d Dataset1 tarr*.h5".
|
||||
Cross platform example; "h5dump -H -d Dataset1 tarray1.h5 tarray2.h5 tarray3.h5".
|
||||
(ADB - 2012/03/12 - HDFFV-7876).
|
||||
- h5dump: Added new option --no-compact-subset. This option will not
|
||||
interpret the '[' character as starting the compact form of
|
||||
subsetting. This is useful when the "h5dump error: unable to
|
||||
open dataset "datset_name"" message is output because a dataset
|
||||
name contains a '[' character. (ADB - 2012/03/05 - HDFFV-7689).
|
||||
- h5repack: Improved performance for big chunked datasets (size > 128MB)
|
||||
when used with the layout (-l) or compression (-f) options.
|
||||
Before this change, repacking datasets with chunks with a large first
|
||||
dimension would take extremely long. For example, repacking a dataset
|
||||
with chunk dimensions of 1024x5x1 might take many hours to process
|
||||
while changing a dataset with chunk dimensions set to 1x5x1024
|
||||
might take under an hour. After this change, processing the dataset
|
||||
with chunk dimensions of 1024x5x1 takes about 15 minutes, and processing
|
||||
a dataset with chunk dimensions of 1x5x1024 takes about 14 minutes.
|
||||
(JKM - 2012/03/01 - HDFFV-7862)
|
||||
|
||||
High-Level APIs
|
||||
---------------
|
||||
- New API: H5LTpath_valid (Fortran: h5ltpath_valid_f) checks
|
||||
if a path is correct, determines if a link resolves to a valid
|
||||
object, and checks that the link does not dangle. (MSB - 2012/03/15)
|
||||
|
||||
Fortran API
|
||||
-----------
|
||||
|
||||
- Added for the C API the Fortran wrapper:
|
||||
h5ocopy_f (MSB - 2012/03/22)
|
||||
|
||||
C++ API
|
||||
-------
|
||||
- None
|
||||
|
||||
|
||||
Support for New Platforms, Languages, and Compilers
|
||||
===================================================
|
||||
- None
|
||||
|
||||
Bug Fixes since HDF5-1.8.8
|
||||
==========================
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
- Fixed Makefile issue in which "-Wl," was not properly specified
|
||||
prior to -rpath when building parallel Fortran libraries with
|
||||
an Intel compiler. (MAM - 2012/03/26)
|
||||
- Makefiles generated by other packages using h5cc as the compiler
|
||||
no longer error when 'make' is invoked more than once in order
|
||||
to 'rebuild' after changes to source. (MAM - 2012/03/26)
|
||||
- Added code to display the version information of XL Fortran and C++
|
||||
in the summary of configure. (AKC - 2012/02/28 - HDFFV-7793)
|
||||
- Updated all CMakeLists.txt files to indicate the minimum CMake version is
|
||||
the current standard of 2.8.6 (ADB - 2011/12/05 - HDFFV-7854)
|
||||
|
||||
Library
|
||||
-------
|
||||
- Windows and STDIO correctness changes have been propagated from the SEC2
|
||||
and old Windows drivers to the STDIO VFD. (DER - 2012/03/30 - HDFFV-7917)
|
||||
- Fixed an error that would occur when copying an object with attribute
|
||||
creation order tracked and indexed. (NAF - 2012/03/28 - HDFFV-7762)
|
||||
- Fixed a bug in H5Ocopy(): When copying an opened object, call the
|
||||
object's flush class action to ensure that cached data is flushed so
|
||||
that H5Ocopy will get the correct data. (VC - 2012/03/27 - HDFFV-7853)
|
||||
- The istore test will now skip the sparse 50x50x50 test when the VFD does
|
||||
not support sparse files on that platform. The most important platforms
|
||||
on which this will be skipped are Windows (NTFS sparse files are not
|
||||
supported) and Mac OS-X (HFS sparse files are not supported). This
|
||||
fixes CTest timeout issues on Windows. (DER - 2012/03/27 - HDFFV-7769)
|
||||
- Windows and POSIX correctness changes have been propagated from the SEC2
|
||||
VFD to the Core VFD. This mainly affects file operations on the
|
||||
driver's backing store and fixes a problem on Windows where large files
|
||||
could not be read. (DER - 2012/03/27 - HDFFV-7916 - HDFFV-7603)
|
||||
- When an application tries to write or read many small data chunks and
|
||||
runs out of memory, the library had a segmentation fault. The fix is to
|
||||
return the error stack with proper information.
|
||||
(SLU - 2012/03/23 - HDFFV-7785)
|
||||
- H5Pset_data_transform had a segmentation fault in some cases like x*-100.
|
||||
It works correctly now and handles other cases like 100-x or 2/x.
|
||||
(SLU - 2012/03/15 - HDFFV-7922)
|
||||
- Fixed rare corruption bugs that could occur when using the new object
|
||||
header format. (NAF - 2012/03/15 - HDFFV-7879)
|
||||
- Fixed an error that occurred when creating a contiguous dataset with a
|
||||
zero-sized dataspace and space allocation time set to 'early'.
|
||||
(QAK - 2012/03/12)
|
||||
- Changed Windows thread creation to use _beginthread() instead of
|
||||
CreateThread(). Threads created by the latter can be killed in
|
||||
low-memory situations. (DER - 2012/02/10 - HDFFV-7780)
|
||||
- Creating a dataset in a read-only file caused a segmentation fault when
|
||||
the file is closed. It's fixed. The attempt to create a dataset will
|
||||
fail with an error indicating the file is read-only.
|
||||
(SLU - 2012/01/25 - HDFFV-7756)
|
||||
- Fixed a segmentation fault that could occur when shrinking a dataset
|
||||
with chunks larger than 1 MB. (NAF - 2011/11/30 - HDFFV-7833)
|
||||
- Fixed a bug that could cause H5Oget_info to return the wrong address
|
||||
after copying a committed (named) datatype. (NAF - 2011/11/14)
|
||||
- The library allowed the conversion of strings between ASCII and UTF8
|
||||
We have corrected it to report an error under this situation.
|
||||
(SLU - 2011/11/8 - HDFFV-7582)
|
||||
- Fixed a segmentation fault when the library tried to shrink the size
|
||||
of a compound datatype through H5Tset_size immediately after the
|
||||
datatype was created. (SLU - 2011/11/4 - HDFFV-7618)
|
||||
|
||||
Parallel Library
|
||||
----------------
|
||||
- None
|
||||
|
||||
Tools
|
||||
-----
|
||||
- h5unjam: Fixed a segmentation fault that occurred when h5unjam was used
|
||||
with the -V (show version) option. (JKM - 2012/04/19 - HDFFV-8001)
|
||||
- h5repack: Fixed a failure that occurred when repacking the chunk size
|
||||
of a specified chunked dataset with unlimited max dims.
|
||||
(JKM - 2012/04/11 - HDFFV-7993)
|
||||
- h5diff: Fixed a failure when comparing groups. Before the fix, if an
|
||||
object in a group was compared with an object in another group where
|
||||
both had the same name but the object type was different, then h5diff
|
||||
would fail. After the fix, h5diff detects such cases as non-comparable
|
||||
and displays appropriate error messages.
|
||||
(JKM - 2012/03/28 - HDFFV-7644)
|
||||
- h5diff: If unique objects exist only in one file and if h5diff is set to
|
||||
exclude the unique objects with the --exclude-path option, then h5diff
|
||||
might miss excluding some objects. This was fixed to correctly exclude
|
||||
objects. (JKM - 2012/03/20 - HDFFV-7837)
|
||||
- h5diff: When two symbolic dangling links are compared with the
|
||||
--follow-symlinks option, the result should be the same. This worked when
|
||||
comparing two files, but didn't work when comparing two objects.
|
||||
h5diff now works when comparing two objects.
|
||||
(JKM - 2012/03/09 - HDFFV-7835)
|
||||
- h5dump: Added the tools library error stack to properly catch error
|
||||
information generated within the library. (ADB - 2012/03/12 - HDFFV-7958)
|
||||
- h5dump: Changed the process where an open link used to fail. Now dangling
|
||||
links no longer throw error messages. (ADB - 2012/03/12 - HDFFV-7839)
|
||||
- h5dump: Refactored code to remove duplicated functions. Split XML
|
||||
functions from DDL functions. Corrected indentation and formatting
|
||||
errors. Also fixed subsetting counting overflow (HDFFV-5874). Verified
|
||||
all tools call tools_init() in main. The USER_BLOCK data now correctly
|
||||
displays within the SUPER_BLOCK info. NOTE: WHITESPACE IN THE OUTPUT
|
||||
HAS CHANGED. (ADB - 2012/02/17 - HDFFV-7560)
|
||||
- h5diff: Fixed to prevent from displaying error stack message when
|
||||
comparing two dangling symbolic links with the follow-symlinks option.
|
||||
(JKM - 2012/01/13 - HDFFV-7836)
|
||||
- h5repack: Fixed a memory leak that occurred with the handling of
|
||||
variable length strings in attributes.
|
||||
(JKM - 2012/01/10 - HDFFV-7840)
|
||||
- h5ls: Fixed a segmentation fault that occurred when accessing region
|
||||
reference data in an attribute. (JKM - 2012/01/06 - HDFFV-7838)
|
||||
|
||||
F90 API
|
||||
-------
|
||||
- None
|
||||
|
||||
C++ API
|
||||
------
|
||||
- None
|
||||
|
||||
High-Level APIs:
|
||||
------
|
||||
- None
|
||||
|
||||
Fortran High-Level APIs:
|
||||
------
|
||||
- h5ltget_attribute_string_f: The h5ltget_attribute_string_f used to return
|
||||
the C NULL character in the returned character buffer. The returned
|
||||
charactor buffer now does not return the C NULL character; the buffer
|
||||
is blank-padded if needed. (MSB - 2012/03/23)
|
||||
|
||||
|
||||
Platforms Tested
|
||||
================
|
||||
The following platforms and compilers have been tested for this release.
|
||||
|
||||
AIX 5.3 xlc 10.1.0.5
|
||||
(NASA G-ADA) xlC 10.1.0.5
|
||||
xlf90 12.1.0.6
|
||||
|
||||
FreeBSD 8.2-STABLE i386 gcc 4.2.1 [FreeBSD] 20070719
|
||||
(loyalty) g++ 4.2.1 [FreeBSD] 20070719
|
||||
gcc 4.6.1 20110422
|
||||
g++ 4.6.1 20110422
|
||||
gfortran 4.6.1 20110422
|
||||
|
||||
FreeBSD 8.2-STABLE amd64 gcc 4.2.1 [FreeBSD] 20070719
|
||||
(freedom) g++ 4.2.1 [FreeBSD] 20070719
|
||||
gcc 4.6.1 20110422
|
||||
g++ 4.6.1 20110422
|
||||
gfortran 4.6.1 20110422
|
||||
|
||||
Linux 2.6.18-194.3.1.el5PAE GNU C (gcc), Fortran (gfortran), C++ (g++)
|
||||
#1 SMP i686 i686 i386 compilers for 32-bit applications;
|
||||
(jam) Version 4.1.2 20080704 (Red Hat 4.1.2-52)
|
||||
Version 4.5.2
|
||||
PGI C, Fortran, C++ Compilers for 32-bit
|
||||
applications;
|
||||
Version 11.8-0
|
||||
Version 11.9-0
|
||||
Intel(R) C, C++, Fortran Compiler for 32-bit
|
||||
applications;
|
||||
Version 12.0
|
||||
Version 12.1
|
||||
MPICH mpich2-1.3.1 compiled with
|
||||
gcc 4.1.2 and gfortran 4.1.2
|
||||
|
||||
Linux 2.6.18-308.1.1.el5 GNU C (gcc), Fortran (gfortran), C++ (g++)
|
||||
#1 SMP x86_64 GNU/Linux compilers for 32-bit applications;
|
||||
(koala) Version 4.1.2 20080704 (Red Hat 4.1.2-52)
|
||||
Version 4.5.2
|
||||
PGI C, Fortran, C++ for 64-bit target on
|
||||
x86-64;
|
||||
Version 11.9-0 (64-bit)
|
||||
Version 11.8-0 (32-bit)
|
||||
Intel(R) C, C++, Fortran Compilers for
|
||||
applications running on Intel(R) 64;
|
||||
Version 12.0
|
||||
Version 12.1
|
||||
MPICH mpich2-1.3.1 compiled with
|
||||
gcc 4.1.2 and gfortran 4.1.2
|
||||
|
||||
Linux 2.6.32-220.7.1.el6.ppc64 gcc (GCC) 4.4.6 20110731 (Red Hat 4.4.6-3)
|
||||
#1 SMP ppc64 GNU/Linux g++ (GCC) 4.4.6 20110731
|
||||
(ostrich) GNU Fortran (GCC) 4.4.6 20110731 (Red Hat 4.4.6-3)
|
||||
|
||||
Linux 2.6.18-108chaos Intel C, C++, Fortran Compilers Version 11.1
|
||||
#1 SMP x86_64 GNU/Linux
|
||||
(LLNL Aztec)
|
||||
|
||||
IBM Blue Gene/P XL C for Blue Gene/P, bgxlc V9.0
|
||||
(LLNL uDawn) XL C++ for Blue Gene/P, bgxlC V9.0
|
||||
XL Fortran for Blue Gene/P, bgxlf0 V11.1
|
||||
|
||||
SunOS 5.10 32- and 64-bit Sun C 5.9 Sun OS_sparc Patch 124867-16
|
||||
(linew) Sun Fortran 95 8.3 Sun OS_sparc Patch 127000-13
|
||||
Sun C++ 5.9 Sun OS_sparc Patch 124863-26
|
||||
Sun C 5.11 SunOS_sparc
|
||||
Sun Fortran 95 8.5 SunOS_sparc
|
||||
Sun C++ 5.11 SunOS_sparc
|
||||
|
||||
SGI Altix UV Intel(R) C, Fortran Compilers
|
||||
SGI ProPack 7 Linux Version 11.1 20100806
|
||||
2.6.32.24-0.2.1.2230.2.PTF- SGI MPT 2.02
|
||||
default #1 SMP
|
||||
(NCSA ember)
|
||||
|
||||
Dell NVIDIA Cluster Intel(R) C, Fortran Compilers
|
||||
Red Hat Enterprise Linux 6 Version 12.0.4 20110427
|
||||
2.6.32-131.4.1.el6.x86_64 mvapich2 1.7rc1-intel-12.0.4
|
||||
(NCSA forge)
|
||||
|
||||
Windows XP Visual Studio 2008 w/ Intel Fortran 10.1 (project files)
|
||||
Visual Studio 2008 w/ Intel Fortran 11.1 (cmake)
|
||||
Visual Studio 2010 w/ Intel Fortran 12 (cmake)
|
||||
|
||||
Windows XP x64 Visual Studio 2008 w/ Intel Fortran 10.1 (project files)
|
||||
Visual Studio 2008 w/ Intel Fortran 11.1 (cmake)
|
||||
Visual Studio 2010 w/ Intel Fortran 12 (cmake)
|
||||
|
||||
Windows 7 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake)
|
||||
Visual Studio 2010 w/ Intel Fortran 12 (cmake)
|
||||
Cygwin(1.7.9 native gcc(4.5.3) compiler and gfortran)
|
||||
|
||||
Windows 7 x64 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake)
|
||||
Visual Studio 2010 w/ Intel Fortran 12 (cmake)
|
||||
Cygwin(1.7.9 native gcc(4.5.3) compiler and gfortran)
|
||||
|
||||
Mac OS X Snow Leopard 10.6.8 i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (gcc)
|
||||
Darwin Kernel Version 10.8.0 i686-apple-darwin10-g++-4.2.1 (GCC) 4.2.1 (g++)
|
||||
Intel 64-bit (Apple Inc. build 5666) (dot 3)
|
||||
(fred) GNU Fortan (GCC) 4.6.1 (gfortran)
|
||||
Intel C (icc), Fortran (ifort), C++ (icpc)
|
||||
12.1.0.038 Build 20110811
|
||||
|
||||
Mac OS X Snow Leopard 10.6.8 i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (gcc)
|
||||
Darwin Kernel Version 10.8.0 i686-apple-darwin10-g++-4.2.1 (GCC) 4.2.1 (g++)
|
||||
Intel 32-bit (Apple Inc. build 5666) (dot 3)
|
||||
(tejeda) GNU Fortran (GCC) 4.6.1 (gfortran)
|
||||
Intel C (icc), Fortran (ifort), C++ (icpc)
|
||||
12.1.0.038 Build 20110811
|
||||
|
||||
Mac OS X Lion 10.7.3 GCC 4.2.1 gcc
|
||||
32- and 64-bit GNU Fortran (GCC) 4.6.1 gfortran
|
||||
(duck) GCC 4.2.1. g++
|
||||
|
||||
Debian6.0.3 2.6.32-5-686 #1 SMP i686 GNU/Linux
|
||||
gcc (Debian 4.4.5-8) 4.4.5
|
||||
GNU Fortran (Debian 4.4.5-8) 4.4.5
|
||||
|
||||
Debian6.0.3 2.6.32-5-amd64 #1 SMP x86_64 GNU/Linux
|
||||
gcc (Debian 4.4.5-8) 4.4.5
|
||||
GNU Fortran (Debian 4.4.5-8) 4.4.5
|
||||
|
||||
Fedora16 3.2.9-2.fc16.i6866 #1 SMP i686 i686 i386 GNU/Linux
|
||||
gcc (GCC) 4.6.2 20111027 (Red Hat 4.6.2-1)
|
||||
GNU Fortran (GCC) 4.6.2 20111027 (Red Hat 4.6.2-1)
|
||||
|
||||
Fedora16 3.2.9-2.fc16.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux
|
||||
gcc (GCC) 4.6.2 20111027 (Red Hat 4.6.2-1)
|
||||
GNU Fortran (GCC) 4.6.2 20111027 (Red Hat 4.6.2-1)
|
||||
|
||||
SUSE 12.1 3.1.9-1.4-desktop #1 SMP PREEMPT i686 i686 i386 GNU/Linux
|
||||
gcc (SUSE Linux) 4.6.2
|
||||
GNU Fortran (SUSE Linux) 4.6.2
|
||||
|
||||
SUSE 12.1 3.1.9-1.4-desktop #1 SMP PREEMPT x86_64 x86_64 x86_64 GNU/Linux
|
||||
gcc (SUSE Linux) 4.6.2
|
||||
GNU Fortran (SUSE Linux) 4.6.2
|
||||
|
||||
Ubuntu 11.10 3.0.0-16-generic #29-Ubuntu SMP i686 GNU/Linux
|
||||
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
|
||||
GNU Fortran (Ubuntu/Linaro 4.6.4-9ubuntu3) 4.6.1
|
||||
|
||||
Ubuntu 11.10 3.0.0-16-generic #29-Ubuntu SMP x86_64 GNU/Linux
|
||||
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
|
||||
GNU Fortran (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
|
||||
|
||||
Cray Linux Environment (CLE) PrgEnv-pgi 2.2.74
|
||||
hopper.nersc.gov pgcc 11.9-0 64-bit target on x86-64 Linux -tp k8e
|
||||
pgf90 11.9-0 64-bit target on x86-64 Linux -tp k8e
|
||||
pgCC 11.9-0 64-bit target on x86-64 Linux -tp k8e
|
||||
|
||||
|
||||
Tested Configuration Features Summary
|
||||
=====================================
|
||||
|
||||
In the tables below
|
||||
y = tested
|
||||
n = not tested in this release
|
||||
C = Cluster
|
||||
W = Workstation
|
||||
x = not working in this release
|
||||
dna = does not apply
|
||||
( ) = footnote appears below second table
|
||||
<blank> = testing incomplete on this feature or platform
|
||||
|
||||
Platform C F90 F90 C++ zlib SZIP
|
||||
parallel parallel
|
||||
Solaris2.10 32-bit n y n y y y
|
||||
Solaris2.10 64-bit n y n y y y
|
||||
Windows XP n y(4) n y y y
|
||||
Windows XP x64 n y(4) n y y y
|
||||
Windows Vista n y(4) n y y y
|
||||
Windows Vista x64 n y(4) n y y y
|
||||
Mac OS X Snow Leopard 10.6.8 32-bit n y n y y n
|
||||
Mac OS X Snow Leopard 10.6.8 64-bit n y n y y y
|
||||
Mac OS X Lion 10.7.3 32-bit n y n y y n
|
||||
Mac OS X Lion 10.7.3 64-bit n y n y y y
|
||||
AIX 5.3 32- and 64-bit y y y y y y
|
||||
FreeBSD 8.2-STABLE 32&64 bit n x n x y y
|
||||
CentOS 5.5 Linux 2.6.18-194 i686 GNU (1)W y y(2) y y y y
|
||||
CentOS 5.5 Linux 2.6.18-194 i686 Intel W n y n y y y
|
||||
CentOS 5.5 Linux 2.6.18-194 i686 PGI W n y n y y y
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 GNU (1) W y y(3) y y y y
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 Intel W n y n y y y
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 PGI W n y n y y y
|
||||
Linux 2.6.32-220.7.1.el6.ppc64 n y n y y y
|
||||
SGI ProPack 7 Linux 2.6.32.24 y y y y y y
|
||||
Red Hat Enterprise Linux 6 y y y y y y
|
||||
CLE hopper.nersc.gov y y(3) y y y n
|
||||
|
||||
|
||||
Platform Shared Shared Shared Thread-
|
||||
C libs F90 libs C++ libs safe
|
||||
Solaris2.10 32-bit y y y y
|
||||
Solaris2.10 64-bit n n n n
|
||||
Windows XP y y(4) y n
|
||||
Windows XP x64 y y(4) y n
|
||||
Windows Vista y y(4) y y
|
||||
Windows Vista x64 y y(4) y y
|
||||
Mac OS X Snow Leopard 10.6.8 32-bit y n y n
|
||||
Mac OS X Snow Leopard 10.6.8 64-bit y n y n
|
||||
Mac OS X Lion 10.7.3 32-bit y n y y
|
||||
Mac OS X Lion 10.7.3 64-bit y n y y
|
||||
AIX 5.3 32- and 64-bit n n n y
|
||||
FreeBSD 8.2-STABLE 32&64 bit y x x y
|
||||
CentOS 5.5 Linux 2.6.18-194 i686 GNU (1)W y y(2) y y
|
||||
CentOS 5.5 Linux 2.6.18-194 i686 Intel W y y y n
|
||||
CentOS 5.5 Linux 2.6.18-194 i686 PGI W y y y n
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 GNU (1) W y y y y
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 Intel W y y y n
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 PGI W y y y n
|
||||
Linux 2.6.32-220.7.1.el6.ppc64 y y y n
|
||||
SGI ProPack 7 Linux 2.6.32.24 y y y n
|
||||
Red Hat Enterprise Linux 6 y y y n
|
||||
CLE hopper.nersc.gov n n n n
|
||||
|
||||
(1) Fortran compiled with gfortran.
|
||||
(2) With PGI and Absoft compilers.
|
||||
(3) With PGI compiler for Fortran.
|
||||
(4) Using Visual Studio 2008 w/ Intel Fortran 10.1 (Cygwin shared libraries are not supported)
|
||||
(5) C and C++ shared libraries will not be built when Fortran is enabled.
|
||||
Compiler versions for each platform are listed in the preceding
|
||||
"Platforms Tested" table.
|
||||
|
||||
|
||||
Known Problems
|
||||
==============
|
||||
* The h5repacktst test fails on AIX 32-bit because the test uses more
|
||||
memory than the default amount. The failure message typically looks like:
|
||||
|
||||
"time: 0551-010 The process was stopped abnormally. Try again."
|
||||
|
||||
This is an issue with the test only and does not represent a problem with
|
||||
the library. To allow the test to pass, request more memory when testing
|
||||
via appropriate command such as:
|
||||
|
||||
$ env LDR_CNRTL=MAXDATA=0x20000000@DSA make check
|
||||
|
||||
(AKC - 2012/05/09 - HDFFV-8016)
|
||||
|
||||
* The file_image test will fail in the "initial file image and callbacks in
|
||||
the core VFD" sub-test if the source directory is read-only as the test
|
||||
fails to create its test files in the build directory. This will be
|
||||
resolved in a future release.
|
||||
(AKC - 2012/05/05 - HDFFV-8009)
|
||||
|
||||
* The dt_arith test reports several errors involving "long double" on
|
||||
Mac OS X 10.7 Lion when any level of optimization is enabled. The test does
|
||||
not fail in debug mode. This will be addressed in a future release.
|
||||
(SLU - 2012/05/08)
|
||||
|
||||
* The following h5dump test case fails in BG/P machines (and potentially other
|
||||
machines that use a command script to launch executables):
|
||||
|
||||
h5dump --no-compact-subset -d "AHFINDERDIRECT::ah_centroid_t[0] it=0 tl=0"
|
||||
tno-subset.h5
|
||||
|
||||
This is due to the embedded spaces in the dataset name being interpreted
|
||||
by the command script launcher as meta-characters, thus passing three
|
||||
arguments to h5dump's -d flag. The command passes if run by hand, just
|
||||
not via the test script.
|
||||
(AKC - 2012/05/03)
|
||||
|
||||
* The ph5diff (parallel h5diff) tool can intermittently hang in parallel mode
|
||||
when comparing two HDF5 files that contain objects with the same names but
|
||||
with different object types.
|
||||
(JKM - 2012/04/27)
|
||||
|
||||
* On hopper, the build failed when RUNSERIAL and RUNPARALLEL are set
|
||||
to aprun -np X, because the H5lib_settings.c file was not generated
|
||||
properly. Not setting those environment variables works, because
|
||||
configure was able to automatically detect that it's a Cray system
|
||||
and used the proper launch commands when necessary.
|
||||
(MSC - 2012/04/18)
|
||||
|
||||
* The data conversion test dt_arith.c fails in "long double" to integer
|
||||
conversion on Ubuntu 11.10 (3.0.0.13 kernal) with GCC 4.6.1 if the library
|
||||
is built with optimization -O3 or -O2. The older GCC (4.5) or newer kernal
|
||||
(3.2.2 on Fedora) doesn't have the problem. Users should lower the
|
||||
optimization level (-O1 or -O0) by defining CFLAGS in the command line of
|
||||
"configure" like:
|
||||
|
||||
CFLAGS=-O1 ./configure
|
||||
|
||||
This will overwrite the library's default optimization level.
|
||||
(SLU - 2012/02/07 - HDFFV-7829)
|
||||
|
||||
* The STDIO VFD does not work on some architectures, possibly due to 32/64
|
||||
bit or large file issues. The basic STDIO VFD test is known to fail on
|
||||
64-bit SunOS 5.10 on SPARC when built with -m64 and 32-bit OS X/Darwin
|
||||
10.7.0. The STDIO VFD test has been disabled while we investigate and
|
||||
a fix should appear in a future release.
|
||||
(DER - 2011/10/14)
|
||||
|
||||
* h5diff can report inconsistent results when comparing datasets of enum type
|
||||
that contain invalid values. This is due to how enum types are handled in
|
||||
the library and will be addressed in a future release.
|
||||
(DER - 2011/10/14 - HDFFV-7527)
|
||||
|
||||
* The links test can fail under the stdio VFD due to some issues with external
|
||||
links. This will be investigated and fixed in a future release.
|
||||
(DER - 2011/10/14 - HDFFV-7768)
|
||||
|
||||
* After the shared library support was fixed for some bugs, it was discovered
|
||||
that "make prefix=XXX install" no longer works for shared libraries. It
|
||||
still works correctly for static libraries. Therefore, if you want to
|
||||
install the HDF5 shared libraries in a location such as /usr/local/hdf5,
|
||||
you need to specify the location via the --prefix option during configure
|
||||
time. E.g, ./configure --prefix=/usr/local/hdf5 ...
|
||||
(AKC - 2011/05/07 - HDFFV-7583)
|
||||
|
||||
* The parallel test, t_shapesame, in testpar/, may run for a long time and may
|
||||
be terminated by the alarm signal. If that happens, one can increase the
|
||||
alarm seconds (default is 1200 seconds = 20 minutes) by setting the
|
||||
environment variable, $HDF5_ALARM_SECONDS, to a larger value such as 3600
|
||||
(60 minutes). Note that the t_shapesame test may fail in some systems
|
||||
(see the "While working on the 1.8.6 release..." problem below). If
|
||||
it does, it will waste more time if $HDF5_ALARM_SECONDS is set
|
||||
to a larger value.
|
||||
(AKC - 2011/05/07)
|
||||
|
||||
* The C++ and FORTRAN bindings are not currently working on FreeBSD.
|
||||
(QAK - 2011/04/26)
|
||||
|
||||
* Shared Fortran libraries are not quite working on AIX. While they are
|
||||
generated when --enable-shared is specified, the fortran and hl/fortran
|
||||
tests fail. We are looking into the issue. HL and C++ shared libraries
|
||||
should now be working as intended, however.
|
||||
(MAM - 2011/04/20)
|
||||
|
||||
* The --with-mpe configure option does not work with Mpich2.
|
||||
(AKC - 2011/03/10)
|
||||
|
||||
* While working on the 1.8.6 release of HDF5, a bug was discovered that can
|
||||
occur when reading from a dataset in parallel shortly after it has been
|
||||
written to collectively. The issue was exposed by a new test in the parallel
|
||||
HDF5 test suite, but had existed before that. We believe the problem lies with
|
||||
certain MPI implementations and/or file systems.
|
||||
|
||||
We have provided a pure MPI test program, as well as a standalone HDF5
|
||||
program, that can be used to determine if this is an issue on your system.
|
||||
They should be run across multiple nodes with a varying number of processes.
|
||||
These programs can be found at:
|
||||
http://www.hdfgroup.org/ftp/HDF5/examples/known_problems/
|
||||
(NAF - 2011/01/19)
|
||||
|
||||
* The library's test dt_arith.c showed a compiler's rounding problem on
|
||||
Cygwin when converting from unsigned long long to long double. The
|
||||
library's own conversion works fine. We defined a macro for Cygwin to
|
||||
skip this test until we can solve the problem.
|
||||
(SLU - 2010/05/05 - HDFFV-1264)
|
||||
|
||||
* All the VFL drivers aren't backward compatible. In H5FDpublic.h, the
|
||||
structure H5FD_class_t changed in 1.8. There is new parameter added to
|
||||
get_eoa and set_eoa callback functions. A new callback function
|
||||
get_type_map was added in. The public function H5FDrealloc was taken
|
||||
out in 1.8. The problem only happens when users define their own driver
|
||||
for 1.6 and try to plug in 1.8 library. Because there's only one user
|
||||
complaining about it, we (Elena, Quincey, and I) decided to leave it as
|
||||
it is (see bug report #1279). Quincey will make a plan for 1.10.
|
||||
(SLU - 2010/02/02)
|
||||
|
||||
* MinGW has a missing libstdc++.dll.a library file and will not successfully link
|
||||
C++ applications/tests. Do not use the enable-cxx configure option. Read all of
|
||||
the INSTALL_MINGW.txt file for all restrictions.
|
||||
(ADB - 2009/11/11)
|
||||
|
||||
* The --enable-static-exec configure flag will only statically link libraries
|
||||
if the static version of that library is present. If only the shared version
|
||||
of a library exists (i.e., most system libraries on Solaris, AIX, and Mac,
|
||||
for example, only have shared versions), the flag should still result in a
|
||||
successful compilation, but note that the installed executables will not be
|
||||
fully static. Thus, the only guarantee on these systems is that the
|
||||
executable is statically linked with just the HDF5 library.
|
||||
(MAM - 2009/11/04)
|
||||
|
||||
* The PathScale MPI implementation, accessing a Panasas file system, would
|
||||
cause H5Fcreate() with H5F_ACC_EXCL to fail even when the file does not
|
||||
exist. This is due to the MPI_File_open() call failing if the mode has
|
||||
the MPI_MODE_EXCL bit set.
|
||||
(AKC - 2009/08/11 - HDFFV-988)
|
||||
|
||||
* Parallel tests failed with 16 processes with data inconsistency at testphdf5
|
||||
/ dataset_readAll. Parallel tests also failed with 32 and 64 processes with
|
||||
collective abort of all ranks at t_posix_compliant / allwrite_allread_blocks
|
||||
with MPI IO.
|
||||
(CMC - 2009/04/28)
|
||||
|
||||
* For Red Storm, a Cray XT3 system, the tools/h5ls/testh5ls.sh and
|
||||
tools/h5copy/testh5copy.sh will fail some of its sub-tests. These sub-tests
|
||||
are expected to fail and should exit with a non-zero code but the yod
|
||||
command does not propagate the exit code of the executables. Yod always
|
||||
returns 0 if it can launch the executable. The test suite shell expects
|
||||
a non-zero for this particular test, therefore it concludes the test has
|
||||
failed when it receives 0 from yod. Skip all the "failing" test for now
|
||||
by changing them as following.
|
||||
|
||||
======== Original tools/h5ls/testh5ls.sh =========
|
||||
TOOLTEST tgroup-1.ls 1 -w80 -r -g tgroup.h5
|
||||
======== Change to ===============================
|
||||
echo SKIP TOOLTEST tgroup-1.ls 1 -w80 -r -g tgroup.h5
|
||||
==================================================
|
||||
|
||||
======== Original tools/h5copy/testh5copy.sh =========
|
||||
TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -v -s grp_dsets -d grp_rename
|
||||
TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -v -s grp_dsets -d /grp_rename/grp_dsets
|
||||
TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -vp -s /grp_dsets -d /E/F/grp_dsets
|
||||
TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -vp -s /grp_nested -d /G/H/grp_nested
|
||||
H5LSTEST $FILEOUT
|
||||
======== Change to ===============================
|
||||
echo SKIP TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -v -s grp_dsets -d grp_rename
|
||||
echo SKIP TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -v -s grp_dsets -d /grp_rename/grp_dsets
|
||||
echo SKIP TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -vp -s /grp_dsets -d /E/F/grp_dsets
|
||||
echo SKIP TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -vp -s /grp_nested -d /G/H/grp_nested
|
||||
echo SKIP H5LSTEST $FILEOUT
|
||||
==================================================
|
||||
(AKC - 2008/11/10)
|
||||
|
||||
* For Red Storm, a Cray XT3 system, the yod command sometimes gives the
|
||||
message, "yod allocation delayed for node recovery". This interferes with
|
||||
test suites that do not expect to see this message. See the section of "Red
|
||||
Storm" in file INSTALL_parallel for a way to deal with this problem.
|
||||
(AKC - 2008/05/28)
|
||||
|
||||
* On an Intel 64 Linux cluster (RH 4, Linux 2.6.9) with Intel 10.0 compilers,
|
||||
use -mp -O1 compilation flags to build the libraries. A higher level of
|
||||
optimization causes failures in several HDF5 library tests.
|
||||
|
||||
* On mpich 1.2.5 and 1.2.6, if more than two processes contribute no IO and
|
||||
the application asks to do collective IO, we have found that when using 4
|
||||
processors, a simple collective write will sometimes be hung. This can be
|
||||
verified with t_mpi test under testpar.
|
||||
|
||||
* A dataset created or rewritten with a v1.6.3 library or after cannot be read
|
||||
with the v1.6.2 library or before when the Fletcher32 EDC filter is enabled.
|
||||
There was a bug in the calculation of the Fletcher32 checksum in the
|
||||
library before v1.6.3; the checksum value was not consistent between big-
|
||||
endian and little-endian systems. This bug was fixed in Release 1.6.3.
|
||||
However, after fixing the bug, the checksum value was no longer the same as
|
||||
before on little-endian system. Library releases after 1.6.4 can still read
|
||||
datasets created or rewritten with an HDF5 library of v1.6.2 or before.
|
||||
(SLU - 2005/06/30)
|
||||
|
||||
* On IBM AIX systems, parallel HDF5 mode will fail some tests with error
|
||||
messages like "INFO: 0031-XXX ...". This is from the command `poe'.
|
||||
Set the environment variable MP_INFOLEVEL to 0 to minimize the messages
|
||||
and run the tests again.
|
||||
|
||||
The tests may fail with messages like "The socket name is already in use",
|
||||
but HDF5 does not use sockets. This failure is due to problems with the
|
||||
poe command trying to set up the debug socket. To resolve this problem,
|
||||
check to see whether there are many old /tmp/s.pedb.* files staying around.
|
||||
These are sockets used by the poe command and left behind due to failed
|
||||
commands. First, ask your system administrator to clean them out.
|
||||
Lastly, request IBM to provide a means to run poe without the debug socket.
|
||||
(AKC - 2004/12/08)
|
||||
|
||||
|
||||
%%%%1.8.8%%%%
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
HDF5 version 1.8.10-snap14 currently under development
|
||||
HDF5 version 1.8.10-patch1 released on 2013-01-22
|
||||
================================================================================
|
||||
|
||||
INTRODUCTION
|
||||
============
|
||||
|
||||
This document describes the differences between HDF5-1.8.9 and
|
||||
HDF5 1.8.10-*, and contains information on the platforms tested and
|
||||
known problems in HDF5-1.8.10-*.
|
||||
HDF5 1.8.10, and contains information on the platforms tested and
|
||||
known problems in HDF5-1.8.10.
|
||||
For more details, see the files HISTORY-1_0-1_8_0_rc3.txt
|
||||
and HISTORY-1_8.txt in the release_docs/ directory of the HDF5 source.
|
||||
|
||||
@@ -45,9 +45,11 @@ CONTENTS
|
||||
|
||||
- New Features
|
||||
- Support for New Platforms, Languages, and Compilers
|
||||
- Bug Fixes since HDF5-1.8.10
|
||||
- Bug Fixes since HDF5-1.8.9
|
||||
- Platforms Tested
|
||||
- Supported Platforms
|
||||
- Supported Configuration Features Summary
|
||||
- More Tested Platforms
|
||||
- Known Problems
|
||||
|
||||
|
||||
@@ -56,15 +58,17 @@ New Features
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
- None
|
||||
|
||||
- A new tool, cmakehdf5, which is a build command script similar to
|
||||
buildhdf5 is added and is available in the bin directory.
|
||||
(AKC - 2013/01/21)
|
||||
|
||||
Library
|
||||
-------
|
||||
- Updated to latest autotools and changed all hard *.sh scripts to
|
||||
configure managed *.sh.in files. Removed overloading of autotools
|
||||
TESTS variable by examples and tests. Renamed configure.in to
|
||||
configure.ac. (ADB - 2012/08/23 - HDFFV-8129)
|
||||
- The data sieve buffer size was for all the datasets in the file. It
|
||||
- The data sieve buffer size was set for all the datasets in the file. It
|
||||
could waste memory if any dataset size is smaller than the sieve buffer
|
||||
size. Now the library picks the smaller one between the dataset size
|
||||
and the sieve buffer size from the file access property. See Issue 7934.
|
||||
@@ -72,22 +76,22 @@ New Features
|
||||
|
||||
Parallel Library
|
||||
----------------
|
||||
- Add H5Pget_mpio_no_collective_cause() function that retrive reasons
|
||||
why the collective I/O was broken during read/write IO access.
|
||||
- Added the H5Pget_mpio_no_collective_cause() function that retrieves
|
||||
reasons why the collective I/O was broken during read/write IO access.
|
||||
(JKM - 2012/08/30 HDFFV-8143)
|
||||
|
||||
- Added H5Pget_mpio_actual_io_mode_f (MSB - 2012/09/27)
|
||||
|
||||
Tools
|
||||
-----
|
||||
- h5import: Allow use of h5dump output as input files to h5import.
|
||||
h5dump must include the "-p" option to print the properties,
|
||||
- h5import: Changed to allow the use of h5dump output as input files to
|
||||
h5import. h5dump must include the "-p" option to print the properties;
|
||||
configuration file is captured output of h5dump. The restrictions are
|
||||
that only one dataset with a simple datatype (integer, floating-point,
|
||||
or string) can be processed.
|
||||
Integers and floating-point imports from h5dump must use the "binary"
|
||||
option for the data file.
|
||||
The string version uses the h5dump "-y --width=1" options to disable the
|
||||
indexing printouts, print single columns and obviously NOT use the
|
||||
"binary" option.
|
||||
or string) can be processed. Integers and floating-point imports from
|
||||
h5dump must use the "binary" option for the data file. The string version
|
||||
uses the h5dump "-y --width=1" options to disable the indexing printouts,
|
||||
print single columns, and obviously NOT use the "binary" option.
|
||||
(ADB - 2012/07/19 HDFFV-721)
|
||||
|
||||
High-Level APIs
|
||||
@@ -96,9 +100,9 @@ New Features
|
||||
|
||||
Fortran API
|
||||
-----------
|
||||
- Fixed a typo in return value of the nh5dread_f_c function ( was 1
|
||||
- Fixed a typo in return value of the nh5dread_f_c function (was 1
|
||||
instead of 0 on success); fixed the return value to make it consistent
|
||||
with other Fortran functions; cleaned the code from debug statements.
|
||||
with other Fortran functions; cleaned debug statements from the code.
|
||||
(EIP - 2012/06/23)
|
||||
|
||||
C++ API
|
||||
@@ -110,19 +114,59 @@ Support for New Platforms, Languages, and Compilers
|
||||
===================================================
|
||||
- None
|
||||
|
||||
Bug Fixes since HDF5-1.8.10
|
||||
===========================
|
||||
Library
|
||||
-------
|
||||
- The library now behaves correctly when performing large I/O operations on
|
||||
Mac OS-X. Previously, single I/O operations > 2 GB would fail since the
|
||||
Darwin read/write calls cannot handle the number of bytes that their
|
||||
parameter types imply.
|
||||
Fixes HDFFV-7975 and HDFFV-8240 (DER - 07 JAN 2013)
|
||||
- Fixed a bug in the core VFD that cause failures when opening files > 2 GB.
|
||||
Fixes HDFFV-8124 and HDFFV-8158 (DER - 07 JAN 2013)
|
||||
|
||||
Tools
|
||||
-----
|
||||
- The following h5stat test case failed in BG/P machines (and potentially
|
||||
other machines that display extra output if an MPI task returns with a
|
||||
non-zero code.)
|
||||
Testing h5stat notexist.h5
|
||||
The test script was fixed to ignore the extra output.
|
||||
HDFFV-8233 (AKC - 2012/12/17)
|
||||
- h5diff: Fixed slowness when comparing HDF5 files with many attributes.
|
||||
Much slower performance was identified with later release version
|
||||
(from 1.8.7 to 1.8.10) compared to 1.8.6. The issue was introduced
|
||||
from fixing an attribute related bug for 1.8.7 release in the past.
|
||||
HDFFV-8145 (JKM 2012/12/13)
|
||||
|
||||
Testing
|
||||
-------
|
||||
- None
|
||||
|
||||
Bug Fixes since HDF5-1.8.9
|
||||
==========================
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
- Fixed configure --enable-production to not use -O optimization for Lion
|
||||
and Mountain Lion systems when gcc (i686-apple-darwin11-llvm-gcc-4.2
|
||||
(GCC) 4.2.1) is used. Somehow the -O optimization will cause some of
|
||||
the hard conversion code in test/dt_arith.c to fail. HDFFV-8017.
|
||||
(AKC - 2012/10/10)
|
||||
- Fixed AIX Fortran compiler flags to use appropriate settings for
|
||||
debugging, profiling, optimization situations. HDFFV-8069. (AKC
|
||||
2012/09/27)
|
||||
debugging, profiling, and optimization situations. HDFFV-8069.
|
||||
(AKC 2012/09/27)
|
||||
|
||||
Library
|
||||
-------
|
||||
- Fix a memory leak exposed when inserting/removing a property
|
||||
from a property list several times. HDFFV-8022. (MSC 2012/05/18)
|
||||
- Fixed a memory leak exposed when inserting/removing a property
|
||||
from a property list several times. HDFFV-8022. (MSC 2012/05/18)
|
||||
- The file_image test will fail in the "initial file image and callbacks in
|
||||
the core VFD" sub-test if the source directory is read-only as the test
|
||||
fails to create its test files in the build directory. This has been
|
||||
fixed. HDFFV-8009 (AKC - 2012/07/06)
|
||||
|
||||
|
||||
Parallel Library
|
||||
----------------
|
||||
@@ -136,27 +180,25 @@ Bug Fixes since HDF5-1.8.9
|
||||
program will be retired or moved to another location. HDFFV-8156
|
||||
(AKC 2012/10/01)
|
||||
- Retired program perform/mpi-perf. Its purpose has been incorporated
|
||||
into h5perf before. (AKC 2012/09/21)
|
||||
into h5perf. (AKC 2012/09/21)
|
||||
|
||||
Tools
|
||||
-----
|
||||
- h5repack: "h5repack -f NONE file1.h5 out.h5" command failed if
|
||||
source file contains chunked dataset and a chunk dim is bigger than
|
||||
the dataset dim. Another issue is that the command changed max dims
|
||||
if chunk dim is smaller than the dataset dim.
|
||||
These issue occurred when dataset size is smaller than 64k (compact
|
||||
size limit) Fixed both.
|
||||
if chunk dim is smaller than the dataset dim. These issue occurred
|
||||
when dataset size is smaller than 64k (compact size limit) Fixed both.
|
||||
HDFFV-8012 (JKM 2012/09/24)
|
||||
- h5diff: Fixed not to accumulate attribute difference to dataset
|
||||
difference in verbose mode (-v, -r), which caused incorrect
|
||||
difference between dataset and group/datatype object if attribute
|
||||
exist with any differences. This also lead to fix inconsistent
|
||||
format indicating difference between dataset and group/datatype
|
||||
object. HDFFV-5919 (JKM 2012/09/10)
|
||||
- h5diff: Fixed the counter in verbose mode (-v, -r) so that it will no
|
||||
longer add together the differences between datasets and the differences
|
||||
between attributes of those datasets. This change makes the output of
|
||||
verbose mode consistent for datasets, groups, and committed datatypes.
|
||||
HDFFV-5919 (JKM 2012/09/10)
|
||||
- h5diff: Fixed the incorrect result when comparing attribute data
|
||||
values and the data type has same class but different size.
|
||||
values and the data type has the same class but different sizes.
|
||||
HDFFV-7942 (JKM 2012/08/15)
|
||||
- h5dump: Replace single element fwrite with block writes.
|
||||
- h5dump: Replaced single element fwrite with block writes.
|
||||
HDFFV-1208 (ADB 2012/08/13)
|
||||
- h5diff: Fixed test failure for "make check" due to failure of
|
||||
copying test files when performed in HDF5 source tree. Also applied
|
||||
@@ -164,26 +206,43 @@ Bug Fixes since HDF5-1.8.9
|
||||
- ph5diff: Fixed intermittent hang issue on a certain operation in
|
||||
parallel mode. It was detected by daily test for comparing
|
||||
non-comparable objects, but it could have occurred in other
|
||||
operations depend on machine condition. HDFFV-8003 (JKM 2012/08/01)
|
||||
- h5diff: Fixed the Function COPY_TESTFILES_TO_TESTDIR() of testh5diff.sh
|
||||
operations depending on machine condition. HDFFV-8003 (JKM 2012/08/01)
|
||||
- h5diff: Fixed the function COPY_TESTFILES_TO_TESTDIR() of testh5diff.sh
|
||||
to better report when there is an error in the file copying.
|
||||
HDFFV-8105 (AKC 2012/07/22)
|
||||
- h5dump: Fix sort by name display to maintain correct parent / child
|
||||
releationships between ascending / descending order.
|
||||
- h5dump: Fixed the sort by name display to maintain correct parent/child
|
||||
relationships between ascending/descending order.
|
||||
HDFFV-8095 (ADB 2012/07/12)
|
||||
- h5dump: Fix display by creation order when using option -n (print contents).
|
||||
- h5dump: Fixed the display by creation order when using option -n
|
||||
(print contents).
|
||||
HDFFV-5942 (ADB 2012/07/09)
|
||||
- h5dump: Allow H5T_CSET_UTF8 to be displayed in h5dump output. Use
|
||||
technique like in h5ls (matches library options).
|
||||
- h5dump: Changed to allow H5T_CSET_UTF8 to be displayed in h5dump output.
|
||||
Used technique similar to what was done in h5ls (matches library
|
||||
options).
|
||||
HDFFV-7999 (ADB 2012/05/23)
|
||||
- h5diff: Fixed not to check and display dangling link status without
|
||||
--follow-symlinks option. This also improved performance when
|
||||
comparing lots of external links without the --follow-symlinks
|
||||
option. HDFFV-7998 (JKM 2012/04/26)
|
||||
- h5diff: Fixed the tool so that it will not check and display the status
|
||||
of dangling links without setting the --follow-symlinks option. This
|
||||
also improved performance when comparing lots of external links without
|
||||
the --follow-symlinks option.
|
||||
HDFFV-7998 (JKM 2012/04/26)
|
||||
|
||||
F90 API
|
||||
-------
|
||||
- None
|
||||
|
||||
- Fixed a typo in return value of the nh5dread_f_c function (was 1
|
||||
instead of 0 on success); fixed the return value to make it consistent
|
||||
with other Fortran functions; cleaned debug statements from the code.
|
||||
(EIP - 2012/06/23)
|
||||
|
||||
- Fixed a problem writing/reading control characters to a dataset; writing
|
||||
a string containing alerts, backspace, carriage_return, form_feed,
|
||||
horizontal_tab, vertical_tab, or new_line is now tested and working.
|
||||
(MSB - 2012/09/01)
|
||||
|
||||
- Corrected the integer type of H5S_UNLIMITED_F to HSIZE_T (MSB - 2012/09/01)
|
||||
|
||||
- Corrected the number of continuation lines in the src files
|
||||
to be less than 32 lines for F95 compliance. (MSB - 2012/10/01)
|
||||
|
||||
C++ API
|
||||
------
|
||||
@@ -191,75 +250,67 @@ Bug Fixes since HDF5-1.8.9
|
||||
|
||||
High-Level APIs:
|
||||
------
|
||||
- Corrected return type of H5TBAget_fill from herr_t to htri_t to reflect
|
||||
that a return value of 1 indicates that a fill value is present, 0
|
||||
indicates a fill value is not present and <0 indicates an error.
|
||||
|
||||
- Fixed problem with H5TBdelete_record destroying all data following the
|
||||
deletion of a row. (MSB- 2012/7/26)
|
||||
|
||||
- Fixed H5LTget_attribute_string not closing an object identifier when an
|
||||
error occurs. (MSB- 2012/7/21)
|
||||
|
||||
- Corrected the return type of H5TBAget_fill from herr_t to htri_t to
|
||||
reflect that a return value of 1 indicates that a fill value is
|
||||
present, 0 indicates a fill value is not present, and <0 indicates an
|
||||
error.
|
||||
|
||||
Fortran High-Level APIs:
|
||||
------
|
||||
- None
|
||||
|
||||
Platforms Tested
|
||||
================
|
||||
The following platforms and compilers have been tested for this release.
|
||||
|
||||
Supported Platforms
|
||||
===================
|
||||
AIX 5.3 xlc 10.1.0.5
|
||||
(NASA G-ADA) xlC 10.1.0.5
|
||||
xlf90 12.1.0.6
|
||||
|
||||
FreeBSD 8.2-STABLE i386 gcc 4.2.1 [FreeBSD] 20070719
|
||||
(loyalty) g++ 4.2.1 [FreeBSD] 20070719
|
||||
gcc 4.6.1 20110422
|
||||
g++ 4.6.1 20110422
|
||||
gfortran 4.6.1 20110422
|
||||
|
||||
FreeBSD 8.2-STABLE amd64 gcc 4.2.1 [FreeBSD] 20070719
|
||||
(freedom) g++ 4.2.1 [FreeBSD] 20070719
|
||||
gcc 4.6.1 20110422
|
||||
g++ 4.6.1 20110422
|
||||
gfortran 4.6.1 20110422
|
||||
|
||||
Linux 2.6.18-194.3.1.el5PAE GNU C (gcc), Fortran (gfortran), C++ (g++)
|
||||
Linux 2.6.18-308.13.1.el5PAE GNU C (gcc), Fortran (gfortran), C++ (g++)
|
||||
#1 SMP i686 i686 i386 compilers for 32-bit applications;
|
||||
(jam) Version 4.1.2 20080704 (Red Hat 4.1.2-52)
|
||||
Version 4.5.2
|
||||
Version 4.6.3
|
||||
PGI C, Fortran, C++ Compilers for 32-bit
|
||||
applications;
|
||||
Version 11.8-0
|
||||
Version 11.9-0
|
||||
Intel(R) C, C++, Fortran Compiler for 32-bit
|
||||
applications;
|
||||
Version 12.0
|
||||
Version 12.1
|
||||
MPICH mpich2-1.3.1 compiled with
|
||||
MPICH mpich2-1.4.1p1 compiled with
|
||||
gcc 4.1.2 and gfortran 4.1.2
|
||||
|
||||
Linux 2.6.18-308.1.1.el5 GNU C (gcc), Fortran (gfortran), C++ (g++)
|
||||
Linux 2.6.18-308.16.1.el5 GNU C (gcc), Fortran (gfortran), C++ (g++)
|
||||
#1 SMP x86_64 GNU/Linux compilers for 32-bit applications;
|
||||
(koala) Version 4.1.2 20080704 (Red Hat 4.1.2-52)
|
||||
Version 4.5.2
|
||||
Version 4.6.3
|
||||
PGI C, Fortran, C++ for 64-bit target on
|
||||
x86-64;
|
||||
Version 11.9-0 (64-bit)
|
||||
Version 11.8-0 (32-bit)
|
||||
Version 11.9-0
|
||||
Version 12.5-0
|
||||
Intel(R) C, C++, Fortran Compilers for
|
||||
applications running on Intel(R) 64;
|
||||
Version 12.0
|
||||
Version 12.1
|
||||
MPICH mpich2-1.3.1 compiled with
|
||||
Version 12.1 (Build 20110811)
|
||||
Version 12.1 (Build 20120212)
|
||||
MPICH mpich2-1.4.1p1 compiled with
|
||||
gcc 4.1.2 and gfortran 4.1.2
|
||||
|
||||
Linux 2.6.32-220.7.1.el6.ppc64 gcc (GCC) 4.4.6 20110731 (Red Hat 4.4.6-3)
|
||||
#1 SMP ppc64 GNU/Linux g++ (GCC) 4.4.6 20110731
|
||||
(ostrich) GNU Fortran (GCC) 4.4.6 20110731 (Red Hat 4.4.6-3)
|
||||
|
||||
Linux 2.6.18-108chaos Intel C, C++, Fortran Compilers Version 11.1
|
||||
#1 SMP x86_64 GNU/Linux
|
||||
Linux 2.6.32-220.23.1.1chaos Intel C, C++, Fortran Compilers
|
||||
ch5.x86_64 GNU/Linux Version 12.1.5.339
|
||||
(LLNL Aztec)
|
||||
|
||||
IBM Blue Gene/P XL C for Blue Gene/P, bgxlc V9.0
|
||||
(LLNL uDawn) XL C++ for Blue Gene/P, bgxlC V9.0
|
||||
XL Fortran for Blue Gene/P, bgxlf0 V11.1
|
||||
XL Fortran for Blue Gene/P, bgxlf90 V11.1
|
||||
|
||||
SunOS 5.10 32- and 64-bit Sun C 5.9 Sun OS_sparc Patch 124867-16
|
||||
(linew) Sun Fortran 95 8.3 Sun OS_sparc Patch 127000-13
|
||||
@@ -268,17 +319,6 @@ The following platforms and compilers have been tested for this release.
|
||||
Sun Fortran 95 8.5 SunOS_sparc
|
||||
Sun C++ 5.11 SunOS_sparc
|
||||
|
||||
SGI Altix UV Intel(R) C, Fortran Compilers
|
||||
SGI ProPack 7 Linux Version 11.1 20100806
|
||||
2.6.32.24-0.2.1.2230.2.PTF- SGI MPT 2.02
|
||||
default #1 SMP
|
||||
(NCSA ember)
|
||||
|
||||
Dell NVIDIA Cluster Intel(R) C, Fortran Compilers
|
||||
Red Hat Enterprise Linux 6 Version 12.0.4 20110427
|
||||
2.6.32-131.4.1.el6.x86_64 mvapich2 1.7rc1-intel-12.0.4
|
||||
(NCSA forge)
|
||||
|
||||
Windows XP Visual Studio 2008 w/ Intel Fortran 10.1 (project files)
|
||||
|
||||
Windows XP x64 Visual Studio 2008 w/ Intel Fortran 10.1 (project files)
|
||||
@@ -286,73 +326,35 @@ The following platforms and compilers have been tested for this release.
|
||||
Windows 7 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake)
|
||||
Visual Studio 2010 w/ Intel Fortran 12 (cmake)
|
||||
Cygwin(CYGWIN_NT-6.1 1.7.15(0.260/5/3) gcc(4.5.3) compiler and gfortran)
|
||||
(cmake and autotools)
|
||||
|
||||
Windows 7 x64 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake)
|
||||
Visual Studio 2010 w/ Intel Fortran 12 (cmake)
|
||||
Cygwin(CYGWIN_NT-6.1 1.7.15(0.260/5/3) gcc(4.5.3) compiler and gfortran)
|
||||
(cmake and autotools)
|
||||
|
||||
Mac OS X Snow Leopard 10.6.8 i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (gcc)
|
||||
Darwin Kernel Version 10.8.0 i686-apple-darwin10-g++-4.2.1 (GCC) 4.2.1 (g++)
|
||||
Intel 64-bit (Apple Inc. build 5666) (dot 3)
|
||||
(fred) GNU Fortan (GCC) 4.6.1 (gfortran)
|
||||
Mac OS X Snow Leopard 10.6.8 gcc i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 from Xcode 3.2.6
|
||||
Darwin Kernel Version 10.8.0 g++ i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 from Xcode 3.2.6
|
||||
(fred) gfortran GNU Fortran (GCC) 4.6.2
|
||||
Intel C (icc), Fortran (ifort), C++ (icpc)
|
||||
12.1.0.038 Build 20110811
|
||||
|
||||
Mac OS X Snow Leopard 10.6.8 i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (gcc)
|
||||
Darwin Kernel Version 10.8.0 i686-apple-darwin10-g++-4.2.1 (GCC) 4.2.1 (g++)
|
||||
Intel 32-bit (Apple Inc. build 5666) (dot 3)
|
||||
(tejeda) GNU Fortran (GCC) 4.6.1 (gfortran)
|
||||
Intel C (icc), Fortran (ifort), C++ (icpc)
|
||||
Mac OS X Snow Leopard 10.6.8 gcc i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 from Xcode 3.2.6
|
||||
Darwin Kernel Version 10.8.0 g++ i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 from Xcode 3.2.6
|
||||
Intel 32-bit gfortran GNU Fortran (GCC) 4.6.1
|
||||
(tejeda) Intel C (icc), Fortran (ifort), C++ (icpc)
|
||||
12.1.0.038 Build 20110811
|
||||
|
||||
Mac OS X Lion 10.7.3 GCC 4.2.1 gcc
|
||||
32- and 64-bit GNU Fortran (GCC) 4.6.1 gfortran
|
||||
(duck) GCC 4.2.1. g++
|
||||
Mac OS X Lion 10.7.3 gcc i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 from Xcode 4.2.1
|
||||
32- and 64-bit g++ i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 from Xcode 4.2.1
|
||||
(duck) gfortran GNU Fortran (GCC) 4.6.2
|
||||
|
||||
Mac OS X Mountain Lion 10.8.1 GCC 4.2.1 gcc
|
||||
(owl) GNU Fortran (GCC) 4.6.1 gfortran
|
||||
GCC 4.2.1. g++
|
||||
Apple clang version 4.0 (cc)
|
||||
Apple clang version 4.0 (c++)
|
||||
Mac OS X Mountain Lion 10.8.1 cc Apple clang version 4.0 from Xcode 4.5.1
|
||||
(owl) c++ Apple clang version 4.0 from Xcode 4.5.1
|
||||
gcc i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 from Xcode 4.5.1
|
||||
g++ i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 from Xcode 4.5.1
|
||||
gfortran GNU Fortran (GCC) 4.6.2
|
||||
|
||||
Debian6.0.3 2.6.32-5-686 #1 SMP i686 GNU/Linux
|
||||
gcc (Debian 4.4.5-8) 4.4.5
|
||||
GNU Fortran (Debian 4.4.5-8) 4.4.5
|
||||
|
||||
Debian6.0.3 2.6.32-5-amd64 #1 SMP x86_64 GNU/Linux
|
||||
gcc (Debian 4.4.5-8) 4.4.5
|
||||
GNU Fortran (Debian 4.4.5-8) 4.4.5
|
||||
|
||||
Fedora17 3.5.2-1.fc17.i6866 #1 SMP i686 i686 i386 GNU/Linux
|
||||
gcc (GCC) 4.7.0 20120507 (Red Hat 4.7.0-5)
|
||||
GNU Fortran (GCC) 4.7.0 20120507 (Red Hat 4.7.0-5)
|
||||
|
||||
Fedora17 3.5.2-1.fc17.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux
|
||||
gcc (GCC) 4.7.0 20120507 (Red Hat 4.7.0-5)
|
||||
GNU Fortran (GCC) 4.7.0 20120507 (Red Hat 4.7.0-5)
|
||||
|
||||
SUSE 12.2 3.4.6-2.10-desktop #1 SMP PREEMPT i686 i686 i386 GNU/Linux
|
||||
gcc (SUSE Linux) 4.7.1
|
||||
GNU Fortran (SUSE Linux) 4.7.1
|
||||
|
||||
SUSE 12.2 3.4.6-2.10-desktop #1 SMP PREEMPT x86_64 x86_64 x86_64 GNU/Linux
|
||||
gcc (SUSE Linux) 4.7.1
|
||||
GNU Fortran (SUSE Linux) 4.7.1
|
||||
|
||||
Ubuntu 12.04 3.2.0-29-generic #46-Ubuntu SMP i686 GNU/Linux
|
||||
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
|
||||
GNU Fortran (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
|
||||
|
||||
Ubuntu 12.04 3.2.0-29-generic #46-Ubuntu SMP x86_64 GNU/Linux
|
||||
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
|
||||
GNU Fortran (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
|
||||
(Use optimization level -O1)
|
||||
|
||||
Cray Linux Environment (CLE) PrgEnv-pgi 2.2.74
|
||||
hopper.nersc.gov pgcc 11.9-0 64-bit target on x86-64 Linux -tp k8e
|
||||
pgf90 11.9-0 64-bit target on x86-64 Linux -tp k8e
|
||||
pgCC 11.9-0 64-bit target on x86-64 Linux -tp k8e
|
||||
|
||||
|
||||
Tested Configuration Features Summary
|
||||
=====================================
|
||||
@@ -367,29 +369,25 @@ Tested Configuration Features Summary
|
||||
( ) = footnote appears below second table
|
||||
<blank> = testing incomplete on this feature or platform
|
||||
|
||||
Platform C F90 F90 C++ zlib SZIP
|
||||
parallel parallel
|
||||
Solaris2.10 32-bit n y n y y y
|
||||
Solaris2.10 64-bit n y n y y y
|
||||
Windows 7 y y n y y y
|
||||
Windows 7 x64 y y n y y y
|
||||
Mac OS X Snow Leopard 10.6.8 32-bit n y n y y n
|
||||
Mac OS X Snow Leopard 10.6.8 64-bit n y n y y y
|
||||
Mac OS X Lion 10.7.3 32-bit n y n y y n
|
||||
Mac OS X Lion 10.7.3 64-bit n y n y y y
|
||||
Mac OS X Mountain Lion 10.8.1 64-bit n y n y y n
|
||||
AIX 5.3 32- and 64-bit y y y y y y
|
||||
FreeBSD 8.2-STABLE 32&64 bit n x n x y y
|
||||
CentOS 5.5 Linux 2.6.18-194 i686 GNU (1)W y y(2) y y y y
|
||||
CentOS 5.5 Linux 2.6.18-194 i686 Intel W n y n y y y
|
||||
CentOS 5.5 Linux 2.6.18-194 i686 PGI W n y n y y y
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 GNU (1) W y y(3) y y y y
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 Intel W n y n y y y
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 PGI W n y n y y y
|
||||
Linux 2.6.32-220.7.1.el6.ppc64 n y n y y y
|
||||
SGI ProPack 7 Linux 2.6.32.24 y y y y y y
|
||||
Red Hat Enterprise Linux 6 y y y y y y
|
||||
CLE hopper.nersc.gov y y(3) y y y n
|
||||
Platform C F90/ F90 C++ zlib SZIP
|
||||
parallel F2003 parallel
|
||||
Solaris2.10 32-bit n y/y n y y y
|
||||
Solaris2.10 64-bit n y/n n y y y
|
||||
Windows 7 y y/n n y y y
|
||||
Windows 7 x64 y y/n n y y y
|
||||
Mac OS X Snow Leopard 10.6.8 32-bit n y/y n y y n
|
||||
Mac OS X Snow Leopard 10.6.8 64-bit n y/y n y y y
|
||||
Mac OS X Lion 10.7.3 32-bit n y/y n y y n
|
||||
Mac OS X Lion 10.7.3 64-bit n y/y n y y y
|
||||
Mac OS X Mountain Lion 10.8.1 64-bit n y/n n y y n
|
||||
AIX 5.3 32- and 64-bit y y/n y y y y
|
||||
CentOS 5.5 Linux 2.6.18-308 i686 GNU y y/y y y y y
|
||||
CentOS 5.5 Linux 2.6.18-308 i686 Intel n y/y n y y y
|
||||
CentOS 5.5 Linux 2.6.18-308 i686 PGI n y/y n y y y
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 GNU y y/y y y y y
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 Intel n y/y n y y y
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 PGI n y/y n y y y
|
||||
Linux 2.6.32-220.7.1.el6.ppc64 n y/n n y y y
|
||||
|
||||
|
||||
Platform Shared Shared Shared Thread-
|
||||
@@ -404,60 +402,85 @@ Mac OS X Lion 10.7.3 32-bit y n y y
|
||||
Mac OS X Lion 10.7.3 64-bit y n y y
|
||||
Mac OS X Mountain Lion 10.8.1 64-bit y n y y
|
||||
AIX 5.3 32- and 64-bit n n n y
|
||||
FreeBSD 8.2-STABLE 32&64 bit y x x y
|
||||
CentOS 5.5 Linux 2.6.18-194 i686 GNU (1)W y y(2) y y
|
||||
CentOS 5.5 Linux 2.6.18-194 i686 Intel W y y y n
|
||||
CentOS 5.5 Linux 2.6.18-194 i686 PGI W y y y n
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 GNU (1) W y y y y
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 Intel W y y y n
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 PGI W y y y n
|
||||
CentOS 5.5 Linux 2.6.18-308 i686 GNU y y y y
|
||||
CentOS 5.5 Linux 2.6.18-308 i686 Intel y y y n
|
||||
CentOS 5.5 Linux 2.6.18-308 i686 PGI y y y n
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 GNU y y y y
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 Intel y y y n
|
||||
CentOS 5.5 Linux 2.6.18 x86_64 PGI y y y n
|
||||
Linux 2.6.32-220.7.1.el6.ppc64 y y y n
|
||||
SGI ProPack 7 Linux 2.6.32.24 y y y n
|
||||
Red Hat Enterprise Linux 6 y y y n
|
||||
CLE hopper.nersc.gov n n n n
|
||||
|
||||
(1) Fortran compiled with gfortran.
|
||||
(2) With PGI and Absoft compilers.
|
||||
(3) With PGI compiler for Fortran.
|
||||
(4) Using Visual Studio 2008 w/ Intel Fortran 10.1 (Cygwin shared libraries are not supported)
|
||||
(5) C and C++ shared libraries will not be built when Fortran is enabled.
|
||||
Compiler versions for each platform are listed in the preceding
|
||||
"Platforms Tested" table.
|
||||
Compiler versions for each platform are listed in the preceding
|
||||
"Supported Platforms" table.
|
||||
|
||||
|
||||
More Tested Platforms
|
||||
=====================
|
||||
The following platforms are not supported but have been tested for this release.
|
||||
|
||||
FreeBSD 8.2-STABLE i386 gcc 4.2.1 [FreeBSD] 20070719
|
||||
(loyalty) gcc 4.6.1 20110422
|
||||
g++ 4.6.1 20110422
|
||||
gfortran 4.6.1 20110422
|
||||
|
||||
FreeBSD 8.2-STABLE amd64 gcc 4.2.1 [FreeBSD] 20070719
|
||||
(freedom) gcc 4.6.1 20110422
|
||||
g++ 4.6.1 20110422
|
||||
gfortran 4.6.1 20110422
|
||||
|
||||
Debian6.0.3 2.6.32-5-686 #1 SMP i686 GNU/Linux
|
||||
gcc (Debian 4.4.5-8) 4.4.5
|
||||
GNU Fortran (Debian 4.4.5-8) 4.4.5
|
||||
(cmake and autotools)
|
||||
|
||||
Debian6.0.3 2.6.32-5-amd64 #1 SMP x86_64 GNU/Linux
|
||||
gcc (Debian 4.4.5-8) 4.4.5
|
||||
GNU Fortran (Debian 4.4.5-8) 4.4.5
|
||||
(cmake and autotools)
|
||||
|
||||
Fedora17 3.5.2-1.fc17.i6866 #1 SMP i686 i686 i386 GNU/Linux
|
||||
gcc (GCC) 4.7.0 20120507 (Red Hat 4.7.0-5)
|
||||
GNU Fortran (GCC) 4.7.0 20120507 (Red Hat 4.7.0-5)
|
||||
(cmake and autotools)
|
||||
|
||||
Fedora17 3.5.2-1.fc17.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux
|
||||
gcc (GCC) 4.7.0 20120507 (Red Hat 4.7.0-5)
|
||||
GNU Fortran (GCC) 4.7.0 20120507 (Red Hat 4.7.0-5)
|
||||
(cmake and autotools)
|
||||
|
||||
SUSE 12.2 3.4.6-2.10-desktop #1 SMP PREEMPT i686 i686 i386 GNU/Linux
|
||||
gcc (SUSE Linux) 4.7.1
|
||||
GNU Fortran (SUSE Linux) 4.7.1
|
||||
(cmake and autotools)
|
||||
|
||||
SUSE 12.2 3.4.6-2.10-desktop #1 SMP PREEMPT x86_64 x86_64 x86_64 GNU/Linux
|
||||
gcc (SUSE Linux) 4.7.1
|
||||
GNU Fortran (SUSE Linux) 4.7.1
|
||||
(cmake and autotools)
|
||||
|
||||
Ubuntu 12.04 3.2.0-29-generic #46-Ubuntu SMP i686 GNU/Linux
|
||||
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
|
||||
GNU Fortran (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
|
||||
(cmake and autotools)
|
||||
|
||||
Ubuntu 12.04 3.2.0-29-generic #46-Ubuntu SMP x86_64 GNU/Linux
|
||||
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
|
||||
GNU Fortran (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
|
||||
(cmake and autotools)
|
||||
(Use optimization level -O1)
|
||||
|
||||
Cray Linux Environment (CLE) PrgEnv-pgi/4.0.46
|
||||
hopper.nersc.gov pgcc 12.5-0 64-bit target on x86-64 Linux -tp shanghai
|
||||
pgf90 12.5-0 64-bit target on x86-64 Linux -tp shanghai
|
||||
pgCC 12.5-0 64-bit target on x86-64 Linux -tp shanghai
|
||||
|
||||
|
||||
Known Problems
|
||||
==============
|
||||
* The data conversion test dt_arith.c has failures (segmentation fault) from
|
||||
"long double" to other datatypes during hard conversion when the library
|
||||
is built with the default GCC 4.2.1 on Mac Lion system. It only happens
|
||||
with optimization (-O3, -O2, and -O1). Some newer versions of GCC do not
|
||||
have this problem. Users should disable optimization or try newer version
|
||||
of GCC.
|
||||
(SLU - 2012/06/12 - HDFFV-8017)
|
||||
|
||||
* The h5repacktst test fails on AIX 32-bit because the test uses more
|
||||
memory than the default amount. The failure message typically looks like:
|
||||
|
||||
"time: 0551-010 The process was stopped abnormally. Try again."
|
||||
|
||||
This is an issue with the test only and does not represent a problem with
|
||||
the library. To allow the test to pass, request more memory when testing
|
||||
via appropriate command such as:
|
||||
|
||||
$ env LDR_CNRTL=MAXDATA=0x20000000@DSA make check
|
||||
|
||||
(AKC - 2012/05/09 - HDFFV-8016)
|
||||
|
||||
* The file_image test will fail in the "initial file image and callbacks in
|
||||
the core VFD" sub-test if the source directory is read-only as the test
|
||||
fails to create its test files in the build directory. This will be
|
||||
resolved in a future release.
|
||||
(AKC - 2012/05/05 - HDFFV-8009)
|
||||
|
||||
* The dt_arith test reports several errors involving "long double" on
|
||||
Mac OS X 10.7 Lion when any level of optimization is enabled. The test does
|
||||
not fail in debug mode. This will be addressed in a future release.
|
||||
(SLU - 2012/05/08)
|
||||
* The C++ and FORTRAN bindings are not currently working on FreeBSD with the
|
||||
native release 8.2 compilers (4.2.1), but are working with gcc 4.6 from the
|
||||
ports (and probably gcc releases after that).
|
||||
(QAK - 2012/10/19)
|
||||
|
||||
* The following h5dump test case fails in BG/P machines (and potentially other
|
||||
machines that use a command script to launch executables):
|
||||
@@ -471,11 +494,6 @@ Known Problems
|
||||
not via the test script.
|
||||
(AKC - 2012/05/03)
|
||||
|
||||
* The ph5diff (parallel h5diff) tool can intermittently hang in parallel mode
|
||||
when comparing two HDF5 files that contain objects with the same names but
|
||||
with different object types.
|
||||
(JKM - 2012/04/27)
|
||||
|
||||
* On hopper, the build failed when RUNSERIAL and RUNPARALLEL are set
|
||||
to aprun -np X, because the H5lib_settings.c file was not generated
|
||||
properly. Not setting those environment variables works, because
|
||||
@@ -500,7 +518,7 @@ Known Problems
|
||||
64-bit SunOS 5.10 on SPARC when built with -m64 and 32-bit OS X/Darwin
|
||||
10.7.0. The STDIO VFD test has been disabled while we investigate and
|
||||
a fix should appear in a future release.
|
||||
(DER - 2011/10/14)
|
||||
(DER - 2011/10/14 - HDFFV-8235)
|
||||
|
||||
* h5diff can report inconsistent results when comparing datasets of enum type
|
||||
that contain invalid values. This is due to how enum types are handled in
|
||||
@@ -570,11 +588,6 @@ Known Problems
|
||||
it is (see bug report #1279). Quincey will make a plan for 1.10.
|
||||
(SLU - 2010/02/02)
|
||||
|
||||
* MinGW has a missing libstdc++.dll.a library file and will not successfully link
|
||||
C++ applications/tests. Do not use the enable-cxx configure option. Read all of
|
||||
the INSTALL_MINGW.txt file for all restrictions.
|
||||
(ADB - 2009/11/11)
|
||||
|
||||
* The --enable-static-exec configure flag will only statically link libraries
|
||||
if the static version of that library is present. If only the shared version
|
||||
of a library exists (i.e., most system libraries on Solaris, AIX, and Mac,
|
||||
@@ -584,63 +597,16 @@ Known Problems
|
||||
executable is statically linked with just the HDF5 library.
|
||||
(MAM - 2009/11/04)
|
||||
|
||||
* The PathScale MPI implementation, accessing a Panasas file system, would
|
||||
cause H5Fcreate() with H5F_ACC_EXCL to fail even when the file does not
|
||||
exist. This is due to the MPI_File_open() call failing if the mode has
|
||||
the MPI_MODE_EXCL bit set.
|
||||
(AKC - 2009/08/11 - HDFFV-988)
|
||||
|
||||
* Parallel tests failed with 16 processes with data inconsistency at testphdf5
|
||||
/ dataset_readAll. Parallel tests also failed with 32 and 64 processes with
|
||||
collective abort of all ranks at t_posix_compliant / allwrite_allread_blocks
|
||||
with MPI IO.
|
||||
(CMC - 2009/04/28)
|
||||
|
||||
* For Red Storm, a Cray XT3 system, the tools/h5ls/testh5ls.sh and
|
||||
tools/h5copy/testh5copy.sh will fail some of its sub-tests. These sub-tests
|
||||
are expected to fail and should exit with a non-zero code but the yod
|
||||
command does not propagate the exit code of the executables. Yod always
|
||||
returns 0 if it can launch the executable. The test suite shell expects
|
||||
a non-zero for this particular test, therefore it concludes the test has
|
||||
failed when it receives 0 from yod. Skip all the "failing" test for now
|
||||
by changing them as following.
|
||||
|
||||
======== Original tools/h5ls/testh5ls.sh =========
|
||||
TOOLTEST tgroup-1.ls 1 -w80 -r -g tgroup.h5
|
||||
======== Change to ===============================
|
||||
echo SKIP TOOLTEST tgroup-1.ls 1 -w80 -r -g tgroup.h5
|
||||
==================================================
|
||||
|
||||
======== Original tools/h5copy/testh5copy.sh =========
|
||||
TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -v -s grp_dsets -d grp_rename
|
||||
TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -v -s grp_dsets -d /grp_rename/grp_dsets
|
||||
TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -vp -s /grp_dsets -d /E/F/grp_dsets
|
||||
TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -vp -s /grp_nested -d /G/H/grp_nested
|
||||
H5LSTEST $FILEOUT
|
||||
======== Change to ===============================
|
||||
echo SKIP TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -v -s grp_dsets -d grp_rename
|
||||
echo SKIP TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -v -s grp_dsets -d /grp_rename/grp_dsets
|
||||
echo SKIP TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -vp -s /grp_dsets -d /E/F/grp_dsets
|
||||
echo SKIP TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -vp -s /grp_nested -d /G/H/grp_nested
|
||||
echo SKIP H5LSTEST $FILEOUT
|
||||
==================================================
|
||||
(AKC - 2008/11/10)
|
||||
|
||||
* For Red Storm, a Cray XT3 system, the yod command sometimes gives the
|
||||
message, "yod allocation delayed for node recovery". This interferes with
|
||||
test suites that do not expect to see this message. See the section of "Red
|
||||
Storm" in file INSTALL_parallel for a way to deal with this problem.
|
||||
(AKC - 2008/05/28)
|
||||
|
||||
* On an Intel 64 Linux cluster (RH 4, Linux 2.6.9) with Intel 10.0 compilers,
|
||||
use -mp -O1 compilation flags to build the libraries. A higher level of
|
||||
optimization causes failures in several HDF5 library tests.
|
||||
|
||||
* On mpich 1.2.5 and 1.2.6, if more than two processes contribute no IO and
|
||||
the application asks to do collective IO, we have found that when using 4
|
||||
processors, a simple collective write will sometimes be hung. This can be
|
||||
verified with t_mpi test under testpar.
|
||||
|
||||
* A dataset created or rewritten with a v1.6.3 library or after cannot be read
|
||||
with the v1.6.2 library or before when the Fletcher32 EDC filter is enabled.
|
||||
There was a bug in the calculation of the Fletcher32 checksum in the
|
||||
@@ -650,17 +616,3 @@ Known Problems
|
||||
before on little-endian system. Library releases after 1.6.4 can still read
|
||||
datasets created or rewritten with an HDF5 library of v1.6.2 or before.
|
||||
(SLU - 2005/06/30)
|
||||
|
||||
* On IBM AIX systems, parallel HDF5 mode will fail some tests with error
|
||||
messages like "INFO: 0031-XXX ...". This is from the command `poe'.
|
||||
Set the environment variable MP_INFOLEVEL to 0 to minimize the messages
|
||||
and run the tests again.
|
||||
|
||||
The tests may fail with messages like "The socket name is already in use",
|
||||
but HDF5 does not use sockets. This failure is due to problems with the
|
||||
poe command trying to set up the debug socket. To resolve this problem,
|
||||
check to see whether there are many old /tmp/s.pedb.* files staying around.
|
||||
These are sockets used by the poe command and left behind due to failed
|
||||
commands. First, ask your system administrator to clean them out.
|
||||
Lastly, request IBM to provide a means to run poe without the debug socket.
|
||||
(AKC - 2004/12/08)
|
||||
|
||||
514
src/H5FDcore.c
514
src/H5FDcore.c
@@ -17,57 +17,40 @@
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Tuesday, August 10, 1999
|
||||
*
|
||||
* Purpose: A driver which stores the HDF5 data in main memory using
|
||||
* only the HDF5 public API. This driver is useful for fast
|
||||
* access to small, temporary hdf5 files.
|
||||
* Purpose: A driver which stores the HDF5 data in main memory using
|
||||
* only the HDF5 public API. This driver is useful for fast
|
||||
* access to small, temporary hdf5 files.
|
||||
*/
|
||||
|
||||
/* Interface initialization */
|
||||
#define H5_INTERFACE_INIT_FUNC H5FD_core_init_interface
|
||||
|
||||
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Fprivate.h" /* File access */
|
||||
#include "H5FDprivate.h" /* File drivers */
|
||||
#include "H5FDcore.h" /* Core file driver */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
#include "H5MMprivate.h" /* Memory management */
|
||||
#include "H5Pprivate.h" /* Property lists */
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Fprivate.h" /* File access */
|
||||
#include "H5FDprivate.h" /* File drivers */
|
||||
#include "H5FDcore.h" /* Core file driver */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
#include "H5MMprivate.h" /* Memory management */
|
||||
#include "H5Pprivate.h" /* Property lists */
|
||||
|
||||
/* The driver identification number, initialized at runtime */
|
||||
static hid_t H5FD_CORE_g = 0;
|
||||
|
||||
/* Since Windows doesn't follow the rest of the world when it comes
|
||||
* to POSIX I/O types, some typedefs and constants are needed to avoid
|
||||
* making the code messy with #ifdefs.
|
||||
* NOTE: These are only used when writing data to the backing store on
|
||||
* file close.
|
||||
*/
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
typedef unsigned int h5_core_io_t;
|
||||
typedef int h5_core_io_ret_t;
|
||||
static int H5_CORE_MAX_IO_BYTES_g = INT_MAX;
|
||||
#else
|
||||
/* Unix, everyone else */
|
||||
typedef size_t h5_core_io_t;
|
||||
typedef ssize_t h5_core_io_ret_t;
|
||||
static size_t H5_CORE_MAX_IO_BYTES_g = SSIZET_MAX;
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
|
||||
/* The description of a file belonging to this driver. The `eoa' and `eof'
|
||||
/* The description of a file belonging to this driver. The 'eoa' and 'eof'
|
||||
* determine the amount of hdf5 address space in use and the high-water mark
|
||||
* of the file (the current size of the underlying memory).
|
||||
*/
|
||||
typedef struct H5FD_core_t {
|
||||
H5FD_t pub; /*public stuff, must be first */
|
||||
char *name; /*for equivalence testing */
|
||||
unsigned char *mem; /*the underlying memory */
|
||||
haddr_t eoa; /*end of allocated region */
|
||||
haddr_t eof; /*current allocated size */
|
||||
size_t increment; /*multiples for mem allocation */
|
||||
hbool_t backing_store; /*write to file name on flush */
|
||||
int fd; /*backing store file descriptor */
|
||||
H5FD_t pub; /* public stuff, must be first */
|
||||
char *name; /* for equivalence testing */
|
||||
unsigned char *mem; /* the underlying memory */
|
||||
haddr_t eoa; /* end of allocated region */
|
||||
haddr_t eof; /* current allocated size */
|
||||
size_t increment; /* multiples for mem allocation */
|
||||
hbool_t backing_store; /* write to file name on flush */
|
||||
int fd; /* backing store file descriptor */
|
||||
/* Information for determining uniqueness of a file with a backing store */
|
||||
#ifndef H5_HAVE_WIN32_API
|
||||
/* On most systems the combination of device and i-node number uniquely
|
||||
@@ -100,38 +83,38 @@ typedef struct H5FD_core_t {
|
||||
|
||||
HANDLE hFile; /* Native windows file handle */
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
hbool_t dirty; /*changes not saved? */
|
||||
H5FD_file_image_callbacks_t fi_callbacks; /* file image callbacks */
|
||||
hbool_t dirty; /* changes not saved? */
|
||||
H5FD_file_image_callbacks_t fi_callbacks; /* file image callbacks */
|
||||
} H5FD_core_t;
|
||||
|
||||
/* Driver-specific file access properties */
|
||||
typedef struct H5FD_core_fapl_t {
|
||||
size_t increment; /*how much to grow memory */
|
||||
hbool_t backing_store; /*write to file name on flush */
|
||||
size_t increment; /* how much to grow memory */
|
||||
hbool_t backing_store; /* write to file name on flush */
|
||||
} H5FD_core_fapl_t;
|
||||
|
||||
/* Allocate memory in multiples of this size by default */
|
||||
#define H5FD_CORE_INCREMENT 8192
|
||||
#define H5FD_CORE_INCREMENT 8192
|
||||
|
||||
/* These macros check for overflow of various quantities. These macros
|
||||
* assume that file_offset_t is signed and haddr_t and size_t are unsigned.
|
||||
*
|
||||
* ADDR_OVERFLOW: Checks whether a file address of type `haddr_t'
|
||||
* is too large to be represented by the second argument
|
||||
* of the file seek function.
|
||||
* ADDR_OVERFLOW: Checks whether a file address of type `haddr_t'
|
||||
* is too large to be represented by the second argument
|
||||
* of the file seek function.
|
||||
*
|
||||
* SIZE_OVERFLOW: Checks whether a buffer size of type `hsize_t' is too
|
||||
* large to be represented by the `size_t' type.
|
||||
* SIZE_OVERFLOW: Checks whether a buffer size of type `hsize_t' is too
|
||||
* large to be represented by the `size_t' type.
|
||||
*
|
||||
* REGION_OVERFLOW: Checks whether an address and size pair describe data
|
||||
* which can be addressed entirely in memory.
|
||||
* REGION_OVERFLOW: Checks whether an address and size pair describe data
|
||||
* which can be addressed entirely in memory.
|
||||
*/
|
||||
#define MAXADDR ((haddr_t)((~(size_t)0)-1))
|
||||
#define ADDR_OVERFLOW(A) (HADDR_UNDEF==(A) || (A) > (haddr_t)MAXADDR)
|
||||
#define SIZE_OVERFLOW(Z) ((Z) > (hsize_t)MAXADDR)
|
||||
#define REGION_OVERFLOW(A,Z) (ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) || \
|
||||
HADDR_UNDEF==(A)+(Z) || \
|
||||
(size_t)((A)+(Z))<(size_t)(A))
|
||||
#define MAXADDR ((haddr_t)((~(size_t)0)-1))
|
||||
#define ADDR_OVERFLOW(A) (HADDR_UNDEF==(A) || (A) > (haddr_t)MAXADDR)
|
||||
#define SIZE_OVERFLOW(Z) ((Z) > (hsize_t)MAXADDR)
|
||||
#define REGION_OVERFLOW(A,Z) (ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) || \
|
||||
HADDR_UNDEF==(A)+(Z) || \
|
||||
(size_t)((A)+(Z))<(size_t)(A))
|
||||
|
||||
/* Prototypes */
|
||||
static void *H5FD_core_fapl_get(H5FD_t *_file);
|
||||
@@ -145,60 +128,57 @@ static herr_t H5FD_core_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t addr);
|
||||
static haddr_t H5FD_core_get_eof(const H5FD_t *_file);
|
||||
static herr_t H5FD_core_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
|
||||
static herr_t H5FD_core_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
|
||||
size_t size, void *buf);
|
||||
size_t size, void *buf);
|
||||
static herr_t H5FD_core_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
|
||||
size_t size, const void *buf);
|
||||
static herr_t H5FD_core_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
|
||||
static herr_t H5FD_core_truncate(H5FD_t *_file, hid_t dxpl_id, hbool_t closing);
|
||||
|
||||
static const H5FD_class_t H5FD_core_g = {
|
||||
"core", /*name */
|
||||
MAXADDR, /*maxaddr */
|
||||
H5F_CLOSE_WEAK, /*fc_degree */
|
||||
NULL, /*sb_size */
|
||||
NULL, /*sb_encode */
|
||||
NULL, /*sb_decode */
|
||||
sizeof(H5FD_core_fapl_t), /*fapl_size */
|
||||
H5FD_core_fapl_get, /*fapl_get */
|
||||
NULL, /*fapl_copy */
|
||||
NULL, /*fapl_free */
|
||||
0, /*dxpl_size */
|
||||
NULL, /*dxpl_copy */
|
||||
NULL, /*dxpl_free */
|
||||
H5FD_core_open, /*open */
|
||||
H5FD_core_close, /*close */
|
||||
H5FD_core_cmp, /*cmp */
|
||||
H5FD_core_query, /*query */
|
||||
NULL, /*get_type_map */
|
||||
NULL, /*alloc */
|
||||
NULL, /*free */
|
||||
H5FD_core_get_eoa, /*get_eoa */
|
||||
H5FD_core_set_eoa, /*set_eoa */
|
||||
H5FD_core_get_eof, /*get_eof */
|
||||
H5FD_core_get_handle, /*get_handle */
|
||||
H5FD_core_read, /*read */
|
||||
H5FD_core_write, /*write */
|
||||
H5FD_core_flush, /*flush */
|
||||
H5FD_core_truncate, /*truncate */
|
||||
NULL, /*lock */
|
||||
NULL, /*unlock */
|
||||
H5FD_FLMAP_DICHOTOMY /*fl_map */
|
||||
"core", /* name */
|
||||
MAXADDR, /* maxaddr */
|
||||
H5F_CLOSE_WEAK, /* fc_degree */
|
||||
NULL, /* sb_size */
|
||||
NULL, /* sb_encode */
|
||||
NULL, /* sb_decode */
|
||||
sizeof(H5FD_core_fapl_t), /* fapl_size */
|
||||
H5FD_core_fapl_get, /* fapl_get */
|
||||
NULL, /* fapl_copy */
|
||||
NULL, /* fapl_free */
|
||||
0, /* dxpl_size */
|
||||
NULL, /* dxpl_copy */
|
||||
NULL, /* dxpl_free */
|
||||
H5FD_core_open, /* open */
|
||||
H5FD_core_close, /* close */
|
||||
H5FD_core_cmp, /* cmp */
|
||||
H5FD_core_query, /* query */
|
||||
NULL, /* get_type_map */
|
||||
NULL, /* alloc */
|
||||
NULL, /* free */
|
||||
H5FD_core_get_eoa, /* get_eoa */
|
||||
H5FD_core_set_eoa, /* set_eoa */
|
||||
H5FD_core_get_eof, /* get_eof */
|
||||
H5FD_core_get_handle, /* get_handle */
|
||||
H5FD_core_read, /* read */
|
||||
H5FD_core_write, /* write */
|
||||
H5FD_core_flush, /* flush */
|
||||
H5FD_core_truncate, /* truncate */
|
||||
NULL, /* lock */
|
||||
NULL, /* unlock */
|
||||
H5FD_FLMAP_DICHOTOMY /* fl_map */
|
||||
};
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
NAME
|
||||
H5FD_core_init_interface -- Initialize interface-specific information
|
||||
USAGE
|
||||
herr_t H5FD_core_init_interface()
|
||||
|
||||
RETURNS
|
||||
Non-negative on success/Negative on failure
|
||||
DESCRIPTION
|
||||
Initializes any interface-specific data or routines. (Just calls
|
||||
H5FD_core_init currently).
|
||||
|
||||
--------------------------------------------------------------------------*/
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_core_init_interface
|
||||
*
|
||||
* Purpose: Initializes any interface-specific data or routines.
|
||||
*
|
||||
* Return: Success: The driver ID for the core driver.
|
||||
* Failure: Negative.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5FD_core_init_interface(void)
|
||||
{
|
||||
@@ -209,14 +189,13 @@ H5FD_core_init_interface(void)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_core_init
|
||||
* Function: H5FD_core_init
|
||||
*
|
||||
* Purpose: Initialize this driver by registering the driver with the
|
||||
* library.
|
||||
* Purpose: Initialize this driver by registering the driver with the
|
||||
* library.
|
||||
*
|
||||
* Return: Success: The driver ID for the core driver.
|
||||
*
|
||||
* Failure: Negative.
|
||||
* Return: Success: The driver ID for the core driver.
|
||||
* Failure: Negative.
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
@@ -226,15 +205,15 @@ H5FD_core_init_interface(void)
|
||||
hid_t
|
||||
H5FD_core_init(void)
|
||||
{
|
||||
hid_t ret_value=H5FD_CORE_g; /* Return value */
|
||||
hid_t ret_value = H5FD_CORE_g; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(FAIL)
|
||||
|
||||
if (H5I_VFL!=H5Iget_type(H5FD_CORE_g))
|
||||
if(H5I_VFL != H5Iget_type(H5FD_CORE_g))
|
||||
H5FD_CORE_g = H5FD_register(&H5FD_core_g,sizeof(H5FD_class_t),FALSE);
|
||||
|
||||
/* Set return value */
|
||||
ret_value=H5FD_CORE_g;
|
||||
ret_value = H5FD_CORE_g;
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@@ -242,11 +221,11 @@ done:
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
* Function: H5FD_core_term
|
||||
* Function: H5FD_core_term
|
||||
*
|
||||
* Purpose: Shut down the VFD
|
||||
* Purpose: Shut down the VFD
|
||||
*
|
||||
* Return: <none>
|
||||
* Returns: <none>
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Friday, Jan 30, 2004
|
||||
@@ -259,32 +238,32 @@ H5FD_core_term(void)
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
/* Reset VFL ID */
|
||||
H5FD_CORE_g=0;
|
||||
H5FD_CORE_g = 0;
|
||||
|
||||
FUNC_LEAVE_NOAPI_VOID
|
||||
} /* end H5FD_core_term() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5Pset_fapl_core
|
||||
* Function: H5Pset_fapl_core
|
||||
*
|
||||
* Purpose: Modify the file access property list to use the H5FD_CORE
|
||||
* driver defined in this source file. The INCREMENT specifies
|
||||
* how much to grow the memory each time we need more.
|
||||
* Purpose: Modify the file access property list to use the H5FD_CORE
|
||||
* driver defined in this source file. The INCREMENT specifies
|
||||
* how much to grow the memory each time we need more.
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, February 19, 1998
|
||||
* Thursday, February 19, 1998
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5Pset_fapl_core(hid_t fapl_id, size_t increment, hbool_t backing_store)
|
||||
{
|
||||
H5FD_core_fapl_t fa;
|
||||
H5P_genplist_t *plist; /* Property list pointer */
|
||||
herr_t ret_value;
|
||||
H5FD_core_fapl_t fa;
|
||||
H5P_genplist_t *plist; /* Property list pointer */
|
||||
herr_t ret_value;
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
H5TRACE3("e", "izb", fapl_id, increment, backing_store);
|
||||
@@ -304,13 +283,11 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5Pget_fapl_core
|
||||
* Function: H5Pget_fapl_core
|
||||
*
|
||||
* Purpose: Queries properties set by the H5Pset_fapl_core() function.
|
||||
* Purpose: Queries properties set by the H5Pset_fapl_core() function.
|
||||
*
|
||||
* Return: Success: Non-negative
|
||||
*
|
||||
* Failure: Negative
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Tuesday, August 10, 1999
|
||||
@@ -318,12 +295,11 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5Pget_fapl_core(hid_t fapl_id, size_t *increment/*out*/,
|
||||
hbool_t *backing_store/*out*/)
|
||||
H5Pget_fapl_core(hid_t fapl_id, size_t *increment /*out*/, hbool_t *backing_store /*out*/)
|
||||
{
|
||||
H5FD_core_fapl_t *fa;
|
||||
H5P_genplist_t *plist; /* Property list pointer */
|
||||
herr_t ret_value=SUCCEED; /* Return value */
|
||||
H5FD_core_fapl_t *fa;
|
||||
H5P_genplist_t *plist; /* Property list pointer */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
H5TRACE3("e", "ixx", fapl_id, increment, backing_store);
|
||||
@@ -346,13 +322,13 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_core_fapl_get
|
||||
* Function: H5FD_core_fapl_get
|
||||
*
|
||||
* Purpose: Returns a copy of the file access properties.
|
||||
* Purpose: Returns a copy of the file access properties.
|
||||
*
|
||||
* Return: Success: Ptr to new file access properties.
|
||||
* Return: Success: Ptr to new file access properties.
|
||||
*
|
||||
* Failure: NULL
|
||||
* Failure: NULL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Friday, August 13, 1999
|
||||
@@ -362,9 +338,9 @@ done:
|
||||
static void *
|
||||
H5FD_core_fapl_get(H5FD_t *_file)
|
||||
{
|
||||
H5FD_core_t *file = (H5FD_core_t*)_file;
|
||||
H5FD_core_fapl_t *fa;
|
||||
void *ret_value; /* Return value */
|
||||
H5FD_core_t *file = (H5FD_core_t*)_file;
|
||||
H5FD_core_fapl_t *fa;
|
||||
void *ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
@@ -375,7 +351,7 @@ H5FD_core_fapl_get(H5FD_t *_file)
|
||||
fa->backing_store = (hbool_t)(file->fd >= 0);
|
||||
|
||||
/* Set return value */
|
||||
ret_value=fa;
|
||||
ret_value = fa;
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@@ -383,15 +359,15 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_core_open
|
||||
* Function: H5FD_core_open
|
||||
*
|
||||
* Purpose: Create memory as an HDF5 file.
|
||||
* Purpose: Create memory as an HDF5 file.
|
||||
*
|
||||
* Return: Success: A pointer to a new file data structure. The
|
||||
* public fields will be initialized by the
|
||||
* caller, which is always H5FD_open().
|
||||
* Return: Success: A pointer to a new file data structure. The
|
||||
* public fields will be initialized by the
|
||||
* caller, which is always H5FD_open().
|
||||
*
|
||||
* Failure: NULL
|
||||
* Failure: NULL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
@@ -399,20 +375,19 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static H5FD_t *
|
||||
H5FD_core_open(const char *name, unsigned flags, hid_t fapl_id,
|
||||
haddr_t maxaddr)
|
||||
H5FD_core_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
|
||||
{
|
||||
int o_flags;
|
||||
H5FD_core_t *file=NULL;
|
||||
H5FD_core_fapl_t *fa=NULL;
|
||||
H5P_genplist_t *plist; /* Property list pointer */
|
||||
int o_flags;
|
||||
H5FD_core_t *file = NULL;
|
||||
H5FD_core_fapl_t *fa = NULL;
|
||||
H5P_genplist_t *plist; /* Property list pointer */
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
struct _BY_HANDLE_FILE_INFORMATION fileinfo;
|
||||
#endif
|
||||
h5_stat_t sb;
|
||||
int fd=-1;
|
||||
H5FD_file_image_info_t file_image_info;
|
||||
H5FD_t *ret_value;
|
||||
h5_stat_t sb;
|
||||
int fd = -1;
|
||||
H5FD_file_image_info_t file_image_info;
|
||||
H5FD_t *ret_value;
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
@@ -552,20 +527,23 @@ H5FD_core_open(const char *name, unsigned flags, hid_t fapl_id,
|
||||
/* Read in existing data, being careful of interrupted system calls,
|
||||
* partial results, and the end of the file.
|
||||
*/
|
||||
|
||||
uint8_t *mem = file->mem; /* memory pointer for writes */
|
||||
|
||||
while(size > 0) {
|
||||
h5_core_io_t bytes_in = 0; /* # of bytes to read */
|
||||
h5_core_io_ret_t bytes_read = -1; /* # of bytes actually read */
|
||||
h5_posix_io_t bytes_in = 0; /* # of bytes to read */
|
||||
h5_posix_io_ret_t bytes_read = -1; /* # of bytes actually read */
|
||||
|
||||
/* Trying to read more bytes than the return type can handle is
|
||||
* undefined behavior in POSIX.
|
||||
*/
|
||||
if(size > H5_CORE_MAX_IO_BYTES_g)
|
||||
bytes_in = H5_CORE_MAX_IO_BYTES_g;
|
||||
if(size > H5_POSIX_MAX_IO_BYTES)
|
||||
bytes_in = H5_POSIX_MAX_IO_BYTES;
|
||||
else
|
||||
bytes_in = (h5_core_io_t)size;
|
||||
bytes_in = (h5_posix_io_t)size;
|
||||
|
||||
do {
|
||||
bytes_read = HDread(file->fd, file->mem, bytes_in);
|
||||
bytes_read = HDread(file->fd, mem, bytes_in);
|
||||
} while(-1 == bytes_read && EINTR == errno);
|
||||
|
||||
if(-1 == bytes_read) { /* error */
|
||||
@@ -573,12 +551,13 @@ H5FD_core_open(const char *name, unsigned flags, hid_t fapl_id,
|
||||
time_t mytime = HDtime(NULL);
|
||||
HDoff_t myoffset = HDlseek(file->fd, (HDoff_t)0, SEEK_CUR);
|
||||
|
||||
HGOTO_ERROR(H5E_IO, H5E_READERROR, NULL, "file read failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, error message = '%s', file->mem = %p, size = %lu, offset = %llu", HDctime(&mytime), file->name, file->fd, myerrno, HDstrerror(myerrno), file->mem, (unsigned long)size, (unsigned long long)myoffset);
|
||||
HGOTO_ERROR(H5E_IO, H5E_READERROR, NULL, "file read failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, error message = '%s', file->mem = %p, total read size = %llu, bytes this sub-read = %llu, bytes actually read = %llu, offset = %llu", HDctime(&mytime), file->name, file->fd, myerrno, HDstrerror(myerrno), file->mem, (unsigned long long)size, (unsigned long long)bytes_in, (unsigned long long)bytes_read, (unsigned long long)myoffset);
|
||||
} /* end if */
|
||||
|
||||
HDassert(bytes_read >= 0);
|
||||
HDassert((size_t)bytes_read <= size);
|
||||
|
||||
mem += bytes_read;
|
||||
size -= (size_t)bytes_read;
|
||||
} /* end while */
|
||||
} /* end else */
|
||||
@@ -594,13 +573,11 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_core_close
|
||||
* Function: H5FD_core_close
|
||||
*
|
||||
* Purpose: Closes the file.
|
||||
* Purpose: Closes the file.
|
||||
*
|
||||
* Return: Success: 0
|
||||
*
|
||||
* Failure: -1
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
@@ -610,8 +587,8 @@ done:
|
||||
static herr_t
|
||||
H5FD_core_close(H5FD_t *_file)
|
||||
{
|
||||
H5FD_core_t *file = (H5FD_core_t*)_file;
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
H5FD_core_t *file = (H5FD_core_t*)_file;
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
@@ -642,17 +619,17 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_core_cmp
|
||||
* Function: H5FD_core_cmp
|
||||
*
|
||||
* Purpose: Compares two files belonging to this driver by name. If one
|
||||
* file doesn't have a name then it is less than the other file.
|
||||
* If neither file has a name then the comparison is by file
|
||||
* address.
|
||||
* Purpose: Compares two files belonging to this driver by name. If one
|
||||
* file doesn't have a name then it is less than the other file.
|
||||
* If neither file has a name then the comparison is by file
|
||||
* address.
|
||||
*
|
||||
* Return: Success: A value like strcmp()
|
||||
* Return: Success: A value like strcmp()
|
||||
*
|
||||
* Failure: never fails (arguments were checked by the
|
||||
* caller).
|
||||
* Failure: never fails (arguments were checked by the
|
||||
* caller).
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
@@ -662,9 +639,9 @@ done:
|
||||
static int
|
||||
H5FD_core_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
|
||||
{
|
||||
const H5FD_core_t *f1 = (const H5FD_core_t*)_f1;
|
||||
const H5FD_core_t *f2 = (const H5FD_core_t*)_f2;
|
||||
int ret_value = 0;
|
||||
const H5FD_core_t *f1 = (const H5FD_core_t*)_f1;
|
||||
const H5FD_core_t *f2 = (const H5FD_core_t*)_f2;
|
||||
int ret_value = 0;
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
@@ -726,13 +703,12 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_core_query
|
||||
* Function: H5FD_core_query
|
||||
*
|
||||
* Purpose: Set the flags that this VFL driver is capable of supporting.
|
||||
* Purpose: Set the flags that this VFL driver is capable of supporting.
|
||||
* (listed in H5FDpublic.h)
|
||||
*
|
||||
* Return: Success: non-negative
|
||||
* Failure: negative
|
||||
* Return: SUCCEED (Can't fail)
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Tuesday, October 7, 2008
|
||||
@@ -742,7 +718,7 @@ done:
|
||||
static herr_t
|
||||
H5FD_core_query(const H5FD_t * _file, unsigned long *flags /* out */)
|
||||
{
|
||||
const H5FD_core_t *file = (const H5FD_core_t*)_file;
|
||||
const H5FD_core_t *file = (const H5FD_core_t*)_file;
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
@@ -766,15 +742,13 @@ H5FD_core_query(const H5FD_t * _file, unsigned long *flags /* out */)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_core_get_eoa
|
||||
* Function: H5FD_core_get_eoa
|
||||
*
|
||||
* Purpose: Gets the end-of-address marker for the file. The EOA marker
|
||||
* is the first address past the last byte allocated in the
|
||||
* format address space.
|
||||
* Purpose: Gets the end-of-address marker for the file. The EOA marker
|
||||
* is the first address past the last byte allocated in the
|
||||
* format address space.
|
||||
*
|
||||
* Return: Success: The end-of-address marker.
|
||||
*
|
||||
* Failure: HADDR_UNDEF
|
||||
* Return: The end-of-address marker. (Can't fail)
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Monday, August 2, 1999
|
||||
@@ -784,7 +758,7 @@ H5FD_core_query(const H5FD_t * _file, unsigned long *flags /* out */)
|
||||
static haddr_t
|
||||
H5FD_core_get_eoa(const H5FD_t *_file, H5FD_mem_t UNUSED type)
|
||||
{
|
||||
const H5FD_core_t *file = (const H5FD_core_t*)_file;
|
||||
const H5FD_core_t *file = (const H5FD_core_t*)_file;
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
@@ -793,15 +767,13 @@ H5FD_core_get_eoa(const H5FD_t *_file, H5FD_mem_t UNUSED type)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_core_set_eoa
|
||||
* Function: H5FD_core_set_eoa
|
||||
*
|
||||
* Purpose: Set the end-of-address marker for the file. This function is
|
||||
* called shortly after an existing HDF5 file is opened in order
|
||||
* to tell the driver where the end of the HDF5 data is located.
|
||||
* Purpose: Set the end-of-address marker for the file. This function is
|
||||
* called shortly after an existing HDF5 file is opened in order
|
||||
* to tell the driver where the end of the HDF5 data is located.
|
||||
*
|
||||
* Return: Success: 0
|
||||
*
|
||||
* Failure: -1
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
@@ -811,8 +783,8 @@ H5FD_core_get_eoa(const H5FD_t *_file, H5FD_mem_t UNUSED type)
|
||||
static herr_t
|
||||
H5FD_core_set_eoa(H5FD_t *_file, H5FD_mem_t UNUSED type, haddr_t addr)
|
||||
{
|
||||
H5FD_core_t *file = (H5FD_core_t*)_file;
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
H5FD_core_t *file = (H5FD_core_t*)_file;
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
@@ -827,17 +799,15 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_core_get_eof
|
||||
* Function: H5FD_core_get_eof
|
||||
*
|
||||
* Purpose: Returns the end-of-file marker, which is the greater of
|
||||
* either the size of the underlying memory or the HDF5
|
||||
* end-of-address markers.
|
||||
* Purpose: Returns the end-of-file marker, which is the greater of
|
||||
* either the size of the underlying memory or the HDF5
|
||||
* end-of-address markers.
|
||||
*
|
||||
* Return: Success: End of file address, the first address past
|
||||
* the end of the "file", either the memory
|
||||
* or the HDF5 file.
|
||||
*
|
||||
* Failure: HADDR_UNDEF
|
||||
* Return: End of file address, the first address past
|
||||
* the end of the "file", either the memory
|
||||
* or the HDF5 file. (Can't fail)
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
@@ -847,7 +817,7 @@ done:
|
||||
static haddr_t
|
||||
H5FD_core_get_eof(const H5FD_t *_file)
|
||||
{
|
||||
const H5FD_core_t *file = (const H5FD_core_t*)_file;
|
||||
const H5FD_core_t *file = (const H5FD_core_t*)_file;
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
@@ -858,9 +828,9 @@ H5FD_core_get_eof(const H5FD_t *_file)
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_core_get_handle
|
||||
*
|
||||
* Purpose: Returns the file handle of CORE file driver.
|
||||
* Purpose: Gets the file handle of CORE file driver.
|
||||
*
|
||||
* Returns: Non-negative if succeed or negative if fails.
|
||||
* Returns: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Raymond Lu
|
||||
* Sept. 16, 2002
|
||||
@@ -871,7 +841,7 @@ static herr_t
|
||||
H5FD_core_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle)
|
||||
{
|
||||
H5FD_core_t *file = (H5FD_core_t *)_file; /* core VFD info */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
@@ -916,26 +886,25 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_core_read
|
||||
* Function: H5FD_core_read
|
||||
*
|
||||
* Purpose: Reads SIZE bytes of data from FILE beginning at address ADDR
|
||||
* into buffer BUF according to data transfer properties in
|
||||
* DXPL_ID.
|
||||
* Purpose: Reads SIZE bytes of data from FILE beginning at address ADDR
|
||||
* into buffer BUF according to data transfer properties in
|
||||
* DXPL_ID.
|
||||
*
|
||||
* Return: Success: Zero. Result is stored in caller-supplied
|
||||
* buffer BUF.
|
||||
* Return: Success: SUCCEED. Result is stored in caller-supplied
|
||||
* buffer BUF.
|
||||
*
|
||||
* Failure: -1, Contents of buffer BUF are undefined.
|
||||
* Failure: FAIL, Contents of buffer BUF are undefined.
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static herr_t
|
||||
H5FD_core_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr,
|
||||
size_t size, void *buf/*out*/)
|
||||
size_t size, void *buf/*out*/)
|
||||
{
|
||||
H5FD_core_t *file = (H5FD_core_t*)_file;
|
||||
herr_t ret_value=SUCCEED; /* Return value */
|
||||
@@ -982,28 +951,25 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_core_write
|
||||
* Function: H5FD_core_write
|
||||
*
|
||||
* Purpose: Writes SIZE bytes of data to FILE beginning at address ADDR
|
||||
* from buffer BUF according to data transfer properties in
|
||||
* DXPL_ID.
|
||||
* Purpose: Writes SIZE bytes of data to FILE beginning at address ADDR
|
||||
* from buffer BUF according to data transfer properties in
|
||||
* DXPL_ID.
|
||||
*
|
||||
* Return: Success: Zero
|
||||
*
|
||||
* Failure: -1
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static herr_t
|
||||
H5FD_core_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr,
|
||||
size_t size, const void *buf)
|
||||
size_t size, const void *buf)
|
||||
{
|
||||
H5FD_core_t *file = (H5FD_core_t*)_file;
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
@@ -1042,7 +1008,7 @@ H5FD_core_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, had
|
||||
} /* end else */
|
||||
|
||||
#ifdef H5_CLEAR_MEMORY
|
||||
HDmemset(x + file->eof, 0, (size_t)(new_eof - file->eof));
|
||||
HDmemset(x + file->eof, 0, (size_t)(new_eof - file->eof));
|
||||
#endif /* H5_CLEAR_MEMORY */
|
||||
file->mem = x;
|
||||
|
||||
@@ -1061,49 +1027,46 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_core_flush
|
||||
* Function: H5FD_core_flush
|
||||
*
|
||||
* Purpose: Flushes the file to backing store if there is any and if the
|
||||
* dirty flag is set.
|
||||
* Purpose: Flushes the file to backing store if there is any and if the
|
||||
* dirty flag is set.
|
||||
*
|
||||
* Return: Success: 0
|
||||
*
|
||||
* Failure: -1
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Friday, October 15, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static herr_t
|
||||
H5FD_core_flush(H5FD_t *_file, hid_t UNUSED dxpl_id, unsigned UNUSED closing)
|
||||
{
|
||||
H5FD_core_t *file = (H5FD_core_t*)_file;
|
||||
herr_t ret_value=SUCCEED; /* Return value */
|
||||
H5FD_core_t *file = (H5FD_core_t*)_file;
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
/* Write to backing store */
|
||||
if (file->dirty && file->fd>=0 && file->backing_store) {
|
||||
if (file->dirty && file->fd >= 0 && file->backing_store) {
|
||||
haddr_t size = file->eof;
|
||||
unsigned char *ptr = file->mem;
|
||||
|
||||
if (0!=HDlseek(file->fd, (off_t)0, SEEK_SET))
|
||||
if(0 != HDlseek(file->fd, (off_t)0, SEEK_SET))
|
||||
HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "error seeking in backing store")
|
||||
|
||||
while (size > 0) {
|
||||
|
||||
h5_core_io_t bytes_in = 0; /* # of bytes to write */
|
||||
h5_core_io_ret_t bytes_wrote = -1; /* # of bytes written */
|
||||
h5_posix_io_t bytes_in = 0; /* # of bytes to write */
|
||||
h5_posix_io_ret_t bytes_wrote = -1; /* # of bytes written */
|
||||
|
||||
/* Trying to write more bytes than the return type can handle is
|
||||
* undefined behavior in POSIX.
|
||||
*/
|
||||
if(size > H5_CORE_MAX_IO_BYTES_g)
|
||||
bytes_in = H5_CORE_MAX_IO_BYTES_g;
|
||||
if(size > H5_POSIX_MAX_IO_BYTES)
|
||||
bytes_in = H5_POSIX_MAX_IO_BYTES;
|
||||
else
|
||||
bytes_in = (h5_core_io_t)size;
|
||||
bytes_in = (h5_posix_io_t)size;
|
||||
|
||||
do {
|
||||
bytes_wrote = HDwrite(file->fd, ptr, bytes_in);
|
||||
@@ -1114,7 +1077,7 @@ H5FD_core_flush(H5FD_t *_file, hid_t UNUSED dxpl_id, unsigned UNUSED closing)
|
||||
time_t mytime = HDtime(NULL);
|
||||
HDoff_t myoffset = HDlseek(file->fd, (HDoff_t)0, SEEK_CUR);
|
||||
|
||||
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "write to backing store failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, error message = '%s', ptr = %p, size = %lu, offset = %llu", HDctime(&mytime), file->name, file->fd, myerrno, HDstrerror(myerrno), ptr, (unsigned long)size, (unsigned long long)myoffset);
|
||||
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "write to backing store failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, error message = '%s', ptr = %p, total write size = %llu, bytes this sub-write = %llu, bytes actually written = %llu, offset = %llu", HDctime(&mytime), file->name, file->fd, myerrno, HDstrerror(myerrno), ptr, (unsigned long long)size, (unsigned long long)bytes_in, (unsigned long long)bytes_wrote, (unsigned long long)myoffset);
|
||||
} /* end if */
|
||||
|
||||
HDassert(bytes_wrote > 0);
|
||||
@@ -1134,42 +1097,40 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_core_truncate
|
||||
* Function: H5FD_core_truncate
|
||||
*
|
||||
* Purpose: Makes sure that the true file size is the same (or larger)
|
||||
* than the end-of-address.
|
||||
* Purpose: Makes sure that the true file size is the same (or larger)
|
||||
* than the end-of-address.
|
||||
*
|
||||
* Addendum -- 12/2/11
|
||||
* For file images opened with the core file driver, it is
|
||||
* necessary that we avoid reallocating the core file driver's
|
||||
* buffer uneccessarily.
|
||||
* Addendum -- 12/2/11
|
||||
* For file images opened with the core file driver, it is
|
||||
* necessary that we avoid reallocating the core file driver's
|
||||
* buffer uneccessarily.
|
||||
*
|
||||
* To this end, I have made the following functional changes
|
||||
* to this function.
|
||||
* To this end, I have made the following functional changes
|
||||
* to this function.
|
||||
*
|
||||
* If we are closing, and there is no backing store, this
|
||||
* function becomes a no-op.
|
||||
* If we are closing, and there is no backing store, this
|
||||
* function becomes a no-op.
|
||||
*
|
||||
* If we are closing, and there is backing store, we set the
|
||||
* eof to equal the eoa, and truncate the backing store to
|
||||
* the new eof
|
||||
* If we are closing, and there is backing store, we set the
|
||||
* eof to equal the eoa, and truncate the backing store to
|
||||
* the new eof
|
||||
*
|
||||
* If we are not closing, we realloc the buffer to size equal
|
||||
* to the smallest multiple of the allocation increment that
|
||||
* equals or exceeds the eoa and set the eof accordingly.
|
||||
* Note that we no longer truncate the backing store to the
|
||||
* new eof if applicable.
|
||||
* -- JRM
|
||||
* If we are not closing, we realloc the buffer to size equal
|
||||
* to the smallest multiple of the allocation increment that
|
||||
* equals or exceeds the eoa and set the eof accordingly.
|
||||
* Note that we no longer truncate the backing store to the
|
||||
* new eof if applicable.
|
||||
* -- JRM
|
||||
*
|
||||
* Return: Success: Non-negative
|
||||
* Failure: Negative
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Tuesday, October 7, 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static herr_t
|
||||
H5FD_core_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t closing)
|
||||
{
|
||||
@@ -1260,4 +1221,3 @@ H5FD_core_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t closing)
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5FD_core_truncate() */
|
||||
|
||||
|
||||
410
src/H5FDlog.c
410
src/H5FDlog.c
@@ -14,50 +14,35 @@
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*
|
||||
* Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
|
||||
* Programmer: Quincey Koziol <koziol@hdfgroup.org>
|
||||
* Monday, April 17, 2000
|
||||
*
|
||||
* Purpose: The POSIX unbuffered file driver using only the HDF5 public
|
||||
* API and with a few optimizations: the lseek() call is made
|
||||
* only when the current file position is unknown or needs to be
|
||||
* changed based on previous I/O through this driver (don't mix
|
||||
* I/O from this driver with I/O from other parts of the
|
||||
* application to the same file).
|
||||
* With custom modifications...
|
||||
* Purpose: The POSIX unbuffered file driver using only the HDF5 public
|
||||
* API and with a few optimizations: the lseek() call is made
|
||||
* only when the current file position is unknown or needs to be
|
||||
* changed based on previous I/O through this driver (don't mix
|
||||
* I/O from this driver with I/O from other parts of the
|
||||
* application to the same file).
|
||||
* With custom modifications...
|
||||
*/
|
||||
|
||||
/* Interface initialization */
|
||||
#define H5_INTERFACE_INIT_FUNC H5FD_log_init_interface
|
||||
|
||||
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Fprivate.h" /* File access */
|
||||
#include "H5FDprivate.h" /* File drivers */
|
||||
#include "H5FDlog.h" /* Logging file driver */
|
||||
#include "H5FLprivate.h" /* Free Lists */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
#include "H5MMprivate.h" /* Memory management */
|
||||
#include "H5Pprivate.h" /* Property lists */
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Fprivate.h" /* File access */
|
||||
#include "H5FDprivate.h" /* File drivers */
|
||||
#include "H5FDlog.h" /* Logging file driver */
|
||||
#include "H5FLprivate.h" /* Free Lists */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
#include "H5MMprivate.h" /* Memory management */
|
||||
#include "H5Pprivate.h" /* Property lists */
|
||||
|
||||
/* The driver identification number, initialized at runtime */
|
||||
static hid_t H5FD_LOG_g = 0;
|
||||
|
||||
/* Since Windows doesn't follow the rest of the world when it comes
|
||||
* to POSIX I/O types, some typedefs and constants are needed to avoid
|
||||
* making the code messy with #ifdefs.
|
||||
*/
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
typedef unsigned int h5_log_io_t;
|
||||
typedef int h5_log_io_ret_t;
|
||||
static int H5_LOG_MAX_IO_BYTES_g = INT_MAX;
|
||||
#else
|
||||
/* Unix, everyone else */
|
||||
typedef size_t h5_log_io_t;
|
||||
typedef ssize_t h5_log_io_ret_t;
|
||||
static size_t H5_LOG_MAX_IO_BYTES_g = SSIZET_MAX;
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
|
||||
/* Driver-specific file access properties */
|
||||
typedef struct H5FD_log_fapl_t {
|
||||
char *logfile; /* Allocated log file name */
|
||||
@@ -161,31 +146,30 @@ typedef struct H5FD_log_t {
|
||||
* These macros check for overflow of various quantities. These macros
|
||||
* assume that HDoff_t is signed and haddr_t and size_t are unsigned.
|
||||
*
|
||||
* ADDR_OVERFLOW: Checks whether a file address of type `haddr_t'
|
||||
* is too large to be represented by the second argument
|
||||
* of the file seek function.
|
||||
* ADDR_OVERFLOW: Checks whether a file address of type `haddr_t'
|
||||
* is too large to be represented by the second argument
|
||||
* of the file seek function.
|
||||
*
|
||||
* SIZE_OVERFLOW: Checks whether a buffer size of type `hsize_t' is too
|
||||
* large to be represented by the `size_t' type.
|
||||
* SIZE_OVERFLOW: Checks whether a buffer size of type `hsize_t' is too
|
||||
* large to be represented by the `size_t' type.
|
||||
*
|
||||
* REGION_OVERFLOW: Checks whether an address and size pair describe data
|
||||
* which can be addressed entirely by the second
|
||||
* argument of the file seek function.
|
||||
* REGION_OVERFLOW: Checks whether an address and size pair describe data
|
||||
* which can be addressed entirely by the second
|
||||
* argument of the file seek function.
|
||||
*/
|
||||
#define MAXADDR (((haddr_t)1<<(8*sizeof(HDoff_t)-1))-1)
|
||||
#define ADDR_OVERFLOW(A) (HADDR_UNDEF==(A) || \
|
||||
((A) & ~(haddr_t)MAXADDR))
|
||||
#define SIZE_OVERFLOW(Z) ((Z) & ~(hsize_t)MAXADDR)
|
||||
#define REGION_OVERFLOW(A,Z) (ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) || \
|
||||
HADDR_UNDEF==(A)+(Z) || \
|
||||
(HDoff_t)((A)+(Z))<(HDoff_t)(A))
|
||||
#define MAXADDR (((haddr_t)1<<(8*sizeof(HDoff_t)-1))-1)
|
||||
#define ADDR_OVERFLOW(A) (HADDR_UNDEF==(A) || ((A) & ~(haddr_t)MAXADDR))
|
||||
#define SIZE_OVERFLOW(Z) ((Z) & ~(hsize_t)MAXADDR)
|
||||
#define REGION_OVERFLOW(A,Z) (ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) || \
|
||||
HADDR_UNDEF==(A)+(Z) || \
|
||||
(HDoff_t)((A)+(Z))<(HDoff_t)(A))
|
||||
|
||||
/* Prototypes */
|
||||
static void *H5FD_log_fapl_get(H5FD_t *file);
|
||||
static void *H5FD_log_fapl_copy(const void *_old_fa);
|
||||
static herr_t H5FD_log_fapl_free(void *_fa);
|
||||
static H5FD_t *H5FD_log_open(const char *name, unsigned flags, hid_t fapl_id,
|
||||
haddr_t maxaddr);
|
||||
haddr_t maxaddr);
|
||||
static herr_t H5FD_log_close(H5FD_t *_file);
|
||||
static int H5FD_log_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
|
||||
static herr_t H5FD_log_query(const H5FD_t *_f1, unsigned long *flags);
|
||||
@@ -195,9 +179,9 @@ static herr_t H5FD_log_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t addr);
|
||||
static haddr_t H5FD_log_get_eof(const H5FD_t *_file);
|
||||
static herr_t H5FD_log_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
|
||||
static herr_t H5FD_log_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
|
||||
size_t size, void *buf);
|
||||
size_t size, void *buf);
|
||||
static herr_t H5FD_log_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
|
||||
size_t size, const void *buf);
|
||||
size_t size, const void *buf);
|
||||
static herr_t H5FD_log_truncate(H5FD_t *_file, hid_t dxpl_id, hbool_t closing);
|
||||
|
||||
static const H5FD_class_t H5FD_log_g = {
|
||||
@@ -238,19 +222,16 @@ static const H5FD_class_t H5FD_log_g = {
|
||||
H5FL_DEFINE_STATIC(H5FD_log_t);
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
NAME
|
||||
H5FD_log_init_interface -- Initialize interface-specific information
|
||||
USAGE
|
||||
herr_t H5FD_log_init_interface()
|
||||
|
||||
RETURNS
|
||||
Non-negative on success/Negative on failure
|
||||
DESCRIPTION
|
||||
Initializes any interface-specific data or routines. (Just calls
|
||||
H5FD_log_init currently).
|
||||
|
||||
--------------------------------------------------------------------------*/
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_log_init_interface
|
||||
*
|
||||
* Purpose: Initializes any interface-specific data or routines.
|
||||
*
|
||||
* Return: Success: The driver ID for the log driver.
|
||||
* Failure: Negative.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5FD_log_init_interface(void)
|
||||
{
|
||||
@@ -261,15 +242,15 @@ H5FD_log_init_interface(void)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_log_init
|
||||
* Function: H5FD_log_init
|
||||
*
|
||||
* Purpose: Initialize this driver by registering the driver with the
|
||||
* library.
|
||||
* Purpose: Initialize this driver by registering the driver with the
|
||||
* library.
|
||||
*
|
||||
* Return: Success: The driver ID for the log driver.
|
||||
* Failure: Negative.
|
||||
* Return: Success: The driver ID for the log driver.
|
||||
* Failure: Negative.
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -293,9 +274,9 @@ done:
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
* Function: H5FD_log_term
|
||||
* Function: H5FD_log_term
|
||||
*
|
||||
* Purpose: Shut down the VFD
|
||||
* Purpose: Shut down the VFD
|
||||
*
|
||||
* Returns: <none>
|
||||
*
|
||||
@@ -317,15 +298,15 @@ H5FD_log_term(void)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5Pset_fapl_log
|
||||
* Function: H5Pset_fapl_log
|
||||
*
|
||||
* Purpose: Modify the file access property list to use the H5FD_LOG
|
||||
* driver defined in this source file.
|
||||
* Purpose: Modify the file access property list to use the H5FD_LOG
|
||||
* driver defined in this source file.
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, February 19, 1998
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, February 19, 1998
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -358,17 +339,17 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_log_fapl_get
|
||||
* Function: H5FD_log_fapl_get
|
||||
*
|
||||
* Purpose: Returns a file access property list which indicates how the
|
||||
* specified file is being accessed. The return list could be
|
||||
* used to access another file the same way.
|
||||
* Purpose: Returns a file access property list which indicates how the
|
||||
* specified file is being accessed. The return list could be
|
||||
* used to access another file the same way.
|
||||
*
|
||||
* Return: Success: Ptr to new file access property list with all
|
||||
* members copied from the file struct.
|
||||
* Failure: NULL
|
||||
* Return: Success: Ptr to new file access property list with all
|
||||
* members copied from the file struct.
|
||||
* Failure: NULL
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Programmer: Quincey Koziol
|
||||
* Thursday, April 20, 2000
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -376,8 +357,8 @@ done:
|
||||
static void *
|
||||
H5FD_log_fapl_get(H5FD_t *_file)
|
||||
{
|
||||
H5FD_log_t *file = (H5FD_log_t *)_file;
|
||||
void *ret_value; /* Return value */
|
||||
H5FD_log_t *file = (H5FD_log_t *)_file;
|
||||
void *ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
@@ -389,14 +370,14 @@ H5FD_log_fapl_get(H5FD_t *_file)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_log_fapl_copy
|
||||
* Function: H5FD_log_fapl_copy
|
||||
*
|
||||
* Purpose: Copies the log-specific file access properties.
|
||||
* Purpose: Copies the log-specific file access properties.
|
||||
*
|
||||
* Return: Success: Ptr to a new property list
|
||||
* Failure: NULL
|
||||
* Return: Success: Ptr to a new property list
|
||||
* Failure: NULL
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Programmer: Quincey Koziol
|
||||
* Thursday, April 20, 2000
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -404,9 +385,9 @@ H5FD_log_fapl_get(H5FD_t *_file)
|
||||
static void *
|
||||
H5FD_log_fapl_copy(const void *_old_fa)
|
||||
{
|
||||
const H5FD_log_fapl_t *old_fa = (const H5FD_log_fapl_t*)_old_fa;
|
||||
H5FD_log_fapl_t *new_fa = NULL; /* New FAPL info */
|
||||
void *ret_value; /* Return value */
|
||||
const H5FD_log_fapl_t *old_fa = (const H5FD_log_fapl_t*)_old_fa;
|
||||
H5FD_log_fapl_t *new_fa = NULL; /* New FAPL info */
|
||||
void *ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
@@ -440,14 +421,13 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_log_fapl_free
|
||||
* Function: H5FD_log_fapl_free
|
||||
*
|
||||
* Purpose: Frees the log-specific file access properties.
|
||||
* Purpose: Frees the log-specific file access properties.
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: -1
|
||||
* Return: SUCCEED (Can't fail)
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Programmer: Quincey Koziol
|
||||
* Thursday, April 20, 2000
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -469,16 +449,16 @@ H5FD_log_fapl_free(void *_fa)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_log_open
|
||||
* Function: H5FD_log_open
|
||||
*
|
||||
* Purpose: Create and/or opens a file as an HDF5 file.
|
||||
* Purpose: Create and/or opens a file as an HDF5 file.
|
||||
*
|
||||
* Return: Success: A pointer to a new file data structure. The
|
||||
* public fields will be initialized by the
|
||||
* caller, which is always H5FD_open().
|
||||
* Failure: NULL
|
||||
* Return: Success: A pointer to a new file data structure. The
|
||||
* public fields will be initialized by the
|
||||
* caller, which is always H5FD_open().
|
||||
* Failure: NULL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -486,11 +466,11 @@ H5FD_log_fapl_free(void *_fa)
|
||||
static H5FD_t *
|
||||
H5FD_log_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
|
||||
{
|
||||
H5FD_log_t *file = NULL;
|
||||
H5P_genplist_t *plist; /* Property list */
|
||||
H5FD_log_fapl_t *fa; /* File access property list information */
|
||||
int fd = (-1); /* File descriptor */
|
||||
int o_flags; /* Flags for open() call */
|
||||
H5FD_log_t *file = NULL;
|
||||
H5P_genplist_t *plist; /* Property list */
|
||||
H5FD_log_fapl_t *fa; /* File access property list information */
|
||||
int fd = -1; /* File descriptor */
|
||||
int o_flags; /* Flags for open() call */
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
struct _BY_HANDLE_FILE_INFORMATION fileinfo;
|
||||
#endif
|
||||
@@ -499,8 +479,8 @@ H5FD_log_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
|
||||
struct timeval open_timeval_diff;
|
||||
struct timeval stat_timeval_diff;
|
||||
#endif /* H5_HAVE_GETTIMEOFDAY */
|
||||
h5_stat_t sb;
|
||||
H5FD_t *ret_value; /* Return value */
|
||||
h5_stat_t sb;
|
||||
H5FD_t *ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
@@ -677,14 +657,14 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_log_close
|
||||
* Function: H5FD_log_close
|
||||
*
|
||||
* Purpose: Closes an HDF5 file.
|
||||
* Purpose: Closes an HDF5 file.
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: -1, file not closed.
|
||||
* Return: Success: SUCCEED
|
||||
* Failure: FAIL, file not closed.
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -825,16 +805,16 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_log_cmp
|
||||
* Function: H5FD_log_cmp
|
||||
*
|
||||
* Purpose: Compares two files belonging to this driver using an
|
||||
* arbitrary (but consistent) ordering.
|
||||
* Purpose: Compares two files belonging to this driver using an
|
||||
* arbitrary (but consistent) ordering.
|
||||
*
|
||||
* Return: Success: A value like strcmp()
|
||||
* Failure: never fails (arguments were checked by the
|
||||
* caller).
|
||||
* Return: Success: A value like strcmp()
|
||||
* Failure: never fails (arguments were checked by the
|
||||
* caller).
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -842,8 +822,8 @@ done:
|
||||
static int
|
||||
H5FD_log_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
|
||||
{
|
||||
const H5FD_log_t *f1 = (const H5FD_log_t *)_f1;
|
||||
const H5FD_log_t *f2 = (const H5FD_log_t *)_f2;
|
||||
const H5FD_log_t *f1 = (const H5FD_log_t *)_f1;
|
||||
const H5FD_log_t *f2 = (const H5FD_log_t *)_f2;
|
||||
int ret_value = 0;
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
@@ -886,15 +866,14 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_log_query
|
||||
* Function: H5FD_log_query
|
||||
*
|
||||
* Purpose: Set the flags that this VFL driver is capable of supporting.
|
||||
* Purpose: Set the flags that this VFL driver is capable of supporting.
|
||||
* (listed in H5FDpublic.h)
|
||||
*
|
||||
* Return: Success: non-negative
|
||||
* Failure: negative
|
||||
* Return: SUCCEED (Can't fail)
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Programmer: Quincey Koziol
|
||||
* Friday, August 25, 2000
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -902,7 +881,7 @@ done:
|
||||
static herr_t
|
||||
H5FD_log_query(const H5FD_t *_file, unsigned long *flags /* out */)
|
||||
{
|
||||
const H5FD_log_t *file = (const H5FD_log_t *)_file;
|
||||
const H5FD_log_t *file = (const H5FD_log_t *)_file;
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
@@ -925,19 +904,18 @@ H5FD_log_query(const H5FD_t *_file, unsigned long *flags /* out */)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_log_alloc
|
||||
* Function: H5FD_log_alloc
|
||||
*
|
||||
* Purpose: Allocate file memory.
|
||||
* Purpose: Allocate file memory.
|
||||
*
|
||||
* Return: Success: Address of new memory
|
||||
* Failure: HADDR_UNDEF
|
||||
* Return: Success: Address of new memory
|
||||
* Failure: HADDR_UNDEF
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Programmer: Quincey Koziol
|
||||
* Monday, April 17, 2000
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static haddr_t
|
||||
H5FD_log_alloc(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, hsize_t size)
|
||||
{
|
||||
@@ -979,16 +957,16 @@ H5FD_log_alloc(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, hsize_t siz
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_log_get_eoa
|
||||
* Function: H5FD_log_get_eoa
|
||||
*
|
||||
* Purpose: Gets the end-of-address marker for the file. The EOA marker
|
||||
* is the first address past the last byte allocated in the
|
||||
* format address space.
|
||||
* Purpose: Gets the end-of-address marker for the file. The EOA marker
|
||||
* is the first address past the last byte allocated in the
|
||||
* format address space.
|
||||
*
|
||||
* Return: Success: The end-of-address marker.
|
||||
* Failure: HADDR_UNDEF
|
||||
* Return: Success: The end-of-address marker.
|
||||
* Failure: HADDR_UNDEF
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Monday, August 2, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -996,7 +974,7 @@ H5FD_log_alloc(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, hsize_t siz
|
||||
static haddr_t
|
||||
H5FD_log_get_eoa(const H5FD_t *_file, H5FD_mem_t UNUSED type)
|
||||
{
|
||||
const H5FD_log_t *file = (const H5FD_log_t *)_file;
|
||||
const H5FD_log_t *file = (const H5FD_log_t *)_file;
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
@@ -1005,16 +983,15 @@ H5FD_log_get_eoa(const H5FD_t *_file, H5FD_mem_t UNUSED type)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_log_set_eoa
|
||||
* Function: H5FD_log_set_eoa
|
||||
*
|
||||
* Purpose: Set the end-of-address marker for the file. This function is
|
||||
* called shortly after an existing HDF5 file is opened in order
|
||||
* to tell the driver where the end of the HDF5 data is located.
|
||||
* Purpose: Set the end-of-address marker for the file. This function is
|
||||
* called shortly after an existing HDF5 file is opened in order
|
||||
* to tell the driver where the end of the HDF5 data is located.
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: -1
|
||||
* Return: SUCCEED (Can't fail)
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -1022,25 +999,25 @@ H5FD_log_get_eoa(const H5FD_t *_file, H5FD_mem_t UNUSED type)
|
||||
static herr_t
|
||||
H5FD_log_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t addr)
|
||||
{
|
||||
H5FD_log_t *file = (H5FD_log_t *)_file;
|
||||
H5FD_log_t *file = (H5FD_log_t *)_file;
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
if(file->fa.flags != 0) {
|
||||
if(H5F_addr_gt(addr, file->eoa) && H5F_addr_gt(addr, 0)) {
|
||||
hsize_t size = addr - file->eoa;
|
||||
if(H5F_addr_gt(addr, file->eoa) && H5F_addr_gt(addr, 0)) {
|
||||
hsize_t size = addr - file->eoa;
|
||||
|
||||
/* Retain the flavor of the space allocated by the extension */
|
||||
if(file->fa.flags & H5FD_LOG_FLAVOR) {
|
||||
HDassert(addr < file->iosize);
|
||||
H5_CHECK_OVERFLOW(size, hsize_t, size_t);
|
||||
HDmemset(&file->flavor[file->eoa], (int)type, (size_t)size);
|
||||
} /* end if */
|
||||
if(file->fa.flags & H5FD_LOG_FLAVOR) {
|
||||
HDassert(addr < file->iosize);
|
||||
H5_CHECK_OVERFLOW(size, hsize_t, size_t);
|
||||
HDmemset(&file->flavor[file->eoa], (int)type, (size_t)size);
|
||||
} /* end if */
|
||||
|
||||
/* Log the extension like an allocation */
|
||||
if(file->fa.flags & H5FD_LOG_ALLOC)
|
||||
HDfprintf(file->logfp, "%10a-%10a (%10Hu bytes) (%s) Allocated\n", file->eoa, addr, size, flavors[type]);
|
||||
} /* end if */
|
||||
if(file->fa.flags & H5FD_LOG_ALLOC)
|
||||
HDfprintf(file->logfp, "%10a-%10a (%10Hu bytes) (%s) Allocated\n", file->eoa, addr, size, flavors[type]);
|
||||
} /* end if */
|
||||
} /* end if */
|
||||
|
||||
file->eoa = addr;
|
||||
@@ -1050,18 +1027,18 @@ H5FD_log_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t addr)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_log_get_eof
|
||||
* Function: H5FD_log_get_eof
|
||||
*
|
||||
* Purpose: Returns the end-of-file marker, which is the greater of
|
||||
* either the filesystem end-of-file or the HDF5 end-of-address
|
||||
* markers.
|
||||
* Purpose: Returns the end-of-file marker, which is the greater of
|
||||
* either the filesystem end-of-file or the HDF5 end-of-address
|
||||
* markers.
|
||||
*
|
||||
* Return: Success: End of file address, the first address past
|
||||
* the end of the "file", either the filesystem file
|
||||
* or the HDF5 file.
|
||||
* Failure: HADDR_UNDEF
|
||||
* Return: Success: End of file address, the first address past
|
||||
* the end of the "file", either the filesystem file
|
||||
* or the HDF5 file.
|
||||
* Failure: HADDR_UNDEF
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -1082,14 +1059,13 @@ H5FD_log_get_eof(const H5FD_t *_file)
|
||||
*
|
||||
* Purpose: Returns the file handle of LOG file driver.
|
||||
*
|
||||
* Returns: Non-negative if succeed or negative if fails.
|
||||
* Returns: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Raymond Lu
|
||||
* Sept. 16, 2002
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static herr_t
|
||||
H5FD_log_get_handle(H5FD_t *_file, hid_t UNUSED fapl, void **file_handle)
|
||||
{
|
||||
@@ -1109,27 +1085,26 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_log_read
|
||||
* Function: H5FD_log_read
|
||||
*
|
||||
* Purpose: Reads SIZE bytes of data from FILE beginning at address ADDR
|
||||
* into buffer BUF according to data transfer properties in
|
||||
* DXPL_ID.
|
||||
* Purpose: Reads SIZE bytes of data from FILE beginning at address ADDR
|
||||
* into buffer BUF according to data transfer properties in
|
||||
* DXPL_ID.
|
||||
*
|
||||
* Return: Success: Zero. Result is stored in caller-supplied
|
||||
* buffer BUF.
|
||||
* Failure: -1, Contents of buffer BUF are undefined.
|
||||
* Return: Success: SUCCEED. Result is stored in caller-supplied
|
||||
* buffer BUF.
|
||||
* Failure: FAIL, Contents of buffer BUF are undefined.
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static herr_t
|
||||
H5FD_log_read(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, haddr_t addr,
|
||||
size_t size, void *buf/*out*/)
|
||||
size_t size, void *buf/*out*/)
|
||||
{
|
||||
H5FD_log_t *file = (H5FD_log_t *)_file;
|
||||
H5FD_log_t *file = (H5FD_log_t *)_file;
|
||||
size_t orig_size = size; /* Save the original size for later */
|
||||
haddr_t orig_addr = addr;
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
@@ -1217,16 +1192,16 @@ H5FD_log_read(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, haddr_t addr
|
||||
#endif /* H5_HAVE_GETTIMEOFDAY */
|
||||
while(size > 0) {
|
||||
|
||||
h5_log_io_t bytes_in = 0; /* # of bytes to read */
|
||||
h5_log_io_ret_t bytes_read = -1; /* # of bytes actually read */
|
||||
h5_posix_io_t bytes_in = 0; /* # of bytes to read */
|
||||
h5_posix_io_ret_t bytes_read = -1; /* # of bytes actually read */
|
||||
|
||||
/* Trying to read more bytes than the return type can handle is
|
||||
* undefined behavior in POSIX.
|
||||
*/
|
||||
if(size > H5_LOG_MAX_IO_BYTES_g)
|
||||
bytes_in = H5_LOG_MAX_IO_BYTES_g;
|
||||
if(size > H5_POSIX_MAX_IO_BYTES)
|
||||
bytes_in = H5_POSIX_MAX_IO_BYTES;
|
||||
else
|
||||
bytes_in = (h5_log_io_t)size;
|
||||
bytes_in = (h5_posix_io_t)size;
|
||||
|
||||
do {
|
||||
bytes_read = HDread(file->fd, buf, bytes_in);
|
||||
@@ -1240,7 +1215,7 @@ H5FD_log_read(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, haddr_t addr
|
||||
if(file->fa.flags & H5FD_LOG_LOC_READ)
|
||||
HDfprintf(file->logfp, "Error! Reading: %10a-%10a (%10Zu bytes)\n", orig_addr, (orig_addr + orig_size) - 1, orig_size);
|
||||
|
||||
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, error message = '%s', buf = %p, size = %lu, offset = %llu", HDctime(&mytime), file->filename, file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long)size, (unsigned long long)myoffset);
|
||||
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, error message = '%s', buf = %p, total read size = %llu, bytes this sub-read = %llu, bytes actually read = %llu, offset = %llu", HDctime(&mytime), file->filename, file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long long)size, (unsigned long long)bytes_in, (unsigned long long)bytes_read, (unsigned long long)myoffset);
|
||||
} /* end if */
|
||||
|
||||
if(0 == bytes_read) {
|
||||
@@ -1311,26 +1286,24 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_log_write
|
||||
* Function: H5FD_log_write
|
||||
*
|
||||
* Purpose: Writes SIZE bytes of data to FILE beginning at address ADDR
|
||||
* from buffer BUF according to data transfer properties in
|
||||
* DXPL_ID.
|
||||
* Purpose: Writes SIZE bytes of data to FILE beginning at address ADDR
|
||||
* from buffer BUF according to data transfer properties in
|
||||
* DXPL_ID.
|
||||
*
|
||||
* Return: Success: Zero
|
||||
* Failure: -1
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static herr_t
|
||||
H5FD_log_write(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, haddr_t addr,
|
||||
size_t size, const void *buf)
|
||||
size_t size, const void *buf)
|
||||
{
|
||||
H5FD_log_t *file = (H5FD_log_t *)_file;
|
||||
H5FD_log_t *file = (H5FD_log_t *)_file;
|
||||
size_t orig_size = size; /* Save the original size for later */
|
||||
haddr_t orig_addr = addr;
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
@@ -1423,16 +1396,16 @@ H5FD_log_write(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, haddr_t add
|
||||
#endif /* H5_HAVE_GETTIMEOFDAY */
|
||||
while(size > 0) {
|
||||
|
||||
h5_log_io_t bytes_in = 0; /* # of bytes to write */
|
||||
h5_log_io_ret_t bytes_wrote = -1; /* # of bytes written */
|
||||
h5_posix_io_t bytes_in = 0; /* # of bytes to write */
|
||||
h5_posix_io_ret_t bytes_wrote = -1; /* # of bytes written */
|
||||
|
||||
/* Trying to write more bytes than the return type can handle is
|
||||
* undefined behavior in POSIX.
|
||||
*/
|
||||
if(size > H5_LOG_MAX_IO_BYTES_g)
|
||||
bytes_in = H5_LOG_MAX_IO_BYTES_g;
|
||||
if(size > H5_POSIX_MAX_IO_BYTES)
|
||||
bytes_in = H5_POSIX_MAX_IO_BYTES;
|
||||
else
|
||||
bytes_in = (h5_log_io_t)size;
|
||||
bytes_in = (h5_posix_io_t)size;
|
||||
|
||||
do {
|
||||
bytes_wrote = HDwrite(file->fd, buf, bytes_in);
|
||||
@@ -1446,7 +1419,7 @@ H5FD_log_write(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, haddr_t add
|
||||
if(file->fa.flags & H5FD_LOG_LOC_WRITE)
|
||||
HDfprintf(file->logfp, "Error! Writing: %10a-%10a (%10Zu bytes)\n", orig_addr, (orig_addr + orig_size) - 1, orig_size);
|
||||
|
||||
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, error message = '%s', buf = %p, size = %lu, offset = %llu", HDctime(&mytime), file->filename, file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long)size, (unsigned long long)myoffset);
|
||||
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, error message = '%s', buf = %p, total write size = %llu, bytes this sub-write = %llu, bytes actually written = %llu, offset = %llu", HDctime(&mytime), file->filename, file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long long)size, (unsigned long long)bytes_in, (unsigned long long)bytes_wrote, (unsigned long long)myoffset);
|
||||
} /* end if */
|
||||
|
||||
HDassert(bytes_wrote > 0);
|
||||
@@ -1516,25 +1489,23 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_log_truncate
|
||||
* Function: H5FD_log_truncate
|
||||
*
|
||||
* Purpose: Makes sure that the true file size is the same (or larger)
|
||||
* than the end-of-address.
|
||||
* Purpose: Makes sure that the true file size is the same (or larger)
|
||||
* than the end-of-address.
|
||||
*
|
||||
* Return: Success: Non-negative
|
||||
* Failure: Negative
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Wednesday, August 4, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static herr_t
|
||||
H5FD_log_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
|
||||
{
|
||||
H5FD_log_t *file = (H5FD_log_t *)_file;
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
H5FD_log_t *file = (H5FD_log_t *)_file;
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
@@ -1595,4 +1566,3 @@ H5FD_log_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5FD_log_truncate() */
|
||||
|
||||
|
||||
@@ -71,21 +71,6 @@
|
||||
*/
|
||||
static hid_t H5FD_MPIPOSIX_g = 0;
|
||||
|
||||
/* Since Windows doesn't follow the rest of the world when it comes
|
||||
* to POSIX I/O types, some typedefs and constants are needed to avoid
|
||||
* making the code messy with #ifdefs.
|
||||
*/
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
typedef unsigned int h5_mpiposix_io_t;
|
||||
typedef int h5_mpiposix_io_ret_t;
|
||||
static int H5_MPIPOSIX_MAX_IO_BYTES_g = INT_MAX;
|
||||
#else
|
||||
/* Unix, everyone else */
|
||||
typedef size_t h5_mpiposix_io_t;
|
||||
typedef ssize_t h5_mpiposix_io_ret_t;
|
||||
static size_t H5_MPIPOSIX_MAX_IO_BYTES_g = SSIZET_MAX;
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
|
||||
/*
|
||||
* The description of a file belonging to this driver.
|
||||
* The EOF value is only used just after the file is opened in order for the
|
||||
@@ -236,19 +221,16 @@ static const H5FD_class_mpi_t H5FD_mpiposix_g = {
|
||||
};
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
NAME
|
||||
H5FD_mpiposix_init_interface -- Initialize interface-specific information
|
||||
USAGE
|
||||
herr_t H5FD_mpiposix_init_interface()
|
||||
|
||||
RETURNS
|
||||
Non-negative on success/Negative on failure
|
||||
DESCRIPTION
|
||||
Initializes any interface-specific data or routines. (Just calls
|
||||
H5FD_mpiposix_init currently).
|
||||
|
||||
--------------------------------------------------------------------------*/
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_mpiposix_init_interface
|
||||
*
|
||||
* Purpose: Initializes any interface-specific data or routines.
|
||||
*
|
||||
* Return: Success: The driver ID for the mpiposix driver.
|
||||
* Failure: Negative.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5FD_mpiposix_init_interface(void)
|
||||
{
|
||||
@@ -1079,16 +1061,16 @@ H5FD_mpiposix_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id,
|
||||
*/
|
||||
while(size > 0) {
|
||||
|
||||
h5_mpiposix_io_t bytes_in = 0; /* # of bytes to read */
|
||||
h5_mpiposix_io_ret_t bytes_read = -1; /* # of bytes actually read */
|
||||
h5_posix_io_t bytes_in = 0; /* # of bytes to read */
|
||||
h5_posix_io_ret_t bytes_read = -1; /* # of bytes actually read */
|
||||
|
||||
/* Trying to read more bytes than the return type can handle is
|
||||
* undefined behavior in POSIX.
|
||||
*/
|
||||
if(size > H5_MPIPOSIX_MAX_IO_BYTES_g)
|
||||
bytes_in = H5_MPIPOSIX_MAX_IO_BYTES_g;
|
||||
if(size > H5_POSIX_MAX_IO_BYTES)
|
||||
bytes_in = H5_POSIX_MAX_IO_BYTES;
|
||||
else
|
||||
bytes_in = (h5_mpiposix_io_t)size;
|
||||
bytes_in = (h5_posix_io_t)size;
|
||||
|
||||
do {
|
||||
bytes_read = HDread(file->fd, buf, bytes_in);
|
||||
@@ -1099,7 +1081,7 @@ H5FD_mpiposix_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id,
|
||||
time_t mytime = HDtime(NULL);
|
||||
HDoff_t myoffset = HDlseek(file->fd, (HDoff_t)0, SEEK_CUR);
|
||||
|
||||
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed: time = %s, file descriptor = %d, errno = %d, error message = '%s', buf = %p, size = %lu, offset = %llu", HDctime(&mytime), file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long)size, (unsigned long long)myoffset);
|
||||
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed: time = %s, file descriptor = %d, errno = %d, error message = '%s', buf = %p, total read size = %llu, bytes this sub-read = %llu, bytes actually read = %llu, offset = %llu", HDctime(&mytime), file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long long)size, (unsigned long long)bytes_in, (unsigned long long)bytes_read, (unsigned long long)myoffset);
|
||||
} /* end if */
|
||||
|
||||
if(0 == bytes_read) {
|
||||
@@ -1263,16 +1245,16 @@ H5FD_mpiposix_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
|
||||
*/
|
||||
while(size > 0) {
|
||||
|
||||
h5_mpiposix_io_t bytes_in = 0; /* # of bytes to write */
|
||||
h5_mpiposix_io_ret_t bytes_wrote = -1; /* # of bytes actually written */
|
||||
h5_posix_io_t bytes_in = 0; /* # of bytes to write */
|
||||
h5_posix_io_ret_t bytes_wrote = -1; /* # of bytes actually written */
|
||||
|
||||
/* Trying to write more bytes than the return type can handle is
|
||||
* undefined behavior in POSIX.
|
||||
*/
|
||||
if(size > H5_MPIPOSIX_MAX_IO_BYTES_g)
|
||||
bytes_in = H5_MPIPOSIX_MAX_IO_BYTES_g;
|
||||
if(size > H5_POSIX_MAX_IO_BYTES)
|
||||
bytes_in = H5_POSIX_MAX_IO_BYTES;
|
||||
else
|
||||
bytes_in = (h5_mpiposix_io_t)size;
|
||||
bytes_in = (h5_posix_io_t)size;
|
||||
|
||||
do {
|
||||
bytes_wrote = HDwrite(file->fd, buf, bytes_in);
|
||||
@@ -1283,7 +1265,7 @@ H5FD_mpiposix_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
|
||||
time_t mytime = HDtime(NULL);
|
||||
HDoff_t myoffset = HDlseek(file->fd, (HDoff_t)0, SEEK_CUR);
|
||||
|
||||
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file write failed: time = %s, file descriptor = %d, errno = %d, error message = '%s', buf = %p, size = %lu, offset = %llu", HDctime(&mytime), file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long)size, (unsigned long long)myoffset);
|
||||
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file write failed: time = %s, file descriptor = %d, errno = %d, error message = '%s', buf = %p, total write size = %llu, bytes this sub-write = %llu, bytes actually written = %llu, offset = %llu", HDctime(&mytime), file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long long)size, (unsigned long long)bytes_in, (unsigned long long)bytes_wrote, (unsigned long long)myoffset);
|
||||
} /* end if */
|
||||
|
||||
if(0 == bytes_wrote) {
|
||||
|
||||
377
src/H5FDsec2.c
377
src/H5FDsec2.c
@@ -17,56 +17,41 @@
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
* Purpose: The POSIX unbuffered file driver using only the HDF5 public
|
||||
* API and with a few optimizations: the lseek() call is made
|
||||
* only when the current file position is unknown or needs to be
|
||||
* changed based on previous I/O through this driver (don't mix
|
||||
* I/O from this driver with I/O from other parts of the
|
||||
* application to the same file).
|
||||
* Purpose: The POSIX unbuffered file driver using only the HDF5 public
|
||||
* API and with a few optimizations: the lseek() call is made
|
||||
* only when the current file position is unknown or needs to be
|
||||
* changed based on previous I/O through this driver (don't mix
|
||||
* I/O from this driver with I/O from other parts of the
|
||||
* application to the same file).
|
||||
*/
|
||||
|
||||
/* Interface initialization */
|
||||
#define H5_INTERFACE_INIT_FUNC H5FD_sec2_init_interface
|
||||
#define H5_INTERFACE_INIT_FUNC H5FD_sec2_init_interface
|
||||
|
||||
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Fprivate.h" /* File access */
|
||||
#include "H5FDprivate.h" /* File drivers */
|
||||
#include "H5FDsec2.h" /* Sec2 file driver */
|
||||
#include "H5FLprivate.h" /* Free Lists */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
#include "H5MMprivate.h" /* Memory management */
|
||||
#include "H5Pprivate.h" /* Property lists */
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Fprivate.h" /* File access */
|
||||
#include "H5FDprivate.h" /* File drivers */
|
||||
#include "H5FDsec2.h" /* Sec2 file driver */
|
||||
#include "H5FLprivate.h" /* Free Lists */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
#include "H5MMprivate.h" /* Memory management */
|
||||
#include "H5Pprivate.h" /* Property lists */
|
||||
|
||||
/* The driver identification number, initialized at runtime */
|
||||
static hid_t H5FD_SEC2_g = 0;
|
||||
|
||||
/* Since Windows doesn't follow the rest of the world when it comes
|
||||
* to POSIX I/O types, some typedefs and constants are needed to avoid
|
||||
* making the code messy with #ifdefs.
|
||||
*/
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
typedef unsigned int h5_sec2_io_t;
|
||||
typedef int h5_sec2_io_ret_t;
|
||||
static int H5_SEC2_MAX_IO_BYTES_g = INT_MAX;
|
||||
#else
|
||||
/* Unix, everyone else */
|
||||
typedef size_t h5_sec2_io_t;
|
||||
typedef ssize_t h5_sec2_io_ret_t;
|
||||
static size_t H5_SEC2_MAX_IO_BYTES_g = SSIZET_MAX;
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
|
||||
/* The description of a file belonging to this driver. The `eoa' and `eof'
|
||||
/* The description of a file belonging to this driver. The 'eoa' and 'eof'
|
||||
* determine the amount of hdf5 address space in use and the high-water mark
|
||||
* of the file (the current size of the underlying filesystem file). The
|
||||
* `pos' value is used to eliminate file position updates when they would be a
|
||||
* 'pos' value is used to eliminate file position updates when they would be a
|
||||
* no-op. Unfortunately we've found systems that use separate file position
|
||||
* indicators for reading and writing so the lseek can only be eliminated if
|
||||
* the current operation is the same as the previous operation. When opening
|
||||
* a file the `eof' will be set to the current file size, `eoa' will be set
|
||||
* to zero, `pos' will be set to H5F_ADDR_UNDEF (as it is when an error
|
||||
* occurs), and `op' will be set to H5F_OP_UNKNOWN.
|
||||
* a file the 'eof' will be set to the current file size, `eoa' will be set
|
||||
* to zero, 'pos' will be set to H5F_ADDR_UNDEF (as it is when an error
|
||||
* occurs), and 'op' will be set to H5F_OP_UNKNOWN.
|
||||
*/
|
||||
typedef struct H5FD_sec2_t {
|
||||
H5FD_t pub; /* public stuff, must be first */
|
||||
@@ -123,28 +108,27 @@ typedef struct H5FD_sec2_t {
|
||||
* These macros check for overflow of various quantities. These macros
|
||||
* assume that HDoff_t is signed and haddr_t and size_t are unsigned.
|
||||
*
|
||||
* ADDR_OVERFLOW: Checks whether a file address of type `haddr_t'
|
||||
* is too large to be represented by the second argument
|
||||
* of the file seek function.
|
||||
* ADDR_OVERFLOW: Checks whether a file address of type `haddr_t'
|
||||
* is too large to be represented by the second argument
|
||||
* of the file seek function.
|
||||
*
|
||||
* SIZE_OVERFLOW: Checks whether a buffer size of type `hsize_t' is too
|
||||
* large to be represented by the `size_t' type.
|
||||
* SIZE_OVERFLOW: Checks whether a buffer size of type `hsize_t' is too
|
||||
* large to be represented by the `size_t' type.
|
||||
*
|
||||
* REGION_OVERFLOW: Checks whether an address and size pair describe data
|
||||
* which can be addressed entirely by the second
|
||||
* argument of the file seek function.
|
||||
* REGION_OVERFLOW: Checks whether an address and size pair describe data
|
||||
* which can be addressed entirely by the second
|
||||
* argument of the file seek function.
|
||||
*/
|
||||
#define MAXADDR (((haddr_t)1<<(8*sizeof(HDoff_t)-1))-1)
|
||||
#define ADDR_OVERFLOW(A) (HADDR_UNDEF==(A) || \
|
||||
((A) & ~(haddr_t)MAXADDR))
|
||||
#define SIZE_OVERFLOW(Z) ((Z) & ~(hsize_t)MAXADDR)
|
||||
#define REGION_OVERFLOW(A,Z) (ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) || \
|
||||
HADDR_UNDEF==(A)+(Z) || \
|
||||
(HDoff_t)((A)+(Z))<(HDoff_t)(A))
|
||||
#define ADDR_OVERFLOW(A) (HADDR_UNDEF==(A) || ((A) & ~(haddr_t)MAXADDR))
|
||||
#define SIZE_OVERFLOW(Z) ((Z) & ~(hsize_t)MAXADDR)
|
||||
#define REGION_OVERFLOW(A,Z) (ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) || \
|
||||
HADDR_UNDEF==(A)+(Z) || \
|
||||
(HDoff_t)((A)+(Z))<(HDoff_t)(A))
|
||||
|
||||
/* Prototypes */
|
||||
static H5FD_t *H5FD_sec2_open(const char *name, unsigned flags, hid_t fapl_id,
|
||||
haddr_t maxaddr);
|
||||
haddr_t maxaddr);
|
||||
static herr_t H5FD_sec2_close(H5FD_t *_file);
|
||||
static int H5FD_sec2_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
|
||||
static herr_t H5FD_sec2_query(const H5FD_t *_f1, unsigned long *flags);
|
||||
@@ -153,62 +137,59 @@ static herr_t H5FD_sec2_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t addr);
|
||||
static haddr_t H5FD_sec2_get_eof(const H5FD_t *_file);
|
||||
static herr_t H5FD_sec2_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
|
||||
static herr_t H5FD_sec2_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
|
||||
size_t size, void *buf);
|
||||
size_t size, void *buf);
|
||||
static herr_t H5FD_sec2_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
|
||||
size_t size, const void *buf);
|
||||
size_t size, const void *buf);
|
||||
static herr_t H5FD_sec2_truncate(H5FD_t *_file, hid_t dxpl_id, hbool_t closing);
|
||||
|
||||
static const H5FD_class_t H5FD_sec2_g = {
|
||||
"sec2", /*name */
|
||||
MAXADDR, /*maxaddr */
|
||||
H5F_CLOSE_WEAK, /* fc_degree */
|
||||
NULL, /*sb_size */
|
||||
NULL, /*sb_encode */
|
||||
NULL, /*sb_decode */
|
||||
0, /*fapl_size */
|
||||
NULL, /*fapl_get */
|
||||
NULL, /*fapl_copy */
|
||||
NULL, /*fapl_free */
|
||||
0, /*dxpl_size */
|
||||
NULL, /*dxpl_copy */
|
||||
NULL, /*dxpl_free */
|
||||
H5FD_sec2_open, /*open */
|
||||
H5FD_sec2_close, /*close */
|
||||
H5FD_sec2_cmp, /*cmp */
|
||||
H5FD_sec2_query, /*query */
|
||||
NULL, /*get_type_map */
|
||||
NULL, /*alloc */
|
||||
NULL, /*free */
|
||||
H5FD_sec2_get_eoa, /*get_eoa */
|
||||
H5FD_sec2_set_eoa, /*set_eoa */
|
||||
H5FD_sec2_get_eof, /*get_eof */
|
||||
H5FD_sec2_get_handle, /*get_handle */
|
||||
H5FD_sec2_read, /*read */
|
||||
H5FD_sec2_write, /*write */
|
||||
NULL, /*flush */
|
||||
H5FD_sec2_truncate, /*truncate */
|
||||
NULL, /*lock */
|
||||
NULL, /*unlock */
|
||||
H5FD_FLMAP_DICHOTOMY /*fl_map */
|
||||
"sec2", /* name */
|
||||
MAXADDR, /* maxaddr */
|
||||
H5F_CLOSE_WEAK, /* fc_degree */
|
||||
NULL, /* sb_size */
|
||||
NULL, /* sb_encode */
|
||||
NULL, /* sb_decode */
|
||||
0, /* fapl_size */
|
||||
NULL, /* fapl_get */
|
||||
NULL, /* fapl_copy */
|
||||
NULL, /* fapl_free */
|
||||
0, /* dxpl_size */
|
||||
NULL, /* dxpl_copy */
|
||||
NULL, /* dxpl_free */
|
||||
H5FD_sec2_open, /* open */
|
||||
H5FD_sec2_close, /* close */
|
||||
H5FD_sec2_cmp, /* cmp */
|
||||
H5FD_sec2_query, /* query */
|
||||
NULL, /* get_type_map */
|
||||
NULL, /* alloc */
|
||||
NULL, /* free */
|
||||
H5FD_sec2_get_eoa, /* get_eoa */
|
||||
H5FD_sec2_set_eoa, /* set_eoa */
|
||||
H5FD_sec2_get_eof, /* get_eof */
|
||||
H5FD_sec2_get_handle, /* get_handle */
|
||||
H5FD_sec2_read, /* read */
|
||||
H5FD_sec2_write, /* write */
|
||||
NULL, /* flush */
|
||||
H5FD_sec2_truncate, /* truncate */
|
||||
NULL, /* lock */
|
||||
NULL, /* unlock */
|
||||
H5FD_FLMAP_DICHOTOMY /* fl_map */
|
||||
};
|
||||
|
||||
/* Declare a free list to manage the H5FD_sec2_t struct */
|
||||
H5FL_DEFINE_STATIC(H5FD_sec2_t);
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
NAME
|
||||
H5FD_sec2_init_interface -- Initialize interface-specific information
|
||||
USAGE
|
||||
herr_t H5FD_sec2_init_interface()
|
||||
|
||||
RETURNS
|
||||
Non-negative on success/Negative on failure
|
||||
DESCRIPTION
|
||||
Initializes any interface-specific data or routines. (Just calls
|
||||
H5FD_sec2_init currently).
|
||||
|
||||
--------------------------------------------------------------------------*/
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_sec2_init_interface
|
||||
*
|
||||
* Purpose: Initializes any interface-specific data or routines.
|
||||
*
|
||||
* Return: Success: The driver ID for the sec2 driver.
|
||||
* Failure: Negative
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5FD_sec2_init_interface(void)
|
||||
{
|
||||
@@ -219,15 +200,15 @@ H5FD_sec2_init_interface(void)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_sec2_init
|
||||
* Function: H5FD_sec2_init
|
||||
*
|
||||
* Purpose: Initialize this driver by registering the driver with the
|
||||
* library.
|
||||
* Purpose: Initialize this driver by registering the driver with the
|
||||
* library.
|
||||
*
|
||||
* Return: Success: The driver ID for the sec2 driver.
|
||||
* Failure: Negative.
|
||||
* Return: Success: The driver ID for the sec2 driver.
|
||||
* Failure: Negative
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -251,9 +232,9 @@ done:
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
* Function: H5FD_sec2_term
|
||||
* Function: H5FD_sec2_term
|
||||
*
|
||||
* Purpose: Shut down the VFD
|
||||
* Purpose: Shut down the VFD
|
||||
*
|
||||
* Returns: <none>
|
||||
*
|
||||
@@ -275,16 +256,16 @@ H5FD_sec2_term(void)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5Pset_fapl_sec2
|
||||
* Function: H5Pset_fapl_sec2
|
||||
*
|
||||
* Purpose: Modify the file access property list to use the H5FD_SEC2
|
||||
* driver defined in this source file. There are no driver
|
||||
* specific properties.
|
||||
* Purpose: Modify the file access property list to use the H5FD_SEC2
|
||||
* driver defined in this source file. There are no driver
|
||||
* specific properties.
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, February 19, 1998
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, February 19, 1998
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -308,16 +289,16 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_sec2_open
|
||||
* Function: H5FD_sec2_open
|
||||
*
|
||||
* Purpose: Create and/or opens a file as an HDF5 file.
|
||||
* Purpose: Create and/or opens a file as an HDF5 file.
|
||||
*
|
||||
* Return: Success: A pointer to a new file data structure. The
|
||||
* public fields will be initialized by the
|
||||
* caller, which is always H5FD_open().
|
||||
* Failure: NULL
|
||||
* Return: Success: A pointer to a new file data structure. The
|
||||
* public fields will be initialized by the
|
||||
* caller, which is always H5FD_open().
|
||||
* Failure: NULL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -433,14 +414,14 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_sec2_close
|
||||
* Function: H5FD_sec2_close
|
||||
*
|
||||
* Purpose: Closes an HDF5 file.
|
||||
* Purpose: Closes an HDF5 file.
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: -1, file not closed.
|
||||
* Return: Success: SUCCEED
|
||||
* Failure: FAIL, file not closed.
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -448,8 +429,8 @@ done:
|
||||
static herr_t
|
||||
H5FD_sec2_close(H5FD_t *_file)
|
||||
{
|
||||
H5FD_sec2_t *file = (H5FD_sec2_t *)_file;
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
H5FD_sec2_t *file = (H5FD_sec2_t *)_file;
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
@@ -469,16 +450,16 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_sec2_cmp
|
||||
* Function: H5FD_sec2_cmp
|
||||
*
|
||||
* Purpose: Compares two files belonging to this driver using an
|
||||
* arbitrary (but consistent) ordering.
|
||||
* Purpose: Compares two files belonging to this driver using an
|
||||
* arbitrary (but consistent) ordering.
|
||||
*
|
||||
* Return: Success: A value like strcmp()
|
||||
* Failure: never fails (arguments were checked by the
|
||||
* caller).
|
||||
* Return: Success: A value like strcmp()
|
||||
* Failure: never fails (arguments were checked by the
|
||||
* caller).
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -486,8 +467,8 @@ done:
|
||||
static int
|
||||
H5FD_sec2_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
|
||||
{
|
||||
const H5FD_sec2_t *f1 = (const H5FD_sec2_t *)_f1;
|
||||
const H5FD_sec2_t *f2 = (const H5FD_sec2_t *)_f2;
|
||||
const H5FD_sec2_t *f1 = (const H5FD_sec2_t *)_f1;
|
||||
const H5FD_sec2_t *f2 = (const H5FD_sec2_t *)_f2;
|
||||
int ret_value = 0;
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
@@ -528,15 +509,14 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_sec2_query
|
||||
* Function: H5FD_sec2_query
|
||||
*
|
||||
* Purpose: Set the flags that this VFL driver is capable of supporting.
|
||||
* Purpose: Set the flags that this VFL driver is capable of supporting.
|
||||
* (listed in H5FDpublic.h)
|
||||
*
|
||||
* Return: Success: non-negative
|
||||
* Failure: negative
|
||||
* Return: SUCCEED (Can't fail)
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Programmer: Quincey Koziol
|
||||
* Friday, August 25, 2000
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -567,21 +547,19 @@ H5FD_sec2_query(const H5FD_t *_file, unsigned long *flags /* out */)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_sec2_get_eoa
|
||||
* Function: H5FD_sec2_get_eoa
|
||||
*
|
||||
* Purpose: Gets the end-of-address marker for the file. The EOA marker
|
||||
* is the first address past the last byte allocated in the
|
||||
* format address space.
|
||||
* Purpose: Gets the end-of-address marker for the file. The EOA marker
|
||||
* is the first address past the last byte allocated in the
|
||||
* format address space.
|
||||
*
|
||||
* Return: Success: The end-of-address marker.
|
||||
* Failure: HADDR_UNDEF
|
||||
* Return: The end-of-address marker.
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Monday, August 2, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static haddr_t
|
||||
H5FD_sec2_get_eoa(const H5FD_t *_file, H5FD_mem_t UNUSED type)
|
||||
{
|
||||
@@ -594,21 +572,19 @@ H5FD_sec2_get_eoa(const H5FD_t *_file, H5FD_mem_t UNUSED type)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_sec2_set_eoa
|
||||
* Function: H5FD_sec2_set_eoa
|
||||
*
|
||||
* Purpose: Set the end-of-address marker for the file. This function is
|
||||
* called shortly after an existing HDF5 file is opened in order
|
||||
* to tell the driver where the end of the HDF5 data is located.
|
||||
* Purpose: Set the end-of-address marker for the file. This function is
|
||||
* called shortly after an existing HDF5 file is opened in order
|
||||
* to tell the driver where the end of the HDF5 data is located.
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: -1
|
||||
* Return: SUCCEED (Can't fail)
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static herr_t
|
||||
H5FD_sec2_set_eoa(H5FD_t *_file, H5FD_mem_t UNUSED type, haddr_t addr)
|
||||
{
|
||||
@@ -623,18 +599,16 @@ H5FD_sec2_set_eoa(H5FD_t *_file, H5FD_mem_t UNUSED type, haddr_t addr)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_sec2_get_eof
|
||||
* Function: H5FD_sec2_get_eof
|
||||
*
|
||||
* Purpose: Returns the end-of-file marker, which is the greater of
|
||||
* either the filesystem end-of-file or the HDF5 end-of-address
|
||||
* markers.
|
||||
* Purpose: Returns the end-of-file marker, which is the greater of
|
||||
* either the filesystem end-of-file or the HDF5 end-of-address
|
||||
* markers.
|
||||
*
|
||||
* Return: Success: End of file address, the first address past
|
||||
* the end of the "file", either the filesystem file
|
||||
* or the HDF5 file.
|
||||
* Failure: HADDR_UNDEF
|
||||
* Return: End of file address, the first address past the end of the
|
||||
* "file", either the filesystem file or the HDF5 file.
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
@@ -642,7 +616,7 @@ H5FD_sec2_set_eoa(H5FD_t *_file, H5FD_mem_t UNUSED type, haddr_t addr)
|
||||
static haddr_t
|
||||
H5FD_sec2_get_eof(const H5FD_t *_file)
|
||||
{
|
||||
const H5FD_sec2_t *file = (const H5FD_sec2_t *)_file;
|
||||
const H5FD_sec2_t *file = (const H5FD_sec2_t *)_file;
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
@@ -655,14 +629,13 @@ H5FD_sec2_get_eof(const H5FD_t *_file)
|
||||
*
|
||||
* Purpose: Returns the file handle of sec2 file driver.
|
||||
*
|
||||
* Returns: Non-negative if succeed or negative if fails.
|
||||
* Returns: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Raymond Lu
|
||||
* Sept. 16, 2002
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static herr_t
|
||||
H5FD_sec2_get_handle(H5FD_t *_file, hid_t UNUSED fapl, void **file_handle)
|
||||
{
|
||||
@@ -682,22 +655,21 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_sec2_read
|
||||
* Function: H5FD_sec2_read
|
||||
*
|
||||
* Purpose: Reads SIZE bytes of data from FILE beginning at address ADDR
|
||||
* into buffer BUF according to data transfer properties in
|
||||
* DXPL_ID.
|
||||
* Purpose: Reads SIZE bytes of data from FILE beginning at address ADDR
|
||||
* into buffer BUF according to data transfer properties in
|
||||
* DXPL_ID.
|
||||
*
|
||||
* Return: Success: Zero. Result is stored in caller-supplied
|
||||
* buffer BUF.
|
||||
* Failure: -1, Contents of buffer BUF are undefined.
|
||||
* Return: Success: SUCCEED. Result is stored in caller-supplied
|
||||
* buffer BUF.
|
||||
* Failure: FAIL, Contents of buffer BUF are undefined.
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static herr_t
|
||||
H5FD_sec2_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id,
|
||||
haddr_t addr, size_t size, void *buf /*out*/)
|
||||
@@ -730,16 +702,16 @@ H5FD_sec2_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id,
|
||||
*/
|
||||
while(size > 0) {
|
||||
|
||||
h5_sec2_io_t bytes_in = 0; /* # of bytes to read */
|
||||
h5_sec2_io_ret_t bytes_read = -1; /* # of bytes actually read */
|
||||
h5_posix_io_t bytes_in = 0; /* # of bytes to read */
|
||||
h5_posix_io_ret_t bytes_read = -1; /* # of bytes actually read */
|
||||
|
||||
/* Trying to read more bytes than the return type can handle is
|
||||
* undefined behavior in POSIX.
|
||||
*/
|
||||
if(size > H5_SEC2_MAX_IO_BYTES_g)
|
||||
bytes_in = H5_SEC2_MAX_IO_BYTES_g;
|
||||
if(size > H5_POSIX_MAX_IO_BYTES)
|
||||
bytes_in = H5_POSIX_MAX_IO_BYTES;
|
||||
else
|
||||
bytes_in = (h5_sec2_io_t)size;
|
||||
bytes_in = (h5_posix_io_t)size;
|
||||
|
||||
do {
|
||||
bytes_read = HDread(file->fd, buf, bytes_in);
|
||||
@@ -750,7 +722,7 @@ H5FD_sec2_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id,
|
||||
time_t mytime = HDtime(NULL);
|
||||
HDoff_t myoffset = HDlseek(file->fd, (HDoff_t)0, SEEK_CUR);
|
||||
|
||||
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, error message = '%s', buf = %p, size = %lu, offset = %llu", HDctime(&mytime), file->filename, file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long)size, (unsigned long long)myoffset);
|
||||
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, error message = '%s', buf = %p, total read size = %llu, bytes this sub-read = %llu, bytes actually read = %llu, offset = %llu", HDctime(&mytime), file->filename, file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long long)size, (unsigned long long)bytes_in, (unsigned long long)bytes_read, (unsigned long long)myoffset);
|
||||
} /* end if */
|
||||
|
||||
if(0 == bytes_read) {
|
||||
@@ -783,21 +755,19 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_sec2_write
|
||||
* Function: H5FD_sec2_write
|
||||
*
|
||||
* Purpose: Writes SIZE bytes of data to FILE beginning at address ADDR
|
||||
* from buffer BUF according to data transfer properties in
|
||||
* DXPL_ID.
|
||||
* Purpose: Writes SIZE bytes of data to FILE beginning at address ADDR
|
||||
* from buffer BUF according to data transfer properties in
|
||||
* DXPL_ID.
|
||||
*
|
||||
* Return: Success: Zero
|
||||
* Failure: -1
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, July 29, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static herr_t
|
||||
H5FD_sec2_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id,
|
||||
haddr_t addr, size_t size, const void *buf)
|
||||
@@ -829,16 +799,16 @@ H5FD_sec2_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id,
|
||||
*/
|
||||
while(size > 0) {
|
||||
|
||||
h5_sec2_io_t bytes_in = 0; /* # of bytes to write */
|
||||
h5_sec2_io_ret_t bytes_wrote = -1; /* # of bytes written */
|
||||
h5_posix_io_t bytes_in = 0; /* # of bytes to write */
|
||||
h5_posix_io_ret_t bytes_wrote = -1; /* # of bytes written */
|
||||
|
||||
/* Trying to write more bytes than the return type can handle is
|
||||
* undefined behavior in POSIX.
|
||||
*/
|
||||
if(size > H5_SEC2_MAX_IO_BYTES_g)
|
||||
bytes_in = H5_SEC2_MAX_IO_BYTES_g;
|
||||
if(size > H5_POSIX_MAX_IO_BYTES)
|
||||
bytes_in = H5_POSIX_MAX_IO_BYTES;
|
||||
else
|
||||
bytes_in = (h5_sec2_io_t)size;
|
||||
bytes_in = (h5_posix_io_t)size;
|
||||
|
||||
do {
|
||||
bytes_wrote = HDwrite(file->fd, buf, bytes_in);
|
||||
@@ -849,7 +819,7 @@ H5FD_sec2_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id,
|
||||
time_t mytime = HDtime(NULL);
|
||||
HDoff_t myoffset = HDlseek(file->fd, (HDoff_t)0, SEEK_CUR);
|
||||
|
||||
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, error message = '%s', buf = %p, size = %lu, offset = %llu", HDctime(&mytime), file->filename, file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long)size, (unsigned long long)myoffset);
|
||||
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, error message = '%s', buf = %p, total write size = %llu, bytes this sub-write = %llu, bytes actually written = %llu, offset = %llu", HDctime(&mytime), file->filename, file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long long)size, (unsigned long long)bytes_in, (unsigned long long)bytes_wrote, (unsigned long long)myoffset);
|
||||
} /* end if */
|
||||
|
||||
HDassert(bytes_wrote > 0);
|
||||
@@ -878,20 +848,18 @@ done:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FD_sec2_truncate
|
||||
* Function: H5FD_sec2_truncate
|
||||
*
|
||||
* Purpose: Makes sure that the true file size is the same (or larger)
|
||||
* than the end-of-address.
|
||||
* Purpose: Makes sure that the true file size is the same (or larger)
|
||||
* than the end-of-address.
|
||||
*
|
||||
* Return: Success: Non-negative
|
||||
* Failure: Negative
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Wednesday, August 4, 1999
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
static herr_t
|
||||
H5FD_sec2_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
|
||||
{
|
||||
@@ -952,4 +920,3 @@ H5FD_sec2_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5FD_sec2_truncate() */
|
||||
|
||||
|
||||
@@ -78,6 +78,9 @@
|
||||
/* Define if the function stack tracing code is to be compiled in */
|
||||
#undef HAVE_CODESTACK
|
||||
|
||||
/* Define if Darwin or Mac OS X */
|
||||
#undef HAVE_DARWIN
|
||||
|
||||
/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't.
|
||||
*/
|
||||
#undef HAVE_DECL_TZNAME
|
||||
|
||||
@@ -426,6 +426,24 @@
|
||||
#define HSSIZET_MAX ((hssize_t)LLONG_MAX)
|
||||
#define HSSIZET_MIN (~(HSSIZET_MAX))
|
||||
|
||||
/*
|
||||
* Types and max sizes for POSIX I/O.
|
||||
* OS X (Darwin) is odd since the max I/O size does not match the types.
|
||||
*/
|
||||
#if defined(H5_HAVE_WIN32_API)
|
||||
# define h5_posix_io_t unsigned int
|
||||
# define h5_posix_io_ret_t int
|
||||
# define H5_POSIX_MAX_IO_BYTES INT_MAX
|
||||
#elif defined(H5_HAVE_DARWIN)
|
||||
# define h5_posix_io_t size_t
|
||||
# define h5_posix_io_ret_t ssize_t
|
||||
# define H5_POSIX_MAX_IO_BYTES INT_MAX
|
||||
#else
|
||||
# define h5_posix_io_t size_t
|
||||
# define h5_posix_io_ret_t ssize_t
|
||||
# define H5_POSIX_MAX_IO_BYTES SSIZET_MAX
|
||||
#endif
|
||||
|
||||
/*
|
||||
* A macro to portably increment enumerated types.
|
||||
*/
|
||||
|
||||
@@ -76,9 +76,9 @@ extern "C" {
|
||||
#define H5_VERS_MAJOR 1 /* For major interface/format changes */
|
||||
#define H5_VERS_MINOR 8 /* For minor interface/format changes */
|
||||
#define H5_VERS_RELEASE 10 /* For tweaks, bug-fixes, or development */
|
||||
#define H5_VERS_SUBRELEASE "snap14" /* For pre-releases like snap0 */
|
||||
#define H5_VERS_SUBRELEASE "patch1" /* For pre-releases like snap0 */
|
||||
/* Empty string for real releases. */
|
||||
#define H5_VERS_INFO "HDF5 library version: 1.8.10-snap14" /* Full version string */
|
||||
#define H5_VERS_INFO "HDF5 library version: 1.8.10-patch1" /* Full version string */
|
||||
|
||||
#define H5check() H5check_version(H5_VERS_MAJOR,H5_VERS_MINOR, \
|
||||
H5_VERS_RELEASE)
|
||||
|
||||
@@ -730,8 +730,8 @@ test_h5s_zero_dim(void)
|
||||
ret = H5Pset_chunk(plist_id, SPACE1_RANK, chunk_dims);
|
||||
CHECK(ret, FAIL, "H5Pset_chunk");
|
||||
|
||||
// ret = H5Pset_alloc_time(plist_id, alloc_time);
|
||||
// CHECK(ret, FAIL, "H5Pset_alloc_time");
|
||||
/* ret = H5Pset_alloc_time(plist_id, alloc_time); */
|
||||
/* CHECK(ret, FAIL, "H5Pset_alloc_time"); */
|
||||
|
||||
dset1 = H5Dcreate2(fid1, BASICDATASET1, H5T_NATIVE_INT, sid_chunk, H5P_DEFAULT, plist_id, H5P_DEFAULT);
|
||||
CHECK(dset1, FAIL, "H5Dcreate2");
|
||||
|
||||
@@ -133,6 +133,9 @@ TESTING() {
|
||||
echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
|
||||
}
|
||||
|
||||
# Source in the output filter function definitions.
|
||||
. $srcdir/../../bin/output_filter.sh
|
||||
|
||||
# Run a test and print PASS or *FAIL*. If a test fails then increment
|
||||
# the `nerrors' global variable and (if $verbose is set) display the
|
||||
# difference between the actual output and the expected output. The
|
||||
@@ -145,6 +148,8 @@ TOOLTEST() {
|
||||
expect="$TESTDIR/$1"
|
||||
actual="$TESTDIR/`basename $1 .ddl`.out"
|
||||
actual_err="$TESTDIR/`basename $1 .ddl`.err"
|
||||
actual_sav=${actual}-sav
|
||||
actual_err_sav=${actual_err}-sav
|
||||
shift
|
||||
|
||||
# Run test.
|
||||
@@ -156,8 +161,13 @@ TOOLTEST() {
|
||||
cd $TESTDIR
|
||||
$RUNSERIAL $STAT_BIN $@
|
||||
) >$actual 2>$actual_err
|
||||
cat $actual_err >> $actual
|
||||
|
||||
# save actual and actual_err in case they are needed later.
|
||||
cp $actual $actual_sav
|
||||
STDOUT_FILTER $actual
|
||||
cp $actual_err $actual_err_sav
|
||||
STDERR_FILTER $actual_err
|
||||
cat $actual_err >> $actual
|
||||
|
||||
if [ ! -f $expect ]; then
|
||||
# Create the expect file if it doesn't yet exist.
|
||||
@@ -174,7 +184,7 @@ TOOLTEST() {
|
||||
|
||||
# Clean up output file
|
||||
if test -z "$HDF5_NOCLEANUP"; then
|
||||
rm -f $actual $actual_err
|
||||
rm -f $actual $actual_err $actual_sav $actual_err_sav
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
@@ -207,6 +207,12 @@ static herr_t build_match_list_attrs(hid_t loc1_id, hid_t loc2_id, table_attrs_t
|
||||
table_lp->nattrs_only2++;
|
||||
curr2++;
|
||||
}
|
||||
|
||||
/* close for next turn */
|
||||
H5Aclose(attr1_id);
|
||||
attr1_id = -1;
|
||||
H5Aclose(attr2_id);
|
||||
attr2_id = -1;
|
||||
} /* end while */
|
||||
|
||||
/* list1 did not end */
|
||||
@@ -225,6 +231,10 @@ static herr_t build_match_list_attrs(hid_t loc1_id, hid_t loc2_id, table_attrs_t
|
||||
table_attr_mark_exist(infile, name1, table_lp);
|
||||
table_lp->nattrs_only1++;
|
||||
curr1++;
|
||||
|
||||
/* close for next turn */
|
||||
H5Aclose(attr1_id);
|
||||
attr1_id = -1;
|
||||
}
|
||||
|
||||
/* list2 did not end */
|
||||
@@ -243,6 +253,9 @@ static herr_t build_match_list_attrs(hid_t loc1_id, hid_t loc2_id, table_attrs_t
|
||||
table_attr_mark_exist(infile, name2, table_lp);
|
||||
table_lp->nattrs_only2++;
|
||||
curr2++;
|
||||
|
||||
/* close for next turn */
|
||||
H5Aclose(attr2_id);
|
||||
}
|
||||
|
||||
/*------------------------------------------------------
|
||||
@@ -272,6 +285,11 @@ static herr_t build_match_list_attrs(hid_t loc1_id, hid_t loc2_id, table_attrs_t
|
||||
return 0;
|
||||
|
||||
error:
|
||||
if (0 < attr1_id)
|
||||
H5Aclose(attr1_id);
|
||||
if (0 < attr2_id)
|
||||
H5Aclose(attr2_id);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -502,7 +502,7 @@
|
||||
#define H5_PACKAGE_NAME "HDF5"
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define H5_PACKAGE_STRING "HDF5 1.8.10-snap14"
|
||||
#define H5_PACKAGE_STRING "HDF5 1.8.10-patch1"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define H5_PACKAGE_TARNAME "hdf5"
|
||||
@@ -511,7 +511,7 @@
|
||||
#define H5_PACKAGE_URL ""
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define H5_PACKAGE_VERSION "1.8.10-snap14"
|
||||
#define H5_PACKAGE_VERSION "1.8.10-patch1"
|
||||
|
||||
/* Width for printf() for type `long long' or `__int64', use `ll' */
|
||||
#define H5_PRINTF_LL_WIDTH "ll"
|
||||
@@ -674,7 +674,7 @@
|
||||
/* #undef H5_USING_MEMCHECKER */
|
||||
|
||||
/* Version number of package */
|
||||
#define H5_VERSION "1.8.10-snap14"
|
||||
#define H5_VERSION "1.8.10-patch1"
|
||||
|
||||
/* Define if vsnprintf() returns the correct value for formatted strings that
|
||||
don't fit into size allowed */
|
||||
|
||||
@@ -552,7 +552,7 @@
|
||||
#define H5_PACKAGE_NAME "HDF5"
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define H5_PACKAGE_STRING "HDF5 1.8.10-snap14"
|
||||
#define H5_PACKAGE_STRING "HDF5 1.8.10-patch1"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define H5_PACKAGE_TARNAME "hdf5"
|
||||
@@ -561,7 +561,7 @@
|
||||
#define H5_PACKAGE_URL "http://www.hdfgroup.org"
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define H5_PACKAGE_VERSION "1.8.10-snap14"
|
||||
#define H5_PACKAGE_VERSION "1.8.10-patch1"
|
||||
|
||||
/* Width for printf() for type `long long' or `__int64', use `ll' */
|
||||
#define H5_PRINTF_LL_WIDTH "ll"
|
||||
@@ -732,7 +732,7 @@
|
||||
/* #undef H5_USING_MEMCHECKER */
|
||||
|
||||
/* Version number of package */
|
||||
#define H5_VERSION "1.8.10-snap14"
|
||||
#define H5_VERSION "1.8.10-patch1"
|
||||
|
||||
/* Define if vsnprintf() returns the correct value for formatted strings that
|
||||
don't fit into size allowed */
|
||||
|
||||
Reference in New Issue
Block a user