mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-03-13 16:47:58 +08:00
Merge branch 'develop' into mdc_sl_opt
This commit is contained in:
commit
3202416936
@ -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
|
||||
|
@ -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
|
||||
|
216
bin/release
216
bin/release
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
#-----------------------------------------------------------------------------
|
||||
|
@ -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. */
|
||||
|
@ -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@
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
50
configure.ac
50
configure.ac
@ -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
|
||||
##
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 '
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
!
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
!
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
!
|
||||
|
550
hl/src/H5DS.c
550
hl/src/H5DS.c
@ -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;
|
||||
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -11,10 +11,6 @@
|
||||
* help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include "H5LDprivate.h"
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
|
127
hl/src/H5LT.c
127
hl/src/H5LT.c
@ -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
|
||||
*
|
||||
|
1163
hl/src/H5LTanalyze.c
1163
hl/src/H5LTanalyze.c
File diff suppressed because it is too large
Load Diff
@ -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))
|
||||
|
1358
hl/src/H5LTparse.c
1358
hl/src/H5LTparse.c
File diff suppressed because it is too large
Load Diff
@ -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 */
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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"
|
||||
|
@ -12,7 +12,7 @@
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*
|
||||
* Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
|
||||
* Programmer: Quincey Koziol
|
||||
* Friday, April 28, 2006
|
||||
*
|
||||
* Purpose: Test support stuff.
|
||||
|
@ -11,8 +11,6 @@
|
||||
* help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "h5hltest.h"
|
||||
#include "H5srcdir.h"
|
||||
#include "H5DSpublic.h"
|
||||
|
@ -11,10 +11,6 @@
|
||||
* help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "h5hltest.h"
|
||||
#include "H5DOpublic.h"
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -11,8 +11,6 @@
|
||||
* help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "h5hltest.h"
|
||||
#include "H5srcdir.h"
|
||||
#include "H5LTpublic.h"
|
||||
|
@ -11,8 +11,6 @@
|
||||
* help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "h5hltest.h"
|
||||
#include "H5PTpublic.h"
|
||||
#include "H5TBpublic.h"
|
||||
|
@ -11,8 +11,6 @@
|
||||
* help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "h5hltest.h"
|
||||
#include "H5srcdir.h"
|
||||
#include "H5TBpublic.h"
|
||||
|
@ -22,7 +22,7 @@
|
||||
*
|
||||
* Purpose: generate files for h52gif testing
|
||||
*
|
||||
* Programmer: Pedro Vicente, pvn@hdfgroup.org
|
||||
* Programmer: Pedro Vicente
|
||||
*
|
||||
* Date: March 15, 2007
|
||||
*
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
72
src/H5AC.c
72
src/H5AC.c
@ -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() */
|
||||
|
@ -295,7 +295,7 @@ CATCH
|
||||
|
||||
END_FUNC(PKG) /* end H5EA__iblock_debug() */
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA__sblock_debug
|
||||
*
|
||||
|
149
src/H5F.c
149
src/H5F.c
@ -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() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
|
10
src/H5FD.c
10
src/H5FD.c
@ -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)
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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() */
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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 */
|
||||
|
266
src/H5Fint.c
266
src/H5Fint.c
@ -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 */
|
||||
|
@ -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 */
|
||||
|
@ -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 */
|
||||
|
@ -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
120
src/H5I.c
@ -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
|
||||
*
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
127
src/H5Pfapl.c
127
src/H5Pfapl.c
@ -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
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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)
|
||||
|
@ -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) {
|
||||
|
12
src/H5Tdbg.c
12
src/H5Tdbg.c
@ -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
|
||||
*
|
||||
|
@ -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)
|
||||
|
31
src/H5Tref.c
31
src/H5Tref.c
@ -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);
|
||||
|
@ -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
122
src/H5Z.c
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
||||
/*
|
||||
|
@ -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() */
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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@
|
||||
|
@ -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
|
||||
|
@ -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%%%%
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
*/
|
||||
/*
|
||||
|
@ -12,7 +12,7 @@
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Programmer: Robb Matzke
|
||||
* Tuesday, June 16, 1998
|
||||
*
|
||||
* Purpose: Tests functions in H5Tbit.c
|
||||
|
@ -11,7 +11,7 @@
|
||||
* help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
|
||||
/* Programmer: Quincey Koziol
|
||||
* Tuesday, February 1, 2005
|
||||
*/
|
||||
#include "h5test.h"
|
||||
|
@ -28239,7 +28239,6 @@ check_auto_cache_resize_aux_fcns(unsigned paged)
|
||||
* Return: void
|
||||
*
|
||||
* Programmer: Mike McGreevy
|
||||
* <mamcgree@hdfgroup.org>
|
||||
* 12/16/08
|
||||
*
|
||||
* Modifications:
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
@ -12,7 +12,7 @@
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Programmer: Robb Matzke
|
||||
* Friday, January 23, 1998
|
||||
*/
|
||||
|
||||
|
@ -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
|
||||
|
@ -12,7 +12,7 @@
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*
|
||||
* Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
|
||||
* Programmer: Quincey Koziol
|
||||
* Tuesday, May 13, 2003
|
||||
*
|
||||
* Purpose: Test dangling IDs
|
||||
|
@ -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
Loading…
x
Reference in New Issue
Block a user