Merge branch 'develop' into mdc_sl_opt

This commit is contained in:
mainzer 2020-08-13 11:31:16 -05:00
commit 3202416936
196 changed files with 5234 additions and 3755 deletions

View File

@ -17,7 +17,7 @@ use Text::Tabs;
# If you do not have access to either file, you may request a copy from
# help@hdfgroup.org.
#
# Robb Matzke, matzke@llnl.gov
# Robb Matzke
# 30 Aug 1997
#
# Purpose: This script will read standard input which should be a

View File

@ -17,7 +17,7 @@ use strict;
# If you do not have access to either file, you may request a copy from
# help@hdfgroup.org.
#
# Robb Matzke <matzke@llnl.gov>
# Robb Matzke
# 17 July 1998
### Purpose

View File

@ -39,7 +39,7 @@ USAGE()
{
cat << EOF
Usage: $0 -d <dir> [--docver BRANCHNAME] [-h] [--nocheck] [--private] <methods> ...
-d DIR The name of the directory where the releas(es) should be
-d DIR The name of the directory where the releas(es) should be
placed.
--docver BRANCHNAME This is added for 1.8 and beyond to get the correct
version of documentation files from the hdf5docs
@ -53,10 +53,10 @@ The other command-line options are the names of the programs to use
for compressing the resulting tar archive (if none are given then
"tar" is assumed):
tar -- use tar and don't do any compressing.
gzip -- use gzip with "-9" and append ".gz" to the output name.
tar -- use tar and don't do any compressing.
gzip -- use gzip with "-9" and append ".gz" to the output name.
bzip2 -- use bzip2 with "-9" and append ".bz2" to the output name.
zip -- convert all text files to DOS style and form a zip file for Windows use.
zip -- convert all text files to DOS style and form a zip file for Windows use.
cmake-tgz -- create a tar file using the gzip default level with a build-unix.sh
command file and all other CMake files needed to build HDF5 source
using CMake on unix machines.
@ -122,8 +122,8 @@ EOF
tar2zip()
{
if [ $# -ne 3 ]; then
echo "usage: tar2zip <tarfilename> <zipfilename>"
return 1
echo "usage: tar2zip <tarfilename> <zipfilename>"
return 1
fi
ztmpdir=/tmp/ztmpdir$$
mkdir -p $ztmpdir
@ -135,10 +135,10 @@ tar2zip()
(cd $ztmpdir; tar xf -) < $tarfile
# sanity check
if [ ! -d $ztmpdir/$version ]; then
echo "untar did not create $ztmpdir/$version source dir"
# cleanup
rm -rf $ztmpdir
return 1
echo "untar did not create $ztmpdir/$version source dir"
# cleanup
rm -rf $ztmpdir
return 1
fi
# step 2: convert text files
# There maybe a simpler way to do this.
@ -147,11 +147,11 @@ tar2zip()
# -q quiet mode
# grep redirect output to /dev/null because -q or -s are not portable.
find $ztmpdir/$version | \
while read inf; do \
if file $inf | grep "$inf\: .*text" > /dev/null 2>&1 ; then \
unix2dos -q -k $inf; \
fi\
done
while read inf; do \
if file $inf | grep "$inf\: .*text" > /dev/null 2>&1 ; then \
unix2dos -q -k $inf; \
fi\
done
# step 3: make zipball
# -9 maximum compression
# -y Store symbolic links as such in the zip archive
@ -202,8 +202,8 @@ tar2zip()
tar2cmakezip()
{
if [ $# -ne 3 ]; then
echo "usage: tar2cmakezip <tarfilename> <zipfilename>"
return 1
echo "usage: tar2cmakezip <tarfilename> <zipfilename>"
return 1
fi
cmziptmpdir=/tmp/cmziptmpdir$$
cmziptmpsubdir=$cmziptmpdir/CMake-$HDF5_VERS
@ -216,10 +216,10 @@ tar2cmakezip()
(cd $cmziptmpsubdir; tar xf -) < $tarfile
# sanity check
if [ ! -d $cmziptmpsubdir/$version ]; then
echo "untar did not create $cmziptmpsubdir/$version source dir"
# cleanup
rm -rf $cmziptmpdir
return 1
echo "untar did not create $cmziptmpsubdir/$version source dir"
# cleanup
rm -rf $cmziptmpdir
return 1
fi
# step 2: add batch file for building CMake on window
@ -245,11 +245,11 @@ tar2cmakezip()
# -q quiet mode
# grep redirect output to /dev/null because -q or -s are not portable.
find $cmziptmpsubdir/$version | \
while read inf; do \
if file $inf | grep "$inf\: .*text" > /dev/null 2>&1 ; then \
unix2dos -q -k $inf; \
fi\
done
while read inf; do \
if file $inf | grep "$inf\: .*text" > /dev/null 2>&1 ; then \
unix2dos -q -k $inf; \
fi\
done
# step 3: make zipball
# -9 maximum compression
@ -301,8 +301,8 @@ tar2cmakezip()
tar2cmaketgz()
{
if [ $# -ne 3 ]; then
echo "usage: tar2cmaketgz <tarfilename> <tgzfilename>"
return 1
echo "usage: tar2cmaketgz <tarfilename> <tgzfilename>"
return 1
fi
cmgztmpdir=/tmp/cmgztmpdir$$
cmgztmpsubdir=$cmgztmpdir/CMake-$HDF5_VERS
@ -315,10 +315,10 @@ tar2cmaketgz()
(cd $cmgztmpsubdir; tar xf -) < $tarfile
# sanity check
if [ ! -d $cmgztmpsubdir/$version ]; then
echo "untar did not create $cmgztmpsubdir/$version source dir"
# cleanup
rm -rf $cmgztmpdir
return 1
echo "untar did not create $cmgztmpsubdir/$version source dir"
# cleanup
rm -rf $cmgztmpdir
return 1
fi
@ -384,8 +384,8 @@ tar2cmaketgz()
tar2hpccmaketgz()
{
if [ $# -ne 3 ]; then
echo "usage: tar2hpccmaketgz <tarfilename> <tgzfilename>"
return 1
echo "usage: tar2hpccmaketgz <tarfilename> <tgzfilename>"
return 1
fi
cmgztmpdir=/tmp/cmgztmpdir$$
cmgztmpsubdir=$cmgztmpdir/HPC-CMake-$HDF5_VERS
@ -398,10 +398,10 @@ tar2hpccmaketgz()
(cd $cmgztmpsubdir; tar xf -) < $tarfile
# sanity check
if [ ! -d $cmgztmpsubdir/$version ]; then
echo "untar did not create $cmgztmpsubdir/$version source dir"
# cleanup
rm -rf $cmgztmpdir
return 1
echo "untar did not create $cmgztmpsubdir/$version source dir"
# cleanup
rm -rf $cmgztmpdir
return 1
fi
@ -442,7 +442,7 @@ check=yes
release_date=`date +%F`
today=`date +%Y%m%d`
pmode='no'
tmpdir="../#release_tmp.$$" # tmp work directory
tmpdir="../#release_tmp.$$" # tmp work directory
DOC_URL=https://git@bitbucket.hdfgroup.org/scm/hdffv/hdf5doc.git
CPPLUS_RM_NAME=cpplus_RM
MAINT_MODE_ENABLED=""
@ -459,11 +459,11 @@ fi
RESTORE_VERSION()
{
if [ X-${VERS_OLD} != X- ]; then
echo restoring version information back to $VERS_OLD
rm -f config/lt_vers.am
cp $tmpdir/lt_vers.am config/lt_vers.am
bin/h5vers -s $VERS_OLD
VERS_OLD=
echo restoring version information back to $VERS_OLD
rm -f config/lt_vers.am
cp $tmpdir/lt_vers.am config/lt_vers.am
bin/h5vers -s $VERS_OLD
VERS_OLD=
fi
}
@ -473,32 +473,32 @@ while [ -n "$1" ]; do
arg=$1
shift
case "$arg" in
-d)
DEST=$1
shift
;;
--nocheck)
check=no
;;
-h)
USAGE
exit 0
;;
--private)
pmode=yes
;;
-d)
DEST=$1
shift
;;
--nocheck)
check=no
;;
-h)
USAGE
exit 0
;;
--private)
pmode=yes
;;
--docver)
DOCVERSION=$1
shift
;;
-*)
echo "Unknown switch: $arg" 1>&2
USAGE
exit 1
;;
*)
methods="$methods $arg"
;;
-*)
echo "Unknown switch: $arg" 1>&2
USAGE
exit 1
;;
*)
methods="$methods $arg"
;;
esac
done
@ -553,7 +553,7 @@ if [ "X$fail" = "Xyes" ]; then
echo "--nocheck argument to the bin/release command."
exit 1
else
echo "Continuing anyway..."
echo "Continuing anyway..."
fi
fi
@ -595,61 +595,61 @@ MD5file=$HDF5_VERS.md5
cp /dev/null $DEST/$MD5file
for comp in $methods; do
case $comp in
tar)
cp -p $tmpdir/$HDF5_VERS.tar $DEST/$HDF5_VERS.tar
(cd $DEST; md5sum $HDF5_VERS.tar >> $MD5file)
;;
gzip)
test "$verbose" && echo " Running gzip..." 1>&2
gzip -9 <$tmpdir/$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.gz
(cd $DEST; md5sum $HDF5_VERS.tar.gz >> $MD5file)
;;
tar)
cp -p $tmpdir/$HDF5_VERS.tar $DEST/$HDF5_VERS.tar
(cd $DEST; md5sum $HDF5_VERS.tar >> $MD5file)
;;
gzip)
test "$verbose" && echo " Running gzip..." 1>&2
gzip -9 <$tmpdir/$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.gz
(cd $DEST; md5sum $HDF5_VERS.tar.gz >> $MD5file)
;;
cmake-tgz)
test "$verbose" && echo " Creating CMake tar.gz file..." 1>&2
tar2cmaketgz $HDF5_VERS $tmpdir/$HDF5_VERS.tar $DEST/CMake-$HDF5_VERS.tar.gz 1>&2
(cd $DEST; md5sum CMake-$HDF5_VERS.tar.gz >> $MD5file)
test "$verbose" && echo " Creating CMake tar.gz file..." 1>&2
tar2cmaketgz $HDF5_VERS $tmpdir/$HDF5_VERS.tar $DEST/CMake-$HDF5_VERS.tar.gz 1>&2
(cd $DEST; md5sum CMake-$HDF5_VERS.tar.gz >> $MD5file)
;;
hpc-cmake-tgz)
test "$verbose" && echo " Creating HPC-CMake tar.gz file..." 1>&2
tar2hpccmaketgz $HDF5_VERS $tmpdir/$HDF5_VERS.tar $DEST/HPC-CMake-$HDF5_VERS.tar.gz 1>&2
(cd $DEST; md5sum HPC-CMake-$HDF5_VERS.tar.gz >> $MD5file)
test "$verbose" && echo " Creating HPC-CMake tar.gz file..." 1>&2
tar2hpccmaketgz $HDF5_VERS $tmpdir/$HDF5_VERS.tar $DEST/HPC-CMake-$HDF5_VERS.tar.gz 1>&2
(cd $DEST; md5sum HPC-CMake-$HDF5_VERS.tar.gz >> $MD5file)
;;
bzip2)
test "$verbose" && echo " Running bzip2..." 1>&2
bzip2 -9 <$tmpdir/$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.bz2
(cd $DEST; md5sum $HDF5_VERS.tar.bz2 >> $MD5file)
;;
zip)
test "$verbose" && echo " Creating zip ball..." 1>&2
tar2zip $HDF5_VERS $tmpdir/$HDF5_VERS.tar $DEST/$HDF5_VERS.zip 1>&2
(cd $DEST; md5sum $HDF5_VERS.zip >> $MD5file)
;;
bzip2)
test "$verbose" && echo " Running bzip2..." 1>&2
bzip2 -9 <$tmpdir/$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.bz2
(cd $DEST; md5sum $HDF5_VERS.tar.bz2 >> $MD5file)
;;
zip)
test "$verbose" && echo " Creating zip ball..." 1>&2
tar2zip $HDF5_VERS $tmpdir/$HDF5_VERS.tar $DEST/$HDF5_VERS.zip 1>&2
(cd $DEST; md5sum $HDF5_VERS.zip >> $MD5file)
;;
cmake-zip)
test "$verbose" && echo " Creating CMake-zip ball..." 1>&2
tar2cmakezip $HDF5_VERS $tmpdir/$HDF5_VERS.tar $DEST/CMake-$HDF5_VERS.zip 1>&2
(cd $DEST; md5sum CMake-$HDF5_VERS.zip >> $MD5file)
;;
doc)
doc)
if [ "${DOCVERSION}" = "" ]; then
DOCVERSION=master
fi
test "$verbose" && echo " Creating docs..." 1>&2
# Check out docs from git repo
(cd $tmpdir; git clone -q $DOC_URL ${DOCVERSION} > /dev/null) || exit 1
test "$verbose" && echo " Creating docs..." 1>&2
# Check out docs from git repo
(cd $tmpdir; git clone -q $DOC_URL ${DOCVERSION} > /dev/null) || exit 1
# Create doxygen C++ RM
(cd c++/src && doxygen cpp_doc_config > /dev/null ) || exit 1
# Replace version of C++ RM with just-created version
rm -rf $tmpdir/${DOCVERSION}/html/$CPPLUS_RM_NAME || exit 1
mv c++/src/$CPPLUS_RM_NAME $tmpdir/${DOCVERSION}/html/$CPPLUS_RM_NAME || exit 1
(cd c++/src && doxygen cpp_doc_config > /dev/null ) || exit 1
# Replace version of C++ RM with just-created version
rm -rf $tmpdir/${DOCVERSION}/html/$CPPLUS_RM_NAME || exit 1
mv c++/src/$CPPLUS_RM_NAME $tmpdir/${DOCVERSION}/html/$CPPLUS_RM_NAME || exit 1
# Compress the docs and move them to the release area
mv $tmpdir/${DOCVERSION} $tmpdir/${HDF5_VERS}_docs || exit 1
(cd $tmpdir && tar cf ${HDF5_VERS}_docs.tar ${HDF5_VERS}_docs) || exit 1
mv $tmpdir/${HDF5_VERS}_docs.tar $DEST || exit 1
;;
*)
echo "***Error*** Unknown method $comp"
exit 1
;;
mv $tmpdir/${DOCVERSION} $tmpdir/${HDF5_VERS}_docs || exit 1
(cd $tmpdir && tar cf ${HDF5_VERS}_docs.tar ${HDF5_VERS}_docs) || exit 1
mv $tmpdir/${HDF5_VERS}_docs.tar $DEST || exit 1
;;
*)
echo "***Error*** Unknown method $comp"
exit 1
;;
esac
done

View File

@ -15,7 +15,7 @@ use warnings;
# http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have
# access to either file, you may request a copy from help@hdfgroup.org.
#
# Quincey Koziol, koziol@hdfgroup.org
# Quincey Koziol
# 9 Aug 2013
#
# Purpose: Given an input file containing the output from a build of the

View File

@ -684,6 +684,53 @@ unsigned FileAccPropList::getGcReferences() const
return(gc_ref);
}
//--------------------------------------------------------------------------
// Function: FileAccPropList::setFileLocking
///\brief Sets file locking flags.
///\param use_file_locking - IN: Flag that determines if file locks should
// be used or not.
///\param ignore_when_disabled - IN: Flag that determines if file locks
// should be be used when disabled on the file system or not.
///\exception H5::PropListIException
///\par Description
/// For information, please refer to the H5Pset_file_locking API in
/// the HDF5 C Reference Manual.
// Programmer Dana Robinson - 2020
//--------------------------------------------------------------------------
void FileAccPropList::setFileLocking(hbool_t use_file_locking, hbool_t ignore_when_disabled) const
{
herr_t ret_value = H5Pset_file_locking(id, use_file_locking, ignore_when_disabled);
if (ret_value < 0)
{
throw PropListIException("FileAccPropList::setFileLocking", "H5Pset_file_locking failed");
}
}
//--------------------------------------------------------------------------
// Function: FileAccPropList::getFileLocking
///\brief Gets file locking flags.
///\param use_file_locking - OUT: Flag that determines if file locks
// should be used or not.
///\param ignore_when_disabled - OUT: Flag that determines if file locks
// should be be used when disabled on the file system or not.
///\exception H5::PropListIException
///\par Description
/// For information, please refer to the H5Pget_file_locking API in
/// the HDF5 C Reference Manual.
// Programmer Dana Robinson - 2020
//--------------------------------------------------------------------------
void FileAccPropList::getFileLocking(hbool_t& use_file_locking, hbool_t& ignore_when_disabled) const
{
herr_t ret_value = H5Pget_file_locking(id, &use_file_locking, &ignore_when_disabled);
if (ret_value < 0)
{
throw PropListIException("FileAccPropList::getFileLocking", "H5Pget_file_locking failed");
}
}
//--------------------------------------------------------------------------
// Function: FileAccPropList::setLibverBounds
///\brief Sets bounds on versions of library format to be used when creating

View File

@ -126,6 +126,12 @@ class H5_DLLCPP FileAccPropList : public PropList {
// Returns garbage collecting references setting.
unsigned getGcReferences() const;
// Sets file locking parameters.
void setFileLocking(hbool_t use_file_locking, hbool_t ignore_when_disabled) const;
// Gets file locking parameters.
void getFileLocking(hbool_t& use_file_locking, hbool_t& ignore_when_disabled) const;
// Sets bounds on versions of library format to be used when creating
// or writing objects.
void setLibverBounds(H5F_libver_t libver_low, H5F_libver_t libver_high) const;

View File

@ -61,6 +61,31 @@ if (HDF5_ENABLE_CODESTACK)
endif ()
MARK_AS_ADVANCED (HDF5_ENABLE_CODESTACK)
# ----------------------------------------------------------------------
# Check if they would like to use file locking by default
#-----------------------------------------------------------------------------
option (HDF5_USE_FILE_LOCKING "Use file locking by default (mainly for SWMR)" ON)
if (HDF5_USE_FILE_LOCKING)
set (${HDF_PREFIX}_USE_FILE_LOCKING 1)
endif ()
# ----------------------------------------------------------------------
# Check if they would like to ignore file locks when disabled on a file system
#-----------------------------------------------------------------------------
option (HDF5_IGNORE_DISABLED_FILE_LOCKS "Ignore file locks when disabled on file system" ON)
if (HDF5_IGNORE_DISABLED_FILE_LOCKS)
set (${HDF_PREFIX}_IGNORE_DISABLED_FILE_LOCKS 1)
endif ()
# Set the libhdf5.settings file variable
if (HDF5_IGNORE_DISABLED_FILE_LOCKS AND HDF5_USE_FILE_LOCKING)
set (HDF5_FILE_LOCKING_SETTING "best-effort")
elseif (HDF5_IGNORE_DISABLED_FILE_LOCKS)
set (HDF5_FILE_LOCKING_SETTING "yes")
else ()
set (HDF5_FILE_LOCKING_SETTING "no")
endif ()
#-----------------------------------------------------------------------------
# Are we going to use HSIZE_T
#-----------------------------------------------------------------------------

View File

@ -489,6 +489,9 @@
/* Define if the compiler understands __inline__ */
#cmakedefine H5_HAVE___INLINE__ @H5_HAVE___INLINE__@
/* Define if the library will ignore file locks when disabled */
#cmakedefine H5_IGNORE_DISABLED_FILE_LOCKS @H5_IGNORE_DISABLED_FILE_LOCKS@
/* Define if the high-level library headers should be included in hdf5.h */
#cmakedefine H5_INCLUDE_HL @H5_INCLUDE_HL@
@ -729,6 +732,9 @@
/* Define using v1.14 public API symbols by default */
#cmakedefine H5_USE_114_API_DEFAULT @H5_USE_114_API_DEFAULT@
/* Define if the library will use file locking */
#cmakedefine H5_FILE_LOCKING @H5_USE_FILE_LOCKING@
/* Define if a memory checking tool will be used on the library, to cause
library to be very picky about memory operations and also disable the
internal free list manager code. */

View File

@ -85,5 +85,6 @@ Parallel Filtered Dataset Writes: @PARALLEL_FILTERED_WRITES@
Using memory checker: @HDF5_ENABLE_USING_MEMCHECKER@
Memory allocation sanity checks: @HDF5_MEMORY_ALLOC_SANITY_CHECK@
Function Stack Tracing: @HDF5_ENABLE_CODESTACK@
Use file locking: @HDF5_FILE_LOCKING_SETTING@
Strict File Format Checks: @HDF5_STRICT_FORMAT_CHECKS@
Optimization Instrumentation: @HDF5_Enable_Instrument@

View File

@ -9,6 +9,9 @@
# warning flag added for GCC >= 4.5
-Wstrict-overflow=5
# This warning can only be truly addressed using the gcc extension of
# using D to indicate doubles (e.g., 1.23D).
-Wno-unsuffixed-float-constants
# warning flags added for GCC >= 4.6
-Wdouble-promotion

View File

@ -5,7 +5,6 @@
# the variable is never *used* before it has been initialized?
#
-Wjump-misses-init
-Wunsuffixed-float-constants
# developer warning flag added for GCC >= 4.6
-Wsuggest-attribute=const

View File

@ -1,6 +1,5 @@
# no-developer warning flag added for GCC >= 4.5
-Wno-jump-misses-init
-Wno-unsuffixed-float-constants
# no-developer warning flag added for GCC >= 4.6
-Wno-suggest-attribute=const

View File

@ -2315,6 +2315,56 @@ case "X-$OPTIMIZATION" in
;;
esac
## ----------------------------------------------------------------------
## Check if file locking should be used
##
AC_MSG_CHECKING([enable file locking])
AC_ARG_ENABLE([file-locking],
[AS_HELP_STRING([--enable-file-locking=(yes|no|best-effort)],
[Sets the default for whether or not to use file
locking when opening files. Can be overridden
with the HDF5_USE_FILE_LOCKING environment variable
and the H5Pset_file_locking() API call.
best-effort attempts to use file locking but does
not fail when file locks have been disabled on
the file system (useful with Lustre).
[default=best-effort]
])],
[DESIRED_FILE_LOCKING=$enableval])
## Set defaults
if test "X-$DESIRED_FILE_LOCKING" = X- ; then
DESIRED_FILE_LOCKING=best-effort
fi
## Allow this variable to be substituted in
## other files (src/libhdf5.settings.in, etc.)
AC_SUBST([DESIRED_FILE_LOCKING])
AC_SUBST([USE_FILE_LOCKING])
AC_SUBST([IGNORE_DISABLED_FILE_LOCKS])
case "X-$DESIRED_FILE_LOCKING" in
X-best-effort)
AC_MSG_RESULT([best-effort])
AC_DEFINE([USE_FILE_LOCKING], [1],
[Define if the library will use file locking])
AC_DEFINE([IGNORE_DISABLED_FILE_LOCKS], [1],
[Define if the library will ignore file locks when disabled])
;;
X-yes)
AC_MSG_RESULT([yes])
AC_DEFINE([USE_FILE_LOCKING], [1],
[Define if the library will use file locking])
;;
X-no)
AC_MSG_RESULT([no])
;;
*)
AC_MSG_ERROR([Unrecognized value: $USE_FILE_LOCKING])
;;
esac
## ----------------------------------------------------------------------
## Enable/disable internal package-level debugging output
##

View File

@ -8263,5 +8263,107 @@ END SUBROUTINE h5pget_virtual_dsetname_f
END SUBROUTINE h5pget_vol_id_f
!****s* H5P (F03)/h5pget_file_locking_f_F03
!
! NAME
! h5pget_file_locking_f
!
! PURPOSE
! Gets the file locking properties. File locking is mainly used to help
! enforce SWMR semantics.
!
! INPUTS
! fapl_id - Target file access property list identifier.
!
! OUTPUTS
! use_file_locking - Whether or not to use file locks.
! ignore_disabled_locks - Whether or not to ignore file locks when locking
! is disabled on a file system.
! hdferr - error code:
! 0 on success and -1 on failure
!
! AUTHOR
! Dana Robinson
! Summer 2020
!
! Fortran2003 Interface:
SUBROUTINE h5pget_file_locking_f(fapl_id, use_file_locking, ignore_disabled_locks, hdferr)
IMPLICIT NONE
INTEGER(HID_T) , INTENT(IN) :: fapl_id
LOGICAL , INTENT(OUT) :: use_file_locking
LOGICAL , INTENT(OUT) :: ignore_disabled_locks
INTEGER , INTENT(OUT) :: hdferr
!*****
LOGICAL(C_BOOL) :: c_use_flag
LOGICAL(C_BOOL) :: c_ignore_flag
INTERFACE
INTEGER FUNCTION h5pget_file_locking(fapl_id, use_file_locking, ignore_disabled_locks) BIND(C, NAME='H5Pget_file_locking')
IMPORT :: HID_T, C_BOOL
IMPLICIT NONE
INTEGER(HID_T), INTENT(IN), VALUE :: fapl_id
LOGICAL(C_BOOL), INTENT(OUT) :: use_file_locking
LOGICAL(C_BOOL), INTENT(OUT) :: ignore_disabled_locks
END FUNCTION h5pget_file_locking
END INTERFACE
hdferr = INT(h5pget_file_locking(fapl_id, c_use_flag, c_ignore_flag))
! Transfer value of C C_BOOL type to Fortran LOGICAL
use_file_locking = c_use_flag
ignore_disabled_locks = c_ignore_flag
END SUBROUTINE h5pget_file_locking_f
!****s* H5P (F03)/h5pset_file_locking_f_F03
!
! NAME
! h5pset_file_locking_f
!
! PURPOSE
! Sets the file locking properties. File locking is mainly used to help
! enforce SWMR semantics.
!
! INPUTS
! fapl_id - Target file access property list identifier.
! use_file_locking - Whether or not to use file locks.
! ignore_disabled_locks - Whether or not to ignore file locks when locking
! is disabled on a file system.
! hdferr - error code:
! 0 on success and -1 on failure
!
! AUTHOR
! Dana Robinson
! Summer 2020
!
! Fortran2003 Interface:
SUBROUTINE h5pset_file_locking_f(fapl_id, use_file_locking, ignore_disabled_locks, hdferr)
IMPLICIT NONE
INTEGER(HID_T) , INTENT(IN) :: fapl_id
LOGICAL , INTENT(IN) :: use_file_locking
LOGICAL , INTENT(IN) :: ignore_disabled_locks
INTEGER , INTENT(OUT) :: hdferr
!*****
LOGICAL(C_BOOL) :: c_use_flag
LOGICAL(C_BOOL) :: c_ignore_flag
INTERFACE
INTEGER FUNCTION h5pset_file_locking(fapl_id, use_file_locking, ignore_disabled_locks) BIND(C, NAME='H5Pset_file_locking')
IMPORT :: HID_T, C_BOOL
IMPLICIT NONE
INTEGER(HID_T), INTENT(IN), VALUE :: fapl_id
LOGICAL(C_BOOL), INTENT(IN), VALUE :: use_file_locking
LOGICAL(C_BOOL), INTENT(IN), VALUE :: ignore_disabled_locks
END FUNCTION h5pset_file_locking
END INTERFACE
! Transfer value of Fortran LOGICAL to C C_BOOL type
c_use_flag = use_file_locking
c_ignore_flag = ignore_disabled_locks
hdferr = INT(h5pset_file_locking(fapl_id, c_use_flag, c_ignore_flag))
END SUBROUTINE h5pset_file_locking_f
END MODULE H5P

View File

@ -339,6 +339,8 @@ H5P_mp_H5PGET_DSET_NO_ATTRS_HINT_F
H5P_mp_H5PSET_DSET_NO_ATTRS_HINT_F
H5P_mp_H5PSET_VOL_F
H5P_mp_H5PGET_VOL_ID_F
H5P_mp_H5PSET_FILE_LOCKING_F
H5P_mp_H5PGET_FILE_LOCKING_F
; Parallel
@H5_NOPAREXP@H5P_mp_H5PSET_FAPL_MPIO_F
@H5_NOPAREXP@H5P_mp_H5PGET_FAPL_MPIO_F

View File

@ -183,9 +183,13 @@ PROGRAM fortranlibtest
CALL write_test_status(ret_total_error, ' Multi file driver test', total_error)
ret_total_error = 0
CALL test_chunk_cache (cleanup, ret_total_error)
CALL test_chunk_cache(cleanup, ret_total_error)
CALL write_test_status(ret_total_error, ' Dataset chunk cache configuration', total_error)
ret_total_error = 0
CALL test_misc_properties(cleanup, ret_total_error)
CALL write_test_status(ret_total_error, ' Miscellaneous properties', total_error)
!
! '========================================='
! 'Testing ATTRIBUTE interface '

View File

@ -724,4 +724,77 @@ SUBROUTINE test_chunk_cache(cleanup, total_error)
END SUBROUTINE test_chunk_cache
!-------------------------------------------------------------------------
! Function: test_misc_properties
!
! Purpose: Tests setting and getting of miscellaneous properties. Does
! not test the underlying functionality as that is done in
! the C library tests.
!
! Tests APIs:
! H5P_GET/SET_FILE_LOCKING_F
!
! Return: Success: 0
! Failure: -1
!
!-------------------------------------------------------------------------
!
SUBROUTINE test_misc_properties(cleanup, total_error)
IMPLICIT NONE
LOGICAL, INTENT(IN) :: cleanup
INTEGER, INTENT(INOUT) :: total_error
INTEGER(hid_t) :: fapl_id = -1 ! Local fapl
LOGICAL :: use_file_locking ! (H5Pset/get_file_locking_f)
LOGICAL :: ignore_disabled_locks ! (H5Pset/get_file_locking_f)
INTEGER :: error
! Create a default fapl
CALL H5Pcreate_f(H5P_FILE_ACCESS_F, fapl_id, error)
CALL check("H5Pcreate_f", error, total_error)
! Test H5Pset/get_file_locking_f
! true values
use_file_locking = .TRUE.
ignore_disabled_locks = .TRUE.
CALL h5pset_file_locking_f(fapl_id, use_file_locking, ignore_disabled_locks, error)
CALL check("h5pset_set_file_locking_f", error, total_error)
use_file_locking = .FALSE.
ignore_disabled_locks = .FALSE.
CALL h5pget_file_locking_f(fapl_id, use_file_locking, ignore_disabled_locks, error)
CALL check("h5pget_set_file_locking_f", error, total_error)
if(use_file_locking .neqv. .TRUE.) then
total_error = total_error + 1
write(*,*) "Got wrong use_file_locking flag from h5pget_file_locking_f"
endif
if(ignore_disabled_locks .neqv. .TRUE.) then
total_error = total_error + 1
write(*,*) "Got wrong ignore_disabled_locks flag from h5pget_file_locking_f"
endif
! false values
use_file_locking = .FALSE.
ignore_disabled_locks = .FALSE.
CALL h5pset_file_locking_f(fapl_id, use_file_locking, ignore_disabled_locks, error)
CALL check("h5pset_set_file_locking_f", error, total_error)
use_file_locking = .TRUE.
ignore_disabled_locks = .TRUE.
CALL h5pget_file_locking_f(fapl_id, use_file_locking, ignore_disabled_locks, error)
CALL check("h5pget_set_file_locking_f", error, total_error)
if(use_file_locking .neqv. .FALSE.) then
total_error = total_error + 1
write(*,*) "Got wrong use_file_locking flag from h5pget_file_locking_f"
endif
if(ignore_disabled_locks .neqv. .FALSE.) then
total_error = total_error + 1
write(*,*) "Got wrong ignore_disabled_locks flag from h5pget_file_locking_f"
endif
! Close the fapl
CALL H5Pclose_f(fapl_id, error)
CALL check("H5Pclose_f", error, total_error)
END SUBROUTINE test_misc_properties
END MODULE TH5P

View File

@ -34,7 +34,7 @@ herr_t H5IM_get_palette(hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*
@ -127,7 +127,7 @@ herr_t H5IMmake_image_8bitf(hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*
@ -244,7 +244,7 @@ herr_t H5IMmake_image_24bitf(hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*
@ -302,7 +302,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*
@ -395,7 +395,7 @@ herr_t H5IMmake_palettef(hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*
@ -434,7 +434,7 @@ herr_t H5IMget_palettef(hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 10, 2005
*

View File

@ -24,7 +24,7 @@
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -85,7 +85,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -138,7 +138,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -207,7 +207,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -292,7 +292,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06, 2004
*
@ -341,7 +341,7 @@ h5imis_image_c(hid_t_f *loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06, 2004
*
@ -396,7 +396,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06, 2004
*
@ -461,7 +461,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06, 2004
*
@ -527,7 +527,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06 2004
*
@ -588,7 +588,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06 2004
*
@ -655,7 +655,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06 2004
*
@ -714,7 +714,7 @@ done:
*
* Return: true, false, fail
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06, 2004
*

View File

@ -41,7 +41,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@ -95,7 +95,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@ -142,7 +142,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@ -204,7 +204,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@ -267,7 +267,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@ -313,7 +313,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 06, 2004
!
@ -364,7 +364,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 06, 2004
!
@ -416,7 +416,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 06, 2004
!
@ -467,7 +467,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@ -516,7 +516,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 06, 2004
!
@ -567,7 +567,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 06, 2004
!
@ -619,7 +619,7 @@ CONTAINS
!
! Return: true, false, fail
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 06, 2004
!

View File

@ -24,7 +24,7 @@
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@ -94,7 +94,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@ -153,7 +153,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@ -218,7 +218,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@ -274,7 +274,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -373,7 +373,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -460,7 +460,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -535,7 +535,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@ -595,7 +595,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@ -643,7 +643,7 @@ h5ltfind_dataset_c(hid_t_f *loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 09, 2004
*
@ -722,7 +722,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -791,7 +791,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 09, 2004
*

View File

@ -164,7 +164,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: September 1, 2004
!
@ -385,7 +385,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: September 22, 2004
!
@ -426,7 +426,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: September 22, 2004
!
@ -595,7 +595,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: September 22, 2004
!
@ -770,7 +770,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: September 22, 2004
!
@ -933,7 +933,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: September 22, 2004
!
@ -983,7 +983,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: September 22, 2004
!
@ -1092,7 +1092,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@ -1143,7 +1143,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@ -1193,7 +1193,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@ -1245,7 +1245,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@ -1350,7 +1350,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@ -1397,7 +1397,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@ -1443,7 +1443,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@ -1490,7 +1490,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@ -1551,7 +1551,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: September 30, 2004
!
@ -1600,7 +1600,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@ -1644,7 +1644,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: September 30, 2004
!
@ -1703,7 +1703,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 05, 2004
!
@ -1757,7 +1757,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: September 30, 2004
!

View File

@ -26,7 +26,7 @@
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 06, 2004
*
@ -301,7 +301,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 12, 2004
*
@ -350,7 +350,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 12, 2004
*
@ -398,7 +398,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 12, 2004
*
@ -443,7 +443,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 12, 2004
*
@ -487,7 +487,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 13, 2004
*
@ -534,7 +534,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 13, 2004
*
@ -580,7 +580,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 12, 2004
*
@ -627,7 +627,7 @@ done:
*
* Return: Success: 0, Failure: -1
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 13, 2004
*

View File

@ -172,7 +172,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 06, 2004
!
@ -424,7 +424,7 @@ CONTAINS
!
! Purpose: Writes one field
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 12, 2004
!
@ -505,7 +505,7 @@ CONTAINS
!
! Purpose: Reads one field
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 12, 2004
!
@ -586,7 +586,7 @@ CONTAINS
!
! Purpose: Writes one field
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 12, 2004
!
@ -661,7 +661,7 @@ CONTAINS
!
! Purpose: Reads one field
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 12, 2004
!
@ -734,7 +734,7 @@ CONTAINS
!
! Purpose: Inserts one field
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 13, 2004
!
@ -807,7 +807,7 @@ CONTAINS
!
! Purpose: Inserts one field
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 13, 2004
!
@ -858,7 +858,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 13, 2004
!
@ -909,7 +909,7 @@ CONTAINS
!
! Return: Success: 0, Failure: -1
!
! Programmer: pvn@ncsa.uiuc.edu
! Programmer: Pedro Vicente
!
! Date: October 13, 2004
!

View File

@ -11,9 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include "H5DSprivate.h"
#include "H5LTprivate.h"
#include "H5IMprivate.h"
@ -25,29 +22,24 @@ static herr_t H5DS_is_reserved(hid_t did);
static hid_t H5DS_get_REFLIST_type(void);
/*-------------------------------------------------------------------------
* Function: H5DSset_scale
*
* Purpose: The dataset DSID is converted to a Dimension Scale dataset.
* Creates the CLASS attribute, set to the value "DIMENSION_SCALE"
* and an empty REFERENCE_LIST attribute.
* If DIMNAME is specified, then an attribute called NAME is created,
* with the value DIMNAME.
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: January 04, 2005
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
herr_t H5DSset_scale(hid_t dsid,
const char *dimname)
* Function: H5DSset_scale
*
* Purpose: The dataset DSID is converted to a Dimension Scale dataset.
* Creates the CLASS attribute, set to the value "DIMENSION_SCALE"
* and an empty REFERENCE_LIST attribute.
* If DIMNAME is specified, then an attribute called NAME is created,
* with the value DIMNAME.
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: Pedro Vicente
*
* Date: January 04, 2005
*
*-------------------------------------------------------------------------
*/
herr_t
H5DSset_scale(hid_t dsid, const char *dimname)
{
int has_dimlist;
H5I_type_t it;
@ -95,34 +87,28 @@ herr_t H5DSset_scale(hid_t dsid,
/*-------------------------------------------------------------------------
* Function: H5DSattach_scale
*
* Purpose: Define Dimension Scale DSID to be associated with dimension IDX
* of Dataset DID. Entries are created in the DIMENSION_LIST and
* REFERENCE_LIST attributes.
*
* Return:
* Success: SUCCEED
* Failure: FAIL
*
* Fails if: Bad arguments
* If DSID is not a Dimension Scale
* If DID is a Dimension Scale (A Dimension Scale cannot have scales)
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: December 20, 2004
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
herr_t H5DSattach_scale(hid_t did,
hid_t dsid,
unsigned int idx)
* Function: H5DSattach_scale
*
* Purpose: Define Dimension Scale DSID to be associated with dimension IDX
* of Dataset DID. Entries are created in the DIMENSION_LIST and
* REFERENCE_LIST attributes.
*
* Return:
* Success: SUCCEED
* Failure: FAIL
*
* Fails if: Bad arguments
* If DSID is not a Dimension Scale
* If DID is a Dimension Scale (A Dimension Scale cannot have scales)
*
* Programmer: Pedro Vicente
*
* Date: December 20, 2004
*
*-------------------------------------------------------------------------
*/
herr_t
H5DSattach_scale(hid_t did, hid_t dsid, unsigned int idx)
{
int has_dimlist;
int has_reflist;
@ -547,39 +533,31 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DSdetach_scale
*
* Purpose: If possible, deletes association of Dimension Scale DSID with
* dimension IDX of Dataset DID. This deletes the entries in the
* DIMENSION_LIST and REFERENCE_LIST attributes.
*
* Return:
* Success: SUCCEED
* Failure: FAIL
*
* Fails if: Bad arguments
* The dataset DID or DSID do not exist.
* The DSID is not a Dimension Scale
* DSID is not attached to DID.
* Note that a scale may be associated with more than dimension of the same dataset.
* If so, the detach operation only deletes one of the associations, for DID.
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: December 20, 2004
*
* Comments:
*
* Modifications: Function didn't delete DIMENSION_LIST attribute, when
* all dimension scales were detached from a dataset; added.
* 2010/05/13 EIP
*
*-------------------------------------------------------------------------
*/
herr_t H5DSdetach_scale(hid_t did,
hid_t dsid,
unsigned int idx)
* Function: H5DSdetach_scale
*
* Purpose: If possible, deletes association of Dimension Scale DSID with
* dimension IDX of Dataset DID. This deletes the entries in the
* DIMENSION_LIST and REFERENCE_LIST attributes.
*
* Return:
* Success: SUCCEED
* Failure: FAIL
*
* Fails if: Bad arguments
* The dataset DID or DSID do not exist.
* The DSID is not a Dimension Scale
* DSID is not attached to DID.
* Note that a scale may be associated with more than dimension of the same dataset.
* If so, the detach operation only deletes one of the associations, for DID.
*
* Programmer: Pedro Vicente
*
* Date: December 20, 2004
*
*-------------------------------------------------------------------------
*/
herr_t
H5DSdetach_scale(hid_t did, hid_t dsid, unsigned int idx)
{
int has_dimlist;
int has_reflist;
@ -940,35 +918,29 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DSis_attached
*
* Purpose: Report if dimension scale DSID is currently attached to
* dimension IDX of dataset DID by checking if DID has a pointer in the REFERENCE_LIST
* attribute and DSID (scale ) has a pointer in the DIMENSION_LIST attribute
*
* Return:
* 1: both the DS and the dataset pointers match
* 0: one of them or both do not match
* FAIL (-1): error
*
* Fails if: Bad arguments
* If DSID is not a Dimension Scale
* If DID is a Dimension Scale (A Dimension Scale cannot have scales)
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: February 18, 2005
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
htri_t H5DSis_attached(hid_t did,
hid_t dsid,
unsigned int idx)
* Function: H5DSis_attached
*
* Purpose: Report if dimension scale DSID is currently attached to
* dimension IDX of dataset DID by checking if DID has a pointer in the REFERENCE_LIST
* attribute and DSID (scale ) has a pointer in the DIMENSION_LIST attribute
*
* Return:
* 1: both the DS and the dataset pointers match
* 0: one of them or both do not match
* FAIL (-1): error
*
* Fails if: Bad arguments
* If DSID is not a Dimension Scale
* If DID is a Dimension Scale (A Dimension Scale cannot have scales)
*
* Programmer: Pedro Vicente
*
* Date: February 18, 2005
*
*-------------------------------------------------------------------------
*/
htri_t
H5DSis_attached(hid_t did, hid_t dsid, unsigned int idx)
{
int has_dimlist;
int has_reflist;
@ -1249,54 +1221,47 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DSiterate_scales
*
* Purpose: H5DSiterate_scales iterates over the scales attached to dimension DIM
* of dataset DID. For each scale in the list, the visitor_data and some
* additional information, specified below, are passed to the visitor function.
* The iteration begins with the IDX object in the group and the next element
* to be processed by the operator is returned in IDX. If IDX is NULL, then the
* iterator starts at zero.
*
* Parameters:
*
* hid_t DID; IN: the dataset
* unsigned int DIM; IN: the dimension of the dataset
* int *DS_IDX; IN/OUT: on input the dimension scale index to start iterating,
* on output the next index to visit. If NULL, start at
* the first position.
* H5DS_iterate_t VISITOR; IN: the visitor function
* void *VISITOR_DATA; IN: arbitrary data to pass to the visitor function.
*
* Iterate over all scales of DIM, calling an application callback
* with the item, key and any operator data.
*
* The operator callback receives a pointer to the item ,
* and the pointer to the operator data passed
* in to H5SL_iterate ('op_data'). The return values from an operator are:
* A. Zero causes the iterator to continue, returning zero when all
* nodes of that type have been processed.
* B. Positive causes the iterator to immediately return that positive
* value, indicating short-circuit success.
* C. Negative causes the iterator to immediately return that value,
* indicating failure.
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: January 31, 2005
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
herr_t H5DSiterate_scales(hid_t did,
unsigned int dim,
int *ds_idx,
H5DS_iterate_t visitor,
void *visitor_data )
* Function: H5DSiterate_scales
*
* Purpose: H5DSiterate_scales iterates over the scales attached to dimension DIM
* of dataset DID. For each scale in the list, the visitor_data and some
* additional information, specified below, are passed to the visitor function.
* The iteration begins with the IDX object in the group and the next element
* to be processed by the operator is returned in IDX. If IDX is NULL, then the
* iterator starts at zero.
*
* Parameters:
*
* hid_t DID; IN: the dataset
* unsigned int DIM; IN: the dimension of the dataset
* int *DS_IDX; IN/OUT: on input the dimension scale index to start iterating,
* on output the next index to visit. If NULL, start at
* the first position.
* H5DS_iterate_t VISITOR; IN: the visitor function
* void *VISITOR_DATA; IN: arbitrary data to pass to the visitor function.
*
* Iterate over all scales of DIM, calling an application callback
* with the item, key and any operator data.
*
* The operator callback receives a pointer to the item ,
* and the pointer to the operator data passed
* in to H5SL_iterate ('op_data'). The return values from an operator are:
* A. Zero causes the iterator to continue, returning zero when all
* nodes of that type have been processed.
* B. Positive causes the iterator to immediately return that positive
* value, indicating short-circuit success.
* C. Negative causes the iterator to immediately return that value,
* indicating failure.
*
* Programmer: Pedro Vicente
*
* Date: January 31, 2005
*
*-------------------------------------------------------------------------
*/
herr_t
H5DSiterate_scales(hid_t did, unsigned int dim, int *ds_idx,
H5DS_iterate_t visitor, void *visitor_data )
{
hid_t scale_id;
int rank;
@ -1450,24 +1415,20 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DSset_label
*
* Purpose: Set label for the dimension IDX of dataset DID to the value LABEL
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: January 11, 2005
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label)
* Function: H5DSset_label
*
* Purpose: Set label for the dimension IDX of dataset DID to the value LABEL
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: Pedro Vicente
*
* Date: January 11, 2005
*
*-------------------------------------------------------------------------
*/
herr_t
H5DSset_label(hid_t did, unsigned int idx, const char *label)
{
int has_labels;
hid_t sid = -1; /* space ID */
@ -1481,6 +1442,9 @@ herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label)
char ** buf; /* discarding the 'const' qualifier in the free */
char const ** const_buf; /* buf calls */
} u;
HDmemset(&u, 0, sizeof(u));
/*-------------------------------------------------------------------------
* parameter checking
*-------------------------------------------------------------------------
@ -1656,29 +1620,24 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DSget_label
*
* Purpose: Read the label LABEL for dimension IDX of dataset DID
* Up to 'size' characters are stored in 'label' followed by a '\0' string
* terminator. If the label is longer than 'size'-1,
* the string terminator is stored in the last position of the buffer to
* properly terminate the string.
*
* Return: 0 if no label found, size of label if found, Failure: FAIL
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: January 11, 2005
*
* Comments:
*
* Modifications:
* JIRA HDFFV-7673: Added a check to see if the label name exists,
* if not then returns zero. July 30, 2011. MSB
*
*-------------------------------------------------------------------------
*/
ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size)
* Function: H5DSget_label
*
* Purpose: Read the label LABEL for dimension IDX of dataset DID
* Up to 'size' characters are stored in 'label' followed by a '\0' string
* terminator. If the label is longer than 'size'-1,
* the string terminator is stored in the last position of the buffer to
* properly terminate the string.
*
* Return: 0 if no label found, size of label if found, Failure: FAIL
*
* Programmer: Pedro Vicente
*
* Date: January 11, 2005
*
*-------------------------------------------------------------------------
*/
ssize_t
H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size)
{
int has_labels;
hid_t sid = -1; /* space ID */
@ -1818,32 +1777,24 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DSget_scale_name
*
* Purpose: Read the name of dataset scale DID into buffer NAME
* Up to 'size' characters are stored in 'name' followed by a '\0' string
* terminator. If the name is longer than 'size'-1,
* the string terminator is stored in the last position of the buffer to
* properly terminate the string.
*
* Return: size of name if found, zero if not found, Failure: FAIL
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: January 04, 2005
*
* Comments:
*
* Modifications:
* The size of the name returned should not include the NULL termination
* in its value so as to be consistent with other HDF5 APIs.
*
*-------------------------------------------------------------------------
*/
ssize_t H5DSget_scale_name(hid_t did,
char *name,
size_t size)
* Function: H5DSget_scale_name
*
* Purpose: Read the name of dataset scale DID into buffer NAME
* Up to 'size' characters are stored in 'name' followed by a '\0' string
* terminator. If the name is longer than 'size'-1,
* the string terminator is stored in the last position of the buffer to
* properly terminate the string.
*
* Return: size of name if found, zero if not found, Failure: FAIL
*
* Programmer: Pedro Vicente
*
* Date: January 04, 2005
*
*-------------------------------------------------------------------------
*/
ssize_t
H5DSget_scale_name(hid_t did, char *name, size_t size)
{
hid_t aid; /* attribute ID */
hid_t tid = -1; /* attribute type ID */
@ -1945,24 +1896,20 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DSis_scale
*
* Purpose: check if the dataset DID is a dimension scale
*
* Return: 1, is, 0, not, FAIL, error
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: January 04, 2005
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
htri_t H5DSis_scale(hid_t did)
* Function: H5DSis_scale
*
* Purpose: check if the dataset DID is a dimension scale
*
* Return: 1, is, 0, not, FAIL, error
*
* Programmer: Pedro Vicente
*
* Date: January 04, 2005
*
*-------------------------------------------------------------------------
*/
htri_t
H5DSis_scale(hid_t did)
{
hid_t tid = -1; /* attribute type ID */
hid_t aid = -1; /* attribute ID */
@ -2048,27 +1995,22 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DSget_num_scales
*
* Purpose: get the number of scales linked to the IDX dimension of dataset DID
*
* Return:
* Success: number of scales
* Failure: FAIL
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: January 13, 2005
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
int H5DSget_num_scales(hid_t did,
unsigned int idx)
* Function: H5DSget_num_scales
*
* Purpose: get the number of scales linked to the IDX dimension of dataset DID
*
* Return:
* Success: number of scales
* Failure: FAIL
*
* Programmer: Pedro Vicente
*
* Date: January 13, 2005
*
*-------------------------------------------------------------------------
*/
int
H5DSget_num_scales(hid_t did, unsigned int idx)
{
int has_dimlist;
hid_t sid; /* space ID */
@ -2171,25 +2113,20 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DS_is_reserved
*
* Purpose: Verify that a dataset's CLASS is either an image, palette or table
*
* Return: true, false, fail
*
* Programmer: pvn@ncsa.uiuc.edu
*
* Date: March 19, 2005
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
static
herr_t H5DS_is_reserved(hid_t did)
* Function: H5DS_is_reserved
*
* Purpose: Verify that a dataset's CLASS is either an image, palette or table
*
* Return: true, false, fail
*
* Programmer: Pedro Vicente
*
* Date: March 19, 2005
*
*-------------------------------------------------------------------------
*/
static herr_t
H5DS_is_reserved(hid_t did)
{
int has_class;
hid_t tid = -1;
@ -2262,26 +2199,21 @@ out:
}
/*-------------------------------------------------------------------------
* Function: H5DS_get_REFLIST_type
*
* Purpose: This is a helper function to return a native type for
* the REFERENCE_LIST attribute.
*
* Return: Type identifier on success and negative on failure
*
* Programmer: epourmal@hdfgroup.org
*
* Date: May 22, 2010
*
* Comments:
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
static
hid_t H5DS_get_REFLIST_type(void)
* Function: H5DS_get_REFLIST_type
*
* Purpose: This is a helper function to return a native type for
* the REFERENCE_LIST attribute.
*
* Return: Type identifier on success and negative on failure
*
* Programmer: Elena Pourmal
*
* Date: May 22, 2010
*
*-------------------------------------------------------------------------
*/
static hid_t
H5DS_get_REFLIST_type(void)
{
hid_t ntid_t = -1;

View File

@ -13,8 +13,6 @@
#include "H5IMprivate.h"
#include "H5LTprivate.h"
#include <string.h>
#include <stdlib.h>
/*-------------------------------------------------------------------------
* Function: H5IMmake_image_8bit
@ -23,7 +21,7 @@
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: June 13, 2001
*
@ -77,7 +75,7 @@ herr_t H5IMmake_image_8bit( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: June 13, 2001
*
@ -162,7 +160,7 @@ herr_t H5IMmake_image_24bit( hid_t loc_id,
*
* Return:
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 28, 2001
*
@ -204,7 +202,7 @@ static herr_t find_palette(hid_t loc_id,
*
* Return: Success: 1, Failure: 0
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 11, 2001
*
@ -230,7 +228,7 @@ herr_t H5IM_find_palette( hid_t loc_id )
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: July 25, 2001
*
@ -412,7 +410,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: June 13, 2001
*
@ -462,7 +460,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 01, 2001
*
@ -518,7 +516,7 @@ herr_t H5IMmake_palette( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: May 01, 2001
*
@ -695,7 +693,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: September 10, 2001
*
@ -796,7 +794,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: July 22, 2001
*
@ -887,7 +885,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: July 22, 2001
*
@ -1003,7 +1001,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: August 30, 2001
*
@ -1110,7 +1108,7 @@ out:
*
* Return: true, false, fail
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: August 30, 2001
*
@ -1214,7 +1212,7 @@ out:
*
* Return: true, false, fail
*
* Programmer: Pedro Vicente Nunes, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente Nunes
*
* Date: August 30, 2001
*

View File

@ -11,10 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>
#include "H5LDprivate.h"
/*-------------------------------------------------------------------------

View File

@ -11,11 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "H5LTprivate.h"
/* For Lex and Yacc */
@ -504,7 +499,7 @@ static herr_t H5LT_get_attribute_mem(hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Quincey Koziol, koziol@hdfgroup.org
* Programmer: Quincey Koziol
*
* Date: October 10, 2007
*
@ -570,7 +565,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 19, 2001
*
@ -599,7 +594,7 @@ herr_t H5LTmake_dataset( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 14, 2001
*
@ -628,7 +623,7 @@ herr_t H5LTmake_dataset_char( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 14, 2001
*
@ -657,7 +652,7 @@ herr_t H5LTmake_dataset_short( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 14, 2001
*
@ -688,7 +683,7 @@ herr_t H5LTmake_dataset_int( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 14, 2001
*
@ -717,7 +712,7 @@ herr_t H5LTmake_dataset_long( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 14, 2001
*
@ -748,7 +743,7 @@ herr_t H5LTmake_dataset_float( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 14, 2001
*
@ -778,7 +773,7 @@ herr_t H5LTmake_dataset_double( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -970,7 +965,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Quincey Koziol, koziol@hdfgroup.org
* Programmer: Quincey Koziol
*
* Date: October 8, 2007
*
@ -1012,7 +1007,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: June 13, 2001
*
@ -1035,7 +1030,7 @@ herr_t H5LTread_dataset(hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 5, 2001
*
@ -1056,7 +1051,7 @@ herr_t H5LTread_dataset_char( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 5, 2001
*
@ -1077,7 +1072,7 @@ herr_t H5LTread_dataset_short( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 5, 2001
*
@ -1098,7 +1093,7 @@ herr_t H5LTread_dataset_int( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 5, 2001
*
@ -1119,7 +1114,7 @@ herr_t H5LTread_dataset_long( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 5, 2001
*
@ -1141,7 +1136,7 @@ herr_t H5LTread_dataset_float( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 5, 2001
*
@ -1163,7 +1158,7 @@ herr_t H5LTread_dataset_double( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: October 05, 2004
*
@ -1216,7 +1211,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 4, 2001
*
@ -1272,7 +1267,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 4, 2001
* Modified: February 28, 2006: checked for NULL parameters
@ -1348,7 +1343,7 @@ out:
*
* Purpose: operator function used by H5LTfind_dataset
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: June 21, 2001
*
@ -1392,7 +1387,7 @@ find_dataset(hid_t loc_id, const char *name, const H5L_info2_t *linfo, void *op_
* Purpose: Inquires if a dataset named dset_name exists attached
* to the object loc_id.
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: July 15, 2001
*
@ -1436,7 +1431,7 @@ H5_GCC_DIAG_ON(cast-qual)
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: July 23, 2001
*
@ -1534,7 +1529,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: July 25, 2001
*
@ -1613,7 +1608,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 7, 2001
*
@ -1643,7 +1638,7 @@ herr_t H5LTset_attribute_char( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 8, 2004
*
@ -1674,7 +1669,7 @@ herr_t H5LTset_attribute_uchar( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 7, 2001
*
@ -1705,7 +1700,7 @@ herr_t H5LTset_attribute_short( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 8, 2004
*
@ -1736,7 +1731,7 @@ herr_t H5LTset_attribute_ushort( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 7, 2001
*
@ -1767,7 +1762,7 @@ herr_t H5LTset_attribute_int( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 8, 2004
*
@ -1799,7 +1794,7 @@ herr_t H5LTset_attribute_uint( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 7, 2001
*
@ -1829,7 +1824,7 @@ herr_t H5LTset_attribute_long( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Elena Pourmal, epourmal@ncsa.uiuc.edu
* Programmer: Elena Pourmal
*
* Date: June 17, 2005
*
@ -1861,7 +1856,7 @@ herr_t H5LTset_attribute_long_long( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 8, 2004
*
@ -1893,7 +1888,7 @@ herr_t H5LTset_attribute_ulong( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: July 25, 2001
*
@ -1926,7 +1921,7 @@ herr_t H5LTset_attribute_float( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 7, 2001
*
@ -1957,7 +1952,7 @@ herr_t H5LTset_attribute_double( hid_t loc_id,
*
* Purpose: operator function used by H5LT_find_attribute
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: June 21, 2001
*
@ -1998,7 +1993,7 @@ find_attr(hid_t loc_id, const char *name, const H5A_info_t *ainfo,
* Purpose: Inquires if an attribute named attr_name exists attached to
* the object loc_id.
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: May 17, 2006
*
@ -2020,7 +2015,7 @@ herr_t H5LTfind_attribute( hid_t loc_id, const char* attr_name )
*
* Purpose: Inquires if an attribute named attr_name exists attached to the object loc_id.
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: June 21, 2001
*
@ -2059,7 +2054,7 @@ H5_GCC_DIAG_ON(cast-qual)
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 4, 2001
*
@ -2129,7 +2124,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 4, 2001
*
@ -2215,7 +2210,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Raymond Lu, slu@ncsa.uiuc.edu
* Programmer: Raymond Lu
*
* Date: October 6, 2004
*
@ -2265,7 +2260,7 @@ out:
*
* Return: void
*
* Programmer: Raymond Lu, songyulu@hdfgroup.org
* Programmer: Raymond Lu
*
* Date: 29 September 2011
*
@ -2325,7 +2320,7 @@ out:
*
* Return: void
*
* Programmer: Raymond Lu, slu@ncsa.uiuc.edu
* Programmer: Raymond Lu
*
* Date: December 6, 2005
*
@ -2489,7 +2484,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Raymond Lu, slu@ncsa.uiuc.edu
* Programmer: Raymond Lu
*
* Date: December 6, 2005
*
@ -2536,7 +2531,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Raymond Lu, slu@ncsa.uiuc.edu
* Programmer: Raymond Lu
*
* Date: December 20, 2005
*
@ -3101,7 +3096,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3153,7 +3148,7 @@ herr_t H5LTget_attribute_string( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3182,7 +3177,7 @@ herr_t H5LTget_attribute_char( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 8, 2004
*
@ -3213,7 +3208,7 @@ herr_t H5LTget_attribute_uchar( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3242,7 +3237,7 @@ herr_t H5LTget_attribute_short( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 8, 2004
*
@ -3273,7 +3268,7 @@ herr_t H5LTget_attribute_ushort( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3302,7 +3297,7 @@ herr_t H5LTget_attribute_int( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 8, 2004
*
@ -3333,7 +3328,7 @@ herr_t H5LTget_attribute_uint( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3362,7 +3357,7 @@ herr_t H5LTget_attribute_long( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Elena Pourmal, epourmal@ncsa.uiuc.edu
* Programmer: Elena Pourmal
*
* Date: June 17, 2005
*
@ -3392,7 +3387,7 @@ herr_t H5LTget_attribute_long_long( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 8, 2004
*
@ -3422,7 +3417,7 @@ herr_t H5LTget_attribute_ulong( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3454,7 +3449,7 @@ herr_t H5LTget_attribute_float( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3486,7 +3481,7 @@ herr_t H5LTget_attribute_double( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3525,7 +3520,7 @@ herr_t H5LTget_attribute( hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3589,7 +3584,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: September 19, 2002
*
@ -3639,7 +3634,7 @@ out:
*
* Return: FAIL on error, SUCCESS on success
*
* Programmer: pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: January 04, 2005
*

File diff suppressed because it is too large Load Diff

View File

@ -28,6 +28,13 @@
#pragma GCC diagnostic ignored "-Wsuggest-attribute=const"
#endif
/* Turn off null dereference warnings in gcc.
* We have no control over this generated code.
*/
#if defined __GNUC__ && 600 <= __GNUC__ * 100
#pragma GCC diagnostic ignored "-Wnull-dereference"
#endif
int my_yyinput(char *, int);
#undef YY_INPUT
#define YY_INPUT(b, r, ms) (r=my_yyinput(b, ms))

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,8 @@
/* A Bison parser, made by GNU Bison 2.7. */
/* A Bison parser, made by GNU Bison 3.0.4. */
/* Bison interface for Yacc-like parsers in C
Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -32,7 +32,7 @@
#ifndef YY_H5LTYY_HL_SRC_H5LTPARSE_H_INCLUDED
# define YY_H5LTYY_HL_SRC_H5LTPARSE_H_INCLUDED
/* Enabling traces. */
/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
@ -40,105 +40,92 @@
extern int H5LTyydebug;
#endif
/* Tokens. */
/* Token type. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
/* Put the tokens into the symbol table, so that GDB and other debuggers
know about them. */
enum yytokentype {
H5T_STD_I8BE_TOKEN = 258,
H5T_STD_I8LE_TOKEN = 259,
H5T_STD_I16BE_TOKEN = 260,
H5T_STD_I16LE_TOKEN = 261,
H5T_STD_I32BE_TOKEN = 262,
H5T_STD_I32LE_TOKEN = 263,
H5T_STD_I64BE_TOKEN = 264,
H5T_STD_I64LE_TOKEN = 265,
H5T_STD_U8BE_TOKEN = 266,
H5T_STD_U8LE_TOKEN = 267,
H5T_STD_U16BE_TOKEN = 268,
H5T_STD_U16LE_TOKEN = 269,
H5T_STD_U32BE_TOKEN = 270,
H5T_STD_U32LE_TOKEN = 271,
H5T_STD_U64BE_TOKEN = 272,
H5T_STD_U64LE_TOKEN = 273,
H5T_NATIVE_CHAR_TOKEN = 274,
H5T_NATIVE_SCHAR_TOKEN = 275,
H5T_NATIVE_UCHAR_TOKEN = 276,
H5T_NATIVE_SHORT_TOKEN = 277,
H5T_NATIVE_USHORT_TOKEN = 278,
H5T_NATIVE_INT_TOKEN = 279,
H5T_NATIVE_UINT_TOKEN = 280,
H5T_NATIVE_LONG_TOKEN = 281,
H5T_NATIVE_ULONG_TOKEN = 282,
H5T_NATIVE_LLONG_TOKEN = 283,
H5T_NATIVE_ULLONG_TOKEN = 284,
H5T_IEEE_F32BE_TOKEN = 285,
H5T_IEEE_F32LE_TOKEN = 286,
H5T_IEEE_F64BE_TOKEN = 287,
H5T_IEEE_F64LE_TOKEN = 288,
H5T_NATIVE_FLOAT_TOKEN = 289,
H5T_NATIVE_DOUBLE_TOKEN = 290,
H5T_NATIVE_LDOUBLE_TOKEN = 291,
H5T_STRING_TOKEN = 292,
STRSIZE_TOKEN = 293,
STRPAD_TOKEN = 294,
CSET_TOKEN = 295,
CTYPE_TOKEN = 296,
H5T_VARIABLE_TOKEN = 297,
H5T_STR_NULLTERM_TOKEN = 298,
H5T_STR_NULLPAD_TOKEN = 299,
H5T_STR_SPACEPAD_TOKEN = 300,
H5T_CSET_ASCII_TOKEN = 301,
H5T_CSET_UTF8_TOKEN = 302,
H5T_C_S1_TOKEN = 303,
H5T_FORTRAN_S1_TOKEN = 304,
H5T_OPAQUE_TOKEN = 305,
OPQ_SIZE_TOKEN = 306,
OPQ_TAG_TOKEN = 307,
H5T_COMPOUND_TOKEN = 308,
H5T_ENUM_TOKEN = 309,
H5T_ARRAY_TOKEN = 310,
H5T_VLEN_TOKEN = 311,
STRING = 312,
NUMBER = 313
};
enum yytokentype
{
H5T_STD_I8BE_TOKEN = 258,
H5T_STD_I8LE_TOKEN = 259,
H5T_STD_I16BE_TOKEN = 260,
H5T_STD_I16LE_TOKEN = 261,
H5T_STD_I32BE_TOKEN = 262,
H5T_STD_I32LE_TOKEN = 263,
H5T_STD_I64BE_TOKEN = 264,
H5T_STD_I64LE_TOKEN = 265,
H5T_STD_U8BE_TOKEN = 266,
H5T_STD_U8LE_TOKEN = 267,
H5T_STD_U16BE_TOKEN = 268,
H5T_STD_U16LE_TOKEN = 269,
H5T_STD_U32BE_TOKEN = 270,
H5T_STD_U32LE_TOKEN = 271,
H5T_STD_U64BE_TOKEN = 272,
H5T_STD_U64LE_TOKEN = 273,
H5T_NATIVE_CHAR_TOKEN = 274,
H5T_NATIVE_SCHAR_TOKEN = 275,
H5T_NATIVE_UCHAR_TOKEN = 276,
H5T_NATIVE_SHORT_TOKEN = 277,
H5T_NATIVE_USHORT_TOKEN = 278,
H5T_NATIVE_INT_TOKEN = 279,
H5T_NATIVE_UINT_TOKEN = 280,
H5T_NATIVE_LONG_TOKEN = 281,
H5T_NATIVE_ULONG_TOKEN = 282,
H5T_NATIVE_LLONG_TOKEN = 283,
H5T_NATIVE_ULLONG_TOKEN = 284,
H5T_IEEE_F32BE_TOKEN = 285,
H5T_IEEE_F32LE_TOKEN = 286,
H5T_IEEE_F64BE_TOKEN = 287,
H5T_IEEE_F64LE_TOKEN = 288,
H5T_NATIVE_FLOAT_TOKEN = 289,
H5T_NATIVE_DOUBLE_TOKEN = 290,
H5T_NATIVE_LDOUBLE_TOKEN = 291,
H5T_STRING_TOKEN = 292,
STRSIZE_TOKEN = 293,
STRPAD_TOKEN = 294,
CSET_TOKEN = 295,
CTYPE_TOKEN = 296,
H5T_VARIABLE_TOKEN = 297,
H5T_STR_NULLTERM_TOKEN = 298,
H5T_STR_NULLPAD_TOKEN = 299,
H5T_STR_SPACEPAD_TOKEN = 300,
H5T_CSET_ASCII_TOKEN = 301,
H5T_CSET_UTF8_TOKEN = 302,
H5T_C_S1_TOKEN = 303,
H5T_FORTRAN_S1_TOKEN = 304,
H5T_OPAQUE_TOKEN = 305,
OPQ_SIZE_TOKEN = 306,
OPQ_TAG_TOKEN = 307,
H5T_COMPOUND_TOKEN = 308,
H5T_ENUM_TOKEN = 309,
H5T_ARRAY_TOKEN = 310,
H5T_VLEN_TOKEN = 311,
STRING = 312,
NUMBER = 313
};
#endif
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
union YYSTYPE
{
/* Line 2058 of yacc.c */
#line 72 "hl/src/H5LTparse.y"
#line 72 "hl/src/H5LTparse.y" /* yacc.c:1909 */
int ival; /*for integer token*/
char *sval; /*for name string*/
hid_t hid; /*for hid_t token*/
#line 119 "hl/src/H5LTparse.h" /* yacc.c:1909 */
};
/* Line 2058 of yacc.c */
#line 122 "hl/src/H5LTparse.h"
} YYSTYPE;
typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
#endif
extern YYSTYPE H5LTyylval;
#ifdef YYPARSE_PARAM
#if defined __STDC__ || defined __cplusplus
int H5LTyyparse (void *YYPARSE_PARAM);
#else
int H5LTyyparse ();
#endif
#else /* ! YYPARSE_PARAM */
#if defined __STDC__ || defined __cplusplus
int H5LTyyparse (void);
#else
int H5LTyyparse ();
#endif
#endif /* ! YYPARSE_PARAM */
#endif /* !YY_H5LTYY_HL_SRC_H5LTPARSE_H_INCLUDED */

View File

@ -11,8 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdlib.h>
#include "H5PTprivate.h"
#include "H5TBprivate.h"
@ -53,8 +51,8 @@ static herr_t H5PT_get_index(htbl_t *table_id, hsize_t *pt_index);
*
* Return: Success: table ID, Failure: FAIL
*
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu (Author of H5PTcreate_fl)
* James Laird, jlaird@ncsa.uiuc.edu (Author of H5PTcreate_fl)
* Programmer: Nat Furrer (Author of H5PTcreate_fl)
* James Laird (Author of H5PTcreate_fl)
*
* Date: March 12, 2004
*
@ -182,8 +180,8 @@ error:
*
* Return: Success: table ID, Failure: Negative
*
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
* James Laird, jlaird@ncsa.uiuc.edu
* Programmer: Nat Furrer
* James Laird
*
* Date: March 12, 2004
*
@ -301,8 +299,8 @@ error:
*
* Return: Success: table ID, Failure: Negative
*
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
* James Laird, jlaird@ncsa.uiuc.edu
* Programmer: Nat Furrer
* James Laird
*
* Date: March 10, 2004
*
@ -426,8 +424,8 @@ H5PT_free_id(void *id)
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
* James Laird, jlaird@ncsa.uiuc.edu
* Programmer: Nat Furrer
* James Laird
*
* Date: March 10, 2004
*
@ -475,8 +473,8 @@ error:
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
* James Laird, jlaird@ncsa.uiuc.edu
* Programmer: Nat Furrer
* James Laird
*
* Date: April 21, 2004
*
@ -530,8 +528,8 @@ error:
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
* James Laird, jlaird@ncsa.uiuc.edu
* Programmer: Nat Furrer
* James Laird
*
* Date: March 12, 2004
*
@ -583,8 +581,8 @@ error:
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
* James Laird, jlaird@ncsa.uiuc.edu
* Programmer: Nat Furrer
* James Laird
*
* Date: March 10, 2004
*
@ -628,8 +626,8 @@ error:
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
* James Laird, jlaird@ncsa.uiuc.edu
* Programmer: Nat Furrer
* James Laird
*
* Date: March 12, 2004
*
@ -680,8 +678,8 @@ error:
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
* James Laird, jlaird@ncsa.uiuc.edu
* Programmer: Nat Furrer
* James Laird
*
* Date: March 12, 2004
*
@ -737,8 +735,8 @@ H5PT_get_index(htbl_t *table, hsize_t *pt_index)
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
* James Laird, jlaird@ncsa.uiuc.edu
* Programmer: Nat Furrer
* James Laird
*
* Date: April 23, 2004
*
@ -795,8 +793,8 @@ herr_t H5PTget_index(hid_t table_id, hsize_t *pt_index)
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
* James Laird, jlaird@ncsa.uiuc.edu
* Programmer: Nat Furrer
* James Laird
*
* Date: March 12, 2004
*
@ -832,8 +830,8 @@ error:
*
* Return: Success: SUCCEED, Failure: FAIL
*
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
* James Laird, jlaird@ncsa.uiuc.edu
* Programmer: Nat Furrer
* James Laird
*
* Date: March 12, 2004
*
@ -861,8 +859,8 @@ herr_t H5PTis_valid(hid_t table_id)
*
* Return: True: 1, False: 0, Failure: FAIL
*
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
* James Laird, jlaird@ncsa.uiuc.edu
* Programmer: Nat Furrer
* James Laird
*
* Date: April 14, 2004
*
@ -910,8 +908,8 @@ error:
* Return: Success: SUCCEED, Failure: FAIL
* -2 if memory was reclaimed but another error occurred
*
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
* James Laird, jlaird@ncsa.uiuc.edu
* Programmer: Nat Furrer
* James Laird
*
* Date: April 12, 2004
*

View File

@ -11,9 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdlib.h>
#include <string.h>
#include "H5LTprivate.h"
#include "H5TBprivate.h"
@ -55,7 +52,7 @@ static hid_t H5TB_create_type(hid_t loc_id,
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
* Quincey Koziol
*
* Date: January 17, 2001
@ -275,7 +272,7 @@ out:
* Return: Success: 0, Failure: -1
*
* Programmers:
* Pedro Vicente, pvn@ncsa.uiuc.edu
* Pedro Vicente
* Quincey Koziol
*
* Date: November 19, 2001
@ -345,7 +342,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@ -442,7 +439,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 21, 2001
*
@ -605,7 +602,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 21, 2001
*
@ -778,7 +775,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 20, 2001
*
@ -853,7 +850,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@ -923,7 +920,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@ -1086,7 +1083,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@ -1251,7 +1248,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 26, 2001
*
@ -1413,7 +1410,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 26, 2001
*
@ -1569,7 +1566,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: December 5, 2001
*
@ -1701,7 +1698,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: December 10, 2001
*
@ -2059,7 +2056,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: January 30, 2002
*
@ -2480,7 +2477,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: January 30, 2002
*
@ -2934,7 +2931,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: January 30, 2001
*
@ -2960,7 +2957,7 @@ herr_t H5TBAget_title(hid_t loc_id,
*
* Return: Success: TRUE/FALSE, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: January 30, 2002
*
@ -3033,7 +3030,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@ -3120,7 +3117,7 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@ -3240,7 +3237,7 @@ out:
*
* Return: Success: TRUE/FALSE, Failure: N/A
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: November 19, 2001
*
@ -3281,7 +3278,7 @@ hbool_t H5TB_find_field(const char *field, const char *field_list)
*
* Return: Success: 0, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: December 6, 2001
*
@ -3345,7 +3342,7 @@ out:
*
* Return: Success: the memory type ID, Failure: -1
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
* Programmer: Pedro Vicente
*
* Date: March 31, 2004
*
@ -3445,8 +3442,8 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
* James Laird, jlaird@ncsa.uiuc.edu
* Programmer: Nat Furrer
* James Laird
*
* Date: March 8, 2004
*
@ -3512,8 +3509,8 @@ out:
*
* Return: Success: 0, Failure: -1
*
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
* James Laird, jlaird@ncsa.uiuc.edu
* Programmer: Nat Furrer
* James Laird
*
* Date: March 8, 2004
*

View File

@ -23,8 +23,6 @@
* in test_ds.c will read them.
*/
#include <stdlib.h>
#include <string.h>
#include "h5hltest.h"
#include "H5DSpublic.h"
#include "H5LTpublic.h"

View File

@ -12,7 +12,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
* Programmer: Quincey Koziol
* Friday, April 28, 2006
*
* Purpose: Test support stuff.

View File

@ -11,8 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdlib.h>
#include <string.h>
#include "h5hltest.h"
#include "H5srcdir.h"
#include "H5DSpublic.h"

View File

@ -11,10 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "h5hltest.h"
#include "H5DOpublic.h"

View File

@ -11,10 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include "h5hltest.h"
#include "H5srcdir.h"
#include "H5LTpublic.h"

View File

@ -11,11 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <setjmp.h>
#include "h5hltest.h"
#include "H5srcdir.h"
#include "H5LDpublic.h"

View File

@ -11,8 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdlib.h>
#include <string.h>
#include "h5hltest.h"
#include "H5srcdir.h"
#include "H5LTpublic.h"

View File

@ -11,8 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdlib.h>
#include <string.h>
#include "h5hltest.h"
#include "H5PTpublic.h"
#include "H5TBpublic.h"

View File

@ -11,8 +11,6 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdlib.h>
#include <string.h>
#include "h5hltest.h"
#include "H5srcdir.h"
#include "H5TBpublic.h"

View File

@ -22,7 +22,7 @@
*
* Purpose: generate files for h52gif testing
*
* Programmer: Pedro Vicente, pvn@hdfgroup.org
* Programmer: Pedro Vicente
*
* Date: March 15, 2007
*

View File

@ -6687,6 +6687,51 @@ public class H5 implements java.io.Serializable {
public synchronized static native void H5Pset_evict_on_close(long fapl_id, boolean evict_on_close)
throws HDF5LibraryException;
/**
* H5Pget_use_file_locking retrieves whether we are using file locking.
*
* @param fapl_id
* IN: File access property list identifier
*
* @exception HDF5LibraryException
* - Error from the HDF-5 Library.
*
**/
public synchronized static native boolean H5Pget_use_file_locking(long fapl_id)
throws HDF5LibraryException;
/**
* H5Pget_use_file_locking retrieves whether we ignore file locks when they are disabled.
*
* @param fapl_id
* IN: File access property list identifier
*
* @exception HDF5LibraryException
* - Error from the HDF-5 Library.
*
**/
public synchronized static native boolean H5Pget_ignore_disabled_file_locking(long fapl_id)
throws HDF5LibraryException;
/**
* H5Pset_file_locking sets parameters related to file locking.
*
* @param fapl_id
* IN: File access property list identifier
*
* @param use_file_locking
* IN: Whether the library will use file locking when opening files (mainly for SWMR semantics).
*
* @param ignore_when_disabled
* IN: Whether file locking will be ignored when disabled on a file system (useful for Lustre).
*
* @exception HDF5LibraryException
* - Error from the HDF-5 Library.
*
**/
public synchronized static native void H5Pset_file_locking(long fapl_id, boolean use_file_locking, boolean ignore_when_disabled)
throws HDF5LibraryException;
// ///// unimplemented /////
// herr_t H5Pset_vol(hid_t plist_id, hid_t new_vol_id, const void *new_vol_info);
// herr_t H5Pget_vol_id(hid_t plist_id, hid_t *vol_id);

View File

@ -1375,6 +1375,78 @@ done:
return bval;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1evict_1on_1close */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_file_locking
* Signature: (JZZ)V
*/
JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1file_1locking
(JNIEnv *env, jclass clss, jlong fapl_id, jboolean use_file_locking, jboolean ignore_when_disabled)
{
hbool_t use_file_locking_val = TRUE;
hbool_t ignore_when_disabled_val = TRUE;
UNUSED(clss);
use_file_locking_val = (use_file_locking == JNI_TRUE) ? TRUE : FALSE;
ignore_when_disabled_val = (ignore_when_disabled == JNI_TRUE) ? TRUE : FALSE;
if (H5Pset_file_locking((hid_t)fapl_id, use_file_locking_val, ignore_when_disabled_val) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1file_1locking */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_use_file_locking
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1use_1file_1locking
(JNIEnv *env, jclass clss, jlong fapl_id)
{
hbool_t use_file_locking_val = TRUE;
hbool_t unused = TRUE;
jboolean bval = JNI_FALSE;
UNUSED(clss);
if (H5Pget_file_locking((hid_t)fapl_id, &use_file_locking_val, &unused) < 0)
H5_LIBRARY_ERROR(ENVONLY);
bval = (use_file_locking_val == TRUE) ? JNI_TRUE : JNI_FALSE;
done:
return bval;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1use_1file_1locking */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_ignore_disabled_file_locking
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1ignore_1disabled_1file_1locking
(JNIEnv *env, jclass clss, jlong fapl_id)
{
hbool_t ignore_when_disabled_val = TRUE;
hbool_t unused = TRUE;
jboolean bval = JNI_FALSE;
UNUSED(clss);
if (H5Pget_file_locking((hid_t)fapl_id, &unused, &ignore_when_disabled_val) < 0)
H5_LIBRARY_ERROR(ENVONLY);
bval = (ignore_when_disabled_val == TRUE) ? JNI_TRUE : JNI_FALSE;
done:
return bval;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1ignore_1disabled_1file_1locking */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_metadata_read_attempts

View File

@ -390,6 +390,33 @@ JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1evict_1on_1close
(JNIEnv *, jclass, jlong);
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_file_locking
* Signature: (JZZ)V
*/
JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1file_1locking
(JNIEnv *env, jclass clss, jlong fapl_id, jboolean use_file_locking, jboolean ignore_when_disabled);
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_use_file_locking
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1use_1file_1locking
(JNIEnv *env, jclass clss, jlong fapl_id);
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_ignore_disabled_file_locking
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1ignore_1disabled_1file_1locking
(JNIEnv *env, jclass clss, jlong fapl_id);
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_metadata_read_attempts

View File

@ -1398,4 +1398,36 @@ public class TestH5Pfapl {
fail("H5P_evict_on_close: " + err);
}
}
@Test
public void testH5P_file_locking() {
boolean use_file_locking = false;
boolean ignore_disabled_file_locking = false;
try {
// false values (usually not the default)
H5.H5Pset_file_locking(fapl_id, false, false);
use_file_locking = H5.H5Pget_use_file_locking(fapl_id);
ignore_disabled_file_locking = H5.H5Pget_ignore_disabled_file_locking(fapl_id);
assertFalse("H5P_file_locking", use_file_locking);
assertFalse("H5P_file_locking", ignore_disabled_file_locking);
// true values (typically the default)
H5.H5Pset_file_locking(fapl_id, true, true);
use_file_locking = H5.H5Pget_use_file_locking(fapl_id);
ignore_disabled_file_locking = H5.H5Pget_ignore_disabled_file_locking(fapl_id);
assertTrue("H5P_file_locking", use_file_locking);
assertTrue("H5P_file_locking", ignore_disabled_file_locking);
}
catch (HDF5PropertyListInterfaceException err) {
// parallel is not supported
if (err.getMinorErrorNumber() != HDF5Constants.H5E_UNSUPPORTED) {
err.printStackTrace();
fail("H5P_test_file_locking: " + err);
}
}
catch (Throwable err) {
err.printStackTrace();
fail("H5P_test_file_locking: " + err);
}
}
}

View File

@ -28,6 +28,7 @@ JUnit version 4.11
.testH5Pset_elink_fapl
.testH5P_hyper_vector_size
.testH5P_gc_references
.testH5P_file_locking
.testH5P_family_offset
.testH5P_fapl_core
.testH5P_fapl_muti
@ -37,5 +38,5 @@ JUnit version 4.11
Time: XXXX
OK (35 tests)
OK (36 tests)

View File

@ -330,6 +330,55 @@ New Features
(ADB - 2018/07/16)
- Add file locking configure and CMake options
HDF5 1.10.0 introduced a file locking scheme, primarily to help
enforce SWMR setup. Formerly, the only user-level control of the scheme
was via the HDF5_USE_FILE_LOCKING environment variable.
This change introduces configure-time options that control whether
or not file locking will be used and whether or not the library
ignores errors when locking has been disabled on the file system
(useful on some HPC Lustre installations).
In both the Autotools and CMake, the settings have the effect of changing
the default property list settings (see the H5Pset/get_file_locking()
entry, below).
The yes/no/best-effort file locking configure setting has also been
added to the libhdf5.settings file.
Autotools:
An --enable-file-locking=(yes|no|best-effort) option has been added.
yes: Use file locking.
no: Do not use file locking.
best-effort: Use file locking and ignore "disabled" errors.
CMake:
Two self-explanatory options have been added:
HDF5_USE_FILE_LOCKING
HDF5_IGNORE_DISABLED_FILE_LOCKS
Setting both of these to ON is the equivalent to the Autotools'
best-effort setting.
NOTE:
The precedence order of the various file locking control mechanisms is:
1) HDF5_USE_FILE_LOCKING environment variable (highest)
2) H5Pset_file_locking()
3) configure/CMake options (which set the property list defaults)
4) library defaults (currently best-effort)
(DER - 2020/07/30, HDFFV-11092)
Library:
--------
@ -507,6 +556,32 @@ New Features
(DER - 2020/03/18, HDFFV-11057)
- Add BEST_EFFORT value to HDF5_USE_FILE_LOCKING environment variable
This change adds a BEST_EFFORT to the TRUE/FALSE, 1/0 settings that
were previously accepted. This option turns on file locking but
ignores locking errors when the library detects that file locking
has been disabled on a file system (useful on some HPC Lustre
installations).
The capitalization of BEST_EFFORT is mandatory.
See the configure option discussion for HDFFV-11092 (above) for more
information on the file locking feature and how it's controlled.
(DER - 2020/07/30, HDFFV-11092)
- Add H5Pset/get_file_locking() API calls
This change adds new API calls which can be used to set or get the
file locking parameters. The single API call sets both the "use file
locking" flag and the "ignore disabled file locking" flag.
See the configure option discussion for HDFFV-11092 (above) for more
information on the file locking feature and how it's controlled.
(DER - 2020/07/30, HDFFV-11092)
Parallel Library:
-----------------
@ -537,11 +612,21 @@ New Features
(MSB, 2019/01/08, HDFFV-10443)
- Add wrappers for H5Pset/get_file_locking() API calls
h5pget_file_locking_f()
h5pset_file_locking_f()
See the configure option discussion for HDFFV-11092 (above) for more
information on the file locking feature and how it's controlled.
(DER - 2020/07/30, HDFFV-11092)
C++ Library:
------------
- Added new wrappers for H5Pset/get_create_intermediate_group()
LinkCreatPropList::setCreateIntermediateGroup()
LinkCreatPropList::getCreateIntermediateGroup()
LinkCreatPropList::setCreateIntermediateGroup()
(BMR - 2019/04/22, HDFFV-10622)
@ -550,6 +635,16 @@ New Features
(BMR - 2019/02/14, HDFFV-10532)
- Add wrappers for H5Pset/get_file_locking() API calls
FileAccPropList::setFileLocking()
FileAccPropList::getFileLocking()
See the configure option discussion for HDFFV-11092 (above) for more
information on the file locking feature and how it's controlled.
(DER - 2020/07/30, HDFFV-11092)
Java Library:
----------------
@ -587,6 +682,20 @@ New Features
(DER - 2018/12/08, HDFFV-10252)
- Add wrappers for H5Pset/get_file_locking() API calls
H5Pset_file_locking()
H5Pget_use_file_locking()
H5Pget_ignore_disabled_file_locking()
Unlike the C++ and Fortran wrappers, there are separate getters for the
two file locking settings, each of which returns a boolean value.
See the configure option discussion for HDFFV-11092 (above) for more
information on the file locking feature and how it's controlled.
(DER - 2020/07/30, HDFFV-11092)
Tools:
------
@ -656,6 +765,15 @@ Bug Fixes since HDF5-1.10.3 release
Library
-------
- Explicitly declared dlopen to use RTLD_LOCAL
dlopen documentation states that if neither RTLD_GLOBAL nor
RTLD_LOCAL are specified, then the default behavior is unspecified.
The default on linux is usually RTLD_LOCAL while macos will default
to RTLD_GLOBAL.
(ADB - 2020/08/12, HDFFV-11127)
- Fixed issues CVE-2018-13870 and CVE-2018-13869
When a buffer overflow occurred because a name length was corrupted
@ -665,7 +783,7 @@ Bug Fixes since HDF5-1.10.3 release
locations to prevent the crashes and h5dump now simply fails with an
error message when this error condition occurs.
(BMR - 2020/7/22, HDFFV-11120 and HDFFV-11121)
(BMR - 2020/07/22, HDFFV-11120 and HDFFV-11121)
- Fixed the segmentation fault when reading attributes with multiple threads

View File

@ -138,7 +138,7 @@ static const H5AC_class_t *const H5AC_class_s[] = {
/*-------------------------------------------------------------------------
* Function: H5AC_init
*
* Purpose: Initialize the interface from some other layer.
* Purpose: Initialize the interface from some other layer.
*
* Return: Success: non-negative
* Failure: negative
@ -983,9 +983,10 @@ H5AC_mark_entry_dirty(void *thing)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_mark_entry_dirty_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_mark_entry_dirty_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_mark_entry_dirty() */
@ -1036,9 +1037,10 @@ H5AC_mark_entry_clean(void *thing)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_mark_entry_clean_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_mark_entry_clean_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_mark_entry_clean() */
@ -1078,9 +1080,10 @@ H5AC_mark_entry_unserialized(void *thing)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_mark_unserialized_entry_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_mark_unserialized_entry_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_mark_entry_unserialized() */
@ -1119,9 +1122,10 @@ H5AC_mark_entry_serialized(void *thing)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_mark_serialized_entry_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_mark_serialized_entry_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_mark_entry_serialized() */
@ -1221,9 +1225,10 @@ H5AC_pin_protected_entry(void *thing)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_pin_entry_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_pin_entry_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_pin_protected_entry() */
@ -1406,9 +1411,10 @@ H5AC_create_flush_dependency(void * parent_thing, void * child_thing)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_create_fd_msg(cache_ptr, (H5AC_info_t *)parent_thing, (H5AC_info_t *)child_thing, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_create_fd_msg(cache_ptr, (H5AC_info_t *)parent_thing, (H5AC_info_t *)child_thing, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_create_flush_dependency() */
@ -1541,9 +1547,10 @@ H5AC_resize_entry(void *thing, size_t new_size)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_resize_entry_msg(cache_ptr, entry_ptr, new_size, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_resize_entry_msg(cache_ptr, entry_ptr, new_size, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_resize_entry() */
@ -1584,9 +1591,10 @@ H5AC_unpin_entry(void *thing)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_unpin_entry_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_unpin_entry_msg(cache_ptr, entry_ptr, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_unpin_entry() */
@ -1627,9 +1635,10 @@ H5AC_destroy_flush_dependency(void * parent_thing, void * child_thing)
done:
/* If currently logging, generate a message */
if(cache_ptr->log_info->logging)
if(H5C_log_write_destroy_fd_msg(cache_ptr, (H5AC_info_t *)parent_thing, (H5AC_info_t *)child_thing, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache_ptr != NULL && cache_ptr->log_info != NULL)
if(cache_ptr->log_info->logging)
if(H5C_log_write_destroy_fd_msg(cache_ptr, (H5AC_info_t *)parent_thing, (H5AC_info_t *)child_thing, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_destroy_flush_dependency() */
@ -2805,9 +2814,10 @@ H5AC_remove_entry(void *_entry)
done:
/* If currently logging, generate a message */
if(cache->log_info->logging)
if(H5C_log_write_remove_entry_msg(cache, entry, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
if(cache != NULL && cache->log_info != NULL)
if(cache->log_info->logging)
if(H5C_log_write_remove_entry_msg(cache, entry, ret_value) < 0)
HDONE_ERROR(H5E_CACHE, H5E_LOGGING, FAIL, "unable to emit log message")
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_remove_entry() */

View File

@ -295,7 +295,7 @@ CATCH
END_FUNC(PKG) /* end H5EA__iblock_debug() */
/*-------------------------------------------------------------------------
* Function: H5EA__sblock_debug
*

149
src/H5F.c
View File

@ -73,8 +73,6 @@ typedef struct {
/* Local Prototypes */
/********************/
static herr_t H5F__close_cb(H5VL_object_t *file_vol_obj);
/* Callback for getting object counts in a file */
static int H5F__get_all_count_cb(void H5_ATTR_UNUSED *obj_ptr, hid_t H5_ATTR_UNUSED obj_id, void *key);
@ -86,9 +84,6 @@ static int H5F__get_all_ids_cb(void H5_ATTR_UNUSED *obj_ptr, hid_t obj_id, void
/* Package Variables */
/*********************/
/* Package initialization variable */
hbool_t H5_PKG_INIT_VAR = FALSE;
/*****************************/
/* Library Private Variables */
@ -105,150 +100,6 @@ H5FL_EXTERN(H5VL_t);
/* Declare a free list to manage the H5VL_object_t struct */
H5FL_EXTERN(H5VL_object_t);
/* File ID class */
static const H5I_class_t H5I_FILE_CLS[1] = {{
H5I_FILE, /* ID class value */
0, /* Class flags */
0, /* # of reserved IDs for class */
(H5I_free_t)H5F__close_cb /* Callback routine for closing objects of this class */
}};
/*-------------------------------------------------------------------------
* Function: H5F_init
*
* Purpose: Initialize the interface from some other layer.
*
* Return: Success: non-negative
*
* Failure: negative
*-------------------------------------------------------------------------
*/
herr_t
H5F_init(void)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
/* FUNC_ENTER() does all the work */
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5F_init() */
/*--------------------------------------------------------------------------
NAME
H5F__init_package -- Initialize interface-specific information
USAGE
herr_t H5F__init_package()
RETURNS
Non-negative on success/Negative on failure
DESCRIPTION
Initializes any interface-specific data or routines.
--------------------------------------------------------------------------*/
herr_t
H5F__init_package(void)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
/*
* Initialize the atom group for the file IDs.
*/
if(H5I_register_type(H5I_FILE_CLS) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to initialize interface")
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5F__init_package() */
/*-------------------------------------------------------------------------
* Function: H5F_term_package
*
* Purpose: Terminate this interface: free all memory and reset global
* variables to their initial values. Release all ID groups
* associated with this interface.
*
* Return: Success: Positive if anything was done that might
* have affected other interfaces;
* zero otherwise.
*
* Failure: Never fails
*
*-------------------------------------------------------------------------
*/
int
H5F_term_package(void)
{
int n = 0;
FUNC_ENTER_NOAPI_NOINIT_NOERR
if(H5_PKG_INIT_VAR) {
if(H5I_nmembers(H5I_FILE) > 0) {
(void)H5I_clear_type(H5I_FILE, FALSE, FALSE);
n++; /*H5I*/
} /* end if */
else {
/* Make certain we've cleaned up all the shared file objects */
H5F_sfile_assert_num(0);
/* Destroy the file object id group */
n += (H5I_dec_type_ref(H5I_FILE) > 0);
/* Mark closed */
if(0 == n)
H5_PKG_INIT_VAR = FALSE;
} /* end else */
} /* end if */
FUNC_LEAVE_NOAPI(n)
} /* end H5F_term_package() */
/*-------------------------------------------------------------------------
* Function: H5F__close_cb
*
* Purpose: Closes a file or causes the close operation to be pended.
* This function is called from the API and gets called
* by H5Fclose->H5I_dec_ref->H5F__close_cb when H5I_dec_ref()
* decrements the file ID reference count to zero. The file ID
* is removed from the H5I_FILE group by H5I_dec_ref() just
* before H5F__close_cb() is called. If there are open object
* headers then the close is pended by moving the file to the
* H5I_FILE_CLOSING ID group (the f->closing contains the ID
* assigned to file).
*
* Return: SUCCEED/FAIL
*
*-------------------------------------------------------------------------
*/
static herr_t
H5F__close_cb(H5VL_object_t *file_vol_obj)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Sanity check */
HDassert(file_vol_obj);
/* Close the file */
if(H5VL_file_close(file_vol_obj, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "unable to close file")
/* Free the VOL object */
if(H5VL_free_object(file_vol_obj) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTDEC, FAIL, "unable to free VOL object")
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5F__close_cb() */
/*-------------------------------------------------------------------------

View File

@ -1436,7 +1436,7 @@ done:
* constant H5P_DEFAULT). The bytes to be written come from the
* buffer BUF.
*
* Return: SNon-negative on success/Negative on failure
* Return: Non-negative on success/Negative on failure
*
*-------------------------------------------------------------------------
*/
@ -1642,7 +1642,7 @@ H5FDlock(H5FD_t *file, hbool_t rw)
/* Call private function */
if(H5FD_lock(file, rw) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "file lock request failed")
HGOTO_ERROR(H5E_VFL, H5E_CANTLOCKFILE, FAIL, "file lock request failed")
done:
FUNC_LEAVE_API(ret_value)
@ -1672,7 +1672,7 @@ H5FD_lock(H5FD_t *file, hbool_t rw)
/* Dispatch to driver */
if(file->cls->lock && (file->cls->lock)(file, rw) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTUPDATE, FAIL, "driver lock request failed")
HGOTO_ERROR(H5E_VFL, H5E_CANTLOCKFILE, FAIL, "driver lock request failed")
done:
FUNC_LEAVE_NOAPI(ret_value)
@ -1704,7 +1704,7 @@ H5FDunlock(H5FD_t *file)
/* Call private function */
if(H5FD_unlock(file) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "file unlock request failed")
HGOTO_ERROR(H5E_VFL, H5E_CANTUNLOCKFILE, FAIL, "file unlock request failed")
done:
FUNC_LEAVE_API(ret_value)
@ -1733,7 +1733,7 @@ H5FD_unlock(H5FD_t *file)
/* Dispatch to driver */
if(file->cls->unlock && (file->cls->unlock)(file) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTUPDATE, FAIL, "driver unlock request failed")
HGOTO_ERROR(H5E_VFL, H5E_CANTUNLOCKFILE, FAIL, "driver unlock request failed")
done:
FUNC_LEAVE_NOAPI(ret_value)

View File

@ -36,6 +36,9 @@
/* The driver identification number, initialized at runtime */
static hid_t H5FD_CORE_g = 0;
/* Whether to ignore file locks when disabled (env var value) */
static htri_t ignore_disabled_file_locks_s = FAIL;
/* The skip list node type. Represents a region in the file. */
typedef struct H5FD_core_region_t {
haddr_t start; /* Start address of the region */
@ -56,6 +59,7 @@ typedef struct H5FD_core_t {
hbool_t backing_store; /* write to file name on flush */
hbool_t write_tracking; /* Whether to track writes */
size_t bstore_page_size; /* backing store page size */
hbool_t ignore_disabled_file_locks;
int fd; /* backing store file descriptor */
/* Information for determining uniqueness of a file with a backing store */
#ifndef H5_HAVE_WIN32_API
@ -412,10 +416,20 @@ done:
static herr_t
H5FD__init_package(void)
{
char *lock_env_var = NULL; /* Environment variable pointer */
herr_t ret_value = SUCCEED;
FUNC_ENTER_NOAPI_NOINIT
/* Check the use disabled file locks environment variable */
lock_env_var = HDgetenv("HDF5_USE_FILE_LOCKING");
if(lock_env_var && !HDstrcmp(lock_env_var, "BEST_EFFORT"))
ignore_disabled_file_locks_s = TRUE; /* Override: Ignore disabled locks */
else if(lock_env_var && (!HDstrcmp(lock_env_var, "TRUE") || !HDstrcmp(lock_env_var, "1")))
ignore_disabled_file_locks_s = FALSE; /* Override: Don't ignore disabled locks */
else
ignore_disabled_file_locks_s = FAIL; /* Environment variable not set, or not set correctly */
if(H5FD_core_init() < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "unable to initialize core VFD")
@ -798,6 +812,16 @@ H5FD__core_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr
/* Save file image callbacks */
file->fi_callbacks = file_image_info.callbacks;
/* Check the file locking flags in the fapl */
if(ignore_disabled_file_locks_s != FAIL)
/* The environment variable was set, so use that preferentially */
file->ignore_disabled_file_locks = ignore_disabled_file_locks_s;
else {
/* Use the value in the property list */
if(H5P_get(plist, H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_NAME, &file->ignore_disabled_file_locks) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTGET, NULL, "can't get ignore disabled file locks property")
}
if(fd >= 0) {
/* Retrieve information for determining uniqueness of file */
#ifdef H5_HAVE_WIN32_API
@ -1615,8 +1639,12 @@ H5FD_core_lock(H5FD_t *_file, hbool_t rw)
/* Place a non-blocking lock on the file */
if(HDflock(file->fd, lock_flags | LOCK_NB) < 0) {
if(ENOSYS == errno)
HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, FAIL, "file locking disabled on this file system (use HDF5_USE_FILE_LOCKING environment variable to override)")
if(file->ignore_disabled_file_locks && ENOSYS == errno) {
/* When errno is set to ENOSYS, the file system does not support
* locking, so ignore it.
*/
errno = 0;
}
else
HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, FAIL, "unable to lock file")
} /* end if */
@ -1652,11 +1680,15 @@ H5FD_core_unlock(H5FD_t *_file)
if(file->fd >= 0) {
if(HDflock(file->fd, LOCK_UN) < 0) {
if(ENOSYS == errno)
HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, FAIL, "file locking disabled on this file system (use HDF5_USE_FILE_LOCKING environment variable to override)")
if(file->ignore_disabled_file_locks && ENOSYS == errno) {
/* When errno is set to ENOSYS, the file system does not support
* locking, so ignore it.
*/
errno = 0;
}
else
HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, FAIL, "unable to unlock file")
} /* end if */
}
} /* end if */

View File

@ -38,6 +38,9 @@
/* The driver identification number, initialized at runtime */
static hid_t H5FD_DIRECT_g = 0;
/* Whether to ignore file locks when disabled (env var value) */
static htri_t ignore_disabled_file_locks_s = FAIL;
/* File operations */
#define OP_UNKNOWN 0
#define OP_READ 1
@ -71,6 +74,7 @@ typedef struct H5FD_direct_t {
haddr_t pos; /*current file I/O position */
int op; /*last operation */
H5FD_direct_fapl_t fa; /*file access properties */
hbool_t ignore_disabled_file_locks;
#ifndef H5_HAVE_WIN32_API
/*
* On most systems the combination of device and i-node number uniquely
@ -193,10 +197,20 @@ DESCRIPTION
static herr_t
H5FD__init_package(void)
{
char *lock_env_var = NULL; /* Environment variable pointer */
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
/* Check the use disabled file locks environment variable */
lock_env_var = HDgetenv("HDF5_USE_FILE_LOCKING");
if(lock_env_var && !HDstrcmp(lock_env_var, "BEST_EFFORT"))
ignore_disabled_file_locks_s = TRUE; /* Override: Ignore disabled locks */
else if(lock_env_var && (!HDstrcmp(lock_env_var, "TRUE") || !HDstrcmp(lock_env_var, "1")))
ignore_disabled_file_locks_s = FALSE; /* Override: Don't ignore disabled locks */
else
ignore_disabled_file_locks_s = FAIL; /* Environment variable not set, or not set correctly */
if(H5FD_direct_init() < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "unable to initialize direct VFD")
@ -518,6 +532,16 @@ H5FD_direct_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxadd
file->fa.fbsize = fa->fbsize;
file->fa.cbsize = fa->cbsize;
/* Check the file locking flags in the fapl */
if(ignore_disabled_file_locks_s != FAIL)
/* The environment variable was set, so use that preferentially */
file->ignore_disabled_file_locks = ignore_disabled_file_locks_s;
else {
/* Use the value in the property list */
if(H5P_get(plist, H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_NAME, &file->ignore_disabled_file_locks) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTGET, NULL, "can't get ignore disabled file locks property")
}
/* Try to decide if data alignment is required. The reason to check it here
* is to handle correctly the case that the file is in a different file system
* than the one where the program is running.
@ -1334,17 +1358,28 @@ done:
static herr_t
H5FD_direct_lock(H5FD_t *_file, hbool_t rw)
{
H5FD_direct_t *file = (H5FD_direct_t*)_file; /* VFD file struct */
const int lock = rw ? LOCK_EX : LOCK_SH;
herr_t ret_value = SUCCEED; /* Return value */
H5FD_direct_t *file = (H5FD_direct_t*)_file; /* VFD file struct */
int lock_flags; /* file locking flags */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI_NOINIT
HDassert(file);
/* Place the lock with non-blocking */
if(HDflock(file->fd, lock | LOCK_NB) < 0)
HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, FAIL, "unable to flock file")
/* Set exclusive or shared lock based on rw status */
lock_flags = rw ? LOCK_EX : LOCK_SH;
/* Place a non-blocking lock on the file */
if(HDflock(file->fd, lock_flags | LOCK_NB) < 0) {
if(file->ignore_disabled_file_locks && ENOSYS == errno) {
/* When errno is set to ENOSYS, the file system does not support
* locking, so ignore it.
*/
errno = 0;
}
else
HSYS_GOTO_ERROR(H5E_VFL, H5E_CANTLOCKFILE, FAIL, "unable to lock file")
}
done:
FUNC_LEAVE_NOAPI(ret_value)
@ -1372,8 +1407,16 @@ H5FD_direct_unlock(H5FD_t *_file)
HDassert(file);
if(HDflock(file->fd, LOCK_UN) < 0)
HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, FAIL, "unable to flock (unlock) file")
if(HDflock(file->fd, LOCK_UN) < 0) {
if(file->ignore_disabled_file_locks && ENOSYS == errno) {
/* When errno is set to ENOSYS, the file system does not support
* locking, so ignore it.
*/
errno = 0;
}
else
HSYS_GOTO_ERROR(H5E_VFL, H5E_CANTUNLOCKFILE, FAIL, "unable to unlock file")
}
done:
FUNC_LEAVE_NOAPI(ret_value)

View File

@ -1372,9 +1372,9 @@ H5FD_family_lock(H5FD_t *_file, hbool_t rw)
for(v = 0; v < u; v++) {
if(H5FD_unlock(file->memb[v]) < 0)
/* Push error, but keep going */
HDONE_ERROR(H5E_IO, H5E_CANTUNLOCK, FAIL, "unable to unlock member files")
HDONE_ERROR(H5E_IO, H5E_CANTUNLOCKFILE, FAIL, "unable to unlock member files")
} /* end for */
HGOTO_ERROR(H5E_IO, H5E_CANTLOCK, FAIL, "unable to lock member files")
HGOTO_ERROR(H5E_IO, H5E_CANTLOCKFILE, FAIL, "unable to lock member files")
} /* end if */
done:
@ -1406,7 +1406,7 @@ H5FD_family_unlock(H5FD_t *_file)
for(u = 0; u < file->nmembs; u++)
if(file->memb[u])
if(H5FD_unlock(file->memb[u]) < 0)
HGOTO_ERROR(H5E_IO, H5E_CANTUNLOCK, FAIL, "unable to unlock member files")
HGOTO_ERROR(H5E_IO, H5E_CANTUNLOCKFILE, FAIL, "unable to unlock member files")
done:
FUNC_LEAVE_NOAPI(ret_value)

View File

@ -40,6 +40,9 @@
/* The driver identification number, initialized at runtime */
static hid_t H5FD_LOG_g = 0;
/* Whether to ignore file locks when disabled (env var value) */
static htri_t ignore_disabled_file_locks_s = FAIL;
/* Driver-specific file access properties */
typedef struct H5FD_log_fapl_t {
char *logfile; /* Allocated log file name */
@ -80,6 +83,7 @@ typedef struct H5FD_log_t {
haddr_t eof; /* end of file; current file size */
haddr_t pos; /* current file I/O position */
H5FD_file_op_t op; /* last operation */
hbool_t ignore_disabled_file_locks;
char filename[H5FD_MAX_FILENAME_LEN]; /* Copy of file name from open operation */
#ifndef H5_HAVE_WIN32_API
/* On most systems the combination of device and i-node number uniquely
@ -234,10 +238,20 @@ H5FL_DEFINE_STATIC(H5FD_log_t);
static herr_t
H5FD__init_package(void)
{
char *lock_env_var = NULL; /* Environment variable pointer */
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
/* Check the use disabled file locks environment variable */
lock_env_var = HDgetenv("HDF5_USE_FILE_LOCKING");
if(lock_env_var && !HDstrcmp(lock_env_var, "BEST_EFFORT"))
ignore_disabled_file_locks_s = TRUE; /* Override: Ignore disabled locks */
else if(lock_env_var && (!HDstrcmp(lock_env_var, "TRUE") || !HDstrcmp(lock_env_var, "1")))
ignore_disabled_file_locks_s = FALSE; /* Override: Don't ignore disabled locks */
else
ignore_disabled_file_locks_s = FAIL; /* Environment variable not set, or not set correctly */
if(H5FD_log_init() < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "unable to initialize log VFD")
@ -625,6 +639,16 @@ H5FD_log_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
} /* end if */
} /* end if */
/* Check the file locking flags in the fapl */
if(ignore_disabled_file_locks_s != FAIL)
/* The environment variable was set, so use that preferentially */
file->ignore_disabled_file_locks = ignore_disabled_file_locks_s;
else {
/* Use the value in the property list */
if(H5P_get(plist, H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_NAME, &file->ignore_disabled_file_locks) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTGET, NULL, "can't get ignore disabled file locks property")
}
/* Check for non-default FAPL */
if(H5P_FILE_ACCESS_DEFAULT != fapl_id) {
/* This step is for h5repart tool only. If user wants to change file driver from
@ -1671,11 +1695,15 @@ H5FD_log_lock(H5FD_t *_file, hbool_t rw)
/* Place a non-blocking lock on the file */
if(HDflock(file->fd, lock_flags | LOCK_NB) < 0) {
if(ENOSYS == errno)
HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, FAIL, "file locking disabled on this file system (use HDF5_USE_FILE_LOCKING environment variable to override)")
if(file->ignore_disabled_file_locks && ENOSYS == errno) {
/* When errno is set to ENOSYS, the file system does not support
* locking, so ignore it.
*/
errno = 0;
}
else
HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, FAIL, "unable to lock file")
} /* end if */
HSYS_GOTO_ERROR(H5E_VFL, H5E_CANTLOCKFILE, FAIL, "unable to lock file")
}
done:
FUNC_LEAVE_NOAPI(ret_value)
@ -1704,11 +1732,15 @@ H5FD_log_unlock(H5FD_t *_file)
HDassert(file);
if(HDflock(file->fd, LOCK_UN) < 0) {
if(ENOSYS == errno)
HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, FAIL, "file locking disabled on this file system (use HDF5_USE_FILE_LOCKING environment variable to override)")
if(file->ignore_disabled_file_locks && ENOSYS == errno) {
/* When errno is set to ENOSYS, the file system does not support
* locking, so ignore it.
*/
errno = 0;
}
else
HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, FAIL, "unable to unlock file")
} /* end if */
HSYS_GOTO_ERROR(H5E_VFL, H5E_CANTUNLOCKFILE, FAIL, "unable to unlock file")
}
done:
FUNC_LEAVE_NOAPI(ret_value)

View File

@ -1856,7 +1856,7 @@ H5FD_multi_lock(H5FD_t *_file, hbool_t rw)
} /* end if */
if(nerrors)
H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "error locking member files", -1)
H5Epush_ret(func, H5E_ERR_CLS, H5E_VFL, H5E_CANTLOCKFILE, "error locking member files", -1)
return 0;
} /* H5FD_multi_lock() */
@ -1893,7 +1893,7 @@ H5FD_multi_unlock(H5FD_t *_file)
} END_MEMBERS;
if(nerrors)
H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_BADVALUE, "error unlocking member files", -1)
H5Epush_ret(func, H5E_ERR_CLS, H5E_VFL, H5E_CANTUNLOCKFILE, "error unlocking member files", -1)
return 0;
} /* H5FD_multi_unlock() */

View File

@ -39,6 +39,9 @@
/* The driver identification number, initialized at runtime */
static hid_t H5FD_SEC2_g = 0;
/* Whether to ignore file locks when disabled (env var value) */
static htri_t ignore_disabled_file_locks_s = FAIL;
/* 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
@ -57,6 +60,7 @@ typedef struct H5FD_sec2_t {
haddr_t eof; /* end of file; current file size */
haddr_t pos; /* current file I/O position */
H5FD_file_op_t op; /* last operation */
hbool_t ignore_disabled_file_locks;
char filename[H5FD_MAX_FILENAME_LEN]; /* Copy of file name from open operation */
#ifndef H5_HAVE_WIN32_API
/* On most systems the combination of device and i-node number uniquely
@ -190,10 +194,20 @@ H5FL_DEFINE_STATIC(H5FD_sec2_t);
static herr_t
H5FD__init_package(void)
{
char *lock_env_var = NULL; /* Environment variable pointer */
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
/* Check the use disabled file locks environment variable */
lock_env_var = HDgetenv("HDF5_USE_FILE_LOCKING");
if(lock_env_var && !HDstrcmp(lock_env_var, "BEST_EFFORT"))
ignore_disabled_file_locks_s = TRUE; /* Override: Ignore disabled locks */
else if(lock_env_var && (!HDstrcmp(lock_env_var, "TRUE") || !HDstrcmp(lock_env_var, "1")))
ignore_disabled_file_locks_s = FALSE; /* Override: Don't ignore disabled locks */
else
ignore_disabled_file_locks_s = FAIL; /* Environment variable not set, or not set correctly */
if(H5FD_sec2_init() < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "unable to initialize sec2 VFD")
@ -219,7 +233,7 @@ done:
hid_t
H5FD_sec2_init(void)
{
hid_t ret_value = H5I_INVALID_HID; /* Return value */
hid_t ret_value = H5I_INVALID_HID; /* Return value */
FUNC_ENTER_NOAPI(H5I_INVALID_HID)
@ -316,6 +330,7 @@ H5FD_sec2_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
struct _BY_HANDLE_FILE_INFORMATION fileinfo;
#endif
h5_stat_t sb;
H5P_genplist_t *plist; /* Property list pointer */
H5FD_t *ret_value = NULL; /* Return value */
FUNC_ENTER_NOAPI_NOINIT
@ -373,17 +388,26 @@ H5FD_sec2_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
file->inode = sb.st_ino;
#endif /* H5_HAVE_WIN32_API */
/* Get the FAPL */
if(NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id)))
HGOTO_ERROR(H5E_VFL, H5E_BADTYPE, NULL, "not a file access property list")
/* Check the file locking flags in the fapl */
if(ignore_disabled_file_locks_s != FAIL)
/* The environment variable was set, so use that preferentially */
file->ignore_disabled_file_locks = ignore_disabled_file_locks_s;
else {
/* Use the value in the property list */
if(H5P_get(plist, H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_NAME, &file->ignore_disabled_file_locks) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTGET, NULL, "can't get ignore disabled file locks property")
}
/* Retain a copy of the name used to open the file, for possible error reporting */
HDstrncpy(file->filename, name, sizeof(file->filename));
file->filename[sizeof(file->filename) - 1] = '\0';
/* Check for non-default FAPL */
if(H5P_FILE_ACCESS_DEFAULT != fapl_id) {
H5P_genplist_t *plist; /* Property list pointer */
/* Get the FAPL */
if(NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id)))
HGOTO_ERROR(H5E_VFL, H5E_BADTYPE, NULL, "not a file access property list")
/* This step is for h5repart tool only. If user wants to change file driver from
* family to one that uses single files (sec2, etc.) while using h5repart, this
@ -961,11 +985,15 @@ H5FD_sec2_lock(H5FD_t *_file, hbool_t rw)
/* Place a non-blocking lock on the file */
if(HDflock(file->fd, lock_flags | LOCK_NB) < 0) {
if(ENOSYS == errno)
HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, FAIL, "file locking disabled on this file system (use HDF5_USE_FILE_LOCKING environment variable to override)")
if(file->ignore_disabled_file_locks && ENOSYS == errno) {
/* When errno is set to ENOSYS, the file system does not support
* locking, so ignore it.
*/
errno = 0;
}
else
HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, FAIL, "unable to lock file")
} /* end if */
HSYS_GOTO_ERROR(H5E_VFL, H5E_CANTLOCKFILE, FAIL, "unable to lock file")
}
done:
FUNC_LEAVE_NOAPI(ret_value)
@ -994,11 +1022,15 @@ H5FD_sec2_unlock(H5FD_t *_file)
HDassert(file);
if(HDflock(file->fd, LOCK_UN) < 0) {
if(ENOSYS == errno)
HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, FAIL, "file locking disabled on this file system (use HDF5_USE_FILE_LOCKING environment variable to override)")
if(file->ignore_disabled_file_locks && ENOSYS == errno) {
/* When errno is set to ENOSYS, the file system does not support
* locking, so ignore it.
*/
errno = 0;
}
else
HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, FAIL, "unable to unlock file")
} /* end if */
HSYS_GOTO_ERROR(H5E_VFL, H5E_CANTUNLOCKFILE, FAIL, "unable to unlock file")
}
done:
FUNC_LEAVE_NOAPI(ret_value)

View File

@ -1221,16 +1221,12 @@ H5FD_splitter_lock(H5FD_t *_file, hbool_t rw)
HDassert(file->rw_file);
/* Place the lock on each file */
if (H5FD_lock(file->rw_file, rw) < 0) {
HGOTO_ERROR(H5E_VFL, H5E_CANTLOCK, FAIL, "unable to lock R/W file")
}
if (file->wo_file != NULL) {
if (H5FD_lock(file->wo_file, rw) < 0) {
H5FD_SPLITTER_WO_ERROR(file, "H5FD_splitter_lock",
H5E_VFL, H5E_CANTLOCK, FAIL,
"unable to lock W/O file")
}
}
if (H5FD_lock(file->rw_file, rw) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTLOCKFILE, FAIL, "unable to lock R/W file")
if (file->wo_file != NULL)
if (H5FD_lock(file->wo_file, rw) < 0)
H5FD_SPLITTER_WO_ERROR(file, "H5FD_splitter_lock", H5E_VFL, H5E_CANTLOCKFILE, FAIL, "unable to lock W/O file")
done:
FUNC_LEAVE_NOAPI(ret_value)
@ -1260,15 +1256,12 @@ H5FD_splitter_unlock(H5FD_t *_file)
HDassert(file->rw_file);
/* Remove the lock on each file */
if (H5FD_unlock(file->rw_file) < 0) {
HGOTO_ERROR(H5E_VFL, H5E_CANTUNLOCK, FAIL, "unable to unlock R/W file")
}
if (file->wo_file != NULL) {
if (H5FD_unlock(file->wo_file) < 0) {
HGOTO_ERROR(H5E_VFL, H5E_CANTUNLOCK, FAIL,
"unable to unlock W/O file")
}
}
if (H5FD_unlock(file->rw_file) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTUNLOCKFILE, FAIL, "unable to unlock R/W file")
if (file->wo_file != NULL)
if (H5FD_unlock(file->wo_file) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTUNLOCKFILE, FAIL, "unable to unlock W/O file")
done:
FUNC_LEAVE_NOAPI(ret_value)

View File

@ -52,6 +52,9 @@
/* The driver identification number, initialized at runtime */
static hid_t H5FD_STDIO_g = 0;
/* Whether to ignore file locks when disabled (env var value) */
static htri_t ignore_disabled_file_locks_s = -1;
/* The maximum number of bytes which can be written in a single I/O operation */
static size_t H5_STDIO_MAX_IO_BYTES_g = (size_t)-1;
@ -82,6 +85,7 @@ typedef struct H5FD_stdio_t {
haddr_t eof; /* end of file; current file size */
haddr_t pos; /* current file I/O position */
unsigned write_access; /* Flag to indicate the file was opened with write access */
hbool_t ignore_disabled_file_locks;
H5FD_stdio_file_op op; /* last operation */
#ifndef H5_HAVE_WIN32_API
/* On most systems the combination of device and i-node number uniquely
@ -231,11 +235,23 @@ static const H5FD_class_t H5FD_stdio_g = {
hid_t
H5FD_stdio_init(void)
{
char *lock_env_var = NULL; /* Environment variable pointer */
/* Clear the error stack */
H5Eclear2(H5E_DEFAULT);
if (H5I_VFL!=H5Iget_type(H5FD_STDIO_g))
/* Check the use disabled file locks environment variable */
lock_env_var = getenv("HDF5_USE_FILE_LOCKING");
if(lock_env_var && !strcmp(lock_env_var, "BEST_EFFORT"))
ignore_disabled_file_locks_s = 1; /* Override: Ignore disabled locks */
else if(lock_env_var && (!strcmp(lock_env_var, "TRUE") || !strcmp(lock_env_var, "1")))
ignore_disabled_file_locks_s = 0; /* Override: Don't ignore disabled locks */
else
ignore_disabled_file_locks_s = -1; /* Environment variable not set, or not set correctly */
if (H5I_VFL != H5Iget_type(H5FD_STDIO_g))
H5FD_STDIO_g = H5FDregister(&H5FD_stdio_g);
return H5FD_STDIO_g;
} /* end H5FD_stdio_init() */
@ -318,7 +334,7 @@ H5Pset_fapl_stdio(hid_t fapl_id)
*-------------------------------------------------------------------------
*/
static H5FD_t *
H5FD_stdio_open( const char *name, unsigned flags, hid_t /*UNUSED*/ fapl_id,
H5FD_stdio_open( const char *name, unsigned flags, hid_t fapl_id,
haddr_t maxaddr)
{
FILE *f = NULL;
@ -396,6 +412,21 @@ H5FD_stdio_open( const char *name, unsigned flags, hid_t /*UNUSED*/ fapl_id,
file->eof = (haddr_t)x;
}
/* Check the file locking flags in the fapl */
if(ignore_disabled_file_locks_s != -1)
/* The environment variable was set, so use that preferentially */
file->ignore_disabled_file_locks = ignore_disabled_file_locks_s;
else {
hbool_t unused;
/* Use the value in the property list */
if(H5Pget_file_locking(fapl_id, &unused, &file->ignore_disabled_file_locks) < 0) {
free(file);
fclose(f);
H5Epush_ret(func, H5E_ERR_CLS, H5E_FILE, H5E_CANTGET, "unable to get use disabled file locks property", NULL);
}
}
/* Get the file descriptor (needed for truncate and some Windows information) */
#ifdef H5_HAVE_WIN32_API
file->fd = _fileno(file->fp);
@ -1104,10 +1135,13 @@ H5FD_stdio_lock(H5FD_t *_file, hbool_t rw)
/* Place a non-blocking lock on the file */
if(flock(file->fd, lock_flags | LOCK_NB) < 0) {
if(ENOSYS == errno)
H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_FCNTL, "file locking disabled on this file system (use HDF5_USE_FILE_LOCKING environment variable to override)", -1)
if(file->ignore_disabled_file_locks && ENOSYS == errno)
/* When errno is set to ENOSYS, the file system does not support
* locking, so ignore it.
*/
errno = 0;
else
H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_FCNTL, "file lock failed", -1)
H5Epush_ret(func, H5E_ERR_CLS, H5E_VFL, H5E_CANTLOCKFILE, "file lock failed", -1)
} /* end if */
/* Flush the stream */
@ -1152,10 +1186,13 @@ H5FD_stdio_unlock(H5FD_t *_file)
/* Place a non-blocking lock on the file */
if(flock(file->fd, LOCK_UN) < 0) {
if(ENOSYS == errno)
H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_FCNTL, "file locking disabled on this file system (use HDF5_USE_FILE_LOCKING environment variable to override)", -1)
if(file->ignore_disabled_file_locks && ENOSYS == errno)
/* When errno is set to ENOSYS, the file system does not support
* locking, so ignore it.
*/
errno = 0;
else
H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_FCNTL, "file unlock failed", -1)
H5Epush_ret(func, H5E_ERR_CLS, H5E_VFL, H5E_CANTUNLOCKFILE, "file unlock failed", -1)
} /* end if */
#endif /* H5_HAVE_FLOCK */

View File

@ -76,12 +76,14 @@ typedef struct H5F_olist_t {
/* Local Prototypes */
/********************/
static herr_t H5F__close_cb(H5VL_object_t *file_vol_obj);
static herr_t H5F__set_vol_conn(H5F_t *file);
static herr_t H5F__get_objects(const H5F_t *f, unsigned types, size_t max_index, hid_t *obj_id_list, hbool_t app_ref, size_t *obj_id_count_ptr);
static int H5F__get_objects_cb(void *obj_ptr, hid_t obj_id, void *key);
static herr_t H5F__build_name(const char *prefix, const char *file_name, char **full_name/*out*/);
static char *H5F__getenv_prefix_name(char **env_prefix/*in,out*/);
static H5F_t *H5F__new(H5F_shared_t *shared, unsigned flags, hid_t fcpl_id, hid_t fapl_id, H5FD_t *lf);
static herr_t H5F__check_if_using_file_locks(H5P_genplist_t *fapl, hbool_t *use_file_locking);
static herr_t H5F__build_actual_name(const H5F_t *f, const H5P_genplist_t *fapl, const char *name, char ** /*out*/ actual_name);
static herr_t H5F__flush_phase1(H5F_t *f);
static herr_t H5F__flush_phase2(H5F_t *f, hbool_t closing);
@ -91,6 +93,15 @@ static herr_t H5F__flush_phase2(H5F_t *f, hbool_t closing);
/* Package Variables */
/*********************/
/* Package initialization variable */
hbool_t H5_PKG_INIT_VAR = FALSE;
/* Based on the value of the HDF5_USE_FILE_LOCKING environment variable.
* TRUE/FALSE have obvious meanings. FAIL means the environment variable was
* not set, so the code should ignore it and use the fapl value instead.
*/
htri_t use_locks_env_g = FAIL;
/*****************************/
/* Library Private Variables */
@ -107,6 +118,186 @@ H5FL_DEFINE(H5F_t);
/* Declare a free list to manage the H5F_shared_t struct */
H5FL_DEFINE(H5F_shared_t);
/* File ID class */
static const H5I_class_t H5I_FILE_CLS[1] = {{
H5I_FILE, /* ID class value */
0, /* Class flags */
0, /* # of reserved IDs for class */
(H5I_free_t)H5F__close_cb /* Callback routine for closing objects of this class */
}};
/*-------------------------------------------------------------------------
* Function: H5F_init
*
* Purpose: Initialize the interface from some other layer.
*
* Return: Success: non-negative
*
* Failure: negative
*-------------------------------------------------------------------------
*/
herr_t
H5F_init(void)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
/* FUNC_ENTER() does all the work */
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5F_init() */
/*--------------------------------------------------------------------------
NAME
H5F__init_package -- Initialize interface-specific information
USAGE
herr_t H5F__init_package()
RETURNS
Non-negative on success/Negative on failure
DESCRIPTION
Initializes any interface-specific data or routines.
--------------------------------------------------------------------------*/
herr_t
H5F__init_package(void)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
/*
* Initialize the atom group for the file IDs.
*/
if(H5I_register_type(H5I_FILE_CLS) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to initialize interface")
/* Check the file locking environment variable */
if(H5F__parse_file_lock_env_var(&use_locks_env_g) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to parse file locking environment variable")
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5F__init_package() */
/*-------------------------------------------------------------------------
* Function: H5F_term_package
*
* Purpose: Terminate this interface: free all memory and reset global
* variables to their initial values. Release all ID groups
* associated with this interface.
*
* Return: Success: Positive if anything was done that might
* have affected other interfaces;
* zero otherwise.
*
* Failure: Never fails
*
*-------------------------------------------------------------------------
*/
int
H5F_term_package(void)
{
int n = 0;
FUNC_ENTER_NOAPI_NOINIT_NOERR
if(H5_PKG_INIT_VAR) {
if(H5I_nmembers(H5I_FILE) > 0) {
(void)H5I_clear_type(H5I_FILE, FALSE, FALSE);
n++; /*H5I*/
} /* end if */
else {
/* Make certain we've cleaned up all the shared file objects */
H5F_sfile_assert_num(0);
/* Destroy the file object id group */
n += (H5I_dec_type_ref(H5I_FILE) > 0);
/* Mark closed */
if(0 == n)
H5_PKG_INIT_VAR = FALSE;
} /* end else */
} /* end if */
FUNC_LEAVE_NOAPI(n)
} /* end H5F_term_package() */
/*-------------------------------------------------------------------------
* Function: H5F__close_cb
*
* Purpose: Closes a file or causes the close operation to be pended.
* This function is called from the API and gets called
* by H5Fclose->H5I_dec_ref->H5F__close_cb when H5I_dec_ref()
* decrements the file ID reference count to zero. The file ID
* is removed from the H5I_FILE group by H5I_dec_ref() just
* before H5F__close_cb() is called. If there are open object
* headers then the close is pended by moving the file to the
* H5I_FILE_CLOSING ID group (the f->closing contains the ID
* assigned to file).
*
* Return: SUCCEED/FAIL
*
*-------------------------------------------------------------------------
*/
static herr_t
H5F__close_cb(H5VL_object_t *file_vol_obj)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Sanity check */
HDassert(file_vol_obj);
/* Close the file */
if(H5VL_file_close(file_vol_obj, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "unable to close file")
/* Free the VOL object */
if(H5VL_free_object(file_vol_obj) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTDEC, FAIL, "unable to free VOL object")
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5F__close_cb() */
/*-------------------------------------------------------------------------
* Function: H5F__parse_file_lock_env_var
*
* Purpose: Parses the HDF5_USE_FILE_LOCKING environment variable.
*
* NOTE: This is done in a separate function so we can call it from
* the test code.
*
* Return: SUCCEED/FAIL
*
*-------------------------------------------------------------------------
*/
herr_t
H5F__parse_file_lock_env_var(htri_t *use_locks)
{
char *lock_env_var = NULL; /* Environment variable pointer */
FUNC_ENTER_PACKAGE_NOERR
/* Check the file locking environment variable */
lock_env_var = HDgetenv("HDF5_USE_FILE_LOCKING");
if(lock_env_var && (!HDstrcmp(lock_env_var, "FALSE") || !HDstrcmp(lock_env_var, "0")))
*use_locks = FALSE; /* Override: Never use locks */
else if(lock_env_var && (!HDstrcmp(lock_env_var, "TRUE") || !HDstrcmp(lock_env_var, "BEST_EFFORT") || !HDstrcmp(lock_env_var, "1")))
*use_locks = TRUE; /* Override: Always use locks */
else
*use_locks = FAIL; /* Environment variable not set, or not set correctly */
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5F__parse_file_lock_env_var() */
/*-------------------------------------------------------------------------
@ -1424,6 +1615,52 @@ H5F__dest(H5F_t *f, hbool_t flush)
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5F__dest() */
/*-------------------------------------------------------------------------
* Function: H5F__check_if_using_file_locks
*
* Purpose: Determines if this file will use file locks.
*
* There are three ways that file locking can be controlled:
*
* 1) The configure/cmake option that sets the H5_USE_FILE_LOCKING
* symbol (which is used as the default fapl value).
*
* 2) The H5Pset_file_locking() API call, which will override
* the configuration default.
*
* 3) The HDF5_USE_FILE_LOCKING environment variable, which overrides
* everything above.
*
* The main reason to disable file locking is to prevent errors on file
* systems where locking is not supported or has been disabled (as is
* often the case in parallel file systems).
*
* Return: SUCCEED/FAIL
*-------------------------------------------------------------------------
*/
static herr_t
H5F__check_if_using_file_locks(H5P_genplist_t *fapl, hbool_t *use_file_locking)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
/* Make sure the out parameter has a value */
*use_file_locking = TRUE;
/* Check the fapl property */
if(H5P_get(fapl, H5F_ACS_USE_FILE_LOCKING_NAME, use_file_locking) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "can't get use file locking flag")
/* Check the environment variable */
if(use_locks_env_g != FAIL)
*use_file_locking = (use_locks_env_g == TRUE) ? TRUE : FALSE;
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5F__check_if_using_file_locks() */
/*-------------------------------------------------------------------------
* Function: H5F_open
@ -1514,8 +1751,7 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
hbool_t set_flag = FALSE; /*set the status_flags in the superblock */
hbool_t clear = FALSE; /*clear the status_flags */
hbool_t evict_on_close; /* evict on close value from plist */
char *lock_env_var = NULL;/*env var pointer */
hbool_t use_file_locking; /*read from env var */
hbool_t use_file_locking = TRUE; /* Using file locks? */
hbool_t ci_load = FALSE; /* whether MDC ci load requested */
hbool_t ci_write = FALSE; /* whether MDC CI write requested */
H5F_t *ret_value = NULL; /*actual return value */
@ -1533,15 +1769,13 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
if(NULL == (drvr = H5FD_get_class(fapl_id)))
HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "unable to retrieve VFL class")
/* Check the environment variable that determines if we care
* about file locking. File locking should be used unless explicitly
* disabled.
*/
lock_env_var = HDgetenv("HDF5_USE_FILE_LOCKING");
if(lock_env_var && !HDstrcmp(lock_env_var, "FALSE"))
use_file_locking = FALSE;
else
use_file_locking = TRUE;
/* Get the file access property list, for future queries */
if(NULL == (a_plist = (H5P_genplist_t *)H5I_object(fapl_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not file access property list")
/* Check if we are using file locking */
if (H5F__check_if_using_file_locks(a_plist, &use_file_locking) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "unable to get file locking flag")
/*
* Opening a file is a two step process. First we try to open the
@ -1618,8 +1852,8 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
if(H5FD_lock(lf, (hbool_t)((flags & H5F_ACC_RDWR) ? TRUE : FALSE)) < 0) {
/* Locking failed - Closing will remove the lock */
if(H5FD_close(lf) < 0)
HDONE_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to close low-level file info")
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to lock the file")
HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, NULL, "unable to close low-level file info")
HGOTO_ERROR(H5E_FILE, H5E_CANTLOCKFILE, NULL, "unable to lock the file")
} /* end if */
/* Create the 'top' file structure */
@ -1651,10 +1885,6 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
shared = file->shared;
lf = shared->lf;
/* Get the file access property list, for future queries */
if(NULL == (a_plist = (H5P_genplist_t *)H5I_object(fapl_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not file access property list")
/* Check if page buffering is enabled */
if(H5P_get(a_plist, H5F_ACS_PAGE_BUFFER_SIZE_NAME, &page_buf_size) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "can't get page buffer size")
@ -1795,7 +2025,7 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
/* Remove the file lock for SWMR_WRITE */
if(use_file_locking && (H5F_INTENT(file) & H5F_ACC_SWMR_WRITE)) {
if(H5FD_unlock(file->shared->lf) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to unlock the file")
HGOTO_ERROR(H5E_FILE, H5E_CANTUNLOCKFILE, NULL, "unable to unlock the file")
} /* end if */
} /* end if */
else { /* H5F_ACC_RDONLY: check consistency of status_flags */

View File

@ -384,6 +384,7 @@ struct H5F_t {
unsigned nmounts; /* Number of children mounted to this file */
};
/*****************************/
/* Package Private Variables */
/*****************************/
@ -394,6 +395,10 @@ H5FL_EXTERN(H5F_t);
/* Declare a free list to manage the H5F_shared_t struct */
H5FL_EXTERN(H5F_shared_t);
/* Whether or not to use file locking (based on the environment variable)
* FAIL means ignore the environment variable.
*/
H5_DLLVAR htri_t use_locks_env_g;
/******************************/
/* Package Private Prototypes */
@ -412,6 +417,7 @@ H5_DLL herr_t H5F__start_swmr_write(H5F_t *f);
H5_DLL herr_t H5F__close(H5F_t *f);
H5_DLL herr_t H5F__set_libver_bounds(H5F_t *f, H5F_libver_t low, H5F_libver_t high);
H5_DLL herr_t H5F__get_cont_info(const H5F_t *f, H5VL_file_cont_info_t *info);
H5_DLL herr_t H5F__parse_file_lock_env_var(htri_t *use_locks);
/* File mount related routines */
H5_DLL herr_t H5F__mount(H5G_loc_t *loc, const char *name, H5F_t *child, hid_t plist_id);
@ -472,6 +478,7 @@ H5_DLL herr_t H5F__check_cached_stab_test(hid_t file_id);
H5_DLL herr_t H5F__get_maxaddr_test(hid_t file_id, haddr_t *maxaddr);
H5_DLL herr_t H5F__get_sbe_addr_test(hid_t file_id, haddr_t *sbe_addr);
H5_DLL htri_t H5F__same_file_test(hid_t file_id1, hid_t file_id2);
H5_DLL herr_t H5F__reparse_file_lock_variable_test(void);
#endif /* H5F_TESTING */
#endif /* _H5Fpkg_H */

View File

@ -518,6 +518,8 @@ typedef struct H5F_t H5F_t;
#define H5F_ACS_PAGE_BUFFER_SIZE_NAME "page_buffer_size" /* the maximum size for the page buffer cache */
#define H5F_ACS_PAGE_BUFFER_MIN_META_PERC_NAME "page_buffer_min_meta_perc" /* the min metadata percentage for the page buffer cache */
#define H5F_ACS_PAGE_BUFFER_MIN_RAW_PERC_NAME "page_buffer_min_raw_perc" /* the min raw data percentage for the page buffer cache */
#define H5F_ACS_USE_FILE_LOCKING_NAME "use_file_locking" /* whether or not we use file locks for SWMR control and to prevent multiple writers */
#define H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_NAME "ignore_disabled_file_locks" /* whether or not we ignore "locks disabled" errors */
#ifdef H5_HAVE_PARALLEL
#define H5F_ACS_MPI_PARAMS_COMM_NAME "mpi_params_comm" /* the MPI communicator */
#define H5F_ACS_MPI_PARAMS_INFO_NAME "mpi_params_info" /* the MPI info struct */

View File

@ -267,3 +267,36 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5F__same_file_test() */
/*-------------------------------------------------------------------------
* Function: H5F__reparse_file_lock_variable_test
*
* Purpose: Re-parse the file locking environment variable.
*
* Since getenv(3) is fairly expensive, we only parse it once,
* when the library opens. This test function is used to
* re-parse the environment variable after we've changed it
* with setnev(3).
*
* Return: SUCCEED/FAIL
*
* Programmer: Dana Robinson
* Summer 2020
*
*-------------------------------------------------------------------------
*/
herr_t
H5F__reparse_file_lock_variable_test(void)
{
herr_t ret_value = SUCCEED;
FUNC_ENTER_PACKAGE
/* Check the file locking environment variable */
if(H5F__parse_file_lock_env_var(&use_locks_env_g) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to parse file locking environment variable")
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5F__reparse_file_lock_variable_test() */

120
src/H5I.c
View File

@ -33,9 +33,9 @@
#include "H5ACprivate.h" /* Metadata cache */
#include "H5CXprivate.h" /* API Contexts */
#include "H5Dprivate.h" /* Datasets */
#include "H5Eprivate.h" /* Error handling */
#include "H5Fprivate.h" /* File access */
#include "H5FLprivate.h" /* Free Lists */
#include "H5Eprivate.h" /* Error handling */
#include "H5Fprivate.h" /* File access */
#include "H5FLprivate.h" /* Free Lists */
#include "H5Gprivate.h" /* Groups */
#include "H5Ipkg.h" /* IDs */
#include "H5MMprivate.h" /* Memory management */
@ -145,7 +145,7 @@ static int H5I__iterate_pub_cb(void *obj, hid_t id, void *udata);
static int H5I__find_id_cb(void *_item, void *_key, void *_udata);
static int H5I__id_dump_cb(void *_item, void *_key, void *_udata);
/*-------------------------------------------------------------------------
* Function: H5I_term_package
*
@ -197,7 +197,7 @@ H5I_term_package(void)
FUNC_LEAVE_NOAPI(n)
} /* end H5I_term_package() */
/*-------------------------------------------------------------------------
* Function: H5Iregister_type
*
@ -278,7 +278,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Iregister_type() */
/*-------------------------------------------------------------------------
* Function: H5I_register_type
*
@ -339,7 +339,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_register_type() */
/*-------------------------------------------------------------------------
* Function: H5Itype_exists
*
@ -371,7 +371,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Itype_exists() */
/*-------------------------------------------------------------------------
* Function: H5Inmembers
*
@ -421,7 +421,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Inmembers() */
/*-------------------------------------------------------------------------
* Function: H5I_nmembers
*
@ -458,7 +458,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_nmembers() */
/*-------------------------------------------------------------------------
* Function: H5I__unwrap
*
@ -502,7 +502,7 @@ H5I__unwrap(void *obj_ptr, H5I_type_t type)
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I__unwrap() */
/*-------------------------------------------------------------------------
* Function: H5Iclear_type
*
@ -535,7 +535,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Iclear_type() */
/*-------------------------------------------------------------------------
* Function: H5I_clear_type
*
@ -577,7 +577,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_clear_type() */
/*-------------------------------------------------------------------------
* Function: H5I__clear_type_cb
*
@ -643,7 +643,7 @@ H5I__clear_type_cb(void *_id, void H5_ATTR_UNUSED *key, void *_udata)
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I__clear_type_cb() */
/*-------------------------------------------------------------------------
* Function: H5Idestroy_type
*
@ -677,7 +677,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Idestroy_type() */
/*-------------------------------------------------------------------------
* Function: H5I__destroy_type
*
@ -729,7 +729,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I__destroy_type() */
/*-------------------------------------------------------------------------
* Function: H5Iregister
*
@ -757,7 +757,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Iregister() */
/*-------------------------------------------------------------------------
* Function: H5I_register
*
@ -819,7 +819,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_register() */
/*-------------------------------------------------------------------------
* Function: H5I_register_using_existing_id
*
@ -890,7 +890,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_register_using_existing_id() */
/*-------------------------------------------------------------------------
* Function: H5I_subst
*
@ -927,7 +927,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_subst() */
/*-------------------------------------------------------------------------
* Function: H5I_object
*
@ -957,7 +957,7 @@ H5I_object(hid_t id)
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_object() */
/*-------------------------------------------------------------------------
* Function: H5Iobject_verify
*
@ -991,7 +991,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Iobject_verify() */
/*-------------------------------------------------------------------------
* Function: H5I_object_verify
*
@ -1026,7 +1026,7 @@ H5I_object_verify(hid_t id, H5I_type_t id_type)
FUNC_LEAVE_NOAPI(ret_value)
} /* H5I_object_verify() */
/*-------------------------------------------------------------------------
* Function: H5I_get_type
*
@ -1060,7 +1060,7 @@ H5I_get_type(hid_t id)
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_get_type() */
/*-------------------------------------------------------------------------
* Function: H5Iget_type
*
@ -1087,13 +1087,13 @@ H5Iget_type(hid_t id)
ret_value = H5I_get_type(id);
if(ret_value <= H5I_BADID || (int)ret_value >= H5I_next_type || NULL == H5I_object(id))
HGOTO_DONE(H5I_BADID);
HGOTO_DONE(H5I_BADID);
done:
FUNC_LEAVE_API(ret_value)
} /* end H5Iget_type() */
/*-------------------------------------------------------------------------
* Function: H5I_is_file_object
*
@ -1144,7 +1144,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value);
} /* H5I_is_file_object() */
/*-------------------------------------------------------------------------
* Function: H5Iremove_verify
*
@ -1180,7 +1180,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Iremove_verify() */
/*-------------------------------------------------------------------------
* Function: H5I__remove_verify
*
@ -1213,7 +1213,7 @@ H5I__remove_verify(hid_t id, H5I_type_t id_type)
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I__remove_verify() */
/*-------------------------------------------------------------------------
* Function: H5I__remove_common
*
@ -1258,7 +1258,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I__remove_common() */
/*-------------------------------------------------------------------------
* Function: H5I_remove
*
@ -1298,7 +1298,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_remove() */
/*-------------------------------------------------------------------------
* Function: H5Idec_ref
*
@ -1334,7 +1334,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Idec_ref() */
/*-------------------------------------------------------------------------
* Function: H5I_dec_ref
*
@ -1404,7 +1404,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_dec_ref() */
/*-------------------------------------------------------------------------
* Function: H5I_dec_app_ref
*
@ -1452,7 +1452,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_dec_app_ref() */
/*-------------------------------------------------------------------------
* Function: H5I_dec_app_ref_always_close
*
@ -1494,7 +1494,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_dec_app_ref_always_close() */
/*-------------------------------------------------------------------------
* Function: H5Iinc_ref
*
@ -1525,7 +1525,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Iinc_ref() */
/*-------------------------------------------------------------------------
* Function: H5I_inc_ref
*
@ -1563,7 +1563,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_inc_ref() */
/*-------------------------------------------------------------------------
* Function: H5Iget_ref
*
@ -1594,7 +1594,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Iget_ref() */
/*-------------------------------------------------------------------------
* Function: H5I_get_ref
*
@ -1627,7 +1627,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_get_ref() */
/*-------------------------------------------------------------------------
* Function: H5Iinc_type_ref
*
@ -1660,7 +1660,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Iinc_ref() */
/*-------------------------------------------------------------------------
* Function: H5I__inc_type_ref
*
@ -1694,14 +1694,14 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I__inc_type_ref() */
/*-------------------------------------------------------------------------
* Function: H5Idec_type_ref
*
* Purpose: Decrements the reference count on an entire type of IDs.
* If the type reference count becomes zero then the type is
* destroyed along with all atoms in that type regardless of
* their reference counts. Destroying IDs involves calling
* their reference counts. Destroying IDs involves calling
* the free-func for each ID's object and then adding the ID
* struct to the ID free list. Public interface to
* H5I_dec_type_ref.
@ -1736,14 +1736,14 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Idec_type_ref() */
/*-------------------------------------------------------------------------
* Function: H5I_dec_type_ref
*
* Purpose: Decrements the reference count on an entire type of IDs.
* If the type reference count becomes zero then the type is
* destroyed along with all atoms in that type regardless of
* their reference counts. Destroying IDs involves calling
* their reference counts. Destroying IDs involves calling
* the free-func for each ID's object and then adding the ID
* struct to the ID free list.
* Returns the number of references to the type on success; a
@ -1789,7 +1789,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_dec_type_ref() */
/*-------------------------------------------------------------------------
* Function: H5Iget_type_ref
*
@ -1822,7 +1822,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Iget_ref() */
/*-------------------------------------------------------------------------
* Function: H5I__get_type_ref
*
@ -1857,7 +1857,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I__get_type_ref() */
/*-------------------------------------------------------------------------
* Function: H5Iis_valid
*
@ -1887,7 +1887,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Iis_valid() */
/*-------------------------------------------------------------------------
* Function: H5I__search_cb
*
@ -1922,7 +1922,7 @@ H5I__search_cb(void *obj, hid_t id, void *_udata)
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I__search_cb() */
/*-------------------------------------------------------------------------
* Function: H5Isearch
*
@ -1973,7 +1973,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Isearch() */
/*-------------------------------------------------------------------------
* Function: H5I__iterate_pub_cb
*
@ -2013,7 +2013,7 @@ H5I__iterate_pub_cb(void H5_ATTR_UNUSED *obj, hid_t id, void *_udata)
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I__iterate_pub_cb() */
/*-------------------------------------------------------------------------
* Function: H5Iiterate
*
@ -2060,7 +2060,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Iiterate() */
/*-------------------------------------------------------------------------
* Function: H5I__iterate_cb
*
@ -2108,7 +2108,7 @@ H5I__iterate_cb(void *_item, void H5_ATTR_UNUSED *_key, void *_udata)
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I__iterate_cb() */
/*-------------------------------------------------------------------------
* Function: H5I_iterate
*
@ -2167,7 +2167,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_iterate() */
/*-------------------------------------------------------------------------
* Function: H5I__find_id
*
@ -2212,7 +2212,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I__find_id() */
/*-------------------------------------------------------------------------
* Function: H5Iget_name
*
@ -2263,7 +2263,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Iget_name() */
/*-------------------------------------------------------------------------
* Function: H5Iget_file_id
*
@ -2307,7 +2307,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Iget_file_id() */
/*-------------------------------------------------------------------------
* Function: H5I__find_id_cb
*
@ -2345,7 +2345,7 @@ H5I__find_id_cb(void *_item, void H5_ATTR_UNUSED *_key, void *_udata)
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I__find_id_cb() */
/*-------------------------------------------------------------------------
* Function: H5I_find_id
*
@ -2394,7 +2394,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_find_id() */
/*-------------------------------------------------------------------------
* Function: H5I__id_dump_cb
*
@ -2482,7 +2482,7 @@ H5I__id_dump_cb(void *_item, void H5_ATTR_UNUSED *_key, void *_udata)
FUNC_LEAVE_NOAPI(H5_ITER_CONT)
} /* end H5I__id_dump_cb() */
/*-------------------------------------------------------------------------
* Function: H5I_dump_ids_for_type
*

View File

@ -108,8 +108,11 @@ H5FL_EXTERN(H5S_extent_t);
with the decoded information
USAGE
void *H5O_attr_decode(f, mesg_flags, p)
H5F_t *f; IN: pointer to the HDF5 file struct
unsigned mesg_flags; IN: Message flags to influence decoding
H5F_t *f; IN: pointer to the HDF5 file struct
H5O_t *open_oh; IN: pointer to the object header
unsigned mesg_flags; IN: message flags to influence decoding
unsigned *ioflags; IN/OUT: flags for decoding
size_t p_size; IN: size of buffer *p
const uint8_t *p; IN: the raw information buffer
RETURNS
Pointer to the new message in native order on success, NULL on failure
@ -120,16 +123,16 @@ H5FL_EXTERN(H5S_extent_t);
--------------------------------------------------------------------------*/
static void *
H5O_attr_decode(H5F_t *f, H5O_t *open_oh, unsigned H5_ATTR_UNUSED mesg_flags,
unsigned *ioflags, size_t H5_ATTR_UNUSED p_size, const uint8_t *p)
unsigned *ioflags, size_t p_size, const uint8_t *p)
{
H5A_t *attr = NULL;
H5S_extent_t *extent; /*extent dimensionality information */
size_t name_len; /*attribute name length */
size_t dt_size; /* Datatype size */
hssize_t sds_size; /* Signed Dataspace size */
hsize_t ds_size; /* Dataspace size */
unsigned flags = 0; /* Attribute flags */
H5A_t *ret_value = NULL; /* Return value */
H5A_t *attr = NULL;
H5S_extent_t *extent; /*extent dimensionality information */
size_t name_len; /*attribute name length */
size_t dt_size; /* Datatype size */
hssize_t sds_size; /* Signed Dataspace size */
hsize_t ds_size; /* Dataspace size */
unsigned flags = 0; /* Attribute flags */
H5A_t *ret_value = NULL; /* Return value */
FUNC_ENTER_NOAPI_NOINIT
@ -138,7 +141,7 @@ H5O_attr_decode(H5F_t *f, H5O_t *open_oh, unsigned H5_ATTR_UNUSED mesg_flags,
HDassert(p);
if(NULL == (attr = H5FL_CALLOC(H5A_t)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
if(NULL == (attr->shared = H5FL_CALLOC(H5A_shared_t)))
HGOTO_ERROR(H5E_FILE, H5E_NOSPACE, NULL, "can't allocate shared attr structure")
@ -146,7 +149,7 @@ H5O_attr_decode(H5F_t *f, H5O_t *open_oh, unsigned H5_ATTR_UNUSED mesg_flags,
/* Version number */
attr->shared->version = *p++;
if(attr->shared->version < H5O_ATTR_VERSION_1 || attr->shared->version > H5O_ATTR_VERSION_LATEST)
HGOTO_ERROR(H5E_ATTR, H5E_CANTLOAD, NULL, "bad version number for attribute message")
HGOTO_ERROR(H5E_ATTR, H5E_CANTLOAD, NULL, "bad version number for attribute message")
/* Get the flags byte if we have a later version of the attribute */
if(attr->shared->version >= H5O_ATTR_VERSION_2) {

View File

@ -1094,9 +1094,12 @@ done:
with the decoded information
USAGE
void *H5O_dtype_decode(f, mesg_flags, p)
H5F_t *f; IN: pointer to the HDF5 file struct
H5F_t *f; IN: pointer to the HDF5 file struct
H5O_t *open_oh; IN: pointer to the object header
unsigned mesg_flags; IN: Message flags to influence decoding
const uint8 *p; IN: the raw information buffer
unsigned *ioflags; IN/OUT: flags for decoding
size_t p_size; IN: size of buffer *p
const uint8_t *p; IN: the raw information buffer
RETURNS
Pointer to the new message in native order on success, NULL on failure
DESCRIPTION

View File

@ -110,7 +110,7 @@ H5O_fsinfo_decode(H5F_t *f, H5O_t H5_ATTR_UNUSED *open_oh,
/* Allocate space for message */
if(NULL == (fsinfo = H5FL_CALLOC(H5O_fsinfo_t)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
for(ptype = H5F_MEM_PAGE_SUPER; ptype < H5F_MEM_PAGE_NTYPES; ptype++)
fsinfo->fs_addr[ptype - 1] = HADDR_UNDEF;

View File

@ -95,7 +95,7 @@
# define H5PL_HANDLE void *
/* Get a handle to a plugin library. Windows: TEXT macro handles Unicode strings */
# define H5PL_OPEN_DLIB(S) dlopen(S, RTLD_LAZY)
# define H5PL_OPEN_DLIB(S) dlopen(S, RTLD_LAZY | RTLD_LOCAL)
/* Get the address of a symbol in dynamic library */
# define H5PL_GET_LIB_FUNC(H,N) dlsym(H,N)

View File

@ -281,6 +281,29 @@
#define H5F_ACS_VOL_CONN_COPY H5P__facc_vol_copy
#define H5F_ACS_VOL_CONN_CMP H5P__facc_vol_cmp
#define H5F_ACS_VOL_CONN_CLOSE H5P__facc_vol_close
/* Definition for using file locking or not. The default is set
* via the configure step.
*/
#define H5F_ACS_USE_FILE_LOCKING_SIZE sizeof(hbool_t)
#if defined H5_USE_FILE_LOCKING && H5_USE_FILE_LOCKING
#define H5F_ACS_USE_FILE_LOCKING_DEF TRUE
#else
#define H5F_ACS_USE_FILE_LOCKING_DEF FALSE
#endif
#define H5F_ACS_USE_FILE_LOCKING_ENC H5P__encode_hbool_t
#define H5F_ACS_USE_FILE_LOCKING_DEC H5P__decode_hbool_t
/* Definition for whether we ignore file locking errors when we can
* tell that file locking has been disabled on the file system.
* The default is set via the configure step.
*/
#define H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_SIZE sizeof(hbool_t)
#if defined H5_IGNORE_DISABLED_FILE_LOCKS && H5_IGNORE_DISABLED_FILE_LOCKS
#define H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_DEF TRUE
#else
#define H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_DEF FALSE
#endif
#define H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_ENC H5P__encode_hbool_t
#define H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_DEC H5P__decode_hbool_t
/******************/
@ -447,6 +470,8 @@ static const H5AC_cache_image_config_t H5F_def_mdc_initCacheImageCfg_g = H5F_ACS
static const size_t H5F_def_page_buf_size_g = H5F_ACS_PAGE_BUFFER_SIZE_DEF; /* Default page buffer size */
static const unsigned H5F_def_page_buf_min_meta_perc_g = H5F_ACS_PAGE_BUFFER_MIN_META_PERC_DEF; /* Default page buffer minimum metadata size */
static const unsigned H5F_def_page_buf_min_raw_perc_g = H5F_ACS_PAGE_BUFFER_MIN_RAW_PERC_DEF; /* Default page buffer mininum raw data size */
static const hbool_t H5F_def_use_file_locking_g = H5F_ACS_USE_FILE_LOCKING_DEF; /* Default use file locking flag */
static const hbool_t H5F_def_ignore_disabled_file_locks_g = H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_DEF; /* Default ignore disabled file locks flag */
/*-------------------------------------------------------------------------
@ -705,6 +730,16 @@ H5P__facc_reg_prop(H5P_genclass_t *pclass)
H5F_ACS_VOL_CONN_DEL, H5F_ACS_VOL_CONN_COPY, H5F_ACS_VOL_CONN_CMP, H5F_ACS_VOL_CONN_CLOSE) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the use file locking flag */
if(H5P__register_real(pclass, H5F_ACS_USE_FILE_LOCKING_NAME, H5F_ACS_USE_FILE_LOCKING_SIZE, &H5F_def_use_file_locking_g,
NULL, NULL, NULL, H5F_ACS_USE_FILE_LOCKING_ENC, H5F_ACS_USE_FILE_LOCKING_DEC, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register the ignore disabled file locks flag */
if(H5P__register_real(pclass, H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_NAME, H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_SIZE, &H5F_def_ignore_disabled_file_locks_g,
NULL, NULL, NULL, H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_ENC, H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_DEC, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5P__facc_reg_prop() */
@ -4551,6 +4586,98 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Pget_evict_on_close() */
/*-------------------------------------------------------------------------
* Function: H5Pset_file_locking
*
* Purpose: Sets the file locking property values.
*
* Overrides the default file locking flag setting that was
* set when the library was configured.
*
* Can be overridden by the HDF5_USE_FILE_LOCKING environment
* variable.
*
* File locking is used when creating/opening a file to prevent
* problematic file accesses.
*
* Return: SUCCEED/FAIL
*
* Programmer: Dana Robinson
* Spring 2020
*
*-------------------------------------------------------------------------
*/
herr_t
H5Pset_file_locking(hid_t fapl_id, hbool_t use_file_locking, hbool_t ignore_when_disabled)
{
H5P_genplist_t *plist; /* property list pointer */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
H5TRACE3("e", "ibb", fapl_id, use_file_locking, ignore_when_disabled);
/* Make sure this is a fapl */
if(TRUE != H5P_isa_class(fapl_id, H5P_FILE_ACCESS))
HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "property list is not a file access plist")
/* Get the plist structure */
if(NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id)))
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
/* Set values */
if(H5P_set(plist, H5F_ACS_USE_FILE_LOCKING_NAME, &use_file_locking) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set use file locking property")
if(H5P_set(plist, H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_NAME, &ignore_when_disabled) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set ignore disabled file locks property")
done:
FUNC_LEAVE_API(ret_value)
} /* end H5Pset_file_locking() */
/*-------------------------------------------------------------------------
* Function: H5Pget_file_locking
*
* Purpose: Gets the file locking property values.
*
* File locking is used when creating/opening a file to prevent
* problematic file accesses.
*
* Return: SUCCEED/FAIL
*
* Programmer: Dana Robinson
* Spring 2020
*
*-------------------------------------------------------------------------
*/
herr_t
H5Pget_file_locking(hid_t fapl_id, hbool_t *use_file_locking, hbool_t *ignore_when_disabled)
{
H5P_genplist_t *plist; /* property list pointer */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
H5TRACE3("e", "i*b*b", fapl_id, use_file_locking, ignore_when_disabled);
/* Make sure this is a fapl */
if(TRUE != H5P_isa_class(fapl_id, H5P_FILE_ACCESS))
HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "property list is not an access plist")
/* Get the plist structure */
if(NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id)))
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
/* Get values */
if(H5P_get(plist, H5F_ACS_USE_FILE_LOCKING_NAME, use_file_locking) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get use file locking property")
if(H5P_get(plist, H5F_ACS_IGNORE_DISABLED_FILE_LOCKS_NAME, ignore_when_disabled) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get ignore disabled file locks property")
done:
FUNC_LEAVE_API(ret_value)
} /* end H5Pget_file_locking() */
#ifdef H5_HAVE_PARALLEL
/*-------------------------------------------------------------------------

View File

@ -380,6 +380,8 @@ H5_DLL herr_t H5Pset_mdc_log_options(hid_t plist_id, hbool_t is_enabled, const c
H5_DLL herr_t H5Pget_mdc_log_options(hid_t plist_id, hbool_t *is_enabled, char *location, size_t *location_size, hbool_t *start_on_access);
H5_DLL herr_t H5Pset_evict_on_close(hid_t fapl_id, hbool_t evict_on_close);
H5_DLL herr_t H5Pget_evict_on_close(hid_t fapl_id, hbool_t *evict_on_close);
H5_DLL herr_t H5Pset_file_locking(hid_t fapl_id, hbool_t use_file_locking, hbool_t ignore_when_disabled);
H5_DLL herr_t H5Pget_file_locking(hid_t fapl_id, hbool_t *use_file_locking, hbool_t *ignore_when_disabled);
#ifdef H5_HAVE_PARALLEL
H5_DLL herr_t H5Pset_all_coll_metadata_ops(hid_t plist_id, hbool_t is_collective);
H5_DLL herr_t H5Pget_all_coll_metadata_ops(hid_t plist_id, hbool_t *is_collective);

View File

@ -86,7 +86,7 @@
} while(0)
/* Debug */
//#define H5R_DEBUG
// #define H5R_DEBUG
#ifdef H5R_DEBUG
#define H5R_LOG_DEBUG(...) do { \
HDfprintf(stdout, " # %s(): ", __func__); \
@ -822,7 +822,7 @@ H5R__set_obj_token(H5R_ref_priv_t *ref, const H5O_token_t *obj_token,
HDassert(token_size);
HDassert(token_size <= H5O_MAX_TOKEN_SIZE);
H5MM_memcpy(&ref->info.obj.token, obj_token, sizeof(H5O_token_t));
H5MM_memcpy(&ref->info.obj.token, obj_token, token_size);
HDassert(token_size <= 255);
ref->token_size = (uint8_t)token_size;

View File

@ -12,7 +12,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
* Programmer: Quincey Koziol
* Tuesday, June 16, 1998
*
* Purpose: Point selection dataspace I/O functions.

View File

@ -5718,9 +5718,9 @@ H5T_set_loc(H5T_t *dt, H5VL_object_t *file, H5T_loc_t loc)
break;
case H5T_VLEN: /* Recurse on the VL information if it's VL, compound or array, then free VL sequence */
/* Recurse if it's VL, compound, enum or array */
/* Recurse if it's VL, compound, enum or array (ignore references here so that we can encode them as part of the same blob)*/
/* (If the force_conv flag is _not_ set, the type cannot change in size, so don't recurse) */
if(dt->shared->parent->shared->force_conv && H5T_IS_COMPLEX(dt->shared->parent->shared->type)) {
if(dt->shared->parent->shared->force_conv && H5T_IS_COMPLEX(dt->shared->parent->shared->type) && (dt->shared->parent->shared->type != H5T_REFERENCE)) {
if((changed = H5T_set_loc(dt->shared->parent, file, loc)) < 0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "Unable to set VL location");
if(changed > 0)

View File

@ -3641,7 +3641,7 @@ H5T__conv_ref(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
if(0 == (buf_size = src->shared->u.atomic.u.r.cls->getsize(
src->shared->u.atomic.u.r.file, s, src->shared->size,
dst->shared->u.atomic.u.r.file, &dst_copy)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "incorrect size")
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "unable to obtain size of reference")
/* Check if conversion buffer is large enough, resize if necessary. */
if(conv_buf_size < buf_size) {

View File

@ -13,11 +13,11 @@
/*-------------------------------------------------------------------------
*
* Created: H5Tdbg.c
* Jul 19 2007
* Quincey Koziol <koziol@hdfgroup.org>
* Created: H5Tdbg.c
* Jul 19 2007
* Quincey Koziol
*
* Purpose: Dump debugging information about a datatype
* Purpose: Dump debugging information about a datatype
*
*-------------------------------------------------------------------------
*/
@ -72,7 +72,7 @@
/*******************/
/*-------------------------------------------------------------------------
* Function: H5T__print_stats
*
@ -137,7 +137,7 @@ H5T__print_stats(H5T_path_t H5_ATTR_UNUSED * path, int H5_ATTR_UNUSED * nprint/*
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5T__print_stats() */
/*-------------------------------------------------------------------------
* Function: H5T_debug
*

View File

@ -49,7 +49,7 @@
#define H5T_NAMELEN 32
/* Macro to ease detecting "complex" datatypes (i.e. those with base types or fields) */
#define H5T_IS_COMPLEX(t) ((t) == H5T_COMPOUND || (t) == H5T_ENUM || (t) == H5T_VLEN || (t) == H5T_ARRAY)
#define H5T_IS_COMPLEX(t) ((t) == H5T_COMPOUND || (t) == H5T_ENUM || (t) == H5T_VLEN || (t) == H5T_ARRAY || (t) == H5T_REFERENCE)
/* Macro to ease detecting fixed "string" datatypes */
#define H5T_IS_FIXED_STRING(dt) (H5T_STRING == (dt)->type)

View File

@ -40,6 +40,19 @@
#define H5T_REF_OBJ_DISK_SIZE(f) (H5F_SIZEOF_ADDR(f))
#define H5T_REF_DSETREG_DISK_SIZE(f) (H5HG_HEAP_ID_SIZE(f))
/* Debug */
// #define H5T_REF_DEBUG
#ifdef H5T_REF_DEBUG
#define H5T_REF_LOG_DEBUG(...) do { \
HDfprintf(stdout, " # %s(): ", __func__); \
HDfprintf(stdout, __VA_ARGS__); \
HDfprintf(stdout, "\n"); \
HDfflush(stdout); \
} while (0)
#else
#define H5T_REF_LOG_DEBUG(...) do { } while (0)
#endif
/******************/
/* Local Typedefs */
/******************/
@ -133,6 +146,7 @@ H5T__ref_set_loc(const H5T_t *dt, H5VL_object_t *file, H5T_loc_t loc)
htri_t ret_value = FALSE; /* Indicate success, but no location change */
FUNC_ENTER_PACKAGE
H5T_REF_LOG_DEBUG("loc=%d", (int)loc);
HDassert(dt);
/* f is NULL when loc == H5T_LOC_MEMORY */
@ -319,6 +333,7 @@ H5T__ref_mem_isnull(const H5VL_object_t H5_ATTR_UNUSED *src_file,
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC_NOERR
H5T_REF_LOG_DEBUG("");
/* Check parameters */
HDassert(src_buf);
@ -346,6 +361,7 @@ H5T__ref_mem_setnull(H5VL_object_t H5_ATTR_UNUSED *dst_file, void *dst_buf,
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC_NOERR
H5T_REF_LOG_DEBUG("");
HDmemset(dst_buf, 0, H5T_REF_MEM_SIZE);
@ -373,6 +389,7 @@ H5T__ref_mem_getsize(H5VL_object_t H5_ATTR_UNUSED *src_file, const void *src_buf
size_t ret_value = 0; /* Return value */
FUNC_ENTER_STATIC
H5T_REF_LOG_DEBUG("");
/* Sanity check */
HDassert(src_buf);
@ -471,6 +488,7 @@ H5T__ref_mem_read(H5VL_object_t H5_ATTR_UNUSED *src_file, const void *src_buf,
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
H5T_REF_LOG_DEBUG("");
/* Sanity check */
HDassert(src_buf);
@ -557,6 +575,7 @@ H5T__ref_mem_write(H5VL_object_t *src_file, const void *src_buf, size_t src_size
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
H5T_REF_LOG_DEBUG("");
/* Sanity check */
HDassert(src_buf);
@ -670,6 +689,7 @@ H5T__ref_disk_isnull(const H5VL_object_t *src_file, const void *src_buf,
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
H5T_REF_LOG_DEBUG("");
/* Check parameters */
HDassert(src_file);
@ -712,6 +732,7 @@ H5T__ref_disk_setnull(H5VL_object_t *dst_file, void *dst_buf, void *bg_buf)
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
H5T_REF_LOG_DEBUG("");
HDassert(dst_file);
HDassert(dst_buf);
@ -761,6 +782,7 @@ H5T__ref_disk_getsize(H5VL_object_t H5_ATTR_UNUSED *src_file, const void *src_bu
size_t ret_value = 0;
FUNC_ENTER_STATIC
H5T_REF_LOG_DEBUG("");
HDassert(src_buf);
@ -810,6 +832,7 @@ H5T__ref_disk_read(H5VL_object_t *src_file, const void *src_buf, size_t H5_ATTR_
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
H5T_REF_LOG_DEBUG("");
HDassert(src_file);
HDassert(src_buf);
@ -856,6 +879,7 @@ H5T__ref_disk_write(H5VL_object_t H5_ATTR_UNUSED *src_file, const void *src_buf,
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
H5T_REF_LOG_DEBUG("");
HDassert(src_buf);
HDassert(src_size);
@ -915,6 +939,7 @@ static herr_t H5T__ref_obj_disk_isnull(const H5VL_object_t *src_file,
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
H5T_REF_LOG_DEBUG("");
/* Check parameters */
HDassert(src_file);
@ -967,6 +992,7 @@ H5T__ref_obj_disk_getsize(H5VL_object_t *src_file, const void H5_ATTR_UNUSED *sr
size_t ret_value = 0;
FUNC_ENTER_STATIC
H5T_REF_LOG_DEBUG("");
HDassert(src_file);
HDassert(src_buf);
@ -1014,6 +1040,7 @@ H5T__ref_obj_disk_read(H5VL_object_t *src_file, const void *src_buf, size_t src_
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
H5T_REF_LOG_DEBUG("");
HDassert(src_file);
HDassert(src_buf);
@ -1068,6 +1095,7 @@ H5T__ref_dsetreg_disk_isnull(const H5VL_object_t *src_file, const void *src_buf,
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
H5T_REF_LOG_DEBUG("");
/* Check parameters */
HDassert(src_file);
@ -1123,6 +1151,7 @@ H5T__ref_dsetreg_disk_getsize(H5VL_object_t H5_ATTR_UNUSED *src_file,
#else
FUNC_ENTER_STATIC_NOERR
#endif
H5T_REF_LOG_DEBUG("");
HDassert(src_buf);
@ -1171,6 +1200,7 @@ H5T__ref_dsetreg_disk_read(H5VL_object_t *src_file, const void *src_buf, size_t
herr_t ret_value = SUCCEED;
FUNC_ENTER_STATIC
H5T_REF_LOG_DEBUG("");
HDassert(src_file);
HDassert(src_buf);
@ -1221,6 +1251,7 @@ H5T_ref_reclaim(void *elem, const H5T_t *dt)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI_NOINIT
H5T_REF_LOG_DEBUG("");
/* Sanity checks */
HDassert(elem);

View File

@ -2363,23 +2363,25 @@ H5VL_wrap_register(H5I_type_t type, void *obj, hbool_t app_ref)
/* Sanity check */
HDassert(obj);
/* If the datatype is already VOL-managed, the datatype's vol_obj
* field will get clobbered later, so disallow this.
*/
if(type == H5I_DATATYPE)
if(TRUE == H5T_already_vol_managed((const H5T_t *)obj))
HGOTO_ERROR(H5E_VOL, H5E_BADTYPE, H5I_INVALID_HID, "can't wrap an uncommitted datatype")
/* Wrap the object with VOL connector info */
if(NULL == (new_obj = H5VL__wrap_obj(obj, type)))
HGOTO_ERROR(H5E_VOL, H5E_CANTCREATE, H5I_INVALID_HID, "can't wrap library object")
/* Retrieve the VOL object wrapping context */
if(H5CX_get_vol_wrap_ctx((void **)&vol_wrap_ctx) < 0)
HGOTO_ERROR(H5E_VOL, H5E_CANTGET, H5I_INVALID_HID, "can't get VOL object wrap context")
if(NULL == vol_wrap_ctx || NULL == vol_wrap_ctx->connector)
HGOTO_ERROR(H5E_VOL, H5E_BADVALUE, H5I_INVALID_HID, "VOL object wrap context or its connector is NULL???")
/* If the datatype is already VOL-managed, the datatype's vol_obj
* field will get clobbered later, so disallow this.
*/
if(type == H5I_DATATYPE) {
if(vol_wrap_ctx->connector->id == H5VL_NATIVE)
if(TRUE == H5T_already_vol_managed((const H5T_t *)obj))
HGOTO_ERROR(H5E_VOL, H5E_BADTYPE, H5I_INVALID_HID, "can't wrap an uncommitted datatype")
}
/* Wrap the object with VOL connector info */
if(NULL == (new_obj = H5VL__wrap_obj(obj, type)))
HGOTO_ERROR(H5E_VOL, H5E_CANTCREATE, H5I_INVALID_HID, "can't wrap library object")
/* Get an ID for the object */
if((ret_value = H5VL_register_using_vol_id(type, new_obj, vol_wrap_ctx->connector->id, app_ref)) < 0)
HGOTO_ERROR(H5E_VOL, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to get an ID for the object")

122
src/H5Z.c
View File

@ -35,10 +35,10 @@
#ifdef H5Z_DEBUG
typedef struct H5Z_stats_t {
struct {
hsize_t total; /* total number of bytes processed */
hsize_t errors; /* bytes of total attributable to errors */
hsize_t total; /* total number of bytes processed */
hsize_t errors; /* bytes of total attributable to errors */
H5_timevals_t times; /* execution time including errors */
} stats[2]; /* 0 = output, 1 = input */
} stats[2]; /* 0 = output, 1 = input */
} H5Z_stats_t;
#endif /* H5Z_DEBUG */
@ -132,9 +132,9 @@ H5Z_term_package(void)
if(H5_PKG_INIT_VAR) {
#ifdef H5Z_DEBUG
char comment[16], bandwidth[32];
int dir, nprint = 0;
size_t i;
char comment[16], bandwidth[32];
int dir, nprint = 0;
size_t i;
if(H5DEBUG(Z)) {
for(i = 0; i < H5Z_table_used_g; i++) {
@ -142,33 +142,34 @@ H5Z_term_package(void)
if(0 == H5Z_stat_table_g[i].stats[dir].total)
continue;
if(0 == nprint++) {
/* Print column headers */
HDfprintf(H5DEBUG(Z), "H5Z: filter statistics "
"accumulated over life of library:\n");
HDfprintf(H5DEBUG(Z),
" %-16s %10s %10s %8s %8s %8s %10s\n",
"Filter", "Total", "Errors", "User",
"System", "Elapsed", "Bandwidth");
HDfprintf(H5DEBUG(Z),
" %-16s %10s %10s %8s %8s %8s %10s\n",
"------", "-----", "------", "----",
"------", "-------", "---------");
} /* end if */
if(0 == nprint++) {
/* Print column headers */
HDfprintf(H5DEBUG(Z), "H5Z: filter statistics "
"accumulated over life of library:\n");
HDfprintf(H5DEBUG(Z),
" %-16s %10s %10s %8s %8s %8s %10s\n",
"Filter", "Total", "Errors", "User",
"System", "Elapsed", "Bandwidth");
HDfprintf(H5DEBUG(Z),
" %-16s %10s %10s %8s %8s %8s %10s\n",
"------", "-----", "------", "----",
"------", "-------", "---------");
} /* end if */
/* Truncate the comment to fit in the field */
HDstrncpy(comment, H5Z_table_g[i].name, sizeof comment);
comment[sizeof(comment) - 1] = '\0';
/* Truncate the comment to fit in the field */
HDstrncpy(comment, H5Z_table_g[i].name, sizeof comment);
comment[sizeof(comment) - 1] = '\0';
/*
* Format bandwidth to have four significant digits and
* units of `B/s', `kB/s', `MB/s', `GB/s', or `TB/s' or
* the word `Inf' if the elapsed time is zero.
*/
H5_bandwidth(bandwidth, (double)(H5Z_stat_table_g[i].stats[dir].total),
/*
* Format bandwidth to have four significant digits and
* units of `B/s', `kB/s', `MB/s', `GB/s', or `TB/s' or
* the word `Inf' if the elapsed time is zero.
*/
H5_bandwidth(bandwidth,
(double)(H5Z_stat_table_g[i].stats[dir].total),
H5Z_stat_table_g[i].stats[dir].times.elapsed);
/* Print the statistics */
/* Print the statistics */
HDfprintf(H5DEBUG(Z), " %s%-15s %10Hd %10Hd %8T %8T %8T %10s\n",
(dir ? "<" : ">"), comment,
H5Z_stat_table_g[i].stats[dir].total,
@ -177,12 +178,12 @@ H5Z_term_package(void)
H5Z_stat_table_g[i].stats[dir].times.system,
H5Z_stat_table_g[i].stats[dir].times.elapsed,
bandwidth);
} /* end for */
} /* end for */
} /* end if */
} /* end for */
} /* end for */
} /* end if */
#endif /* H5Z_DEBUG */
/* Free the table of filters */
/* Free the table of filters */
if(H5Z_table_g) {
H5Z_table_g = (H5Z_class2_t *)H5MM_xfree(H5Z_table_g);
@ -1256,7 +1257,7 @@ H5Z_pipeline(const H5O_pline_t *pline, unsigned flags,
int fclass_idx; /* Index of filter class in global table */
H5Z_class2_t *fclass = NULL; /* Filter class pointer */
#ifdef H5Z_DEBUG
H5Z_stats_t *fstats = NULL; /* Filter stats pointer */
H5Z_stats_t *fstats = NULL; /* Filter stats pointer */
H5_timer_t timer; /* Timer for filter operations */
H5_timevals_t times; /* Elapsed time for each operation */
#endif
@ -1278,12 +1279,12 @@ H5Z_pipeline(const H5O_pline_t *pline, unsigned flags,
H5_timer_init(&timer);
#endif
if(pline && (flags & H5Z_FLAG_REVERSE)) { /* Read */
for(i = pline->nused; i > 0; --i) {
idx = i - 1;
if(*filter_mask & ((unsigned)1 << idx)) {
failed |= (unsigned)1 << idx;
continue; /* filter excluded */
} /* end if */
for(i = pline->nused; i > 0; --i) {
idx = i - 1;
if(*filter_mask & ((unsigned)1 << idx)) {
failed |= (unsigned)1 << idx;
continue; /* filter excluded */
}
/* If the filter isn't registered and the application doesn't
* indicate no plugin through HDF5_PRELOAD_PLUG (using the symbol "::"),
@ -1304,7 +1305,7 @@ H5Z_pipeline(const H5O_pline_t *pline, unsigned flags,
/* Search in the table of registered filters again to find the dynamic filter just loaded and registered */
if((fclass_idx = H5Z_find_idx(pline->filter[idx].id)) < 0)
issue_error = TRUE;
} /* end if */
}
else
issue_error = TRUE;
@ -1353,24 +1354,25 @@ H5Z_pipeline(const H5O_pline_t *pline, unsigned flags,
*nbytes = *buf_size;
failed |= (unsigned)1 << idx;
H5E_clear_stack(NULL);
} /* end if */
}
else
*nbytes = new_nbytes;
} /* end for */
} else if (pline) { /* Write */
for(idx = 0; idx < pline->nused; idx++) {
if(*filter_mask & ((unsigned)1 << idx)) {
failed |= (unsigned)1 << idx;
continue; /* filter excluded */
} /* end if */
if((fclass_idx = H5Z_find_idx(pline->filter[idx].id)) < 0) {
}
}
else if(pline) { /* Write */
for(idx = 0; idx < pline->nused; idx++) {
if(*filter_mask & ((unsigned)1 << idx)) {
failed |= (unsigned)1 << idx;
continue; /* filter excluded */
}
if((fclass_idx = H5Z_find_idx(pline->filter[idx].id)) < 0) {
/* Check if filter is optional -- If it isn't, then error */
if((pline->filter[idx].flags & H5Z_FLAG_OPTIONAL) == 0)
HGOTO_ERROR(H5E_PLINE, H5E_WRITEERROR, FAIL, "required filter is not registered")
failed |= (unsigned)1 << idx;
if((pline->filter[idx].flags & H5Z_FLAG_OPTIONAL) == 0)
HGOTO_ERROR(H5E_PLINE, H5E_WRITEERROR, FAIL, "required filter is not registered")
failed |= (unsigned)1 << idx;
H5E_clear_stack(NULL);
continue; /* filter excluded */
} /* end if */
continue; /* filter excluded */
} /* end if */
fclass = &H5Z_table_g[fclass_idx];
@ -1390,25 +1392,25 @@ H5Z_pipeline(const H5O_pline_t *pline, unsigned flags,
fstats->stats[0].times.system += times.system;
fstats->stats[0].times.user += times.user;
fstats->stats[0].total += MAX(*nbytes, new_nbytes);
fstats->stats[0].total += MAX(*nbytes, new_nbytes);
if(0 == new_nbytes)
fstats->stats[0].errors += *nbytes;
#endif
if(0 == new_nbytes) {
if(0 == (pline->filter[idx].flags & H5Z_FLAG_OPTIONAL)) {
if((cb_struct.func && (H5Z_CB_FAIL==cb_struct.func(pline->filter[idx].id, *buf, *nbytes, cb_struct.op_data)))
if((cb_struct.func && (H5Z_CB_FAIL == cb_struct.func(pline->filter[idx].id, *buf, *nbytes, cb_struct.op_data)))
|| !cb_struct.func)
HGOTO_ERROR(H5E_PLINE, H5E_WRITEERROR, FAIL, "filter returned failure")
*nbytes = *buf_size;
} /* end if */
}
failed |= (unsigned)1 << idx;
H5E_clear_stack(NULL);
} /* end if */
}
else
*nbytes = new_nbytes;
} /* end for */
} /* end for */
}
*filter_mask = failed;

View File

@ -136,6 +136,8 @@ MINOR, FILEACC, H5E_BADFILE, Bad file ID accessed
MINOR, FILEACC, H5E_TRUNCATED, File has been truncated
MINOR, FILEACC, H5E_MOUNT, File mount error
MINOR, FILEACC, H5E_CANTDELETEFILE, Unable to delete file
MINOR, FILEACC, H5E_CANTLOCKFILE, Unable to lock file
MINOR, FILEACC, H5E_CANTUNLOCKFILE, Unable to unlock file
# Generic low-level file I/O errors
MINOR, FILE, H5E_SEEKERROR, Seek failed

View File

@ -888,8 +888,8 @@ H5_DLL H5_ATTR_CONST int Nflock(int fd, int operation);
#ifndef HDflock
/* NOTE: flock(2) is not present on all POSIX systems.
* If it is not present, we try a flock() equivalent based on
* fcntl(2), then fall back to a function that always fails if
* it is not present at all (Windows uses a separate Wflock()
* fcntl(2), then fall back to a function that always succeeds
* if it is not present at all (Windows uses a separate Wflock()
* function).
*/
#if defined(H5_HAVE_FLOCK)

View File

@ -38,7 +38,7 @@
#include <sys/types.h>
#endif
#ifdef H5_STDC_HEADERS
# include <limits.h> /*for H5T_NATIVE_CHAR defn in H5Tpublic.h */
# include <limits.h> /*for H5T_NATIVE_CHAR defn in H5Tpublic.h */
# include <stdarg.h> /*for variadic functions in H5VLpublic.h */
#endif
#ifndef __cplusplus
@ -183,7 +183,7 @@ typedef long long ssize_t;
*/
#if H5_SIZEOF_LONG_LONG >= 8
H5_GCC_DIAG_OFF(long-long)
typedef unsigned long long hsize_t;
typedef unsigned long long hsize_t;
typedef signed long long hssize_t;
H5_GCC_DIAG_ON(long-long)
# define H5_SIZEOF_HSIZE_T H5_SIZEOF_LONG_LONG
@ -229,7 +229,7 @@ H5_GCC_DIAG_ON(long-long)
#else
# error "nothing appropriate for H5_PRINTF_HADDR_FMT"
#endif
#define HADDR_MAX (HADDR_UNDEF-1)
#define HADDR_MAX (HADDR_UNDEF-1)
/* uint32_t type is used for creation order field for messages. It may be
* defined in Posix.1g, otherwise it is defined here.
@ -297,7 +297,7 @@ typedef enum {
H5_ITER_INC, /* Increasing order */
H5_ITER_DEC, /* Decreasing order */
H5_ITER_NATIVE, /* No particular order, whatever is fastest */
H5_ITER_N /* Number of iteration orders */
H5_ITER_N /* Number of iteration orders */
} H5_iter_order_t;
/* Iteration callback values */
@ -314,10 +314,10 @@ typedef enum {
* links in groups/attributes on objects.
*/
typedef enum H5_index_t {
H5_INDEX_UNKNOWN = -1, /* Unknown index type */
H5_INDEX_NAME, /* Index on names */
H5_INDEX_CRT_ORDER, /* Index on creation order */
H5_INDEX_N /* Number of indices defined */
H5_INDEX_UNKNOWN = -1, /* Unknown index type */
H5_INDEX_NAME, /* Index on names */
H5_INDEX_CRT_ORDER, /* Index on creation order */
H5_INDEX_N /* Number of indices defined */
} H5_index_t;
/*

View File

@ -13,11 +13,11 @@
/*-------------------------------------------------------------------------
*
* Created: H5system.c
* Aug 21 2006
* Quincey Koziol <koziol@hdfgroup.org>
* Created: H5system.c
* Aug 21 2006
* Quincey Koziol
*
* Purpose: System call wrapper implementations.
* Purpose: System call wrapper implementations.
*
*-------------------------------------------------------------------------
*/
@ -689,14 +689,14 @@ Pflock(int fd, int operation) {
* Purpose: Wrapper function for systems where no file locking is
* available.
*
* Return: Failure: -1 (always fails)
* Return: 0 (success)
*
*-------------------------------------------------------------------------
*/
int H5_ATTR_CONST
Nflock(int H5_ATTR_UNUSED fd, int H5_ATTR_UNUSED operation) {
/* just fail */
return -1;
/* just succeed */
return 0;
} /* end Nflock() */

View File

@ -311,7 +311,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'a':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -764,7 +764,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
break;
default:
HDfprintf (out, "BADTYPE(D%c)", type[1]);
HDfprintf(out, "BADTYPE(D%c)", type[1]);
goto error;
} /* end switch */
break;
@ -1149,7 +1149,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 's':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -1226,7 +1226,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
break;
default:
HDfprintf (out, "BADTYPE(H%c)", type[1]);
HDfprintf(out, "BADTYPE(H%c)", type[1]);
goto error;
} /* end switch */
break;
@ -1414,7 +1414,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
break;
case H5I_NTYPES:
HDfprintf (out, "%ld (ntypes - error)", (long)obj);
HDfprintf(out, "%ld (ntypes - error)", (long)obj);
break;
default:
@ -1518,7 +1518,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
else {
int is = HDva_arg(ap, int);
HDfprintf (out, "%d", is);
HDfprintf(out, "%d", is);
asize[argno] = is;
} /* end else */
break;
@ -1638,7 +1638,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
break;
default:
HDfprintf (out, "BADTYPE(I%c)", type[1]);
HDfprintf(out, "BADTYPE(I%c)", type[1]);
goto error;
} /* end switch */
break;
@ -1664,7 +1664,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'l':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -1808,7 +1808,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
else {
off_t offset = HDva_arg(ap, off_t);
HDfprintf (out, "%ld", (long)offset);
HDfprintf(out, "%ld", (long)offset);
} /* end else */
break;
@ -2517,7 +2517,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
break;
default:
HDfprintf (out, "BADTYPE(T%c)", type[1]);
HDfprintf(out, "BADTYPE(T%c)", type[1]);
goto error;
} /* end switch */
break;
@ -2533,9 +2533,9 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
htri_t tri_var = HDva_arg (ap, htri_t);
if(tri_var>0)
HDfprintf (out, "TRUE");
HDfprintf(out, "TRUE");
else if(!tri_var)
HDfprintf (out, "FALSE");
HDfprintf(out, "FALSE");
else
HDfprintf(out, "FAIL(%d)", (int)tri_var);
} /* end else */
@ -2592,7 +2592,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
break;
default:
HDfprintf (out, "BADTYPE(U%c)", type[1]);
HDfprintf(out, "BADTYPE(U%c)", type[1]);
goto error;
} /* end switch */
break;
@ -2602,7 +2602,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'a':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -2638,7 +2638,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'A':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -2656,7 +2656,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'b':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -2686,7 +2686,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'B':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -2716,7 +2716,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'C':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -2733,7 +2733,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'c':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -2769,7 +2769,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'd':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -2796,7 +2796,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'e':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -2820,7 +2820,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'f':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -2844,7 +2844,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'g':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -2886,7 +2886,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'h':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -2925,7 +2925,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'i':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -2949,7 +2949,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'j':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -2973,7 +2973,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'k':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -3000,7 +3000,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'l':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -3027,7 +3027,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'L':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -3051,7 +3051,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'm':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -3078,7 +3078,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'n':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -3108,7 +3108,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'o':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -3144,7 +3144,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'r':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -3171,7 +3171,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 's':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -3194,7 +3194,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'S':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -3251,7 +3251,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 't':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -3299,7 +3299,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'u':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -3317,7 +3317,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'v':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -3422,7 +3422,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'w':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -3448,7 +3448,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'x':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -3466,7 +3466,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'y':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -3502,7 +3502,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case 'z':
if(ptr) {
if(vp)
HDfprintf (out, "0x%p", vp);
HDfprintf(out, "0x%p", vp);
else
HDfprintf(out, "NULL");
} /* end if */
@ -3712,7 +3712,7 @@ error:
HDfprintf(out, ";\n");
else {
last_call_depth = current_depth++;
HDfprintf (out, ")");
HDfprintf(out, ")");
} /* end else */
HDfflush(out);

View File

@ -89,5 +89,6 @@ Parallel Filtered Dataset Writes: @PARALLEL_FILTERED_WRITES@
Using memory checker: @USINGMEMCHECKER@
Memory allocation sanity checks: @MEMORYALLOCSANITYCHECK@
Function stack tracing: @CODESTACK@
Use file locking: @DESIRED_FILE_LOCKING@
Strict file format checks: @STRICT_FORMAT_CHECKS@
Optimization instrumentation: @INSTRUMENT_LIBRARY@

View File

@ -12,7 +12,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Quincey Koziol <koziol@hdfgroup.org>
* Programmer: Quincey Koziol
* Wednesday, March 17, 2010
*
* Purpose: srcdir querying support.
@ -20,8 +20,6 @@
#ifndef _H5SRCDIR_H
#define _H5SRCDIR_H
/* Include the header file with the correct relative path for the srcdir string */
#ifdef __cplusplus
extern "C" {
#endif

View File

@ -6,8 +6,8 @@
case program and explain how to run them.
2.1. Author and Dates:
Version 2: By Albert Cheng (acheng@hdfgroup.org), 2013/06/18.
Version 1: By Albert Cheng (acheng@hdfgroup.org), 2013/06/01.
Version 2: By Albert Cheng, 2013/06/18.
Version 1: By Albert Cheng, 2013/06/01.
%%%%Use Case 1.7%%%%

View File

@ -12,7 +12,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Neil Fortner <nfortne2@hdfgroup.org>
* Programmer: Neil Fortner
* Thursday, August 14, 2008
*
* Purpose: Tests closing the library after reference counts have been

View File

@ -12,9 +12,9 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Robb Matzke <matzke@llnl.gov>
* Programmer: Robb Matzke
* Wednesday, April 8, 1998
* Modified: Albert Cheng <acheng@hdfgroup.org>
* Modified: Albert Cheng
* September 11, 2010
*/
/*

View File

@ -12,7 +12,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Robb Matzke <matzke@llnl.gov>
* Programmer: Robb Matzke
* Tuesday, June 16, 1998
*
* Purpose: Tests functions in H5Tbit.c

View File

@ -11,7 +11,7 @@
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
/* Programmer: Quincey Koziol
* Tuesday, February 1, 2005
*/
#include "h5test.h"

View File

@ -28239,7 +28239,6 @@ check_auto_cache_resize_aux_fcns(unsigned paged)
* Return: void
*
* Programmer: Mike McGreevy
* <mamcgree@hdfgroup.org>
* 12/16/08
*
* Modifications:

View File

@ -685,7 +685,7 @@ test_get_chunk_info_highest_v18(hid_t fapl)
/* Verify that the number of chunks is NUM_CHUNKS */
if(H5Dget_num_chunks(dset, dspace, &nchunks) < 0) TEST_ERROR
VERIFY(nchunks, NUM_CHUNKS, "H5Dget_num_chunks, number of chunks");
if(nchunks != NUM_CHUNKS) TEST_ERROR
/* Attempt to get info of a chunk from an empty dataset, verify the
returned address and size in the case of H5D_ALLOC_TIME_EARLY */
@ -693,11 +693,12 @@ test_get_chunk_info_highest_v18(hid_t fapl)
reinit_vars(&read_flt_msk, &addr, &size);
ret = H5Dget_chunk_info(dset, dspace, chk_index, out_offset, &read_flt_msk, &addr, &size);
if(ret < 0) TEST_ERROR
/* Because of H5D_ALLOC_TIME_EARLY, addr cannot be HADDR_UNDEF and size not 0 */
if(addr == HADDR_UNDEF)
FAIL_PUTS_ERROR(MSG_CHK_ADDR);
TEST_ERROR
if(size == EMPTY_CHK_SIZE)
FAIL_PUTS_ERROR(MSG_CHK_SIZE);
TEST_ERROR
chk_index = 10;
reinit_vars(&read_flt_msk, &addr, &size);
@ -705,9 +706,9 @@ test_get_chunk_info_highest_v18(hid_t fapl)
if(ret < 0) TEST_ERROR
/* Because of H5D_ALLOC_TIME_EARLY, addr cannot be HADDR_UNDEF and size not 0 */
if(addr == HADDR_UNDEF)
FAIL_PUTS_ERROR(MSG_CHK_ADDR);
TEST_ERROR
if(size == EMPTY_CHK_SIZE)
FAIL_PUTS_ERROR(MSG_CHK_SIZE);
TEST_ERROR
/* Attempt to get info of a chunk given its coords from an empty dataset,
verify the returned address and size */
@ -717,9 +718,9 @@ test_get_chunk_info_highest_v18(hid_t fapl)
TEST_ERROR
/* Because of H5D_ALLOC_TIME_EARLY, addr cannot be HADDR_UNDEF and size not 0 */
if(addr == HADDR_UNDEF)
FAIL_PUTS_ERROR(MSG_CHK_ADDR);
TEST_ERROR
if(size == 0)
FAIL_PUTS_ERROR(MSG_CHK_SIZE);
TEST_ERROR
if(H5Dclose(dset) < 0) TEST_ERROR
@ -819,7 +820,7 @@ test_chunk_info_single_chunk(const char *filename, hid_t fapl)
/* Get the number of chunks and verify that no chunk has been written */
if(H5Dget_num_chunks(dset, dspace, &nchunks) < 0) TEST_ERROR
VERIFY(nchunks, NO_CHUNK_WRITTEN, "H5Dget_num_chunks, number of chunks");
if(nchunks != NO_CHUNK_WRITTEN) TEST_ERROR
/* Initialize the array of chunk data for the single chunk */
for(ii = 0; ii < NX; ii++)
@ -832,7 +833,7 @@ test_chunk_info_single_chunk(const char *filename, hid_t fapl)
/* Get and verify that one chunk had been written */
if(H5Dget_num_chunks(dset, dspace, &nchunks) < 0) TEST_ERROR
VERIFY(nchunks, ONE_CHUNK_WRITTEN, "H5Dget_num_chunks, number of chunks");
if(nchunks != ONE_CHUNK_WRITTEN) TEST_ERROR
/* Offset of the only chunk */
offset[0] = 0;
@ -1937,8 +1938,7 @@ error:
*
* Purpose: Tests functions related to chunk information
*
* Return: Success: SUCCEED
* Failure: FAIL
* Return: EXIT_SUCCESS/EXIT_FAILURE
*
* Programmer: Binh-Minh Ribler
* November 5, 2018
@ -1969,19 +1969,19 @@ main(void)
nerrors += test_flt_msk_with_skip_compress(fapl) < 0 ? 1 : 0;
if(nerrors)
TEST_ERROR
goto error;
HDprintf("All chunk query tests passed.\n");
h5_cleanup(FILENAME, fapl);
return SUCCEED;
return EXIT_SUCCESS;
error:
nerrors = MAX(1, nerrors);
HDprintf("***** %d QUERY CHUNK INFO TEST%s FAILED! *****\n",
nerrors, 1 == nerrors ? "" : "S");
return FAIL;
return EXIT_FAILURE;
}
/****************************************************************************

View File

@ -12,7 +12,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Robb Matzke <matzke@llnl.gov>
* Programmer: Robb Matzke
* Friday, January 23, 1998
*/

View File

@ -12,7 +12,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Raymond Lu <slu@ncsa.uiuc.edu>
* Programmer: Raymond Lu
* Thursday, March 23, 2006
*
* Purpose: Check if floating-point data created on big-endian and

View File

@ -12,7 +12,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
* Programmer: Quincey Koziol
* Tuesday, May 13, 2003
*
* Purpose: Test dangling IDs

View File

@ -12,7 +12,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Programmer: Robb Matzke <matzke@llnl.gov>
* Programmer: Robb Matzke
* Tuesday, December 9, 1997
*
* Purpose: Tests the dataset interface (H5D)

Some files were not shown because too many files have changed in this diff Show More